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:
2026-02-27 10:40:02 +01:00
co-authored by Claude Opus 4.6
parent 9332447c33
commit bfbe0d1b44
37 changed files with 14802 additions and 0 deletions
@@ -0,0 +1,470 @@
# Generator Architecture Workshop — Outcomes
**Workshop:** Generator Architecture (#562)
**Rounds:** 1 through 4
**Dates:** 2026-02-27
**Participants:** Gestalt, Tyre, Miri, Araminta, Nigel, Ozzie
**Compiled by:** Qatux
---
## Purpose
This document is the authoritative summary of the Generator Architecture workshop. It compiles all confirmed decisions, the canonical data structures, the D-record inventory, and the open questions remaining for sprint work.
The source documents are the four round notes files:
- `docs/workshops/generator-architecture/round-1-notes.md`
- `docs/workshops/generator-architecture/round-2-notes.md`
- `docs/workshops/generator-architecture/round-3-notes.md`
- `docs/workshops/generator-architecture/round-4-notes.md`
---
## Lead Decisions
These are decisions made or confirmed by the project lead (Jeroen) and are not subject to further team debate.
| # | Decision | Round confirmed |
|---|----------|-----------------|
| L-1 | The generator uses a **two-phase** architecture: Phase 1 (DistrictSkeleton, async background) and Phase 2 (ChunkData on-demand per chunk). | R2 |
| L-2 | Both **Grid and Organic** layout modes exist. The lead mandated "some blocks grid, some organic chaos." | R3 |
| L-3 | **WorldTier** wins over SignificanceTier as the field name on DistrictSkeleton. | R4 |
| L-4 | **Entity-carried MobileChunk** is core architecture. Vessels are persistent world entities with a Docked state. | R4 |
| L-5 | **DramaDensity** is runtime storyteller state. It does NOT appear on DistrictSkeleton. | R4 |
| L-6 | **Heritage grammar overlay** is base game content, not DLC. | R4 |
| L-7 | **XOR reseeding for in-playthrough events is prohibited.** `DamageOverlay` is the correct approach for all player-witnessed structural events. | R4 (unanimously confirmed) |
---
## Confirmed Architecture — Summary
### The Three-Layer Model
```
GENERATOR STATE (immutable after Phase 1)
├── Phase 1: DistrictSkeleton
│ ├── district_id: DistrictId (identity)
│ ├── seed: u64 (deterministic generation)
│ ├── district_type: DistrictType (classification)
│ ├── context: DistrictContext (world context)
│ ├── world_tier: WorldTier (simulation fidelity budget)
│ ├── complexity_tier: ComplexityTier (content budget)
│ ├── layout_mode: DistrictLayoutMode (Grid | Organic)
│ ├── setting: SettingType (terrain + environment type)
│ ├── blocks: [[BlockSkeleton; 4]; 4] (4×4 block grid)
│ ├── reservations: Vec<MultiBlockReservation>
│ ├── corridors: Vec<CorridorSpine>
│ ├── z_levels: u8
│ ├── vertical_structure: VerticalStructure (source: multi-participant)
│ ├── breach_only_zones: Vec<ZoneId> (source: multi-participant)
│ ├── social_sites: Vec<SocialSitePlacement>
│ ├── society_profile: SocietyProfileRef
│ ├── zone_palette: Vec<ZoneDefinition>
│ ├── boundaries: DistrictBoundaries
│ ├── access_points: Vec<AccessPoint> (district entries/exits)
│ ├── guarantee_audit: GuaranteeAuditResult
│ └── derived_analysis: DerivedDistrictAnalysis (source: Miri/Gestalt; Phase 1 computed)
└── Phase 2: PreparedDistrict (on-demand per chunk)
├── SocialSitePlacement (triangles with Vec<TrianglePurpose>)
├── NpcManifest (seeded from society_profile)
├── ZonePalette assignments (base + heritage modifiers)
└── ChunkMutations pending
SIMULATION STATE (runtime storyteller — NOT generator output)
├── DistrictRuntimeState.drama_density: DramaDensity
├── active_triangles: Vec<TriangleId>
├── npc_pattern_weights: NpcPatternWeightSet
└── assassination_difficulty on-demand computation
DELTA LAYER (post-generation)
├── DamageOverlay (LocalOverlay for in-playthrough events)
├── NpcRemoved / NpcStateChanged
├── AccessTierChanged
└── WorldStateDelta (composed from all active mutations)
```
### Spatial Hierarchy (D-094)
| Unit | Sim tiles | Visual tiles | Real meters | Purpose |
|------|-----------|--------------|-------------|---------|
| Chunk | 64×64 | 32×32 | 32m | Streaming unit |
| Block | 128×128 | 64×64 | 64m | Generator planning unit (4 chunks) |
| District | 512×512 | 256×256 | 256m | Simulation unit (4×4 blocks) |
### Phase 1 Generator Pipeline
```
Pre-Pipeline: system generation, WorldTier assignment, galaxy topology
↓
Phase 1: DistrictSkeleton
Stage 1: Classification (WorldTier, ComplexityTier, SettingType)
Stage 2: Block grid (DistrictLayoutMode, BlockSkeleton ×16)
Stage 3: Reservation (skyscrapers, terminals, MultiBlockReservation)
Stage 4: Social site + NPC (triangles, society profile, DerivedDistrictAnalysis)
Stage 5: Guarantee audit (3-tier conditional check)
↓
Phase 2: ChunkData (on-demand per player approach)
Heritage grammar applied at chunk fill time
↓
World State Layer: DamageOverlay + DeltaLayer overlay at render time
```
### Layout Mode
```rust
enum DistrictLayoutMode {
Grid,
Organic {
placements: [[BlockPlacement; 4]; 4],
},
}
struct BlockPlacement {
offset: (i16, i16), // ±16 sim tiles per axis
rotation_steps: u8, // 0–3 (15° increments; hard cap at 45°)
street_width_factor: f32, // 0.75–2.0 relative to standard
}
```
Hard technical constraint: maximum rotation is ±45°. This is non-negotiable — beyond 45°, tile-based pathfinding produces unacceptable movement artifacts. Organic districts produce the visual impression of curved streets through angular jogs and irregular setbacks, not smooth curves.
### WorldTier and ComplexityTier
```rust
enum WorldTier {
Epicenter, // Hub system. Full simulation, high faction pressure.
Regional, // Regional. 1–4 districts, partial full-budget.
Backwater, // Small community. 1 district. Network-insignificant, NOT budget-capped.
Passage, // Transit stop. Pass-through.
Waypoint, // Not simulated until player approaches.
}
enum ComplexityTier {
Full, // All spatial guarantees. Rich NPC population.
Moderate, // Tier 1 + partial Tier 2 guarantees. Moderate NPCs.
Minimal, // Tier 1 only. Sparse NPCs.
Empty, // No social sites, no NPCs. Pure terrain.
}
```
WorldTier → ComplexityTier ceiling:
| WorldTier | ComplexityTier ceiling |
|-----------|----------------------|
| Epicenter | Full |
| Regional | Full |
| Backwater | Full (key insight: dense isolated community — network insignificance ≠ simulation budget cap) |
| Passage | Moderate |
| Waypoint | Minimal |
ComplexityTier → DramaDensity ceiling: Full → any intensity; Moderate → Active max; Minimal → Quiescent max; Empty → Zero only (no storyteller activation possible). A `ComplexityTier::Empty` district has no social fabric; the storyteller cannot activate drama there.
---
## The 14 D-Ready Items
These 14 items are confirmed D-records ready to be filed in `decisions/`. Each has been reviewed and signed off by all workshop participants.
### D-READY-1: DistrictLayoutMode — Grid and Organic Support
Both layout modes coexist. Grid = power imposed (Commission-planned). Organic = power negotiated (pioneer settlements, organic growth). Organic mode uses `BlockPlacement` offsets and rotations to produce non-rectilinear street space as negative space between shifted/rotated blocks. 45° rotation is a hard technical ceiling.
The proportion of Grid vs. Organic districts across a world must vary per seed to prevent predictable meta-level patterns.
### D-READY-2: Guarantee Tier System — Universal / Full-Only / Conditional
**Tier 1 — Universal (all inhabited):** Social Hub, Informal Zone, Encounter Corridor.
**Tier 2 — Full-complexity:** Traffic Chokepoint, Institutional Space, Insider Space, Economic Node, Horizon View Corridor (coastal), BreachOnly Zone (≥1), Rooftop Discovery Zone (tall structures).
**Tier 3 — Conditional:** A-1 Elevated Vantage, A-2 Egress Multiplicity, A-3 Temporal Opacity Window, A-4 Non-Institutional Route, Economic Asymmetry Signal, Power Gradient Visibility.
Audit runs all applicable checks. A Minimal farmstead gets ~3 checks. A Full-complexity coastal urban hub gets up to 13.
Archetype placement must vary in **angular position** (not just distance from center) across seeds. The guarantee audit should fail if archetype positions cluster predictably across a test batch of N seeds.
### D-READY-3: TrianglePurpose Enum
```rust
enum TrianglePurpose {
Investigation, Economic, Social, Political,
Tactical, // target + protector + informant/witness
Mundane,
}
```
Triangles carry `Vec<TrianglePurpose>`. Purpose tags are multi-playstyle accessibility features: they ensure the right drama is surfaced to the player whose lens is active. `Tactical` encodes the assassination contract in spatial form.
### D-READY-4: WallBackside / TileBehindState — Dual Classification
Both enums are canonical. They serve complementary roles:
- `WallBackside` (Tyre): structural — what is physically behind this wall tile (AdjacentSpace / StructuralFill / ServiceVoid / ChunkBoundary / Exterior)
- `TileBehindState` (Gestalt): gameplay — what kind of space this represents (StructuralFill / HiddenRoom / Interstitial)
Mapping: `WallBackside::ServiceVoid` → `TileBehindState::Interstitial`. `WallBackside::AdjacentSpace` → `TileBehindState::HiddenRoom` or `StructuralFill` depending on access tier.
Era-tagged infrastructure cavity contents with standardized color codes:
- Era 1: power conduit only (`#c8b840`)
- Era 2: power + water/coolant (`#4888c8`) + comm lines (`#b8b8b8`)
- Era 3: full bundle (all types, denser)
Backside assignments within a template must have seed-driven variation — not fixed-template values.
### D-READY-5: Dynamic Modification via Overlay (Not Re-Generation)
Generator output is immutable. All post-generation modifications are applied via overlay.
**`DamageOverlay`:**
```rust
struct DamageOverlay {
overlay_type: DamageOverlayType,
epicenter: ChunkLocalPos,
radius: f32,
intensity: f32,
scatter_seed: u64, // variation within damage zone only
}
enum DamageOverlayType { GasExplosion, Fire, Structural { collapse_direction }, Flooding }
```
**`RegenerationStrategy`:**
```rust
enum RegenerationStrategy {
LocalOverlay(DamageParameters), // in-playthrough — MANDATORY
SoftReseed { seed_modifier: u64 }, // scenario-boundary only
FullReseed, // era-level discontinuity only
}
```
Hard constraint: in-playthrough events are ALWAYS `LocalOverlay`. XOR reseeding for in-playthrough events is explicitly prohibited.
Trauma event → visual stage mapping:
- PhysicalDestruction/ViolenceEvent → Stage 2 (Fresh Aftermath), decays to Stage 3
- EconomicDisruption/PoliticalShock/MigrationShock → quarter fill modifier (not destruction stages)
Full destruction stage sequence:
| Stage | Name | Visual state |
|-------|------|-------------|
| 1 | Active | Event in progress; DamageOverlay rendering live |
| 2 | Fresh Aftermath | Structure breached; scorch, rubble, debris tiles visible |
| 3 | Stabilized | Debris cleared; structural state permanent |
| 4 | Reconstruction | Scaffolding tiles, incomplete floor sections |
| 5 | Healed Scar | Functional again; residual visual tells remain |
Destruction palette constraint: corruption-only. No new colors are introduced by destruction. Existing zone palette tiles are darkened, desaturated, or replaced with structural-damage variants from the same palette family. Single exception: `#c8d8f0` (open-sky tile) appears at 100% intensity when a roofed structure has its roof removed — the only color destruction may introduce. Implementers must not create a separate destruction color set.
Replayability: the modification history diverges per playthrough based on event decisions. Same-seed worlds share the same generator baseline; different event histories produce different delta layers. This is the replayability engine.
### D-READY-6: ZonePalette Modifier System
```rust
struct ZonePalette {
base: BasePalette,
modifiers: Vec<PaletteModifier>,
}
```
8 base terrain types (T1 temperate farmland [warm organic, natural lighting] / T2 industrial farmland [cool grey-green, artificial lighting] / T3 wilderness / T4 grassland / T5 coastal water [deep near-black blue, animated specular; referenced by D-READY-7 horizon corridor guarantee] / T6 beach/coastal margin [warm dark tan] / T7 mountain/high terrain [dark blue-grey stone, snow at elevation] / T8 desert/arid). T1 and T2 are the two farmland types, explicitly distinct. If wetland terrain is required, it must be specified as a new T9 type — it is not a replacement for any of the 8 canonical types.
Modifier axes: A (heritage root → material character), B (economic tier → condition/density), C (era → material generation), plus faction overlay, climate, condition, season.
Palette modifiers should influence NPC appearance as well as environment appearance. People dress like they're from here.
### D-READY-7: Horizon View Corridor as Coastal Guarantee
A **negative-space** reservation: ≥8 visual tiles unobstructed view corridor from nearest public street to water's edge. No building, tree, or z=4 element may occupy this corridor. A low z=2 element (railing, bench, bollard) marks the waterfront point as a designed viewing location.
Tier 2 Conditional guarantee for coastal districts. Position within the district must vary per seed — the Wow Moment of seeing the horizon must be discovered, not expected.
### D-READY-8: Assassin Lens Spatial Guarantees (A-1 through A-4)
These are **derived properties of existing spatial configuration**, not assassin-tagged features. They add no generation cost; the audit validates existing output.
- **A-1 Elevated Vantage** (Tier 3, Full-complexity): ≥1 position with clear LOS cone to Traffic Chokepoint. Generator ensures overhead-clear zone in LOS corridor during block planning.
- **A-2 Egress Multiplicity** (Tier 3, Full-complexity): ≥2 exit routes to adjacent districts.
- **A-3 Temporal Opacity Window** (Tier 3, Full-complexity): ≥1 time window (day-phase) where Social Hub has reduced ambient NPC coverage.
- **A-4 Non-Institutional Access Route** (mandatory Full-complexity): ≥1 route to any Insider zone that does not pass through high-security institutional spaces.
A-1/A-2/A-3 are Tier 3 Conditional (trigger on `complexity_tier == Full`). A-4 is mandatory Full-complexity for all playstyles.
### D-READY-9: Heritage Grammar Overlay for Non-Urban Palettes
Data-driven `HeritageGrammarOverlay` structs (10 per heritage root). Loaded once at generator startup. Applied at Phase 2 chunk fill time by weighted blending.
Blend rules:
- Continuous fields (decorative_density, repair_visibility, etc.): weighted average
- Categorical fields (boundary_character, open_space_character): dominant heritage weight wins
- Object tag lists: union of preferred/accent tags; intersection-exclusion of excluded tags
Phase 1 exception: `gathering_probability` evaluated at block planning for quarter pre-assignment.
Authoring domain separation:
- **Miri:** organizational principles, boundary character, spacing, social grammar (HeritageGrammarOverlay Rust struct / authored data)
- **Araminta:** visual expression — object sets, arrangement algorithms, floor surface variants, overhead flora density and character, wall/structure material character, boundary material type, lighting temperature (TOML modifier files, one per heritage root)
Shared requirement: `ObjectTag` vocabulary must be co-maintained.
### D-READY-10: Non-Urban Informal Zone Typology
Informal zones are defined as spaces outside the community's social field — not defined by institutional absence but by the type of social permission governing them.
Three types:
- `social_permission`: normal zone palette; gathering infrastructure present; cover is about convention, not geography
- `physical_distance`: sparse objects, unmaintained floor; isolation is the visual
- `utilitarian_cover`: functional work objects; space reads as work space; unofficial use is invisible to casual observation
Visual grammar per type in `docs/workshops/generator-architecture/araminta-round4.md`.
Heritage root correlation: Frost/Stone → `physical_distance`; Tide/Vine/Dust → `social_permission`; Iron/Salt → `utilitarian_cover`. Location within terrain is seeded independently. (Dust = maximum communal observation, only privacy available is negotiated; Iron = labor function covers presence. Both confirmed Miri Round 5.)
### D-READY-11: Vertical Scale Architecture
Four height tiers (S1–S4):
- S1: 1–2 z-levels (surface + roof/mezzanine)
- S2: 3–10 z-levels
- S3: 11–30 z-levels
- S4: 30+ z-levels
Shadow length is the primary height signal in top-down view (2–40 visual tiles).
Lazy z-level loading: `ZLevelLoadState: Loaded | Skeleton | Ungenerated`. Only current + adjacent z-levels filled by Phase 2.
**Rooftop Bar Clause:** Every tall structure (z_band_count ≥ 3) must assign a `RooftopConfig: Restricted | PublicWithHiddenLayer`. The discovery layer is mandatory in both cases. Heritage root **weights the probability** between the two configs — it does not determine the outcome. A minority of buildings of any heritage root must be configurable as the non-dominant type. A Frost building with a rooftop bar must be possible; full determination kills the discovery moment. (Correction confirmed by Ozzie + Araminta, Round 5.)
Z-band floor boundaries must have seed-variation within cultural ordering constraints. A corporate building has executive floors in the upper zone, but which exact floor begins is seeded.
Vertical access routes are playthrough-history dependent: same building, different routes available based on player relationship and event history.
### D-READY-12: Trauma Events as EraModification Subtypes
```rust
enum ModificationType {
TraumaEvent {
subtype: TraumaEventSubtype,
cultural_aftermath: HeritageRootResponse,
}
}
enum TraumaEventSubtype {
PhysicalDestruction, EconomicDisruption, PoliticalShock,
ViolenceEvent, MigrationShock,
}
```
Trauma events that physically alter structures apply damage via `LocalOverlay`. The original_seed is preserved. Cultural aftermath decays toward baseline at heritage-root-dependent rates.
Physical destruction and cultural aftermath are separate tracks:
- Structural damage: `StructuralChange` in ChunkMutations
- Cultural response: NPC weight distribution shift in `DistrictRuntimeState.npc_pattern_weights`
Decay rate is seeded per-community with variation around heritage-root baseline (prevents perfect predictability from heritage root alone).
`trauma_visual_decay_rate: slow | medium | fast` per heritage root. Default: medium.
Design principle: **Trauma intensifies culture, it does not transform it.** A stressed community becomes a more concentrated version of itself — Frost communities close harder, Tide communities grief more publicly, Iron communities organize more collectively. Decay is toward the community's pre-trauma baseline, not toward a new equilibrium. Players who have learned a heritage root's trust model can predict community behavior in the aftermath.
### D-READY-13: MobileChunk Specification
Entity-carried interior space attached to a mobile world entity. Not a district. Uses the same chunk fill primitives in a simpler flat structure (no Phase 1/Phase 2 split; no block grid; no zone negotiation).
Key structs: `MobileChunk`, `MobileInterior`, `VesselClass`, `MobileMovementState` (Docked / InTransit / InterSystem / Idle), `TransitSocialModifier`, `MobileNpcSlot`, `NpcPersistence` (Crew / Passenger). Note: `Idle` = vessel parked at a location but not docked to infrastructure (anchored ship, grounded shuttle).
Vessels are **persistent world entities**. In `Docked` state: present at dock_position, visible from dock as sprite overlay, boarding via gangway tile → MobileAccessPoint activation. Interior cache keyed by entity_id persists across voyages for crew state.
**Departure schedules** are required as a generator output. The `Docked` struct must include `docked_since: SimTick` and `scheduled_departure: Option<SimTick>` — these fields were absent from Tyre's Round 4 canonical struct and must be added at implementation time. The generator must populate `scheduled_departure`. Vessels without departure schedules are an error state.
Replayability requirements R-V-1 through R-V-6 (see round-4-notes.md §5, D-READY-13 section).
Memory: ~0.5–4 KB metadata + up to 64 KB ChunkData per vessel. At 50 active entities: ~3 MB, paged by streaming model.
**Cultural grammar:** `TransitSocialModifier` with `TransitVariant` (BoundedLinear / BoundedMobile / InterSystem). Heritage-root behavior tables by vehicle type. Miri's canonical spec at `docs/workshops/generator-architecture/miri-round4.md`.
**Vessel visual grammar:** see `docs/workshops/generator-architecture/araminta-round4.md` §2. Five rules govern visual distinction of MobileChunk interiors from static zone spaces: (1) exterior hull uses vessel-identity material, not zone palette; (2) window tiles reveal exterior context (docked vs. in transit); (3) compression modifier tightens proportions throughout; (4) section transitions use vessel-identity threshold elements; (5) class stratification expressed through proportion, not palette change.
### D-READY-14: DamageOverlay / RegenerationStrategy
See D-READY-5 for full specification. Filed separately as a D-record because it establishes the general modification strategy rather than only the overlay mechanics.
The key distinction: this D-record establishes the **prohibition** of XOR reseeding for in-playthrough events and the **mandate** for `LocalOverlay`. All participants confirmed this unanimously in Round 4.
---
## NPC Model — The Ysabel Vorn Litmus Test
The 10-axis NPC model was validated against a concrete NPC exercise (Miri, Round 4). Ysabel Vorn covers **4.5 of 5 playstyle hooks** on a Backwater/Moderate farming settlement.
**The 10 axes:**
1. Behavioral Pattern (social archetype: ANCHOR, REMNANT, WITNESS, etc.)
2. Surface Motivation (publicly visible goal)
3. Actual Motivation (what they actually want)
4. Vulnerability/Secret
5. Information Access (tiered knowledge inventory)
6. Trust Architecture (heritage-based trust model + specific trust network)
7. Routine Pattern (daily/weekly/seasonal schedule)
8. Economic Position (control levers + hidden assets)
9. Relationship Network (triangle memberships — active and latent)
10. Tolerance Threshold (per-trigger tolerance levels)
**The gap (Axis 11, proposed):** `network_footprint: Option<NetworkFootprintTag>` for NPCs who are locally insignificant in appearance but carry network-significant information or are relevant to external actors. Default `None` for procedural NPCs. Set explicitly for authored scenario NPCs.
This axis is not yet in the confirmed model — it is raised as a Q-record for sprint work.
**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.
---
## Key Tensions and Resolutions
| Tension | Round | Resolution |
|---------|-------|-----------|
| Grid-only vs. organic streets | R1–R3 | Both. Grid = power imposed; Organic = power negotiated. Both modes coexist in the same world. |
| SignificanceTier vs. WorldTier naming | R3–R4 | Lead: WorldTier. Canonical values: Epicenter/Regional/Backwater/Passage/Waypoint. |
| MobileChunk (entity-carried) vs. instanced district (Nigel) | R3–R4 | Lead: entity-carried MobileChunk. Vessels are persistent world entities. |
| DramaDensity on struct vs. runtime | R3–R4 | Lead: runtime only. DramaDensity lives in DistrictRuntimeState, not DistrictSkeleton. |
| XOR reseeding vs. structured damage | R3–R4 | Unanimous: DamageOverlay. XOR prohibited for in-playthrough events. |
| Assassination difficulty: computed-on-demand (Gestalt) vs. Phase 1 stored (Miri) | R4 | Minor tension. Recommended synthesis: stored cultural baseline (DerivedDistrictAnalysis on skeleton) + on-demand computation for player-facing assessment. See round-4-notes §2, OQ-R4-C. |
---
## Open Questions for Sprint Work
| Q-ID | Question | Priority | Owner |
|------|----------|----------|-------|
| Q-NNN-a | Axis 11 (Network Footprint) — authored field for network-significant NPCs in locally-insignificant positions | High | Miri |
| Q-NNN-b | Departure schedule model — departure windows as generator output for docked vessels (Ozzie requirement). **Note R5:** D-READY-13 resolves this — `scheduled_departure: Option<SimTick>` in Docked state is mandatory generator output. Recommend closing before sprint planning. | High | Tyre + Miri |
| Q-NNN-c | Mobile environment social arc — structural representation of journey timeline (Ozzie requirement) | Medium | Miri + Gestalt |
| Q-NNN-d | DramaDensity enum naming — Round 4 struct uses Quiescent/Active/Intense (3) vs. Round 3's Zero/Low/Medium/High/Flashpoint (5). Resolve before D-record. | Low | Tyre + Gestalt |
| Q-NNN-e | ObjectTag vocabulary co-maintenance — shared between Miri's HeritageGrammarOverlay and Araminta's asset categorization | Medium | Miri + Araminta |
| Q-NNN-f | Assassination difficulty synthesis — formal spec combining DerivedDistrictAnalysis baseline (Phase 1) with on-demand runtime computation (player-facing display only; game logic uses Phase 1 value) | Medium | Gestalt + Miri |
---
## Implementation Targets (From Participant Estimates)
| Feature | Target version | Estimated effort |
|---------|---------------|-----------------|
| Phase 1 DistrictSkeleton (basic) | v0.3 | ~3 dev-days |
| Phase 2 chunk fill with heritage grammar | v0.3 | ~4 dev-days |
| MobileChunk (single-chunk vessels) | v0.3 | ~9.5 dev-days |
| Vertical scale (z-bands, lazy loading) | v0.4 | ~7 dev-days |
| DamageOverlay system | v0.4 | ~1.5 dev-days |
| MobileChunk::Block (large ships) | v0.5 | Deferred |
---
## What This Generator Promises the Player
From Ozzie's synthesis across all four rounds:
> **The world is real and persistent.** Vessels exist when you're not on them. The crew you met last voyage is still there. The damage you caused is still there.
>
> **Every wall is a secret keeper.** WallBackside + BreachOnly means no tile is ever void. There's always something behind the wall.
>
> **Destruction has history.** DamageOverlay + trauma subtypes mean the aftermath of events is legible. You can arrive at a district and read what happened.
>
> **Height has meaning.** Vertical scale + view down from above. The building is itself a puzzle. Floor 30 has information floor 1 can't have, because floor 30 is harder to reach.
>
> **Every playstyle has guaranteed affordances.** The 3-tier guarantee system and the assassin lens guarantees mean the generator is making contracts it keeps.
>
> **The journey is content.** Mobile environments are social pressure cookers, not loading screens with chairs.
>
> **Insignificance is a lens, not a verdict.** A Minimal/Dormant district contains a complete small society. The playstyle is the starting assumption the world eventually corrects.
---
*Workshop closes. Fourteen D-records ready for filing. Six Q-records raised for sprint work. The generator pipeline is locked.*