From 21604df076dff580c670a0f06050cf1ccb3a4fb1 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 15 Jul 2026 17:18:58 +0000 Subject: [PATCH 1/2] doc-audit: fix stale OpenSpec counts, dossier headers, Haven forge gate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CLAUDE.md / openspec/README.md: requirement/scenario counts had drifted (215→216 reqs, 517→525 scenarios); the capability table was missing a `challenges` row and undercounted `vessel-act2` by one requirement - docs/dossiers/act2-pilgrimage.md, act1-ascent.md: "Last refreshed" headers were stale relative to each dossier's own latest substantive edit - src/haven/CLAUDE.md: Storm Forge section omitted the Prestige Rank 25+ gate that can_forge_stormbreaker() actually requires alongside the Storm Leviathan achievement Full 6-agent doc-audit found the codebase docs otherwise clean. --- CLAUDE.md | 2 +- docs/dossiers/act1-ascent.md | 4 ++-- docs/dossiers/act2-pilgrimage.md | 6 +++--- openspec/README.md | 5 +++-- src/haven/CLAUDE.md | 4 +++- 5 files changed, 12 insertions(+), 9 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 8b838931..9f79b3ae 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -14,7 +14,7 @@ make fmt # Auto-fix formatting ## Spec-Driven Development (OpenSpec) -Development is **spec-driven** via [OpenSpec](https://github.com/Fission-AI/OpenSpec). The `openspec/specs/` directory is a reverse-engineered, code-grounded baseline (20 capabilities, 215 requirements) that documents *what the game currently does* — see [openspec/README.md](openspec/README.md) for the capability index and the known code-vs-docs discrepancy log. +Development is **spec-driven** via [OpenSpec](https://github.com/Fission-AI/OpenSpec). The `openspec/specs/` directory is a reverse-engineered, code-grounded baseline (20 capabilities, 216 requirements) that documents *what the game currently does* — see [openspec/README.md](openspec/README.md) for the capability index and the known code-vs-docs discrepancy log. **Start non-trivial work from a spec, not from code:** 1. `/opsx:propose ""` — scaffold a change (proposal + design + tasks + delta specs) under `openspec/changes/`, grounded in the affected capability spec(s). diff --git a/docs/dossiers/act1-ascent.md b/docs/dossiers/act1-ascent.md index cbf6a1ae..60d86470 100644 --- a/docs/dossiers/act1-ascent.md +++ b/docs/dossiers/act1-ascent.md @@ -1,7 +1,7 @@ # Act 1: The Ascent — Design Dossier -> Last refreshed: 2026-07-05 @ 64803b2 (prose de-cluttered: no inline code -> references, bulleted structure; no source changed) | Sources: `src/core/` (incl. +> Last refreshed: 2026-07-08 @ ee708f3 (doc-audit: fixed stale constants; +> no source changed) | Sources: `src/core/` (incl. > `power_rating.rs`), `src/combat/`, `src/character/`, `src/zones/`, > `src/items/`, `src/enhancement/`, `src/ascension/`, `src/deep/`, > `src/loom/`, `src/power_cores/`, `src/god_items/`, `src/haven/`, diff --git a/docs/dossiers/act2-pilgrimage.md b/docs/dossiers/act2-pilgrimage.md index 1334c736..0e51581c 100644 --- a/docs/dossiers/act2-pilgrimage.md +++ b/docs/dossiers/act2-pilgrimage.md @@ -1,8 +1,8 @@ # Act 2: The Pilgrimage of Souls — Design Dossier -> Last refreshed: 2026-07-05 (the "Ignition" animated launch transition -> shipped and Dock/Wormhole's balance evidence corrected against its own -> shipped validation, see Refresh History) | Sources: `src/vessel/`, `src/main.rs` (vessel wiring), `src/vessel/CLAUDE.md`, `openspec/changes/archive/the-vessel-act2/design.md` (the 15 backported vessel specs, now consolidated into one file), `openspec/changes/archive/2026-07-05-act2-dock-wormhole-crossing/` (Dock/Wormhole, including its `tasks.md` balance validation), `openspec/specs/vessel-act2/spec.md`, `src/ui/vessel_transition_fx.rs` (the Ignition transition renderer), `docs/explorations/2026-07-05-act2-systems-braiding.md` (Dock/Wormhole's originating exploration and the deferred Session 5 braid), `tests/ferryman_tests.rs`, `src/vessel/colony.rs` unit tests, `src/vessel/transition.rs`, voyage_simulator + ferryman `strategy_sweep`/`dock_time_across_charge_policies` runs, `overlay_snapshot_tests.rs`, played via `QUEST_ACT2=1` fixtures +> Last refreshed: 2026-07-15 @ 304d015 (corrected the "Act 1 idles beneath +> Act 2" premise — Act 1 stops, it does not idle, per `main.rs:555`'s +> `continue`; see Refresh History for the full session log) | Sources: `src/vessel/`, `src/main.rs` (vessel wiring), `src/vessel/CLAUDE.md`, `openspec/changes/archive/the-vessel-act2/design.md` (the 15 backported vessel specs, now consolidated into one file), `openspec/changes/archive/2026-07-05-act2-dock-wormhole-crossing/` (Dock/Wormhole, including its `tasks.md` balance validation), `openspec/specs/vessel-act2/spec.md`, `src/ui/vessel_transition_fx.rs` (the Ignition transition renderer), `docs/explorations/2026-07-05-act2-systems-braiding.md` (Dock/Wormhole's originating exploration and the deferred Session 5 braid), `tests/ferryman_tests.rs`, `src/vessel/colony.rs` unit tests, `src/vessel/transition.rs`, voyage_simulator + ferryman `strategy_sweep`/`dock_time_across_charge_policies` runs, `overlay_snapshot_tests.rs`, played via `QUEST_ACT2=1` fixtures > **Status: living, deep-refreshed across several sessions.** This dossier > holds Act 2's cross-system, player-eye synthesis — how the launch gate, diff --git a/openspec/README.md b/openspec/README.md index bd1c32ef..97e12995 100644 --- a/openspec/README.md +++ b/openspec/README.md @@ -19,7 +19,7 @@ folded back into those specs. The specs in `specs/` were **reverse-engineered from the existing implementation** — they document the game as it is actually coded today, not a -wishlist. Twenty capability specs (215 requirements, 517 scenarios) were each +wishlist. Twenty capability specs (216 requirements, 525 scenarios) were each produced by reading the relevant `src//` code, its module `CLAUDE.md`, the root `CLAUDE.md` "Key Constants", and the design notes under `docs/`, then grounding every number against the source. All twenty pass @@ -51,7 +51,8 @@ than silently editing the spec to match a regression. | [`god-items`](specs/god-items/spec.md) | 7 | Asprika / Sleipnir / Megingjord — fixed God-rarity artifacts, passives, auto-equip protection | | [`time-vault`](specs/time-vault/spec.md) | 9 | git-backed save snapshots on milestones, browse/restore/fork/delete, no auto-prune | | [`persistence`](specs/persistence/spec.md) | 10 | JSON save files, `QUEST_DIR`, run vs account state, backward-compat contract, silent-wipe hazard | -| [`vessel-act2`](specs/vessel-act2/spec.md) | 19 | Act 2 kill-switch, Zone-50 launch gate (250k PR burn), the Voyage loop, the ferry era's balance envelope, the Last Crossing | +| [`vessel-act2`](specs/vessel-act2/spec.md) | 20 | Act 2 kill-switch, Zone-50 launch gate (250k PR burn), the Voyage loop, the ferry era's balance envelope, the Last Crossing | +| [`challenges`](specs/challenges/spec.md) | 9 | 14 challenge minigames, discovery weights, difficulty tiers, reward tables | ## Setup diff --git a/src/haven/CLAUDE.md b/src/haven/CLAUDE.md index f226c89d..e453840f 100644 --- a/src/haven/CLAUDE.md +++ b/src/haven/CLAUDE.md @@ -78,7 +78,9 @@ Special: Fishing Dock T4 costs 10 PR. Storm Forge (single tier) costs 25 PR. The ultimate Haven room, requiring both capstones (War Room + Vault) to unlock: - Single tier, costs 25 prestige ranks - Enables forging of Stormbreaker weapon -- Requires catching the Storm Leviathan first (tracked via achievements) +- Forging (`can_forge_stormbreaker()`) requires both catching the Storm + Leviathan (tracked via achievements) and Prestige Rank 25+ + (`STORMBREAKER_PRESTIGE_REQUIREMENT`) - Stormbreaker is required to defeat Zone 10's final boss ## Integration Points From 0736ff7a6566b5efb1251833a59ce764906993a4 Mon Sep 17 00:00:00 2001 From: Claude Date: Wed, 15 Jul 2026 17:20:27 +0000 Subject: [PATCH 2/2] doc-audit: log this run to the meta-audit eval history --- .claude/skills/meta-audit/history/doc-audit.jsonl | 1 + 1 file changed, 1 insertion(+) diff --git a/.claude/skills/meta-audit/history/doc-audit.jsonl b/.claude/skills/meta-audit/history/doc-audit.jsonl index 1df20de6..2c6c61e3 100644 --- a/.claude/skills/meta-audit/history/doc-audit.jsonl +++ b/.claude/skills/meta-audit/history/doc-audit.jsonl @@ -19,3 +19,4 @@ {"type":"run","date":"2026-07-14","commit_sha":"86dddc38340e55d1116f0c025eca822da07c0e2e","pr_url":"https://github.com/stphung/quest/pull/741","agent_count":6,"scope":["CLAUDE.md","README.md","docs/README.md","docs/decisions.md","docs/dossiers/act1-ascent.md","docs/dossiers/act2-pilgrimage.md","docs/dossiers/world-and-narrative.md","src/core/CLAUDE.md","src/combat/CLAUDE.md","src/character/CLAUDE.md","src/zones/CLAUDE.md","src/dungeon/CLAUDE.md","src/fishing/CLAUDE.md","src/items/CLAUDE.md","src/challenges/CLAUDE.md","src/haven/CLAUDE.md","src/enhancement/CLAUDE.md","src/ascension/CLAUDE.md","src/stormglass/CLAUDE.md","src/deep/CLAUDE.md","src/power_cores/CLAUDE.md","src/god_items/CLAUDE.md","src/loom/CLAUDE.md","src/vessel/CLAUDE.md","src/ui/CLAUDE.md","src/input/CLAUDE.md","src/utils/CLAUDE.md","src/main_helpers/CLAUDE.md","src/achievements/CLAUDE.md","src/history/CLAUDE.md"],"findings":[{"location":"src/history/CLAUDE.md:10","claim":"SaveEvent enum (21 variants), with a 21-item enumeration at line 16 omitting the Act 2 events","correct_value":"24 variants; PR #740 added VesselLaunched, VesselArrived, LastCrossing (src/history/types.rs:22-24)","severity":"HIGH","category":"stale-type","auto_fixed":true},{"location":"README.md:97","claim":"vessel/ # Act 2: Vessel launch gate + Voyage engine (dark behind ACT2_ENABLED)","correct_value":"Dark-shipped content must not be advertised in the player-facing README (vessel::ACT2_ENABLED=false, src/vessel/mod.rs:114); replaced with a neutral 'Feature-flagged module (disabled by default)' line","severity":"HIGH","category":"dark-ship-violation","auto_fixed":true},{"location":"src/vessel/CLAUDE.md:55-60","claim":"VoyageView enum snippet lists 10 variants ending at Record { scroll } ('arrived-only, spec 7'); renderer-dispatch list at line 130 also omits the same two views","correct_value":"12 variants: spec-9 added Reckoning and Dock { confirm_pending } (src/vessel/mod.rs:46-95; render dispatch src/ui/voyage_scene.rs:60-61)","severity":"MEDIUM","category":"stale-type","auto_fixed":true},{"location":"CLAUDE.md:207","claim":"Fracture zone unlock: Deep Layer 3 -> Z12-14, Layer 7 -> Z15-17, ... (Deep-layer gate only)","correct_value":"Dual gate: Deep layer AND per-band prestige P50/P75/P100/P150/P200/P300 (src/zones/access.rs:30-33, src/zones/data.rs prestige_requirement); was already logged in openspec/README.md's discrepancy log","severity":"MEDIUM","category":"stale-constant","auto_fixed":true},{"location":"docs/dossiers/act2-pilgrimage.md:3","claim":"Last refreshed: 2026-07-05 - marker predates the 2026-07-12 era retune (DARK_TAKES_PER_DAY 0.0006->0.0007, CAP_GROWTH 1.36->1.46) and PR #740's Act 2 release polish; body carries 'Resolved (2026-07-12)' notes the Refresh History never absorbed","correct_value":"Stale dossier - needs a manual write-dossier refresh pass (flag-for-review per the dossier caveat; single finding, not a per-line teardown)","severity":"MEDIUM","category":"stale-dossier","auto_fixed":false},{"location":"openspec/README.md:94-96","claim":"Known-discrepancy log entry: 'zones - Fracture unlock gates. Root CLAUDE.md lists only the Deep-layer cap...'","correct_value":"Entry resolved by fixing CLAUDE.md:207 in the same PR; removed so the log lists only live discrepancies","severity":"LOW","category":"other","auto_fixed":true},{"location":"CLAUDE.md (Architecture section)","claim":"Loose top-level file src/tick_events.rs (TickEvent->UI bridge, binary-only) unmentioned while siblings main.rs / lib.rs / fixtures.rs are each described","correct_value":"One-sentence mention added next to the entry-point line (role per file header and docs/decisions.md tick_events.rs extraction entry)","severity":"LOW","category":"missing-file-inventory","auto_fixed":true},{"location":"src/core/CLAUDE.md:19","claim":"tick_stages.rs # Tick processing stages 4-6 and helper functions","correct_value":"File holds stage functions spanning 0 through 12c (the doc's own stage table attributes compute_merged_bonuses stage 0, tick_loom 4b, tick_vessel_whispers 12c to it)","severity":"LOW","category":"stale-type","auto_fixed":true},{"location":"src/dungeon/CLAUDE.md:115","claim":"Adding a New Room Type step 3: 'Add spawn probability in generation.rs'","correct_value":"Room placement is deterministic (place_special_rooms(), src/dungeon/generation.rs:211-358): dead-end/distance selection plus shuffled treasure allotment; no per-room-type spawn probability exists","severity":"LOW","category":"other","auto_fixed":true},{"location":"docs/decisions.md:219","claim":"References docs/plans/2026-02-18-large-module-refactoring-design.md, but the docs/plans/ tree was removed (docs/README.md:38)","correct_value":"Annotated as '(since removed with the rest of the docs/plans/ tree - see git history / the OpenSpec archive)'","severity":"LOW","category":"listed-file-missing","auto_fixed":true},{"location":"src/main_helpers/CLAUDE.md:21","claim":"update.rs file-table cell does not name the achievement-browser handling PR #740 added to the startup splash (full-repaint on act/section switch, Tab toggles act)","correct_value":"Reviewed and left as-is: the cell's 'startup splash screen with character select ... full character select loop' already encompasses it; editorial, not objectively wrong","severity":"LOW","category":"stale-integration","auto_fixed":false},{"location":"README.md:80-106","claim":"Project-structure tree omits loose files lib.rs, fixtures.rs, tick_events.rs; Features prose names only some shipped systems","correct_value":"Reviewed and left as-is: README is deliberately wiki-first and non-exhaustive (curated tree, systems roster delegated to the wiki at line 54); no stated claim is wrong","severity":"LOW","category":"other","auto_fixed":false}]} {"type":"eval_marker","date":"2026-07-14","pr_url":"https://github.com/stphung/quest/pull/744","runs_covered":5} {"type":"run","date":"2026-07-14","commit_sha":"aa1b06a9459c00c78c3fa2b74d55612c57a83ce5","pr_url":"https://github.com/stphung/quest/pull/752","agent_count":6,"scope":["CLAUDE.md","docs/README.md","docs/decisions.md","docs/dossiers/act1-ascent.md","docs/dossiers/act2-pilgrimage.md","docs/dossiers/world-and-narrative.md","src/core/CLAUDE.md","src/combat/CLAUDE.md","src/character/CLAUDE.md","src/zones/CLAUDE.md","src/dungeon/CLAUDE.md","src/fishing/CLAUDE.md","src/items/CLAUDE.md","src/challenges/CLAUDE.md","src/haven/CLAUDE.md","src/enhancement/CLAUDE.md","src/ascension/CLAUDE.md","src/stormglass/CLAUDE.md","src/deep/CLAUDE.md","src/power_cores/CLAUDE.md","src/god_items/CLAUDE.md","src/loom/CLAUDE.md","src/vessel/CLAUDE.md","src/ui/CLAUDE.md","src/input/CLAUDE.md","src/utils/CLAUDE.md","src/main_helpers/CLAUDE.md","src/achievements/CLAUDE.md","src/history/CLAUDE.md","README.md"],"findings":[{"location":"CLAUDE.md:139","claim":"Utils | src/utils/ | CLAUDE.md | Build info, updater, debug menu","correct_value":"Build info, updater, debug menu, bug reports (src/utils/bug_report.rs, 554 lines, wired to the ! hotkey in input/mod.rs)","severity":"LOW","category":"stale-architecture-description","auto_fixed":true},{"location":"src/input/CLAUDE.md:22,91","claim":"fuzz_tests.rs described as covering discovery states and all 14 minigames only; scenario table ends at fuzz_active_minigames_never_panic","correct_value":"fuzz_tests.rs also contains fuzz_voyage_input_never_panics (src/input/fuzz_tests.rs:264-335), added alongside the Act 2 release polish (#740), which hammers handle_voyage_input directly across mid-leg/junction/arrived scenarios","severity":"MEDIUM","category":"missing-test-coverage-doc","auto_fixed":true},{"location":"docs/dossiers/act1-ascent.md:3","claim":"Last refreshed: 2026-07-05 @ 64803b2","correct_value":"Content was subsequently edited by 5a4a19a (2026-07-06) and ee708f3 (2026-07-08) without bumping the refresh header; needs a manual reconciliation of the refresh-history log, not a mechanical bump","severity":"MEDIUM","category":"stale-dossier","auto_fixed":false},{"location":"docs/dossiers/act2-pilgrimage.md:3","claim":"Last refreshed: 2026-07-05","correct_value":"The file's own Refresh History section documents later refreshes (2026-07-12 b6ba759, 2026-07-13 c507a1c) already reflected in the content; only the top header pointer was never bumped forward","severity":"MEDIUM","category":"stale-dossier","auto_fixed":false}]} +{"type":"run","date":"2026-07-15","commit_sha":"698f29af54646fb4f5297ded6d9de701298e98fd","pr_url":"https://github.com/stphung/quest/pull/760","agent_count":6,"scope":["CLAUDE.md","docs/*.md","docs/dossiers/*.md","src/core/CLAUDE.md","src/combat/CLAUDE.md","src/character/CLAUDE.md","src/zones/CLAUDE.md","src/dungeon/CLAUDE.md","src/fishing/CLAUDE.md","src/items/CLAUDE.md","src/challenges/CLAUDE.md","src/haven/CLAUDE.md","src/enhancement/CLAUDE.md","src/ascension/CLAUDE.md","src/stormglass/CLAUDE.md","src/deep/CLAUDE.md","src/power_cores/CLAUDE.md","src/god_items/CLAUDE.md","src/loom/CLAUDE.md","src/vessel/CLAUDE.md","src/ui/CLAUDE.md","src/input/CLAUDE.md","src/utils/CLAUDE.md","src/main_helpers/CLAUDE.md","src/achievements/CLAUDE.md","src/history/CLAUDE.md","README.md"],"findings":[{"location":"CLAUDE.md:17","claim":"openspec/specs/ is 20 capabilities, 215 requirements","correct_value":"216 requirements (216 x '### Requirement' headings across openspec/specs/*/spec.md)","severity":"MEDIUM","category":"stale-constant","auto_fixed":true},{"location":"openspec/README.md:22","claim":"Twenty capability specs (215 requirements, 517 scenarios)","correct_value":"216 requirements, 525 scenarios","severity":"MEDIUM","category":"stale-constant","auto_fixed":true},{"location":"openspec/README.md capability index table","claim":"vessel-act2 listed as 19 requirements; challenges capability missing from table entirely","correct_value":"vessel-act2 = 20 requirements; challenges = 9 requirements (added row)","severity":"MEDIUM","category":"missing-file","auto_fixed":true},{"location":"docs/dossiers/act2-pilgrimage.md:3","claim":"Last refreshed: 2026-07-05","correct_value":"2026-07-15 @ 304d015 (Act 1/Act 2 interrelations diagram correction, #757)","severity":"MEDIUM","category":"stale-dossier","auto_fixed":true},{"location":"docs/dossiers/act1-ascent.md:3","claim":"Last refreshed: 2026-07-05 @ 64803b2","correct_value":"2026-07-08 @ ee708f3 (doc-audit stale-constant fix, #706)","severity":"LOW","category":"stale-dossier","auto_fixed":true},{"location":"src/haven/CLAUDE.md:76-82","claim":"Storm Forge: Requires catching the Storm Leviathan first (tracked via achievements)","correct_value":"can_forge_stormbreaker() also requires Prestige Rank 25+ (STORMBREAKER_PRESTIGE_REQUIREMENT), not just the Leviathan achievement","severity":"LOW","category":"stale-type","auto_fixed":true},{"location":"README.md:4,116","claim":"MIT License badge and 'Open source under the MIT License' text","correct_value":"No LICENSE file exists in the repo","severity":"MEDIUM","category":"listed-file-doesnt-exist","auto_fixed":false},{"location":"src/challenges/CLAUDE.md","claim":"N/A - structural","correct_value":"Doc uses a tutorial-style structure instead of the standard Files/Key Types/How It Works/Integration Points template; content itself is accurate","severity":"LOW","category":"stale-architecture-description","auto_fixed":false}]}