You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
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.
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
Act 1 bridges — premise 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 2 — main.rs:555 takes the voyage branch, main.rs:1018continues, 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
Master tracking issue for Act 2. Strategy: polish what exists first, then extend it (#733), keeping the game releasable the whole time — with
ACT2_ENABLEDstaying 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:
ACT2_ENABLED = false(guard testact2_kill_switch_is_off_for_releasetrips otherwise) — all Act 2 work ships dark and is verified viaQUEST_ACT2=1make checkincluding 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)voyage.json/colony.json/ character saves) — extensions addserde(default)fields, never migrations-by-editingWith 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
SaveEvents for launch / first arrival / Last Crossing (Act 2 release polish: achievements (act-sectioned browser + 7 collection milestones), vault events, gateway beats, verification hardening #740)Player-facing wiki page— deferred by direction 2026-07-13 ("not for now"; revisit at the flip gate)1b. Verification hardening
1c. Decisions
[V]carry it). Working as designed, no fix (Act 2 release polish: achievements (act-sectioned browser + 7 collection milestones), vault events, gateway beats, verification hardening #740)docs/decisions.md(Act 2 release polish: achievements (act-sectioned browser + 7 collection milestones), vault events, gateway beats, verification hardening #740)1d. Phase-exit sweep (after #740 merges)
auditskill: 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.jsonlrecords them asauto_fixed: trueanyway. See the follow-up item below.balance-simfull 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 indocs/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 returnedpr_earned17,995 vs 17,994 — injected challenge wins, not the Loom). Do not read a green run as evidence about Act 2's entrance.Controls-and-UI.md:235) whilesrc/input/mod.rs:454requires Y (Enter is unhandled): a player-facing misinstruction on an irreversible PR spend. Needs an authorized push; then bump thequest.wikisubmodule pointer. Also reconcile the 18 falseauto_fixed: trueentries inwiki-audit.jsonl— left as-is, the next meta-audit re-finds all 18.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:590calling 60×24 "the smallest supported terminal" contradictsresponsive.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:
Act 1 bridges— premise 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 2 —main.rs:555takes the voyage branch,main.rs:1018continues, and bothgame_tick_with_contextcall sites sit at:1253/:1608, after it;vessel_launchedis 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 (branchfix/act2-premise-and-checklist).The flip gate (exercisable any time after Phase 1)
ACT2_ENABLED = true+ guard-test update, in one commitdrive-gamevisual pass at 80×24 and 160×45: discovery →[V]→ burn → Ignition → chart/junction/souls/watch → dock → arrival → harbor rooms (only coverage for themain.rsloop branches)make checkgreen with the constant flipped (env override becomes a no-op — confirm nothing assumed otherwise)[!]bug reports + community for the first week (no telemetry — this is the only signal)Longer horizon (independent of all phases)
last_crossing_complete+vessel_arrivedare specced, tested gates waiting for a consumer🤖 Generated with Claude Code
https://claude.ai/code/session_011F9nMko3AYUQBsrCtPjBKp