Skip to content

Sprint 4 Design Enrichment Index — 2026-04-27

Worktree: /Users/jschairb-gwp/src/kinoshita/.claude/worktrees/infallible-wilson-3f7fff Branch: claude/infallible-wilson-3f7fff


Wave 1 per-task summary (already merged in PR #155)

Section titled “Wave 1 per-task summary (already merged in PR #155)”
GWP-NTitlePackNotion appendedDepthOpen questions
GWP-247lfsr-shuffle Lisp primitivegwp-247-design.mdyesLight0
GWP-266display/audio/coprocessor-bridge runtime docsgwp-266-design.mdyesLight1
GWP-171PCM voice barks (deferred)gwp-171-design.mdyesTriage (stays deferred)3
GWP-246Display-helper stdlib primitivesgwp-246-design.mdyesMedium3
GWP-283Concept library: 15 candidate cyberpunk cartridgesgwp-283-design.mdyesHeavy (Gameplay Designer)4

Wave 1 open questions: 11.


GWP-NTitlePackNotion appendedDepthOpen questions
GWP-261Doc sweep: orchestration.md post-ADR-0017/0019/0001gwp-261-design.mdyesLight0
GWP-173In-game music system beyond PSG SFX (deferred)gwp-173-design.mdyesTriage (stays deferred)3
GWP-163Post-v0.1 deferred work catalog (meta-task)gwp-163-design.mdyesLight (meta)3
GWP-265T9 ranker explain telemetry to F11 dev overlaygwp-265-design.mdyesLight0
GWP-236F11 in —help + harmonize empty-state placeholdersgwp-236-design.mdyesLight2
GWP-114Implement emulator update simulationgwp-114-design.mdyesLight + scope realign4
GWP-233Fe arena scaling experiments + ADR amendmentgwp-233-design.mdyesMedium3
GWP-256publisher_splash hook + sample lambdagwp-256-design.mdyesMedium (Gameplay Designer)5
GWP-263Native 12×24 font cut (ADR-0014 F1)gwp-263-design.mdyesMedium (largest in batch)5
GWP-264Attract clip pipeline + 4 launch-cart clipsgwp-264-design.mdyesMedium (pipeline + content)5

Wave 2 open questions: 30 (see Wave 2 consolidated section below). Sprint 4 cumulative open questions: 41 (Wave 1: 11 + Wave 2: 30).


  1. Pi-side ALSA path: does the Pi retain any ALSA / PulseAudio surface for future PCM-voice-bark work (GWP-171), or does all audio leave via UART → Pico → I2S → MAX98357A? Pins one paragraph in audio-pipeline.md.
  1. Confirm defer. Recommendation: leave GWP-171 in Planning/Backlog until ADR-0017 audio path is measured + CIPHER-LINE OLED is playtested + spec is rewritten for I2S/MAX98357A. Confirm or override.
  2. Stale-spec disposition. Leave docs/software/runtime/pcm-voice-bark.md in place with a “needs ADR-0017 rewrite” banner, or move to docs/_archive/? Recommendation: leave in place with banner.
  3. v0.1 launch-cart bark dependency. Does any v0.1 launch cart depend on PCM barks? Current design bibles do not assume bark playback — confirm.
  1. Progress-bar unfilled glyph: middle dot · (recommended) or space ?
  2. level > max_level for threat-bar: silent clamp (recommended) or raise :invalid-level?
  3. Title asymmetric padding tolerance: accept up to 1-char asymmetry (recommended) or always truncate to symmetric?
  1. Are we sprinting expansion carts post-launch at all? This pack assumes “yes, eventually.” If “ship 17 launch carts and stop,” GWP-283 is a research artifact and needs no further action.
  2. GARGOYLE and BLACK SUN cuts — confirm or override. Both are good fiction; my read is wrong-device.
  3. CLONESHOP-as-infrastructure reframe — commit other carts (CARRION, HOSTILE TAKEOVER, ICE BREAKER) to assume CLONESHOP exists?
  4. TACHIKOMA scope. Most paradigm-faithful in the bunch + most expensive to author. Worth a focused exploration session before its slot is fixed?

Wave 2 consolidated open questions for Josh

Section titled “Wave 2 consolidated open questions for Josh”

None — task AC is well-bounded; cited ADRs are all Accepted with their own Documentation Updates checklists ticked.

From GWP-173 (in-game music — stays deferred)

Section titled “From GWP-173 (in-game music — stays deferred)”
  1. Confirm: defer this one. Recommendation: leave in Planning/Backlog until gate fires (ADR-0017 audio measured + CIPHER playtested + spec authored from scratch).
  2. PSG-only music option as separate task? If Josh wants ambient PSG music to ship pre-Pico-bring-up, file as new work — the “beyond PSG SFX” framing of GWP-173 rules out the PSG-only path by definition.
  3. Does any v0.1 launch cart depend on music? Current design bibles describe SFX cues only — confirm.
  1. Confirm GWP-163 stays in Planning, not dispatched. Recommendation: leave as-is; 2026-04-25 reconciliation is current.
  2. Mirror to docs/_meta/deferred-work-catalog.md? Recommendation: NO until demand. Notion view is canonical.
  3. Trigger for next audit: v0.1 ship (when GWP-152 closes) recommended; sooner if Josh prefers.

None — task well-bounded; ADR-0009 + ADR-0016 stable.

  1. Bundle with GWP-265? Both touch F11 overlay; one PR with separate commits saves review overhead. Recommendation: bundle in single dispatch.
  2. NOKIA empty-state phrasing: (no nemacs session) (recommended for diagnostic specificity) vs flat (none).

From GWP-114 (emulator update simulation — scope realign)

Section titled “From GWP-114 (emulator update simulation — scope realign)”
  1. Confirm scope realign to ADR-0011 header-only. Recommendation: yes; file GWP-114-B sibling for migration test harness.
  2. Flag name preference: --validate-fw (recommended; accurate) vs --simulate-update (preserves original verb).
  3. GWP-144 status check: is the tools/kn86fw/ header parser shipped + C-callable? If no, GWP-114 is blocked.
  4. File GWP-114-B (deck-state migration test harness) now or defer until v0.1 deck-state schema starts evolving?
  1. ADR amendment target: ADR-0004 (recommended; canonical arena home) vs ADR-0005 (per task body — wrong home for arena-size decision) vs new ADR-0023 (overkill).
  2. Black Ledger scope: scale-up to 4×8×50 if measurement supports vs freeze scaled-back. Driven by data.
  3. New-default landing zone: stay 256 KB / bump 512 KB / bump 1 MB. Headroom-vs-future-proofing tradeoff.

From GWP-256 (publisher_splash hook — Gameplay Designer take)

Section titled “From GWP-256 (publisher_splash hook — Gameplay Designer take)”
  1. Sample-cart choice: Zaibatsu splash for ICE Breaker (recommended; exercises full PSG + animation envelope) vs simpler Edgeware splash for less-load-bearing cart.
  2. No-splash-cart behavior: skip entirely (recommended; preserves “absence is meaningful” framing for Setec Astronomy contrast) vs UNKNOWN PUBLISHER placeholder vs per-cart flag.
  3. publisher-splash primitive in ADR-0005? Recommend amending with new “Lifecycle hooks” subsection covering this + future hooks.
  4. Splash-skip key: SYS (recommended; right-index resting; conventional system-control) vs ENT vs any-key.
  5. Time-budget enforcement: frame-count, wall-clock, or both? Recommendation: BOTH (whichever fires first).

From GWP-263 (12×24 font cut, biggest engineering task in batch)

Section titled “From GWP-263 (12×24 font cut, biggest engineering task in batch)”
  1. TTF cut vs custom face: Press Start 2P 12×24 TTF cut for v0.1 (recommended) vs KN-86 custom face (later refinement task; 2-3 weeks).
  2. Descender behavior (Q J p q y g): subtle 2-pixel descenders on lowercase (recommended) vs stay above-baseline like 8×8 source.
  3. Box-drawing stroke weight: 1 px (matches 8×8 baseline) vs 2 px (heavier, more legible). Black Ledger tables are worst-case test.
  4. A/B sweep granularity: home + 1 gameplay × 4 carts (minimum) vs wider (multiple screens, debug overlay, attract clips).
  5. Build-flag default after merge: flip to native in this PR if A/B passes (recommended) vs land with legacy default + flip in follow-on. Risk-tolerance call.

From GWP-264 (attract clip pipeline + 4 clips)

Section titled “From GWP-264 (attract clip pipeline + 4 clips)”
  1. Cart-author UX: standalone tools/make_clip.py Python (recommended for v0.1) vs Lisp-side authoring primitive.
  2. Storyboard authoring ownership: Gameplay Design agent authors all 4 launch-cart clips (recommended) vs Josh writes inline.
  3. Idle-trigger duration default: 30s (recommended) vs 60s (less eager) vs 15s (more eager).
  4. Cart-side vs runtime-default clip resolution: always prefer cart-side (recommended; carts ship own attract content) vs cycle bare-deck reel + cart clips together.
  5. Audio fade-out at loop point: hard rule (encoder enforces silence in last 30 frames) vs soft guideline + warning (recommended) vs auto-fade (complexity).

Section titled “Recommended Sprint 4 dispatch waves (Wave 1 + Wave 2 combined, 15 candidates)”

Dispatch Wave A — small, independent, low-risk (5 tasks, all parallel)

Section titled “Dispatch Wave A — small, independent, low-risk (5 tasks, all parallel)”
  • GWP-247 (Wave 1 — lfsr-shuffle) — single C engineer, additive, TDD warm-up.
  • GWP-266 (Wave 1 — runtime docs) — single doc agent, pure docs.
  • GWP-261 (Wave 2 — orchestration doc sweep) — single doc agent, pure docs, ~2 hours.
  • GWP-265 (Wave 2 — T9 explain telemetry) — single C engineer, ~half day, additive instrumentation.
  • GWP-236 (Wave 2 — F11 polish + cli) — single C engineer, ~30 min, trivial. Bundle with GWP-265 in one dispatch (same surface).

These five can dispatch on a single SM call, in parallel, isolated worktrees. QA gates each PR independently. Total: ~1.5–2 engineering days across 4 agents.

Dispatch Wave B — medium tasks, mostly parallel (4 tasks)

Section titled “Dispatch Wave B — medium tasks, mostly parallel (4 tasks)”
  • GWP-246 (Wave 1 — display helpers) — single C engineer, ~2 days, well-specified.
  • GWP-256 (Wave 2 — publisher_splash hook) — C engineer + Gameplay Design consult, ~1 day. Note: confirm Gameplay Design availability for storyboard review on the Zaibatsu sample.
  • GWP-114 (Wave 2 — emulator update simulation) — single C engineer, ~half day. BLOCKED on GWP-144 status check; verify before dispatch.
  • GWP-233 (Wave 2 — Fe arena scaling) — single C engineer, ~1.5 days, includes empirical measurement + ADR amendment.

These four can run in parallel (no inter-dependencies); only GWP-114 has an external block. Total: ~5 engineering days across 4 agents.

Dispatch Wave C — large tasks (2 tasks; consider sequential if resourcing limited)

Section titled “Dispatch Wave C — large tasks (2 tasks; consider sequential if resourcing limited)”
  • GWP-263 (Wave 2 — 12×24 font cut, ADR-0014 F1) — C engineer + Josh art-direction consult at 2 checkpoints, 1.5–3 days depending on art-iteration loops. Largest task in the batch.
  • GWP-264 (Wave 2 — attract clip pipeline + 4 clips) — C+Python engineer + Gameplay Design consult on storyboards, ~2 days. Light dep on GWP-263: if GWP-263 lands first, clips capture against new font; if not, against 8×8-scaled and may need re-capture later. Not blocker, ordering preference.

Recommended: dispatch GWP-263 first (or in parallel if storyboards are independent of font), then GWP-264.

NOT dispatched (deferred or non-engineering)

Section titled “NOT dispatched (deferred or non-engineering)”
  • GWP-171 (Wave 1 — PCM voice barks) — stays deferred. Re-visit when ADR-0017 audio path measured + CIPHER OLED playtested + spec rewritten.
  • GWP-173 (Wave 2 — in-game music) — stays deferred. Same gate as GWP-171 + spec needs to be authored from scratch.
  • GWP-163 (Wave 2 — deferred catalog meta) — stays open as canonical anchor; not sprintable; next audit at v0.1 ship.
  • GWP-283 (Wave 1 — concept library) — research artifact. The design pack itself is the deliverable; nothing to dispatch unless Josh wants the cart-expansion roadmap formally committed to a future sprint.

11 dispatchable engineering tasks across 3 dispatch waves (A: 5 small parallel; B: 4 medium parallel; C: 2 large with one ordering preference). 4 tasks are non-engineering (3 stay deferred with explicit gates; 1 is a strategy doc).

Resourcing call to make: if Sprint 4 capacity is ~1 engineer + 1 doc agent + part-time Gameplay Design consult, dispatch Wave A + GWP-256 from Wave B in week 1, the rest of Wave B in week 2, Wave C in week 3. If capacity is higher, all three waves can run concurrently with different agents claiming each. GWP-114 is gated on GWP-144 status; check before claiming.


  • All 5 per-task .md files plus this index were committed and pushed per task, no batched WIP. Pattern verified working — worktree-isolation glitch did not recur.
  • Notion appends used the documented PATCH /v1/blocks/{page_id}/children flow with Python-built payloads. All 5 returned HTTP 200 — Notion bodies updated cleanly.
  • Notion task statuses NOT changed per the brief’s hard rule.
  • All 10 per-task .md files committed and pushed per task on claude/infallible-wilson-3f7fff, no batched WIP. The commit-and-push checkpoint pattern from Wave 1 was reused without incident.
  • Notion appends used the same Python PATCH flow; all 10 returned HTTP 200.
  • Notion task statuses NOT changed per the brief’s hard rule.
  • 3 tasks (GWP-114, GWP-233, GWP-261) carry scope-realignment notes because their task bodies referenced ADRs / values that had drifted (ADR-0003 archived → ADR-0011; arena 32 KB → already 256 KB; orchestration.md flash-layout post-ADR-0019). Realignment recommendations are in each pack’s “Open Questions” section.