Skip to content

Act 2 release checklist #734

Description

@stphung

Master tracking issue for Act 2. Strategy: polish what exists first, then extend it (#733), keeping the game releasable the whole time — with ACT2_ENABLED staying off until a deliberate flip decision. The flip is a gate we can exercise at any time, not a phase at the end.

The standing invariant — "always releasable"

Every PR on main must keep the game shippable-as-is. This is already largely CI-enforced by the hardening work (#731); it stays true by construction as long as each change:

  • keeps ACT2_ENABLED = false (guard test act2_kill_switch_is_off_for_release trips otherwise) — all Act 2 work ships dark and is verified via QUEST_ACT2=1
  • passes make check including the flag-ON test step, the voyage simulator, and the ferry-era envelope gates (balanced 15–30 crossings / 2.5–4.5 mo / ≥84% saved)
  • never breaks the save-compat corpus (voyage.json / colony.json / character saves) — extensions add serde(default) fields, never migrations-by-editing
  • lands with its OpenSpec change archived (spec folded, docs synced) — main's spec baseline stays true

With this invariant, "ready for release" = Phase 1 complete; when to actually flip is purely a product decision.

Phase 0 — Done

Phase 1 — Polish (in review: #740)

1a. Integration polish

1b. Verification hardening

1c. Decisions

1d. Phase-exit sweep (after #740 merges)

  • Full audit pass (audit skill: perf / test / doc / wiki / dependency) — all five ran 2026-07-14 post-Act 2 release polish: achievements (act-sectioned browser + 7 collection milestones), vault events, gateway beats, verification hardening #740 (8 runs, 63 findings). ⚠️ wiki-audit's 18 fixes never landed: the push was 403'd, the patch sits in wiki-audit: fix stale controls/mechanics across 10 wiki pages; log run (2026-07-14) #743's comment, and wiki-audit.jsonl records them as auto_fixed: true anyway. See the follow-up item below.
  • balance-sim full multi-strategy/multi-seed pass beyond the CI gates — scope (2026-07-14): validates Act 1 → Z50 / Ascension X, i.e. the 28-pattern + Ascension X prerequisites of the launch gate. It does NOT validate the 250,000 PR runway and should not be expected to — that is closed-form arithmetic (302 PR/hr peak → ~828h ≈ 34.5 calendar days ≈ 5 weekly check-ins, per the 7-day grant cap), now recorded in docs/decisions.md. The simulator structurally cannot answer it (src/bin/simulator/strategy.rs:361-363: the Loom's wall-clock pattern sustain is injected, not run; two 3,000h runs from P50k and P250k on different seeds returned pr_earned 17,995 vs 17,994 — injected challenge wins, not the Loom). Do not read a green run as evidence about Act 2's entrance.
  • Push the wiki-audit patch (wiki-audit: fix stale controls/mechanics across 10 wiki pages; log run (2026-07-14) #743 comment, 10 files, +35/−56) — the wiki still tells players Enter confirms Ascension (Controls-and-UI.md:235) while src/input/mod.rs:454 requires Y (Enter is unhandled): a player-facing misinstruction on an irreversible PR spend. Needs an authorized push; then bump the quest.wiki submodule pointer. Also reconcile the 18 false auto_fixed: true entries in wiki-audit.jsonl — left as-is, the next meta-audit re-finds all 18.
  • Voyage snapshot gaps: add voyage_rumors_m_60x24 + voyage_farewell_m_60x24 — they are 2 of the 6 panels Act 2 release polish: achievements (act-sectioned browser + 7 collection milestones), vault events, gateway beats, verification hardening #740's own S/M-tier fix routes to full-frame (ui/voyage_scene.rs:73,76-78) and have zero coverage at any size. Also 60×24 is M tier, not S (S is 40×16, ui/responsive.rs:18-19) — the fix dispatches at S and M, so consider a 40×16 pass; overlay_snapshot_tests.rs:590 calling 60×24 "the smallest supported terminal" contradicts responsive.rs.

Phase 2 — Extend (after Phase 1; design detail in #733)

Each item is its own OpenSpec change, shipped dark behind the same flag, respecting the standing invariant — so main stays releasable after every merge, and the flip gate stays exercisable between any two items. Suggested order:

  • Dark-closes-the-map: the deterministic dimming becomes mechanical — roads/ports close as the era wears on; late crossings must reroute (highest value-per-effort; not in the Session 5 sketch)
  • Veteran souls: crew rank up at stations across crossings → counsel/bonuses/tier prerequisites (Session 5)
  • Salvage refinement chain + ship-tier ↔ district gating: the fix for "one currency, three sinks" (Session 5; needs a balance pass against the envelope gates, which may deliberately widen — spec'd, not drifted)
  • Colony as an active surface: player-chosen district projects with voyage-side bonuses; colonist letters after the Going-Dark
  • Ferry-run presence: per-crossing route choice returns; authored commissions (named passenger, route constraint, no dice)
  • Act 1 bridgespremise void; needs re-argument from scratch (2026-07-14). This item's justification was that Act 1 keeps running during the era and its output is "stranded — nowhere left to go" (docs/explorations/2026-07-05-act2-systems-braiding.md:85-92). Act 1 is frozen during Act 2main.rs:555 takes the voyage branch, main.rs:1018 continues, and both game_tick_with_context call sites sit at :1253/:1608, after it; vessel_launched is never unset, so it is permanent. Confirmed intended design. No stranded output ⇒ nothing here is reuse: "fishing off the stern" is a new minigame, "Power Cores → Salvage" has no live source, "challenges as threat resolution" needs the challenge stack reachable from a screen that owns the whole frame. Not the cheapest item — not necessarily wrong, but it must stand on its own merits. The live question it exposed: is it right that the hero a player built over hundreds of hours goes inert for a 3–7 month era? Premise corrected in the docs (branch fix/act2-premise-and-checklist).
  • (flagged, not endorsed) Era-rebirth loop — conflicts with the "it ends, it does not cycle" anti-goal; likely belongs to Act 3 instead

The flip gate (exercisable any time after Phase 1)

  • Decide release-notes spoiler depth + retune triggers in advance (likeliest complaint: maiden-voyage length — the lever we deliberately never touched)
  • Flip PR: ACT2_ENABLED = true + guard-test update, in one commit
  • Full drive-game visual pass at 80×24 and 160×45: discovery → [V] → burn → Ignition → chart/junction/souls/watch → dock → arrival → harbor rooms (only coverage for the main.rs loop branches)
  • make check green with the constant flipped (env override becomes a no-op — confirm nothing assumed otherwise)
  • Hand-written release notes
  • Post-merge: verify 3-platform binaries + auto-updater delivery (15min ± 5min cadence); watch [!] bug reports + community for the first week (no telemetry — this is the only signal)

Longer horizon (independent of all phases)

  • Act 3 design exploration — last_crossing_complete + vessel_arrived are specced, tested gates waiting for a consumer
  • Era record outside the harbor (title screen / character select) — dossier's held-for-later; relevant once players finish eras

🤖 Generated with Claude Code

https://claude.ai/code/session_011F9nMko3AYUQBsrCtPjBKp

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions