Four-round workshop (Gestalt, Tyre, Paula, Burnelli-Sheldon, Miri) mapping the full generation pipeline from planetary heightmap to walkable tile. 25 D-records produced. Ticket dependency chain for Tier 0-4 implementation identified. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
22 KiB
title, description, type, status, workshop, agent, round, created
| title | description | type | status | workshop | agent | round | created |
|---|---|---|---|---|---|---|---|
| Round 1 Notes — Generation Cascade Workshop | Compiled Round 1 inventory: consensus, disagreements, gaps, open questions, and consolidated pipeline layer table | workshop | active | generation-cascade | qatux | 1 | 2026-04-30 |
Generation Cascade Workshop — Round 1 Notes
Compiled by: Qatux
Source files:
docs/workshops/generation-cascade/gestalt-round1.mddocs/workshops/generation-cascade/tyre-round1.mddocs/workshops/generation-cascade/miri-round1.md
Summary Verdict (All Three Agree)
The pipeline has a hard operational cliff at Layer 5 (atlas markers). Every layer above it is working production code. Every layer below it is either missing entirely or compiled stub types with no generation logic. The architecture is well-designed on paper; zero generation code exists. This is not a design workshop — it is an implementation audit with clear blockers.
Consensus Points
1. Pipeline cliff location
All three participants independently arrived at the same finding: the atlas pipeline (galactic definitions → planetary heightmaps → city placement → city naming → economics) is complete and working. The cliff is between the atlas output and the first runtime layer (city → district decomposition). Everything below is unimplemented.
- Gestalt: "The atlas is the last fully-working pipeline layer."
- Tyre: "The pipeline has a hard cliff at Layer 5. Everything above it is working production code."
- Miri: (concurs, layered audit confirms all atlas layers as DONE)
2. WorldTier enum mismatch — hard blocker
Both Gestalt and Tyre independently flagged the same bug:
// Current code (generator.rs):
enum WorldTier { Peripheral, Connected, Core }
// Workshop-locked values (lead decision L-3, workshop-outcomes.md):
enum WorldTier { Epicenter, Regional, Backwater, Passage, Waypoint }
- Gestalt: "This is a blocker. #899 cannot be implemented correctly against the current enum."
- Tyre: "These are incompatible. The workshop canonical values must replace the current enum before the generation spike begins."
Miri did not independently flag this bug (worldbuilder scope did not include code audit of enum values) but it is corroborated by both technical participants.
3. City → District decomposition is missing and has no ticket
All three participants confirmed this layer is entirely absent — no design, no code, no types, no ticket. It is the first unlock for all downstream work.
- Gestalt: Layer 6 in her inventory. "No ticket formally covers this. #899 assumes this decomposition as a prerequisite but does not scope it."
- Tyre: Layer 5 in his inventory. "This is the first gap in the entire pipeline... The
DistrictContexttype onDistrictSkeletonispub type DistrictContext = String." - Miri: Confirms the city marker schema is insufficient for Phase 1 input (see Gap 3 below).
4. Phase 1 DistrictSkeleton — types compile, zero generation logic
All three confirmed the DistrictSkeleton struct compiles but every field requiring actual content or logic is a pub type Foo = String alias.
Fields confirmed as String stubs (Tyre inventory): DistrictContext, SocietyProfileRef, ZoneDefinition, DistrictBoundaries, GuaranteeAuditResult, CorridorSpine, ChunkLayout, Era, EraModification, LandmarkSlot, AccessPoint.
5. Phase 2 ChunkData tile generation — entirely missing
All three confirmed Phase 2 does not exist. GeneratorChunkData = Vec<bool>. No tile vocabulary (TileId = String). No code to fill a 64×64 tile grid from a BlockSkeleton.
- Tyre: "The heritage grammar overlay system does not exist as Rust code or TOML data."
- Gestalt: "There is no pipeline from DistrictSkeleton → actual walkable tile data."
6. Triangle system is more complete than the brief indicated
Both Gestalt and Tyre noted that the workshop brief labels triangle.rs as "stubs" — this is inaccurate. The file is substantially implemented production code.
- Gestalt: "The triangle system (
server/src/simulation/triangle.rs) is substantially implemented — template schemas, triangle escalation tick system, NPC spawn patterns. Intra-template (#107) and cross-template (#108) triangle generation are both done." - Tyre: "Layer 9 — Social Site Templates and Triangle System: DONE (runtime system, not wired to generator output)."
The gap is not the triangle system itself but the connection from DistrictSkeleton.social_sites template tags to runtime TemplateOwnership component spawning.
7. chunk_streaming.rs — architecturally ready, generator hookup is zero
Both technical participants confirmed the streaming system is sound and tested. The gap is purely that WalkabilityMap::load_chunk() creates blank walkable placeholders rather than calling any generator.
- Tyre: Architecture is sound.
load_chunk()needs steps 1–4 (chunk → district lookup → skeleton → Phase 2 fill) added. None exist. - Gestalt: "The system is ready for the generator hookup; it just needs the generator to exist."
8. #619 and #694 are not generation-dependent
Both Gestalt and Tyre independently reached the same position: character customization (#619) and character creation screen (#694) are Phase 4 work (Player Control Scheme, hand-authored 2-floor test map) and should not be formally blocked behind the generation pipeline.
- Gestalt: "These should NOT be formally blocked behind generation pipeline work. The player needs to look like something before the world needs to be generated."
- Tyre: "#619 and #694 can proceed... Phase 4, same rationale."
Miri did not address these tickets but noted "#694 Character creation screen — no generation pipeline dependency flagged."
9. #681 needs a stronger generation blocker
All three participants agreed (directly or by implication) that #681 (Apartment generator) requires a formal blocker behind Phase 1 district skeleton generation.
- Gestalt: "add formal blocker on #681 behind Phase 1 district skeleton working."
- Tyre: "#681 — Needs walkable generated world (Layers 5-8 complete). Should be explicitly blocked."
- Miri: Notes that #681 can produce a culturally-voiced apartment without heritage grammar, but a spatially differentiated apartment requires HeritageGrammarOverlay (Gap 2). Proposes two-pass sequencing: first pass against culture RON, second pass when overlay data exists.
10. NPC generation spike exists but is not production code
Tyre found server/src/bin/generator_spike.rs (Sprint 25) — a standalone binary that generates NPCs from ZoneSpec + CultureProfile. It is not wired to ECS or to the spatial pipeline.
- Tyre: "It is a standalone binary that bypasses ECS entirely... Its output is printed to stdout, not spawned into the ECS world."
- Gestalt: Did not independently identify the spike binary, but notes the NPC system as a "wiring problem, not a design or implementation gap."
Disagreements
Disagreement 1: Dev-day estimates for thinnest vertical slice
| Participant | Estimate | Breakdown |
|---|---|---|
| Tyre | ~9 dev-days | WorldTier fix (0.5) + city decomp (2) + Phase 1 stages 1-2 (3) + missing struct fields (0.5) + Phase 2 minimal (2) + streaming wiring (1) |
| Gestalt | ~5–7 dev-days | WorldTier fix (0.5) + Layer 6 stub (0.5) + Phase 1 minimal (2) + Phase 2 minimal (2) + wiring (1) |
Source of discrepancy: Tyre's Phase 1 estimate (3 days) cites the workshop-outcomes.md estimate directly. Gestalt's Phase 1 estimate (2 days) uses a "minimal" scope that defers social sites, reservations, and guarantee audit entirely. Tyre also includes a separate line item for missing DistrictSkeleton fields that Gestalt folds into Phase 1. Neither estimate includes heritage grammar, NPC population, or guarantee audit — both agree those are outside the minimum slice.
No position has been locked. The discrepancy is ~2–4 days and will need resolution in Round 2.
Disagreement 2: Whether #615 (Tycoon starting state) is generation-dependent
| Participant | Position |
|---|---|
| Tyre | #615 should be blocked behind generation pipeline completion. "#615 Tycoon small business starting state — Needs walkable generated world." |
| Gestalt | #615 is content design, not generation-dependent. "Game content design, not generation-dependent." It feeds #681 but is not itself blocked by generation work. |
Miri did not take a position on #615's cascade placement.
Note: Both agree that #615 is a real dependency of #681 (apartment generator). The disagreement is whether #615 should itself be blocked behind generation pipeline completion, or whether it can proceed in parallel as content design work.
Gaps — Items Raised by Fewer Than All Three Participants
Gap A: Content gaps raised by Miri alone (not addressed by Gestalt or Tyre)
Miri audited the content inputs required by each pipeline layer. These gaps are orthogonal to the code gaps Gestalt and Tyre identified. All four are blocking at their respective layers.
Gap A1 — Heritage root blend specification (CRITICAL, blocks Phase 1 social stage)
No authored document establishes which heritage root blend applies to any system. The SocietyProfileRef stub cannot be resolved without this mapping.
- Proposed solution (Miri): Extend culture RON schema with
heritage_blendfield, or author a globalheritage-map.ron. Provides Van Maanen's Star estimate: Iron(0.4), Stone(0.35), Tide(0.25). - Existing
culture-van-maanens-star.ronprovides NPC voice/behavior data but does NOT include heritage root blend weights.
Gap A2 — HeritageGrammarOverlay data files (CRITICAL, blocks Phase 2)
The full specification for all 10 heritage roots exists in miri-round4.md §OQ-R4-D. No heritage_grammar_overlay/*.ron files have been authored. No HeritageRoot enum exists in generator.rs. No ObjectTag vocabulary exists.
- Miri: "This is the largest cultural content gap in the pipeline." The specification is complete; the work is translation from workshop spec to authored data.
- Content authoring path: Miri authors organizational/social principles → Araminta authors visual expression → both co-maintain
ObjectTagvocabulary.
Gap A3 — City marker schema insufficient for Phase 1 (MODERATE)
Current markers.json city entries contain: id, name, kind, center, population. Ticket #899 references primary_function, planet_class, settlement_pattern as Phase 1 inputs — these fields do not exist.
- Tyre identified the missing coordinate translation (atlas pixel → sim tile) as a separate problem but did not raise the functional field gap.
- Miri raised two possible resolutions: (a) extend markers.json schema, or (b) derive fields from systems.db cross-reference. Designates this as a joint Miri/Tyre question.
Gap A4 — Zone identity definitions for all DistrictType values (MODERATE)
ZoneDefinition = String stub. The DistrictType enum has 9 values. Only 2 Van Maanen's Star zone files exist (van-maanens-star-rural-zone.ron, van-maanens-star-industrial-zone.ron). No coverage for LogisticsHub, Administrative, Entertainment, MixedUse, Transit, Specialized.
Gap B: Atlas coordinate system translation (Tyre only)
Tyre identified a specific unresolved technical gap not mentioned by Gestalt or Miri:
"Atlas coordinates are (row, col) in a 512×256 pixel grid. A district is 512×512 sim tiles = 256×256 visual tiles = 256m. The ratio between atlas pixels and sim tiles is undefined and unimplemented."
This is a prerequisite for the city → district decomposition layer. No translation formula or specification exists.
Gap C: Missing DistrictSkeleton fields (Tyre only)
Tyre identified three fields present in the workshop spec (workshop-outcomes.md) that are absent from the current DistrictSkeleton struct in generator.rs:
vertical_structure: VerticalStructure(D-READY-11)breach_only_zones: Vec<ZoneId>(Tier 2 guarantee audit)derived_analysis: DerivedDistrictAnalysis(Phase 1 computed, Miri/Gestalt source)
Gestalt did not independently identify these missing fields. Tyre estimates 0.5 dev-days to add them as stubs.
Gap D: Van Maanen's Star naming ambiguity (Miri only)
Miri flagged a wiki documentation inconsistency: "Van Maanen's Star" is associated with two system entries (GJ-35/Vuurkloof — the real-astronomy white dwarf; GJ-280B/Sova — the K-type system with Station Sova). The culture RON file culture-van-maanens-star.ron is validated and correct. The naming ambiguity is a wiki gap, not a content error.
- Miri's reading: Vuurkloof is the founding culture; Station Sova is where that culture manifests in the current setting. A formal
wiki/cultural-groups/van-maanens-star.mdentry would close this. - Neither Gestalt nor Tyre addressed this; it is a worldbuilding/documentation item.
Gap E: Economics → generation bridge design (Gestalt only)
Gestalt identified the economics layer as rich and immediately usable as a district generation input, but no such bridge code exists. Proposed principle:
"Economics drives district type; culture drives zone palette; both come from systems.db data that already exists."
Gestalt proposed Layer 6 (city → district decomposition) as the natural integration point. Neither Tyre nor Miri addressed this bridge design in their Round 1 files.
Open Questions
All open questions raised across the three Round 1 files, attributed to source:
| ID | Question | Source | Priority |
|---|---|---|---|
| OQ-R1-A | Heritage root count: 7 (Mellanie's culture authoring guide) vs. 10 (Miri Round 4). Which is canonical? Must be resolved before HeritageGrammarOverlay files can be authored. | Miri | CRITICAL |
| OQ-R1-B | SocietyProfileRef resolution: culture RON filename (e.g. "van-maanens-star") or structured reference including heritage blend weights? Affects both the type definition and the culture RON schema. |
Miri | CRITICAL |
| OQ-R1-C | City marker schema: does Phase 1 read primary_function / planet_class / settlement_pattern from markers.json entries (requires atlas generator update), or derive from systems.db cross-reference by position (requires lookup code)? |
Miri + Tyre | HIGH |
| OQ-R1-D | Atlas coordinate translation: what is the mapping formula from atlas pixel coordinates (512×256 grid) to world sim-tile coordinates (512×512 per district)? No spec or code exists. | Tyre | HIGH |
| OQ-R1-E | Thinnest vertical slice effort: Tyre estimates ~9 dev-days; Gestalt estimates ~5–7. What is the minimum Phase 1 scope (does it include Stages 3–5, or Stages 1–2 only)? | Gestalt + Tyre | HIGH |
| OQ-R1-F | #615 (Tycoon starting state) cascade position: block behind generation pipeline (Tyre) vs. proceed as content design (Gestalt)? | Gestalt + Tyre | MEDIUM |
| OQ-R1-G | wiki/cultural-groups/ population timing: author now alongside heritage content (Gaps A1-A2), or defer to Phase 3? |
Miri | LOW |
| OQ-R1-H | Pre-workshop tickets (#100, #156, #160) were scoped before the confirmed architecture. Do they get re-scoped in this workshop or handled as separate post-workshop cleanup? | Gestalt | LOW |
Consolidated Pipeline Layer Table
Unified numbering across all three participants' inventories. Where participants used different layer numbers, this table uses a canonical sequence.
| Layer | Name | Gestalt | Tyre | Miri | Unified Status |
|---|---|---|---|---|---|
| 1 | Galactic / system definitions | DONE | DONE | DONE | DONE |
| 2 | Planetary heightmap simulation | DONE | DONE | DONE | DONE |
| 3 | Atlas markers — city placement, infrastructure | DONE | DONE | DONE | DONE |
| 4 | City naming (Gemma) | DONE | DONE | DONE | DONE |
| 5 | Economics layer — supply chains, brands, trade | DONE | (embedded L1) | DONE | DONE |
| 6 | City → District decomposition | MISSING | MISSING | MISSING (schema gap) | MISSING — CRITICAL. No ticket, no code, no design. |
| 7 | Phase 1: DistrictSkeleton generation | STUB | STUB | STUB | STUB — types compile, zero generation logic. WorldTier enum wrong. |
| 7a | — Stage 1: Classification (WorldTier, ComplexityTier, SettingType) | STUB | STUB | no design rules authored | STUB |
| 7b | — Stage 2: Block grid (DistrictLayoutMode, BlockSkeleton ×16) | STUB | STUB | no layout probability tables | STUB |
| 7c | — Stage 3: Reservations (MultiBlockReservation, terminals) | STUB | STUB | — | STUB |
| 7d | — Stage 4: Social sites + NPC (SocialSitePlacement, triangles) | STUB | STUB | 3/230+ culture files; no heritage blends | STUB |
| 7e | — Stage 5: Guarantee audit (GuaranteeAuditResult) | STUB | STUB | — | STUB (String alias) |
| 8 | Society profile / culture resolution | PARTIAL (#679 done, not wired to skeleton) | PARTIAL (spike binary only) | PARTIAL (3 RON files, no heritage blends) | PARTIAL — wiring gap + content gap |
| 9 | Phase 2: ChunkData tile generation | MISSING | MISSING | MISSING | MISSING — CRITICAL. No code, no tile vocabulary. |
| 10 | Heritage grammar overlay application | MISSING | MISSING | MISSING (no data files for any root) | MISSING — design complete (miri-round4.md spec), no Rust type, no data |
| 11 | NPC population / manifest seeding | PARTIAL (triangle system full; NpcManifest missing) | PARTIAL (spike, no ECS wiring) | PARTIAL (culture RON operational, no heritage blend) | PARTIAL — machinery exists, pipeline connection missing |
| 12 | Chunk streaming → generator hookup | STUB (streaming works; generator call is blank) | PARTIAL (load/unload works; fill is wrong) | N/A | PARTIAL — streaming architecture ready, generator call absent |
Key: Layer 6 and Layer 9 are the two critical missing gaps. Layer 7 has types but no logic. Layers 8, 11, 12 are partial with clear wiring gaps. Everything at Layer 10 is zero.
New Tickets Proposed — Summary by Participant
Gestalt's proposed new tickets
| Priority | Scope | Blocked by |
|---|---|---|
| Blocker | Fix WorldTier enum in generator.rs | #897 |
| Critical | Layer 6: City → District decomposition | None (after WorldTier fix) |
| Critical | Phase 2: Basic chunk tile generator | #899 |
| High | Connect chunk_streaming to Phase 2 generator | Phase 2 ticket |
| High | Wire society profile (#679) to DistrictSkeleton | #899 |
| Medium | Re-scope #156, #100 against confirmed architecture | Phase 2 ticket |
Tyre's proposed new tickets
| Priority | Scope | Effort | Blocked by |
|---|---|---|---|
| 1 | Fix WorldTier enum values in generator.rs | 0.5d | Nothing |
| 2 | City-to-district decomposition — spec and implementation | 2d | Nothing |
| 3 | DistrictSkeleton Phase 1 generator (Stages 1–2) | 3d | Tickets 1, 2 |
| 4 | Add missing DistrictSkeleton fields (vertical_structure, breach_only_zones, derived_analysis) |
0.5d | Ticket 3 |
| 5 | ChunkData Phase 2 minimal fill | 2d | Ticket 3 |
| 6 | Wire generator to chunk_streaming (DistrictMap resource + dispatch) |
1d | Tickets 2, 3, 5 |
Miri's proposed new tickets (content)
| Priority | Scope |
|---|---|
| Critical | Heritage root blend mapping — extend culture RON schema, author Van Maanen's Star blend |
| Critical | HeritageGrammarOverlay data files — 10 heritage roots from miri-round4.md spec |
| High | ObjectTag vocabulary — joint Miri + Araminta authoring |
| High | Zone identity definitions — one spec per DistrictType value |
| Medium | Van Maanen's Star cultural group wiki entry |
| Medium | City marker schema extension — coordinate with Tyre |
Existing Ticket Positions — All Three Participants
| Ticket | Title | Gestalt | Tyre | Miri |
|---|---|---|---|---|
| #615 | Tycoon small business starting state | Not generation-dependent; feeds #681 | Should be blocked behind generation pipeline | No position taken on cascade placement |
| #616 | Economic verb vocabulary design | Content design; no pipeline dependency | Can proceed | No pipeline dependency |
| #619 | Full character customisation | NOT generation-dependent; Phase 4 UI | NOT blocked by generation pipeline | No pipeline dependency flagged |
| #681 | Apartment generator (server) | Add Phase 1 skeleton as formal blocker | Should be blocked behind vertical slice | Can proceed for culturally-voiced version; heritage spatial refinement is a second pass |
| #682 | Apartment visual rendering (client) | Blocked by #681 — correct, no changes | Blocked by #681 | Blocked by #681 |
| #694 | Character creation screen | NOT generation-dependent; Phase 4 UI | NOT blocked by generation pipeline | No pipeline dependency flagged |
| #899 | District skeleton generator — Phase 1 | Correct scope; misses Layer 6 and WorldTier fix | Blocked by city decomp ticket + WorldTier fix | Blocked by #897 + heritage blend content |
For Round 2 Attention
The following items from Round 1 carry unresolved positions that Round 2 should address:
- OQ-R1-A (Heritage root count) — Must be resolved before any heritage content can be authored. Affects Miri and Araminta's work scope.
- OQ-R1-B (SocietyProfileRef type) — Affects both the Rust type design and culture RON schema. Tyre and Miri should align on this before #899 scoping.
- OQ-R1-C (City marker schema) — Joint Miri/Tyre decision. Determines whether
generate_atlas.pymust be extended. - OQ-R1-D (Atlas coordinate translation) — No participant proposed a formula. Tyre owns this technically.
- OQ-R1-E (Vertical slice scope and effort) — Gestalt and Tyre estimates diverge by 2–4 days. Agree on minimum Phase 1 stages in Round 2.
- OQ-R1-F (#615 cascade position) — Gestalt and Tyre disagree. Needs a position for the ticket dependency graph.
- Gap E (Economics → generation bridge design) — Gestalt proposed a design principle but it has no D-record candidate yet. Round 2 should decide whether this produces a D-record.
Notes compiled by Qatux from Round 1 source files. All positions attributed to their source participant. No editorial opinions added.