docs(docs): generator architecture workshop — 5 rounds, 14 D-records
Complete workshop output for ticket #562. Establishes the procedural generator pipeline architecture for the 300-world model: two-phase generation (DistrictSkeleton + ChunkData), three-layer model (generator/simulation/delta), spatial hierarchy, MobileChunk spec, guarantee tier system, heritage grammar overlay, and damage overlay. Participants: Gestalt, Tyre, Miri, Araminta, Nigel, Ozzie. Rounds 1-4 (design) + Round 5 (review/corrections). Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,110 @@
|
||||
# Generator Architecture Workshop — Round 5: Nigel (Final Review)
|
||||
|
||||
**Date:** 2026-02-27
|
||||
**Role:** Replayability Advocate
|
||||
**Task:** Sign-off review of workshop-outcomes.md. Corrections only.
|
||||
|
||||
---
|
||||
|
||||
## Sign-Off Status
|
||||
|
||||
**SIGNED OFF** with two corrections required and two notes.
|
||||
|
||||
---
|
||||
|
||||
## Verification Checklist
|
||||
|
||||
**1. MobileChunk replayability guarantees — PASS WITH NOTE**
|
||||
|
||||
D-READY-13 correctly captures: vessels as persistent world entities, Docked state with dock_position, boarding via gangway, interior cache persisting crew state across voyages, departure schedule as required generator output (error state if missing). The stage+cast framing is correct.
|
||||
|
||||
Note: R-V-1 through R-V-6 are cited by reference only ("see round-4-notes.md §5"). This is acceptable if round-4-notes.md is preserved. For D-record durability, R-V-1 (≥50% variable manifest slots must differ between adjacent voyages) and R-V-3 (in-transit events are voyage-seeded, not vessel-seeded) are the two most critical for implementation correctness and should be verified to appear in the referenced section before filing.
|
||||
|
||||
**2. Minimum 3 NPCs for intra-seed replayability — PASS**
|
||||
|
||||
Explicitly stated: "Minimum NPC count for intra-seed replayability: 3 (one functional triangle). One NPC = maximum seed-to-seed variation, zero intra-seed emergence. Three NPCs = triangles, shifting alliances, cascade effects. Even Minimal-complexity insignificant districts need 3 NPCs." Correct and complete.
|
||||
|
||||
**3. RegenerationStrategy enum — PASS**
|
||||
|
||||
`LocalOverlay / SoftReseed / FullReseed` correctly maps in-playthrough / scenario-boundary / era-level. XOR prohibition for in-playthrough events is stated as a hard constraint and confirmed as lead decision L-7. The allowance of SoftReseed for scenario-boundary events is a valid nuance — the player was not present, so causal legibility is not required. Correct.
|
||||
|
||||
**4. DramaDensity as runtime state — PASS**
|
||||
|
||||
L-5 is explicit. The three-layer model correctly places `drama_density` under `SIMULATION STATE (runtime storyteller — NOT generator output)`. Not on DistrictSkeleton. Confirmed.
|
||||
|
||||
**5. Three-parameter model (WorldTier + ComplexityTier + DramaDensity) — CORRECTIONS REQUIRED**
|
||||
|
||||
Two separate issues found:
|
||||
|
||||
---
|
||||
|
||||
## Correction 1 — WorldTier Ceiling Conflict (Local)
|
||||
|
||||
The constraint table states:
|
||||
> "WorldTier → ComplexityTier ceiling: Core/Regional → Full max; **Local → Moderate max**; Transit → Minimal; Dormant → Empty."
|
||||
|
||||
The very next sentence states:
|
||||
> "A narratively critical backwater can be `WorldTier::Local + ComplexityTier::Full`."
|
||||
|
||||
These are directly contradictory. Local cannot simultaneously have a Moderate ceiling and an explicit Full-complexity example.
|
||||
|
||||
**Root cause:** The WorldTier enum description for `Local` includes "limited budget," conflating network significance (Local = low external connectivity) with simulation budget (which should be fully determined by ComplexityTier alone). WorldTier is about network position. ComplexityTier is about generator output depth. They are independent — this was the central Round 3 insight confirmed by all three participants.
|
||||
|
||||
The `Backwater + Full complexity` case is fundamental to the game's design ("Insignificance is a lens, not a verdict"). A dense, isolated community of 150 people who've lived together for 40 years can be as socially rich as any hub — it's just not connected to the wider network.
|
||||
|
||||
**Required fix — corrected ceiling table:**
|
||||
|
||||
| WorldTier | ComplexityTier ceiling |
|
||||
|-----------|------------------------|
|
||||
| Core | Full |
|
||||
| Regional | Full |
|
||||
| **Local** | **Full** |
|
||||
| Transit | Minimal |
|
||||
| Dormant | Empty |
|
||||
|
||||
Also remove "limited budget" from the `Local` enum comment. Budget is ComplexityTier's responsibility, not WorldTier's.
|
||||
|
||||
---
|
||||
|
||||
## Correction 2 — Missing ComplexityTier → DramaDensity Ceiling
|
||||
|
||||
The document states the first half of the constraint chain:
|
||||
> WorldTier constrains ComplexityTier ceiling ✓
|
||||
|
||||
But does NOT state the second half:
|
||||
> ComplexityTier constrains DramaDensity ceiling ✗ (missing)
|
||||
|
||||
This constraint is load-bearing. A `ComplexityTier::Empty` district has no NPCs, no social sites, no triangles. The storyteller cannot meaningfully activate drama in a district with no social fabric. Allowing the storyteller to set `DramaDensity::Flashpoint` on an Empty district is a bug category, not a design option.
|
||||
|
||||
**Required addition** — after the existing WorldTier → ComplexityTier ceiling table, add:
|
||||
|
||||
> ComplexityTier → DramaDensity ceiling: Full → any intensity; Moderate → Active max; Minimal → Quiescent max; Empty → Zero only (no storyteller activation possible).
|
||||
|
||||
(Using the 3-level enum values currently in the struct: Quiescent / Active / Intense.)
|
||||
|
||||
This does not change any other part of the document. It is a missing half of the stated constraint chain.
|
||||
|
||||
---
|
||||
|
||||
## Notes (Not Corrections, Not Blocking)
|
||||
|
||||
**Note 1 — DramaDensity enum naming (Q-NNN-d)**
|
||||
|
||||
Q-NNN-d flags Round 4 struct as Quiescent/Active/Intense (3 levels) vs. Round 3's Zero/Low/Medium/High/Flashpoint (5 levels). My preference is 5 levels for finer storyteller control. Specifically: the distinction between `High` ("this is the current narrative focus") and `Flashpoint` ("crisis actively destabilizing the world") is a categorically different gameplay state that should not collapse into a single `Intense` value. If 3 levels is chosen for implementation simplicity, I ask that Flashpoint be preserved as the distinct peak value — it is the storyteller's maximum-pressure instrument and deserves its own state.
|
||||
|
||||
This is a Q-record and sprint work. Flagging my position, not blocking.
|
||||
|
||||
**Note 2 — Q-NNN-b Resolution**
|
||||
|
||||
Q-NNN-b is listed as unresolved: "Departure schedule model — departure windows as generator output for docked vessels." But D-READY-13 already states: "`scheduled_departure: Option<SimTick>` field in Docked state satisfies this; the generator must populate it. Vessels without departure schedules are an error state." This appears resolved within the document. Recommend closing Q-NNN-b before sprint planning.
|
||||
|
||||
---
|
||||
|
||||
## Overall Verdict
|
||||
|
||||
The document correctly captures the workshop architecture. Two corrections must be applied before D-records are filed:
|
||||
|
||||
1. Local ceiling must be Full (not Moderate) — the backwater case is core design
|
||||
2. ComplexityTier → DramaDensity ceiling must be stated — it is half of the constraint chain
|
||||
|
||||
Everything else accurately reflects my Round 3-4 positions. The replayability architecture this document specifies will deliver: two players comparing the same world mod will have wildly different stories to tell.
|
||||
Reference in New Issue
Block a user