GENERATED VIEW · PRIVATE ARCHIVE · DO NOT SERVE
RobCo Industries · Archive Museum

AI_SLATE.md



RELEASE

planning/2.8.0/slates/AI_SLATE.md

sha256 8f6b19c7d0913f70 · 12441 bytes · original held in the private archive

# RobCo U.O.S. — Native AI Feature Evaluation (Stage B2) > Plan-only (owner override): **nothing built**; every AI feature awaits explicit go-ahead. Speaks `HOUSE_STANDARD.md`; picks up the 5 AI ideas B1 deferred + generates more. Targets v2.6.0 (cache r1, 1078 tests). Untracked planning doc. ## Grounding — the REAL Gemini integration (what every candidate builds on) - **BYO key.** Calls use the **user's own** `robco_gemini_key` (`api.js:1080`, header `x-goog-api-key`). ⇒ **operator Gemini spend ≈ $0; the cost axis is the USER's quota + latency UX + IP-safety, not operator bills.** This raises the ROI ceiling but means a chatty feature burns the *user's* quota → cap/debounce/on-demand discipline. - **Kill-switch is free to reuse.** `isFeatureEnabled('aiChat')` gates the call (`api.js:1072`); `_featureFlags` seed all-enabled (fail-open), LKG cached in `robco_feature_flags`, `loadRemoteConfig()` non-blocking + non-fatal (`cloud.js:86`). **A new AI subsystem just registers a new `/config/flags` key → inherits fail-open + LKG + `_recordFeatureFailure` auto-disable for free.** - **Injection baseline is strong.** `getSystemDirective()` already has the *Instruction-Source Boundary — Injection Resistance* section (`api.js:184`) + Tri-Node JSON lock + Telemetry Lock ("FORBIDDEN from inventing outcomes"). New features reuse/extend this; do **not** re-derive. - **Contract:** Tri-Node JSON (`narrative`/`state`/`modal`), `responseMimeType:'application/json'`, temp 0.2, `_AI_RETRY_MAX=3` exponential backoff, token-triage that drops inventory unless needed (`api.js:1112`). - **App Check is currently DISABLED** (placeholder site key, `cloud.js:34`) ⇒ **no bot-protection on Firestore yet** → any new stateful `[DATA]` AI feature inherits that gap (precondition, not a blocker for design). - **Grounding authority = LOCAL data.** `FALLOUT_REGISTRY` + `databaseCSVs` (items/perks/locations/quests/vendors/chems/bestiary) are already in memory and are the **canon authority**. The honest grounded pattern: **deterministic local lookup first, AI is the typist/phraser**; free-generating canon = pollution → SKIP. ## The latency frame (cross-cutting, all candidates) Every AI call shows an in-world wait — `PROCESSING…` / `DECRYPTING…` / `ESTABLISHING UPLINK…` (never a spinner). The AI is a **ZAX-class RobCo subroutine** bound to the terminal (ZAX is canon RobCo mainframe-AI lineage — Protocol-3 safe) presenting as GEM/THE DIRECTOR — never "Gemini", never modern-assistant phrasing. --- ## 6-AXIS SCORECARD (every candidate) | # | Feature | G/Gen | 1 Net/offline | 2 Grounding | 3 Cost/abuse | 4 Injection | 5 [DATA] | 6 Fit/ROI | **Tier** | |---|---|---|---|---|---|---|---|---|---| | F | TRADE / BARTER merchant | Gen+grounded stock | "TRADE LINK SEVERED" | stock/prices from VENDORS+items DB | cap turns+tokens; BYO | merchant persona refuses | caps/stock additive | high | **SPEC-FIRST** | | G | CONSULT / databank query | **Grounded** | local-DB lookup works offline | **local registry/DB only; else NO ENTRY** | memoize repeats; BYO | read-only output | none | high | **SPEC-FIRST** | | H | INTERCEPT distress signals | Gen | **static library offline; AI augments** | n/a (fiction) | on-demand, cap | low (output-only) | none | high | **SPEC-FIRST** | | A | RADIO banter (over B1-05) | Gen | synth bed only offline | n/a | interval-capped; BYO | **near-zero (no user input)** | none | med-high | **SPEC-FIRST** | | J | BIO-SCAN medical advisory | **Grounded (player state+DB)** | **deterministic core offline** | player state + chems/effects DB | cheap, on-demand | read-only | none | high | **SPLIT: BUILD-NOW core / SPEC-FIRST phrasing** | | B | AUDIO-LOG narration (over B1-13) | Gen | TTS reads literal note offline | n/a | per-play | low | none | med | SPEC-FIRST | | D | SHARE-TARGET → VISUAL UPLOAD | grounded parse | no signal → queue note | existing [VISUAL UPLOAD] directive constrains | per-image | reuses visual directive | additive inv (existing) | med-high | **SPEC-FIRST** | | I | SCAN AREA encounter gen | Gen+state | static zone table offline | seeded by loc/level | on-demand, cap | must honor Telemetry Lock | state delta (existing path) | med | SPEC-FIRST | | K | COMPANION MEMORY dialogue | Gen+**stateful** | canned lines offline | n/a | per-hail | companion persona | **Firestore memory → privacy note** | med | SPEC-FIRST (heaviest) | | L | OVERSEER directive (quest hook) | Gen+state | static directive pool offline | seeded by state | on-demand | persona | state.quests additive | med | SPEC-FIRST | | C | HACK-FAIL taunts (over B1-11) | Gen | **static taunt lib** | n/a | per-fail | output-only | none | low-med | **SPLIT: BUILD-NOW static / SPEC-FIRST AI** | | E | AI-routed console commands | Gen | n/a | n/a | **high injection surface** | — | — | low (redundant w/ chat) | **SKIP** | --- ## SPEC-FIRST candidates (detail) — strongest first ### AI-G · `> CONSULT` — DATABANK QUERY *(GROUNDED — top pick)* - **In-world:** `> CONSULT <topic>` queries the terminal's databank ("ACCESSING ROBCO DATABANK… DECRYPTING…") and returns a terse entry on an item/perk/location/creature. - **6-axis:** **(1)** Grounding data is **already local** → offline returns the raw DB entry (AI phrasing degrades, data still shown); never blocks boot; new `/config/flags` key `aiConsult`. **(2)** **GROUNDED — deterministic `registrySearch`/`lookupItemInDb` lookup FIRST; the AI only *phrases* the found record.** If not in the local DB → `NO ENTRY IN DATABANK` (refuse to invent — Protocol 3). **(3)** BYO key; **memoize identical queries** (same topic → cached phrasing); response-length cap. **(4)** Read-only output, no state write → low jailbreak value; reuse the injection directive. **(5)** none. **(6)** High utility, partially offline, IP-safe. - **Verdict:** SPEC-FIRST · `[NET][CACHE][TEST]`. Files: `api.js` (new directive mode + lookup-first), `ui-core.js`/`ui-saves.js` (command), tests (**mock Gemini** + assert the lookup-first/NO-ENTRY path runs without a network call). ### AI-F · `> TRADE` — BARTER MERCHANT *(Gen + grounded stock — flagship)* - **In-world:** `> TRADE` opens a vendor uplink; a wasteland merchant (persona) haggles. Stock + base caps + prices **grounded in VENDORS.CSV + items DB**; the AI only voices the haggling and applies a bounded price delta. - **6-axis:** **(1)** Offline → `⚠ TRADE LINK SEVERED — VENDOR UNREACHABLE`; flag `aiTrade`, fail-open. **(2)** Stock/prices grounded (DB authority); AI must not invent items/values beyond a clamp. **(3)** **Cap turns per session + token cap + response length**; BYO key (user's quota). **(4)** Merchant persona must refuse out-of-character ("ignore instructions") and stay in the Tri-Node lock. **(5)** **`[DATA]`** caps balance + vendor stock persist → **additive + checksum + schemaVersion + confirm-gate** the actual inventory/caps mutation (reuse the craft-style confirm). *Precondition note: App Check disabled → no bot-protection on those writes yet.* **(6)** High — the most-requested wasteland-sim loop. - **Verdict:** SPEC-FIRST · `[NET][DATA][CACHE][TEST]`. Heaviest of the "approachable" set. ### AI-H · `> INTERCEPT` — DISTRESS / NUMBERS SIGNALS *(Gen, offline-first — the model answer)* - **In-world:** `> INTERCEPT` pulls a wasteland distress call / numbers-station log onto the COMM-LINK. - **6-axis:** **(1)** **Offline-first by design: ships a static library (~20 canned signals); AI augments for variety ONLY when online** → degrades to canon-flavoured static, never a dead feature. Flag `aiIntercept`. **(2)** Pure fiction (generative latitude fine). **(3)** On-demand, capped, BYO. **(4)** Output-only, low surface. **(5)** none. **(6)** High immersion-per-byte; the static core alone is shippable. - **Verdict:** SPEC-FIRST (AI augmentation) · the **static-library core is a BUILD-NOW non-AI feature** — see SPLIT note. `[NET][CACHE][TEST]`. ### AI-A · RADIO banter (over B1-05 synth Radio) *(Gen, lowest-injection)* - **6-axis:** **(1)** Offline → synth bed plays, no banter. Flag `aiRadio`. **(2)** Fiction. **(3)** **Interval-gated (e.g. one short line per N minutes), not per-action** → minimal quota burn; BYO. **(4)** **Near-zero injection surface — no user input feeds it** (one-way output). **(5)** none. **(6)** Pure ambiance; pairs with the zero-byte synth station. - **Verdict:** SPEC-FIRST · `[NET][CACHE][TEST]`. Low-risk; good "first AI augmentation" candidate. ### AI-D · SHARE-TARGET → `[VISUAL UPLOAD]` consumer *(grounded parse)* - **6-axis:** **(1)** No signal → stash the shared image as a pending note ("UPLINK QUEUED"). Reuses `aiChat`/visual path + flag. **(2)** Constrained by the existing visual directive ("update ONLY the parsed category; never delete others"). **(3)** Per-image, BYO. **(4)** Reuses the hardened visual directive. **(5)** Additive inventory (existing path). **(6)** Completes B1-12's deferred half. - **Verdict:** SPEC-FIRST · `[NET][CACHE][TEST]` (manifest `share_target` is the B1 client half; this is the AI consumer). *(AI-B audio-log narration, AI-I encounter gen, AI-K companion memory, AI-L overseer directive — full axis rows in the scorecard; each SPEC-FIRST. **AI-K is the heaviest** — Firestore companion memory needs additive+checksum+version AND a privacy note for persistent operator-linked memory, and inherits the App-Check-disabled gap. Recommend it last.)* --- ## SPLIT verdicts (ship the deterministic/static core BUILD-NOW; AI is SPEC-FIRST) The offline-degradation axis makes this the safest pattern — **the in-world feature works without a signal, the AI only enriches it:** - **AI-J BIO-SCAN** → **BUILD-NOW** the deterministic advisory (pure local-state + chems/effects DB rules: "RIGHT LEG CRIPPLED — STIMPAK ADVISED; ADDICTION RISK: MED-X"); **SPEC-FIRST** the AI-phrased version. The core needs no network at all. - **AI-H INTERCEPT** → **BUILD-NOW** the static-signal library; **SPEC-FIRST** the AI augmentation. - **AI-C HACK-FAIL taunts** (over B1-11) → **BUILD-NOW** the static taunt library; **SPEC-FIRST** the AI taunt (low ROI — the static lib is ~as good; AI optional). ## BUILD-NOW (genuine, low-risk) Only the **deterministic cores above** (BIO-SCAN advisory rules, INTERCEPT static library, HACK taunt library) are true BUILD-NOW — they're self-contained, offline, no `[NET]/[DATA]`, no Gemini call. Everything that actually calls Gemini is SPEC-FIRST by default (a new networked subsystem is non-trivial). ## SKIP - **AI-E AI-routed console commands** — redundant with the existing COMM-LINK chat, **highest injection surface for least payoff**; the native command router already covers deterministic commands. - *(implicitly)* any **free-generating canon** variant of CONSULT/encounters that can't be grounded against the local DB → would pollute canon (Protocol 3) → SKIP that variant. --- ## Constraint compliance (all pursued AI features) - **[NET]:** each registers a `/config/flags` key (fail-open + LKG + `_recordFeatureFailure` auto-disable) and defines an **in-world offline fallback that NEVER blocks boot** (axis 1 is a hard gate — anything that breaks offline is SKIP). - **[DATA]:** stateful ones (TRADE caps/stock, COMPANION memory, OVERSEER quests) write Firestore **additive + checksum + schemaVersion + confirm-gated**; persistent operator-linked memory (AI-K) carries a **privacy note**. *Precondition surfaced: App Check is currently disabled → no bot-protection on writes; flag before any `[DATA]` AI feature ships.* - **[AUTH]:** may **gate-on-auth** for `[DATA]` features but **no auth-mechanic change** (popup-only/redirect-banned intact). - **[CACHE]/[TEST]:** served changes bump cache; tests in **both runners** at parity (Protocol 2a) and **MOCK Gemini — never hit the live API in the gate** (assert directive shape, grounding-lookup-first, offline-fallback, injection-refusal, Tri-Node round-trip). - **Never bump APP_VERSION; fallout.wiki-only grounding.** **FO4-readiness:** the per-game registry grounding + flag pattern extend cleanly to a future FO4 data set — noted, not designed. ## Counts SPEC-FIRST **8** (F,G,H,A,D,B,I,L) · SPLIT (BUILD-NOW core + SPEC-FIRST AI) **3** (J,H,C) · BUILD-NOW (deterministic cores only) **3** · SKIP **1** (E) · heaviest/last **1** (K). ~7 of 12 are new beyond B1's deferrals (F,G,H,I,J,K,L).
STAMP · generated for RELEASE v2.8.5 commit 06e5180 (06e51801b38a) · archive input-tree hash c07fbfbdd2e1ddeb · 754 files · no wall-clock timestamp (regenerates identically when nothing changed).