Design Re-Review: Base Building — 2026-08-27
Document reviewed:
design/gdd/base-building.md(1060 lines at review time, status "Revised per independent /design-review 2026-08-27; pending re-review")
Review mode: full (7 specialist agents + creative-director senior synthesis), fresh session
Re-review: Yes — prior verdict NEEDS REVISION, 2026-08-27 (base-building-review-2026-08-27.md)
Specialists consulted: systems-designer, qa-lead, network-programmer, game-designer, ux-designer, unity-specialist, economy-designer
Senior reviewer: creative-director
Verdict: NEEDS REVISION (narrow — 3 change-sets, all applied same day)
All five prior blocking change-sets plus the editorial pass landed and hold. What remained was a short set of defects the fixes themselves introduced. Twelve "BLOCKING" claims came back from specialists; the creative-director ruled three genuinely blocking and downgraded the rest to recommended (all of which were also applied).
Completeness: 8/8 sections present
Dependency Graph
- ✓ crafting-system.md · ✓ tide-scheduler.md · ✓ inventory-hauling-2026-08-26.md
- ✓ save-persistence-2026-08-26.md · ✓ art-bible.md · ✓ land-dock-undock-2026-08-27.md
- Cross-refs verified: harvesting exports all three constants by name; crafting's
stationRangerow carries the BB double-duty warning; crafting OQ9 cites the ruling; save Rule 5 invokes BB's relic predicate; LDU Rule 8 owns the socket re-check.
Prior blocking items — status
| Item | Status |
|---|---|
| BL-1 constants exist | RESOLVED — but exported 70/120 did not derive (see CS-2) |
| BL-2 joint safety | RESOLVED (policy statement; corners recomputed correct) |
BL-3a noPlayerOccupancy | RESOLVED mechanically — ruling reframed (CS-3) |
| BL-3b EC20 material-only / EC22 spatial | RESOLVED — solo-host hole (CS-3) |
| BL-4 AC cluster | RESOLVED — AC-53/54 label mismatch remained (rec.) |
| BL-5 mocked disconnect | RESOLVED |
| Rule 11 split; Rec #1–#7, #9, #10; Axis 1/3 | RESOLVED |
| Rec #8 shore AC-63b | NOT resolved as claimed — bound to undefined artifact (CS-2) |
Required Before Implementation — 3 change-sets (applied)
- CS-1 [systems-designer] Refund exception not propagated. F2 made relics refund zero while Rule 9, the Tuning Knobs lock-list, and AC-32 asserted "never partial" universally; EC22 leaned on "zero refund banned by Rule 9" as load-bearing reasoning. Fix applied: one exception clause propagated to Rule 9 / lock-list / AC-32; "banned by Rule 9" struck from EC22.
- CS-2 [qa-lead + economy-designer] Two constants that don't exist / don't derive — BL-1's failure class recurring inside BL-1's fix.
- AC-63b + EC17 quantified over "tide-deposit landing cells"; tide Rule 9 defines deposit as a runtime "nearest home shoreline" — no static artifact. **Fix applied (user decision)**: LDU Rule 8 authors a per-socket
depositPoint; tide Rule 9 / EC1 / AC-23 deposit there; AC-63b validatesdist(socket, depositPoint) ≤ socketNoBuildRadiuson plain data. - Harvesting's
mixedHaulTimberPerSessionLow/High70/120 did not follow from its stated derivation (165–275 × 35–50% = 58–138); 240/58 = 5 sessions fails the 2–4 gate; 70 cleared it with zero margin. **CD ruling: shrink the anchor, do not re-derive the constant, do not widen the band. Fix applied (user decision)**: harvesting constants → 58/138 with derivation shown and party scope named; BB perimeter anchor 60 → 50 segments (perimeterSegmentsknob, 200 timber: 200/138 → 2, 200/58 → 4), marked provisional pending the home-island spatial budget; minimal shelter 30 → 25. - **CS-3 [network-programmer + unity-specialist + game-designer] EC21/EC22 enclosure cluster.** (a) Under owner-authoritative NetworkTransform the host's copy of a remote position is one RTT stale on every commit —
noPlayerOccupancyis best-effort by construction and the correction is the real guarantee; EC21 said the reverse and "host-known player position" was undefined. (b) "Nearest free adjacent cell" had no search order, tie-break, or enclosed fallback, and is a grid BFS, not a physics push. (c) **CD ruling on solo enclosure: add an F1 self-enclosure conjunct**, not accept-and-document — a solo host has no social exit and every mitigation is anti-pillar-banned. Fix applied: term defined; EC21 reframed with deterministic BFS (N/E/S/W tie-break, buildable+empty cells, reposition of the owner's own transform, enclosed → EC22); eighth conjunctplacerHasExit+ Edge Case 23 + reason string "that would wall you in"; AC-13/14 updated; netcode-ADR inputs expanded.
Recommended Revisions (all applied)
- Rule 13 "never cacheable" → host-side; UI "never disagree by construction" → identical predicate, not freshness; AC-39b (client may only request) added. [network]
- EC1: arrival order authoritative when distinguishable; ascending-ClientId is a tiebreak only. [network]
- "Non-build action" enumerated via Input System action maps; picker visible only in BuildMode. [ux]
- AC-53/54 → [UNIT] (CD sided with qa-lead); AC-20c mutual exclusion only;
validTerrainown [UNIT] case; AC-9 wording. [qa] - AC-33 → command-interface implementers +
.inputactionsasset; AC-25 deferred until/ux-designDTOs; AC-41 shape-agnostic via Inventory's query interface; AC-44 names the interface. [unity] - Reason-string order rationale + min-display-duration/hysteresis as
/ux-designdeliverable; 11b tone trade-off named and linked to AC-48c drag-row. [ux/game-designer] - EC13 names patch-removal as a destructive economy event (mirrors EC14); relic visual as pre-commitment signal. [game-designer/economy]
- Chest-count bet folded into OQ11; OQ8 compounding cross-ref to OQ9/OQ1. [economy/gd]
- Stale "13–15" → "13–16"; stale Save forward-ref cleaned; async Addressables boot failure routed to the fatal-config state; non-allocating ghost evaluation note.
Specialist Disagreements (adjudicated)
- AC-53/54 label: qa-lead [UNIT] vs network-programmer "resolved as-is" → qa-lead.
- Solo enclosure: game-designer offered conjunct or document → conjunct.
- 70/120: economy offered re-derive / admit chosen / accept 5 sessions → none; shrink the anchor (user chose 50).
Senior Verdict [creative-director] — abridged
Three genuine blockers, all bounded; the rest recommended-tier. Q1, E1, S1, N4 are the exact failure class the first review named, recurring inside the fixes — a process finding, not an authorial one. Process note applied: revision-pass checklist added to .claude/skills/design-review/SKILL.md (cite every constant's source line; propagate every exception to every restatement; re-verify every "never"/"by construction" against edge cases that already accept violations; give every new mechanism a deterministic definition and fallback; re-check relabelled ACs against the taxonomy). Re-review CS-1–3 only; do not re-open the approved surface.
Scope Signal
Rough scope signal: M (down from L) — producer should verify before sprint planning.
Files changed by the revision
design/gdd/base-building.md, design/gdd/harvesting-system.md (constants 58/138), design/gdd/tide-scheduler.md (Rule 9, EC1, AC-23 → depositPoint), design/quick-specs/land-dock-undock-2026-08-27.md (Rule 8 authors depositPoint), design/gdd/systems-index.md, .claude/skills/design-review/SKILL.md.