update design

This commit is contained in:
2026-04-30 10:36:25 +08:00
parent 55506eff9a
commit a38a8d4b39
25 changed files with 999 additions and 113 deletions
@@ -0,0 +1,17 @@
# docs/CombatNodeArchitecture.md — Review Log
## Review — 2026-04-30 — Verdict: APPROVED
**Scope signal**: S
**Specialists**: lean review (architecture constraint spec — internal doc, not player-facing GDD)
**Blocking items**: 0
**Recommended revisions**: 3 (state transition table missing; LoopCount naming divergence from Node System; BossEffectiveHp formula not explicitly stated)
**Summary**: Architecture constraint spec reviewed against adjusted GDD standards (no Player Fantasy, ACs, or Tuning Knobs expected). Document successfully constrains the combat domain with clear invariant enforcement, naming suffix conventions, and component boundaries. CombatNodeComponent facade pattern, CombatScheduler sole authority model, and InventoryGenerationComponent delegation are all well-specified. 3 recommended items are nice-to-haves.
**Prior verdict resolved**: N/A (first review)
## Review — 2026-04-30 — Verdict: APPROVED (addendum added)
**Scope signal**: S
**Specialists**: lean review
**Blocking items**: 0
**Recommended revisions**: 0 (prior 3 remain as nice-to-haves)
**Summary**: In-session addendum added §12 "Combat Economy" documenting the dual-currency architecture (Coin: combat-internal, Gold: run-level), sources, sinks, and the Progression `coinEarned` field semantics. Gap G1 from holistic review resolved — Coin economy was implemented but undocumented.
**Prior verdict resolved**: Yes — prior 3 recommendations remain unaddressed (nice-to-haves); G1 Coin economy documentation gap resolved via §12 addendum.
@@ -0,0 +1,16 @@
# event-system.md — Review Log
## Review — 2026-04-30 — Verdict: APPROVED (second review — all blocking items addressed in-session)
**Scope signal**: S
**Specialists**: lean review
**Blocking items**: 0 (all 2 addressed: Pillar placeholder defined; Node System dependency updated to Approved)
**Recommended revisions**: 1 (OQ1 stale — now resolved: 1 Event node at position 6 per Plain theme)
**Summary**: Second review verified both blocking items from first review addressed in-session. Event System is technically thorough — deterministic seeding, working-copy commit pattern, seeded random chain, and edge case coverage are all well-specified. Core architecture is sound and implementable. Pillar defined as "narrative surprise and meaningful stakes." OQ1 updated to RESOLVED confirming exactly 1 Event node per run at position 6.
**Prior verdict resolved**: Yes — Pillar and stale dependency both fixed.
## Review — 2026-04-30 — Verdict: NEEDS REVISION (first review)
**Scope signal**: S
**Specialists**: lean review
**Blocking items**: 2 | **Recommended**: 1
**Summary**: First review found 2 blocking items: (1) Status header Pillar is a placeholder "[To be designed]"; (2) Stale Node System dependency status (shows "Designed" but is Approved). Recommended: OQ1 is now answerable since Node System is Approved — exactly 1 Event node at position 6 in Plain theme. All other aspects (deterministic seeding, working copy commit, edge cases, AC coverage) are solid.
**Prior verdict resolved**: N/A (first review)
@@ -45,3 +45,29 @@
**Summary**: Fourth review found 8 blocking issues: (1) Both edges lead to identical node types — cosmetic choice, not tactical (all 5 specialists converged); (2) Early economy starvation — 300g first shop arrival, Red costs 200-220g, shop non-functional; (3) Boss difficulty completely uncorrelated with run performance (nodesCompleted has zero effect); (4) Core Rules vs UI Requirements contradiction on Assembly Phase entry; (5) TotalGold n=1-9 ambiguous (count vs indices), Boss loop count domain 0-∞ but clamped; (6) Coin currency has no documented sink; (7) AC coverage gaps for Core Rules 3, 5, 9; (8) Boss VFX color crimson (Combat color) contradicts Color Palette gold/amber. All 8 resolved in-session. Key changes: edge divergence clarified as level-variant model; first shop tiered to White/Green only; Boss formula extended with (1 + 0.1 × nodesCompleted) multiplier; Assembly Phase set to auto-enter; Boss VFX color reconciled to amber/gold; Coin sink clarified (CombatNode intra-combat tower building); 5 new ACs added. Re-review in fresh session recommended.
**Prior verdict resolved**: Yes — third NEEDS REVISION addressed; new critical issues were false-choice architecture, economy starvation, Boss uncorrelation, and spec contradictions.
---
## Review — 2026-04-30 — Verdict: MAJOR REVISION NEEDED (fifth review — post-revision)
**Scope signal**: XL
**Specialists**: game-designer, systems-designer, economy-designer, qa-lead, ux-designer, creative-director (via general-purpose agents)
**Blocking items**: 4 | **Recommended**: 11
**Summary**: Fifth review found 4 P0 spec integrity failures: (1) BossEffectiveHp formula had `(1 + 0.1 × nodesCompleted)` run-progress multiplier in GDD but NOT in code — prior review claimed "reconciled to match code" but it wasn't; (2) `nodesCompleted` range table stated 0–9 but only 6 non-boss combat nodes exist; (3) `completedLoopCount` cap was 31 but `2^31` overflows int — correct cap is 30; (4) Missing variables (`completedLoopCount`, `BossBonus`, `HasDefeatedBoss`, `BossLevelGold`) absent from formula tables. All 4 P0 items resolved in-session: multiplier removed from GDD to match code; variable tables corrected; cap fixed to 30; `RunNodeStatus.Exception` defined as error-only state; Boss loss event clarified as `NodeCompleteEventArgs(CombatWon=false)`; ACs improved (timing, modal behavior, visibility, ordering). 11 recommended items identified (variant visibility accepted as intentional design; economy and UX issues noted but not blocking).
**Prior verdict resolved**: Yes — fourth MAJOR REVISION NEEDED addressed; new issues were GDD/code divergence on Boss HP, variable table incompleteness, and AC precision.
---
## Review — 2026-04-30 — Verdict: APPROVED (seventh review — lean, post-fixes)
**Scope signal**: L
**Specialists**: lean review (no delegation)
**Blocking items**: 1 (Fantasy line 37 stale Into-the-Breach reference promising variant transparency that the opaque-variants design withholds)
**Recommended revisions**: 1 (completedLoopCount cap description 2^31→2^30 × BaseHp)
**Summary**: All 6th-review blocking items confirmed resolved in GDD text: variant opacity accepted as intentional per Overview; Next Node Preview fully specified in Core Rules + AC + UI Requirements; view-only inventory, Boss loss, mandatory commitment all have AC coverage; BaseHp floor correctly at data-load layer. One new blocking item found: Fantasy line 37 (Into the Breach reference) said players see "level variants" but the opaque-variants design explicitly withholds this. Fixed by revising reference to accurately describe Geometry TD's model (player sees node types, variant revealed at node). Minor recommended fix to completedLoopCount cap description also applied.
**Prior verdict resolved**: Yes — 6th-review blocking items confirmed resolved; new Fantasy/documentation issue fixed.
## Review — 2026-04-30 — Verdict: NEEDS REVISION (sixth review)
**Scope signal**: M
**Specialists**: game-designer, systems-designer, economy-designer, qa-lead, ux-designer, creative-director
**Blocking items**: 4 | **Recommended**: 7
**Summary**: Sixth review found 4 blocking items: (1) Level variant opacity — node cards show only type/index with no characterization of the two level-variant choices; contradicts Into-the-Breach reference which requires complete information at choice time; (2) Next Node Preview mandated in UI Requirements but has no Core Rules/state machine definition — spec gap; (3) 3 explicit behaviors missing AC coverage: view-only inventory constraint, Boss loss withholding BossLevelGold, "This Path Cannot Be Undone" as mandatory (not flavor) text; (4) BaseHp floor documented at wrong layer (data load vs resolve-time). Creative director synthesis concluded: node system architecture is sound; blocking items are spec gaps and one core design contradiction (variant opacity). Prior P0 items (BossEffectiveHp, nodesCompleted range, completedLoopCount cap, variable tables) confirmed resolved.
**Prior verdict resolved**: Yes — fifth MAJOR REVISION NEEDED addressed; new issues were variant opacity, missing ACs, spec gap on Next Node Preview.
@@ -0,0 +1,16 @@
# progression.md — Review Log
## Review — 2026-04-30 — Verdict: APPROVED (second review — all blocking items addressed in-session)
**Scope signal**: XL
**Specialists**: lean review
**Blocking items**: 0 (all 6 addressed in-session: runStats/LifetimeStats/UnlockResult schemas added; Fantasy gold-cap contradiction resolved; dependency statuses updated; Green pool always-available explicitly documented; getter ACs added)
**Recommended revisions**: 7 (all addressed in-session)
**Summary**: Second review verified all 6 blocking items from first review were addressed in-session. Schemas added (RunStats with 9 fields, LifetimeStats with 10 fields, UnlockResult and UnlockedEventArgs); Fantasy "nothing earned is ever lost" contradiction resolved with gold cap note; dependency statuses corrected to Approved/Designed; Green pool always-available documented in SR5 and tuning table; 6 getter ACs added. All 7 recommended items also addressed. Cross-GDD MaxPlayerGold ownership noted as owned by shop.md.
**Prior verdict resolved**: Yes — all 6 blocking items addressed.
## Review — 2026-04-30 — Verdict: NEEDS REVISION (first review)
**Scope signal**: XL
**Specialists**: lean review (no delegation — significant structural issues found)
**Blocking items**: 6 | **Recommended**: 7
**Summary**: First review found 6 blocking items: (1) `runStats` schema not defined — `RecordRunEnd()` primary interface has no field definition; (2) `LifetimeStats` schema not defined — SR1/SR7 reference fields not formally specified; (3) MaxPlayerGold directly contradicts Fantasy ("nothing earned is ever lost" vs 9999 cap that discards excess) — cross-GDD issue also flagged in cross-review 2026-04-29; (4) Dependency table stale — Node System "In Review" (now Approved), Shop "In Design" (now Designed); (5) Green component pool foundation not explicit — `poolUnlocked(Green, ...)` always returns true on Normal but this was implicit, not documented; (6) Getter methods (`GetUnlockedDifficulties`, `GetUnlockedThemes`, `GetLifetimeStats`, etc.) have zero AC coverage despite being the system's public interface. Recommended: `ProgressionData` struct, `UnlockResult`/`UnlockedEventArgs` schemas, StarterPack example naming, `nodesCompleted` range clarification, default loadout selection behavior, `MaxPlayerGold` ownership reference to shop.md.
**Prior verdict resolved**: N/A (first review)
+16
View File
@@ -0,0 +1,16 @@
# shop.md — Review Log
## Review — 2026-04-30 — Verdict: APPROVED (second review — all blocking items addressed in-session)
**Scope signal**: M
**Specialists**: lean review
**Blocking items**: 0 (all 3 addressed: Pillar placeholder removed and defined as "run-level economy"; duplicate component exclusion mechanism specified via `excludedConfigIds` HashSet passed to BuildShopGoods; dependency statuses updated to Approved/Approved)
**Recommended revisions**: 3 (all addressed in-session: Tower sell price formula clarified; sell rounding convention noted; Open Question 2 resolved since Node System Approved — 2 shops per run confirmed)
**Summary**: Second review verified all 3 blocking items from first review addressed in-session. Duplicate component exclusion specified as `BuildShopGoods(excludedConfigIds: HashSet<ConfigId>)` mechanism with run-scoped tracking. Open Question 3 moved from OPEN to RESOLVED. Open Question 2 updated to RESOLVED with confirmed 2-shop-per-run structure. Tower sell price formula now explicitly describes rarity-tier lookup per component. Pillar defined as "run-level economy." Shop GDD is now fully implementable.
**Prior verdict resolved**: Yes — all 3 blocking items addressed.
## Review — 2026-04-30 — Verdict: NEEDS REVISION (first review)
**Scope signal**: M
**Specialists**: lean review
**Blocking items**: 3 | **Recommended**: 3
**Summary**: First review found 3 blocking items: (1) Status header Pillar is a placeholder "[To be designed]"; (2) Open Question 3 (duplicate component exclusion) was explicitly marked as an implementation gap — the GDD specifies the behavior but code does not implement it; (3) Stale dependency statuses (Node System shows no status, Progression shows "Not yet designed" when both are Approved). Recommended: clarify Tower sell price formula (currently references component objects rather than rarity-tier lookup), note sell-price rounding convention difference from Tower Assembly, update Open Question 2 since Node System is now Approved and shop frequency is known (2 shops per run: Node 4 White/Green only, Node 8 all tiers).
**Prior verdict resolved**: N/A (first review)
@@ -0,0 +1,9 @@
# design/gdd/tag-system.md — Review Log
## Review — 2026-04-30 — Verdict: APPROVED (first review)
**Scope signal**: S
**Specialists**: lean review
**Blocking items**: 0
**Recommended revisions**: 0
**Summary**: Tag System GDD written to unblock Tower Assembly GDD (G-W1 from cross-GDD review). Defines TotalStack semantics: Fire scales linearly with stack count (DOT damage), all other launch tags (Ice, Crit, Execution, Shatter) are binary on/off, Inferno/AbsoluteZero are pure amplifiers requiring their base tags. Fire MaxEffectiveStack cap = 3 documented. Tower Assembly dependency direction also fixed in-session (C-W1). All GDDs are now cross-consistent.
**Prior verdict resolved**: N/A (first review)
@@ -0,0 +1,32 @@
# tower-assembly.md — Review Log
## Review — 2026-04-30 — Verdict: APPROVED (third review, post-fixes)
**Scope signal**: S
**Specialists**: game-designer, systems-designer, qa-lead, creative-director
**Blocking items**: 1 (Edge Cases line 199 stated RoundToInt but code uses FloorToInt — corrected)
**Recommended revisions**: 4 (Fantasy line 20 reworded to remove node-type-coupling implication; tag TotalStack claim softened to "occurrence count"; 9 new ACs added covering null/empty tag arrays, duplicate tower IDs in ReduceTowerEndurance, non-existent tower/component disassemble failures, and full roster add/remove coverage)
**Summary**: Third review found all second-review blocking items resolved. One new blocking item identified: stale RoundToInt reference in Edge Cases (line 199) contradicting FloorToInt in formula section, ACs, and code. Fixed. Recommended revisions also applied. Creative-director synthesis: GDD is well-structured, VFX/audio specs thorough, state tables complete, core design sound. Integer overflow latent bug and missing ACs judged theoretical/non-blocking. R7/Fantasy tension resolved in creative-director's favor — no affinity rules needed.
**Prior verdict resolved**: Yes — RoundToInt documentation error (line 199) addressed; Fantasy line 20 reworded; 9 ACs added; tag claim softened.
## Review — 2026-04-30 — Verdict: APPROVED (fourth review — dependency direction + boss fantasy + tag system fixes)
**Scope signal**: S
**Specialists**: lean review
**Blocking items**: 0 (all prior items resolved)
**Recommended revisions**: 0
**Summary**: Fourth review verified all remaining warnings resolved: (1) Dependency direction fixed — Node System removed from upstream dependencies, Tag System added as hard upstream; (2) Tag System GDD now exists and defines TotalStack semantics; Tower Assembly §3 updated to reference it; (3) Boss fantasy line 22 revised to reflect kill-speed pressure; (4) C-W2 (loss-gold AC gap in node-system.md) fixed in parallel. GDD is internally consistent, all formulas verified, cross-system dependencies correct. All 7 systems now approved.
**Prior verdict resolved**: Yes — all 4 warnings from cross-GDD review (C-W1, C-W2, G-W1, G-W5) addressed.
## Review — 2026-04-30 — Verdict: NEEDS REVISION (second review, post-fixes)
**Scope signal**: M
**Specialists**: game-designer, systems-designer, qa-lead, creative-director
**Blocking items**: 0 after revision (6 addressed: TryDisassembleTower implemented; Fantasy contradiction resolved by text revision; rarity formula changed to Floor; array length contract documented; stat floor added; Tag stacking redefined as multiplier)
**Recommended revisions**: 7 (all addressed)
**Summary**: Second review found that all 6 prior blocking items were addressed: (1) TryDisassembleTower now implemented; (2) R3/Fantasy contradiction resolved by revising Fantasy text to reflect free disassembly; (3) Rarity formula changed from Round to FloorToInt, eliminating .5 boundary ambiguity; (4) Array length contract documented as data-authoring constraint; (5) Stat floor added (Max(0, ...)); (6) Tag stacking semantics redefined as multiplier. Additionally, 6 missing ACs added, AC1 split into 5 sub-ACs, AC12 quantified, and Open Question 2 clarified as intentional design decision with dead-end state documented.
**Prior verdict resolved**: Partial — items 1, 2, 4, 5, 6 from first review addressed. Item 3 (rarity index formula) was already resolved by code verification.
## Review — 2026-04-30 — Verdict: NEEDS REVISION (first review)
**Scope signal**: M
**Specialists**: game-designer, systems-designer, qa-lead, creative-director
**Blocking items**: 6 | **Recommended**: 6
**Summary**: First review of tower-assembly.md found 6 blocking items: (1) TryDisassembleTower referenced in R3 but not implemented; (2) R3/R6 contradiction on 0-endurance component disassembly; (3) Rarity index formula `(int)R - 1` needs verification against actual RarityType enum (1-based vs 0-based); (4) Degraded component state has no defined exit path (repair is out-of-scope); (5) Missing AC for assembly attempt with 0-endurance component; (6) Missing AC for disassemble attempt on degraded tower. Creative director synthesis: strong creative vision, excellent VFX/audio specs, core loop solid. Critical issues are implementation gaps and state machine completeness, not fundamental design flaws.
**Prior verdict resolved**: N/A (first review)