Crafting & Gear Identity GDD — Independent Design Review
Date: 2026-08-26
Target:design/gdd/crafting-system.md(post CD-GDD-ALIGN fixes)
Method: Three independent parallel reviewers — math/systems verification,
design-experience (explicitly told not to redo the pillar audit), structure &
cross-document consistency — synthesized by the session lead. Same-session
caveat (as with harvesting): authoring and review-orchestration happened in
the same session; independence rests on the reviewers being fresh subagents
with file-only context. Lesson from the harvesting review applied: every
reviewer's prompt carried the full sibling-doc reading list, and no reviewer
produced a wrong claim from missing context this time (the consistency
reviewer explicitly re-tested the prior Inventory rule-number pitfall and
confirmed both docs cite correctly).
Verdict: NEEDS REVISION — all findings applied same day (this file
records them). Panel: math NEEDS REVISION · design APPROVED WITH CONDITIONS ·
consistency APPROVED WITH CONDITIONS.
User fork rulings (2026-08-26): bronze TTK = text-honesty fix only
(value stays 1.4 provisional; OQ1 owns the variance-vs-punch trade);
AC-54 = live recompute (harvesting AC-28's shape), never a static literal.
What held up
31 of 32 cross-document citations verified (combat F5 tiebreak, Edge Cases 1/3/11/15, keep-everything, iron 2.2/0.35 endpoints; harvesting Edge Cases 1/9/20, Rule 8, ceiling 2.0, AC-28 shape; **Inventory Rule 6 atomicity — verified against the actual quick-spec, correctly numbered**; tide cycleIndex framing; art bible §5.4/§6.2/shape-hardening). Registry entries (3 gear items, 4 constants, fiber/timber/sinew maxStack 20 LOCKED) match the GDD field-by-field. AC-53/56/57/58/59 recompute exactly. AC/Edge-Case numbering clean (13b/19b/15b accounted). CD header claims (C1–C3, A1–A4) all traceable to body text. Knob ranges free of joint-constraint traps (craftTime 4.0 max vs warnCeiling 5 min; recipe ±50% ⊂ AC-54 bounds; pool floor 10 < safe-range 100). Probed non-finding: "commit can fail after the beat completes" — F1's authoritative re-sample happens before commit fires; the doc already closes it. F1's "all five gates" count correct. Edge Case 16's 9 rows → AC-40–47 many-to-one folding legitimate.
Findings and applied resolutions
CRITICAL
- C1 — AC-54's CI gate could not detect the failure it claims to guard (math). The gate was a static
24 ∈ [10, 50]literal; if harvesting's yields were retuned (e.g., halved → real haul ~82), 24 units becomes 29% of a session instead of ~15% and the gate still passes. Architecturally incapable of being the cross-system regression test it was described as. Applied (user ruling: live recompute): AC-54 respecified to pull harvesting's live constants at test time and assert a cost/haul ratio band (0.06–0.30; today 24/165 ≈ 0.145) — harvesting AC-28's shape, with an explicit "never a hardcoded literal" clause.
HIGH
- **H1 — "~165 low-end haul" is a 2-player combined figure misapplied to the solo new-friend framing** (math). Harvesting states ~165–275 explicitly as a 2-player-session total; no solo low-end figure exists in either doc. Applied: first-session check reworded party-scoped; the new-friend scene is priced separately by Cloth Garb alone (10 fiber ≈ two shore nodes at 9/node), which holds solo.
- **H2 — Bronze DM 1.4 already collapses combat's designed TTK variance at the locked value** (math).
round(28×1.4)=39: Rusher and Spacer flatten to flat 2-hit (designed 2–3 variance dies), Bulwark's engineered 112-HP 4-hit boundary becomes 3 — the exact "too high" failure mode combat's ownweaponBaseDamageknob names. The doc's "too high > ~1.5" claim self-contradicted its own locked example. Even 1.2 (→34) still flattens Rusher; the variance-preserving value may sit at/below the doc's own 1.1 "weightless" floor. Applied (user ruling: text-honesty only): F2 constraint checks corrected with the recomputed hit counts; the variance-vs-era-punch trade folded into Open Question 1 as an explicit Tier 1 lock decision — a trade to make knowingly, not a tuning accident. - **H3 — Player Fantasy reads as MVP-delivered when it is structurally unreachable at MVP** (design). 3 recipes known by all, identical 2 s crafts, fungible materials: nothing to specialize in; "Alex is basically our smith" has no MVP surface, and the deferral was only visible deep in Core Rules. Applied: MVP honesty clause added directly after the anchor-moment paragraph — MVP validates the mechanical skeleton (marks, atomic commits, permanence); the fantasy itself arrives with Tier 1.
- **H4 — The Base-Building-as-outlet claim (CD A4) is load-bearing on a doc that doesn't exist** (design). "The home-facing player's ongoing outlet at MVP is Base Building" — Base Building is Not Started in the systems index. Applied: new Open Question 9 requiring re-validation of this claim when Base Building's GDD lands (with the honest fallback: second outlet or admit an MVP home-facing dead zone); ⚑ pointer added at the CD A4 note.
- **H5 — Registry's generic
max_stack_clothconstant still said "placeholder"** (consistency), contradicting the three per-item LOCKED entries beside it; F4's "registry placeholder resolved" was overbroad. Applied: constant marked superseded/deprecated in favor of the per-item entries; F4 parenthetical narrowed to "per-item registry placeholders resolved". - **H6 —
entities.yamllast_updatedheader never credited the crafting entries** (consistency) — stale change-log forces the next auditor to grep rather than trust the header. Applied: header comment updated to credit both combat and crafting additions.
MEDIUM
- M1 — The gearing-up burst is queue-shaped (design). ~6–10 crafts × 2.0 s of locked stance back-to-back in session one; the knob table named the chore risk but nothing promoted it to a checkable question. Applied: new Open Question 10 — does "no queues" still produce a queue-shaped experience (stand-and-wait ×10)? First-friend-playtest watch item; lever is
craftTimeSeconds. - **M2 — Three structurally distinct F1 failure causes, one worked reason string** (design). No-station vs world-not-offered vs unaffordable all read as the same greyed row; AC-6 tested only one. Applied: Rule 3 now pins three distinct reason strings ("you need a Workbench" / "no land has offered copper yet" / "not enough fiber in reach"); new AC-6b requires each cause to produce a distinguishable string; UI Requirements updated.
- M3 — Reinforced Garb's "deep-band reward" pricing is unverifiable (math). Harvesting never splits sinew vs rare-fiber among its 6 deep nodes; 3-sinew reachability is unknowable. Applied: dependency flag on the Harvesting row — the split is a harvesting fix-pass item blocking AC-55's pricing claim from being checkable.
- **M4 — Bronze/leather DR delta vanishes at Bulwark's top damage under rounding** (math).
round(26×0.88)=23andround(26×0.78)=20both yield a 5-mistake budget — leather's "defense breakthrough" doesn't show up against the highest-stakes archetype (it does vs Rusher 8→9 and Spacer 6→7). Applied: folded into Open Question 1 — Tier 1's leather DR must be checked against all three archetype top damages after rounding, not headline percentages. - **M5 — Edge Case 13 cited "combat Edge Case 11's precedent" as mechanism when it's a principle match** (consistency) — threshold inclusivity there, event ordering here. Applied: reworded to name the shared player-favorable principle and the differing mechanism.
LOW (applied)
- Edge Case 16 gains two rows + criteria:
outputCount ≤ 0/ any inputcount ≤ 0→ loud reject (the item-destroying inverse of the free-item exploit),stationRange ≤ 0→ loud reject (AC-47b/AC-47c; coverage note updated) (math L1). - F3 gains the theoretical drain floor: 300 landed swings ≥ 75 s of pure attack-phase time at combat's 0.25 s cycle — a paper sanity bound so a wildly wrong pool is caught before Tier 1 playtest (math L2).
- Rule 9's "habit-building" claim softened: free + instant + mechanically invisible builds no habit; MVP durability seeds the wear-state visual grammar and gives repair a home before it has teeth (design L1).
- UI Requirements: progress fill vanishes with the stance break — no drain-back, no confirmation, matching the true no-op (design L2).
- "Detailed Design" vs "Detailed Rules" resolved project-wide (consistency L1): all four GDDs uniformly use "Detailed Design" — the rule files were the drifted artifact.
design-docs.md,design/CLAUDE.md, andcoding-standards.mdupdated to match practice. Closes the item deferred by both the combat and tide reviews. - "Rule 3b" citation style normalized to "Rule 3, clause (b)" (consistency L2).
Confirmations (tracked against siblings, not this doc)
- Combat and Harvesting still lack the durability-event provider rows — crafting discloses this honestly as their fix-pass items; both siblings are non-compliant with the bidirectionality rule until those land.
Conditions carried forward
- Combat + Harvesting fix-passes: durability-event provider rows (already queued) **plus (new, M3): harvesting must state the sinew vs rare-fiber split among its 6 deep-band nodes** — AC-55's pricing claim is unverifiable until it does.
- Base Building GDD (next): must re-validate the CD A4 outlet claim (OQ9) — its MVP scope needs to actually produce multiple sessions of home-facing activity, or crafting's dry-period argument needs rework.
- Tier 1 ladder lock (OQ1, expanded): bronze TTK-variance-vs-punch trade decided knowingly; leather DR checked against rounded mistake budgets at all three archetype top damages.
- First friend playtest: OQ10 (queue-shaped gearing-up burst) joins the existing watch list.
/ux-design: three distinct era-gate reason strings (M2) join the aggregation ban (CD C2) as binding inputs.