RELEASE
planning/2.8.0/slates/CAPABILITY_SLATE.md
sha256 d4207d97467d8803 · 11898 bytes ·
original held in the private archive
# RobCo U.O.S. — Capability Ideation Slate (Stage B1)
> Plan-only (owner override): **nothing built, no would-be "build-now" applied** — every pursued idea is a spec the owner approves later. Speaks `HOUSE_STANDARD.md`. Targets v2.6.0 (cache r1, 1078 tests, lean ~978KB cache per A1). Untracked planning doc.
## Grounding — what the REAL terminal already has (so ideas EXTEND, not duplicate)
- **Device APIs in use: essentially none.** Wake Lock, Vibration, Web Share, Clipboard, Badge, Device Orientation, `share_target`/`file_handlers`/`protocol_handlers` — **all unused** (green field). Only the boot loader + SW are declared.
- **Web Audio is deep** (`ui-audio.js`): key-clacks, CRT hum, geiger, tinnitus, ambient, wake tone, rotary panel-click, boot drone, level-up, heartbeat, quest/faction tones. `AudioSettings` already has ~13 per-sound mute keys + masterMute → new audio must slot into this pattern.
- **Standby system exists** (`visibilitychange` → STANDBY, pauses timers/anim). **Optics color themes exist** (amber/legion/ghoul/neon — "phosphor not dark-mode" axis already done). **Uptime clock exists.**
- **Lore vocabulary with NO feature behind it** (ripe gaps): **Radio** & **Holotape** exist only as DB item types; **hacking minigame**, **Overseer/clearance**, **Pip-Boy radio** are absent. The app has a `[COMMAND]` native-router vocabulary but no command palette.
## Scoring axes
Diegetic fit · Capability honesty (real + shippable on vanilla/no-build/Firebase/Pages; flag new backend) · Protocol cost `[AUTH][DATA][NET][CACHE]` · Immersion-per-byte/ROI (heavy payloads clear a HIGH bar vs the lean cache) · Risk.
---
## RANKED SLATE (15 + AI deferrals)
### Tier BUILD-NOW (pure-client, on-theme, only `[CACHE][TEST]`) — specs to approve
**B1-01 · SUSTAINED POWER CELL** *(Screen Wake Lock)*
- **In-world:** TERMINAL CONFIGURATION → `> SUSTAIN DISPLAY POWER` keeps the CRT lit during active play (combat, long reads) so the screen never sleeps mid-session.
- **Capability:** `navigator.wakeLock.request('screen')`; re-acquire on `visibilitychange` (pairs with the existing standby system); release on toggle-off / hidden.
- **Tier/why:** BUILD-NOW · pure client, no guarded surface · high fit, ~tiny code, graceful no-op where unsupported.
- **Files:** `index.html` (config toggle), `js/ui-core.js` (acquire/release + standby hook), `css` (toggle), tests both runners. `[CACHE][TEST]`.
**B1-02 · HAPTIC SOLENOID** *(Vibration API, mobile)*
- **In-world:** the chassis pulses — a tick on key-clack/`> TRANSMIT`, a distinct pattern on `⚠ SYS-ALERT` / faction → VILIFIED / critical-HP.
- **Capability:** `navigator.vibrate(pattern)`; gated by a new `AudioSettings.haptic` key + masterMute (mirrors the existing per-sound toggle pattern).
- **Tier/why:** BUILD-NOW · mobile-only, no-op elsewhere · cheap, deeply on-theme (vacuum-tube buzz), reuses the settings convention.
- **Files:** `js/ui-audio.js` (vibrate helper + guards), `js/ui-core.js` (fire points), `index.html` (toggle), tests. `[CACHE][TEST]`.
**B1-03 · EJECT HOLOTAPE** *(Web Share + Clipboard fallback)*
- **In-world:** `> EJECT HOLOTAPE` exports the campaign log as a "holotape transcript" and offers it to the OS share sheet (copy fallback). Frame: "TRANSMIT HOLOTAPE TO…".
- **Capability:** `navigator.share({text})` → fallback `navigator.clipboard.writeText`; reuses existing `exportCampaignLog` formatting.
- **Tier/why:** BUILD-NOW · pure client, no `[AUTH/DATA/NET]` · reuses export; high ROI.
- **Files:** `js/ui-saves.js`/`ui-core.js` (share helper), `index.html` (button), tests. `[CACHE][TEST]`.
**B1-04 · PENDING-DIRECTIVES TALLY** *(Badge API)*
- **In-world:** the installed terminal icon posts a count of unresolved directives (active quests / pending crossroads); clears on open.
- **Capability:** `navigator.setAppBadge(n)` / `clearAppBadge()` (installed PWA; no-op otherwise) on render + visibility.
- **Tier/why:** BUILD-NOW · pure client, graceful no-op · cheap, ambient presence without notifications.
- **Files:** `js/ui-core.js` (badge update in `_updatePanelBadges`/visibility), tests. `[CACHE][TEST]`.
**B1-05 · PIP-BOY RADIO (synthesized)** *(Web Audio — ZERO payload)*
- **In-world:** `> RADIO` toggle plays a procedural retrofuturist station bed — low static + synthesized tonal motifs/beeps, **fully generated** (no audio files → zero cache cost, IP-safe: no copyrighted music).
- **Capability:** Web Audio oscillators/noise (extends the existing synth engine); new `AudioSettings.radio` key + masterMute.
- **Tier/why:** BUILD-NOW · pure synth, **zero bytes**, highest immersion-per-byte · fills the "Radio" lore gap.
- **Files:** `js/ui-audio.js` (synth station + guards), `index.html` (toggle), tests. `[CACHE][TEST]`. *(AI DJ banter → defer to B2.)*
**B1-06 · COLD-START / DEGRADED-TUBE BOOT** *(extend `runBootSequence`)*
- **In-world:** first-ever power-on runs a longer POST (counting memory test, RETROS BIOS lines); warm boots on return are terse; a rare "DEGRADED TUBE" flicker variant.
- **Capability:** pure JS/CSS on the existing boot; a `localStorage` "first power-on" flag.
- **Tier/why:** BUILD-NOW · deepens the strongest canon anchor for ~nothing · must honor reduced-motion (CR-1).
- **Files:** `js/ui-audio.js` (`runBootSequence`), `css`, tests. `[CACHE][TEST]`.
**B1-07 · OVERSEER'S MAINTENANCE LOG** *(Page Visibility + local stats)*
- **In-world:** a DATA-tab read-out — TERMINAL UPTIME, longest session, total power-on hours, boot count — as the "Overseer's maintenance log."
- **Capability:** local counters off the existing uptime clock + visibility; purely local, additive (no new sync rule — local-only stat).
- **Tier/why:** BUILD-NOW · cheap flavor, reuses uptime · zero risk.
- **Files:** `js/ui-render.js` (panel), `index.html`, tests. `[CACHE][TEST]`. *(If persisted across sessions → it's local-only, no `[DATA]` cloud rule.)*
**B1-08 · HIGH-LUMEN OPTICS** *(prefers-contrast + CSS)*
- **In-world:** OPTICS CALIBRATION → `> HIGH-LUMEN` mode (AA+ contrast) framed as boosting the phosphor drive.
- **Capability:** `@media (prefers-contrast: more)` + a manual toggle; pure CSS.
- **Tier/why:** BUILD-NOW · accessibility win wearing a diegetic mask · pairs with ACCESSIBILITY_AUDIT.
- **Files:** `css/terminal.css`, `index.html` (toggle), tests. `[CACHE][TEST]`.
**B1-09 · TERMLINK COMMAND CONSOLE** *(keyboard-first command palette)*
- **In-world:** type `>`-prefixed commands directly in COMM-LINK with an "AVAILABLE PROTOCOLS" autocomplete (the app already has `[COMMAND]` vocabulary + a native router).
- **Capability:** extend `NATIVE_COMMAND_ROUTER` + an input autocomplete; pure client.
- **Tier/why:** BUILD-NOW · peak keyboard-terminal feel, extends existing router · medium build.
- **Files:** `js/api.js` (router), `js/ui-saves.js` (autocomplete wiring), `index.html`, tests. `[CACHE][TEST]`. *(Any AI-routed command → B2.)*
### Tier SPEC-FIRST (trips a guarded/sensitive surface — spec, owner approves)
**B1-10 · CRT TILT PARALLAX** *(Device Orientation)*
- **In-world:** the phosphor/scanline layer drifts subtly with chassis tilt — a CRT depth illusion.
- **Capability:** `deviceorientation` (iOS needs a permission gesture). **MUST honor `prefers-reduced-motion`** + an opt-in toggle.
- **Tier/why:** SPEC-FIRST · permission gesture + motion-safety gating · novelty, medium fit. `[CACHE][TEST]`.
**B1-11 · ROBCO HACKING MINIGAME** *(the iconic password-guess)*
- **In-world:** `> HACK` opens the classic RobCo terminal hack — garbage grid + candidate words + likeness scoring — as an easter-egg / flavor unlock.
- **Capability:** self-contained DOM/canvas module, zero new capability, lean.
- **Tier/why:** SPEC-FIRST · sizeable new module → spec carefully (its own feature; scope/UX/keyboard nav) · very on-brand, big immersion. `[CACHE][TEST]`. *(AI lockout-taunts → B2.)*
**B1-12 · RECEIVE HOLOTAPE** *(manifest `share_target`)*
- **In-world:** share an image/text from another app INTO the terminal → routes to VISUAL UPLOAD or a campaign note.
- **Capability:** declare `share_target` in `manifest.json` (served → `[CACHE]`) + a receive handler.
- **Tier/why:** SPEC-FIRST · manifest change + the visual-scan consumer is AI · the receiver plumbing is client; **the AI visual-scan half → defer to B2.** `[CACHE][TEST]`.
**B1-13 · AUDIO-LOG PLAYBACK** *(Web Speech `speechSynthesis` — zero payload)*
- **In-world:** `> PLAY HOLOTAPE` reads a campaign note / quest objective aloud in a flat robotic voice.
- **Capability:** built-in `speechSynthesis` (zero bytes); **opt-in only** + toggle (TTS is jarring); keep ARIA/literal layer separate.
- **Tier/why:** SPEC-FIRST · a11y interplay + opt-in discipline · real, zero-byte, novel. `[CACHE][TEST]`.
**B1-14 · AMBIENT-LIGHT OPTIC CALIBRATION** *(Ambient Light Sensor)*
- **In-world:** CRT brightness/scanline intensity auto-calibrates to room light ("OPTIC CALIBRATION").
- **Capability:** `AmbientLightSensor` (limited support; permission/feature-gated) → CSS var; graceful no-op + manual override.
- **Tier/why:** SPEC-FIRST · sensor permission + spotty support · low-confidence support, nice when present. `[CACHE][TEST]`.
### Tier SKIP (one-line reason)
**B1-15 · WASTELAND GRID-REF** *(Geolocation)* — SKIP: privacy/permission cost outweighs a one-shot novelty; no durable diegetic use.
**B1-16 · NFC / `protocol_handlers`** — SKIP: no honest diegetic function on this single-terminal stack.
**B1-17 · Pyodide/WASM in-browser sim** — SKIP: fails immersion-per-byte hard against the ~978KB lean-cache/fast-boot budget; no use case justifies the megabytes.
**B1-18 · Push directives via FCM** — SKIP (for now): needs a backend + `[NET]` + notification permission; heavy. Revisit only if a real push use-case emerges (would be SPEC-FIRST `[NET]` with kill-switch + fail-safe).
### → DEFER TO B2 (AI / the Director owns these)
- **Director Radio banter** (generated DJ lines over B1-05's synth bed).
- **AI holotape narration** (Director writes/reads audio-logs) layered on B1-13.
- **Hacking-fail taunts** (Director reacts to B1-11 lockouts).
- **Share-Target → AI VISUAL UPLOAD** consumer (the AI scan half of B1-12).
- **AI-routed console commands** (generative side of B1-09).
> B1 stops at the capability + diegetic frame; B2 designs the AI behaviour, token cost, kill-switch, and fail-safe for each.
---
## Standout BUILD-NOW picks (cheapest, highest-immersion, zero guarded surfaces)
1. **B1-05 Pip-Boy Radio (synth)** — zero bytes, fills the biggest lore gap, top immersion-per-byte.
2. **B1-01 Sustained Power Cell** — solves a real "screen sleeps mid-combat" annoyance, perfectly diegetic, tiny.
3. **B1-02 Haptic Solenoid** — mobile chassis buzz, slots into the existing audio-settings pattern.
4. **B1-06 Cold-Start Boot** — deepens the canon anchor for almost nothing.
5. **B1-03 Eject Holotape** — reuses export; one-tap share. (B1-04 Badge, B1-07 Overseer Log, B1-08 High-Lumen close behind.)
## Constraint compliance (all pursued ideas)
None bump APP_VERSION. All served-file changes carry `[CACHE]` + `[TEST]` (both runners, Protocol 2a). No idea touches `[AUTH]` mechanics (popup-only/redirect-banned untouched). No new `[DATA]` cloud writes (Overseer log is local-only; nothing auto-pushes). Only B1-18 would be `[NET]` (kill-switch + fail-safe) — and it's SKIP for now. Sourcing stays fallout.wiki-only (none of these need new game data). FO4-readiness: the per-game registry pattern and the synth/audio engine carry forward cleanly — noted, not designed.
## Counts
BUILD-NOW **9** · SPEC-FIRST **5** · SKIP **4** · AI-deferred **5** (≈8 of 18 ideas are beyond the palette: radio-synth, hacking, boot variants, overseer log, command console, audio-log TTS, high-lumen optics, ambient-light).
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).