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,368 @@
|
||||
# Generator Architecture Workshop — Round 4 Notes
|
||||
|
||||
**Workshop:** Generator Architecture (#562)
|
||||
**Round:** 4 — Final Convergence
|
||||
**Date:** 2026-02-27
|
||||
**Participants:** Gestalt, Tyre, Miri, Araminta, Nigel, Ozzie
|
||||
**Documented by:** Qatux
|
||||
|
||||
---
|
||||
|
||||
## 1. Round 4 Assignment Summary
|
||||
|
||||
Round 4 had three categories of work:
|
||||
|
||||
1. **Open question resolution** — all six OQs from Round 3 carried forward. All are now resolved.
|
||||
2. **Concrete demonstration** — Miri's "write the NPC" exercise (OQ-R4-E). Complete.
|
||||
3. **D-record sign-off** — all 12 items from the D-ready list reviewed and approved by all six participants. Two additional items (D-READY-13 and D-READY-14) identified and added.
|
||||
|
||||
Pre-confirmed lead decisions (Round 4 input):
|
||||
- **WorldTier** wins over SignificanceTier
|
||||
- **Entity-carried MobileChunk** is core architecture
|
||||
- **DramaDensity** is runtime storyteller state, NOT on DistrictSkeleton
|
||||
- **Heritage grammar overlay** is base game, not DLC
|
||||
|
||||
---
|
||||
|
||||
## 2. Open Question Resolutions
|
||||
|
||||
### OQ-R4-A: Vessel Architecture — Resolved (Lead Directive)
|
||||
|
||||
**Decision: Entity-carried MobileChunk. Tyre's architecture. Lead-confirmed.**
|
||||
|
||||
All participants accepted. Tyre provided the final canonical `MobileChunk` struct. Nigel formally withdrew his instanced-district model and stated why the entity-carried model is superior for accumulating vessel history across voyages. Ozzie provided the player-experience verdict: the docked ship must physically exist and be present at the dock — this is load-bearing for the game's fundamental promise of a persistent world.
|
||||
|
||||
Key rationale (Ozzie): "The ship at the dock is a trust signal. It tells me: this happened. That voyage was a real event in a real world."
|
||||
|
||||
Additional vessel requirement raised by Ozzie: **departure schedules** must be a generator output. Vessels docked without scheduled departures produce port graveyards. The departure window is both world-time structure and a player urgency driver.
|
||||
|
||||
### OQ-R4-B: WorldTier Naming — Resolved (Lead Directive)
|
||||
|
||||
**Decision: `world_tier: WorldTier` on DistrictSkeleton.**
|
||||
|
||||
`SignificanceTier` is retired. `WorldTier` correctly describes what the field measures: simulation fidelity budget allocated to this location, not narrative importance. A narratively critical backwater can be `WorldTier::Local + ComplexityTier::Full`.
|
||||
|
||||
**Canonical WorldTier enum (Tyre, final):**
|
||||
```
|
||||
Core — Hub system. Full simulation, high faction pressure.
|
||||
Regional — Regional importance. 1–4 districts, partial full-budget.
|
||||
Local — Small community. 1 district, limited budget.
|
||||
Transit — Transit stop. Pass-through only, minimal simulation.
|
||||
Dormant — Not simulated until player approaches.
|
||||
```
|
||||
|
||||
WorldTier → ComplexityTier ceiling constraint table:
|
||||
|
||||
| WorldTier | ComplexityTier max |
|
||||
|-----------|-------------------|
|
||||
| Core | Full |
|
||||
| Regional | Full |
|
||||
| Local | Moderate |
|
||||
| Transit | Minimal |
|
||||
| Dormant | Empty |
|
||||
|
||||
### OQ-R4-C: Assassination Difficulty Descriptor — Minor Tension Noted
|
||||
|
||||
**Two valid positions emerged. The tension is recorded here for the D-record.**
|
||||
|
||||
**Gestalt:** `assassination_difficulty` is computed on demand — a function of `(SocietyProfile, SpatialGuarantees, StorytellerState) → DifficultyDescriptor`. Never stored. Called at contract acceptance and during pre-op planning. Rationale: the inputs include dynamic runtime state (active guard levels, current NPC distribution), so any stored value is stale.
|
||||
|
||||
**Miri:** `DerivedDistrictAnalysis` struct on `DistrictSkeleton`, computed at Phase 1 from society profile parameters (observation_density × information_liquidity × aftermath_engagement). Stored, not runtime-mutable. Rationale: Phase 1 Tactical triangle instantiation logic needs it before the gameplay system runs; the cultural difficulty of assassination is stable regardless of storyteller state.
|
||||
|
||||
**The actual tension:** Gestalt's position captures dynamic inputs that Miri's doesn't. Miri's position captures a Phase 1 dependency that Gestalt's doesn't address. These are not mutually exclusive: the `DerivedDistrictAnalysis` on the skeleton could provide the **cultural baseline** (static, Phase 1), while the on-demand computation combines that baseline with runtime state for the player-facing assessment. This synthesis is recommended for the D-record.
|
||||
|
||||
**Miri's proposed `DerivedDistrictAnalysis` struct:**
|
||||
```rust
|
||||
struct DerivedDistrictAnalysis {
|
||||
assassination_difficulty: AssassinationDifficulty,
|
||||
assassination_target_density: u8,
|
||||
primary_playstyles: [AffinityLevel; 5],
|
||||
}
|
||||
enum AssassinationDifficulty { Low, Medium, High, Extreme }
|
||||
```
|
||||
|
||||
**Qatux flag:** The D-record should specify both the stored baseline (`DerivedDistrictAnalysis`) and the on-demand runtime computation. They serve different purposes.
|
||||
|
||||
### OQ-R4-D: Heritage Grammar Overlay Representation — Resolved
|
||||
|
||||
**Decision: Data-driven `HeritageGrammarOverlay` structs in TOML/YAML content files (Miri) or equivalent (Araminta). Not lookup tables in palette assets. Not hardcoded.**
|
||||
|
||||
Miri proposed per-heritage `HeritageGrammarOverlay` Rust structs loaded from authored data, injected into ZonePalette at chunk fill time. Araminta proposed per-heritage TOML modifier files with the same separation: Araminta authors visual/arrangement grammar, Miri authors cultural/organizational grammar. Both converge on the same authoring model with aligned field sets.
|
||||
|
||||
**Key rule:** Heritage grammar modifier is applied at Phase 2 chunk fill time (not Phase 1), with one exception: `gathering_probability` influences Phase 1 block quarter pre-assignment.
|
||||
|
||||
**Authoring domain separation:**
|
||||
- Miri: organizational principles, boundary character, spacing, social grammar fields
|
||||
- Araminta: visual expression — object sets, arrangement algorithms, lighting temperature, overhead character
|
||||
|
||||
**Shared requirement:** The `ObjectTag` vocabulary must be co-maintained across both domains.
|
||||
|
||||
### OQ-R4-E: "One NPC, Five Lenses" — Resolved (Miri NPC exercise)
|
||||
|
||||
**Decision: One NPC can provide all five hooks. Minimum 3 NPCs required for intra-seed replayability.**
|
||||
|
||||
Miri produced **Ysabel Vorn**, a full 10-axis NPC profile for Harrow Drift (Backwater/Moderate farming settlement, Stone/Tide heritage). All five playstyle lenses demonstrated in detail. The 10-axis model covers **4.5 of 5** hooks.
|
||||
|
||||
**The gap: Axis 11 (Network Footprint).** The 10-axis model cannot distinguish between an NPC who is genuinely locally insignificant and one who is locally insignificant in appearance but carries network-significant information (e.g., a hiding Commission data analyst). The assassination hook for Ysabel is only available to a player with network-level intelligence access — locally, she registers as a trusted Anchor with no enemies.
|
||||
|
||||
**Proposed Axis 11:**
|
||||
```
|
||||
network_footprint: Option<NetworkFootprintTag>
|
||||
```
|
||||
- `None` for most procedural NPCs
|
||||
- `Some(tag)` for authored scenario NPCs; records external actors, reason for significance, and access tier required to see the footprint
|
||||
- Does not change local NPC behavior; enables Tactical triangle instantiation for the "false backwater" scenario type
|
||||
|
||||
**Nigel's finding on emergence:** One NPC provides zero intra-seed emergent behavior (no relationships = no triangles). Minimum for meaningful replayability within a seed: **3 NPCs — one functional triangle**. Miri's five minimum content types should be distributed across a minimum triangle, not collapsed into a single NPC.
|
||||
|
||||
### OQ-R4-F: Soft Re-Generation — Resolved. XOR Unanimously Rejected.
|
||||
|
||||
**Decision: `DamageOverlay` (structured damage parameters) for all in-playthrough events. XOR reseeding explicitly rejected.**
|
||||
|
||||
All four participants who addressed this (Gestalt, Tyre, Nigel, Ozzie) reached the same verdict by independent paths.
|
||||
|
||||
**Why XOR fails (Gestalt + Tyre tile-level demonstration):**
|
||||
- `original_seed XOR event_seed` produces a different block, not a damaged version of the original
|
||||
- Tile positions shift, zone assignments change, the pressure regulator moves — nothing is spatially coherent with the event source
|
||||
- Fails Ozzie's test: "destruction must be caused, not random"
|
||||
- The result looks *replaced*, not *damaged*
|
||||
|
||||
**The correct approach — `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 }
|
||||
```
|
||||
Per-tile damage is computed from distance to epicenter + scatter. The original chunk is unchanged. The cause is legible from the output: epicenter identifiable, damage gradient visible.
|
||||
|
||||
**`RegenerationStrategy` enum (Gestalt):**
|
||||
```rust
|
||||
enum RegenerationStrategy {
|
||||
LocalOverlay(DamageParameters), // in-playthrough — generator unchanged
|
||||
SoftReseed { seed_modifier: u64 }, // scenario-boundary temporal changes only
|
||||
FullReseed, // era-level discontinuities only
|
||||
}
|
||||
```
|
||||
**Hard rule:** In-playthrough events are ALWAYS `LocalOverlay`. `SoftReseed` and `FullReseed` are scenario-setup tools, not event responses. The generator never re-runs for player-witnessed events.
|
||||
|
||||
XOR-seeding remains acceptable ONLY for district-level regeneration under a different historical assumption (Phase 1 re-run for a different era branch — not in-playthrough damage).
|
||||
|
||||
---
|
||||
|
||||
## 3. Rooftop Bar Clause — Amended
|
||||
|
||||
**Old guarantee:** Every tall structure (z_band_count ≥ 3) must have a roof zone classified `Insider` or `BreachOnly`, accessible by non-obvious route.
|
||||
|
||||
**Problem:** This prohibited valid public social destinations (rooftop bars, observation galleries, religious sky gardens).
|
||||
|
||||
**Amended guarantee — Vertical Discovery:**
|
||||
```rust
|
||||
enum RooftopConfig {
|
||||
Restricted {
|
||||
zone_class: AccessTier, // must be Insider or BreachOnly
|
||||
access_route: RouteObviousness, // must be NonObvious
|
||||
},
|
||||
PublicWithHiddenLayer {
|
||||
primary_zone: ZoneType, // Social Hub, Economic Node, etc.
|
||||
secondary_restricted: ZoneSpec, // always present; Insider or BreachOnly
|
||||
},
|
||||
}
|
||||
```
|
||||
|
||||
**The inviolable rule:** Every tall structure must have *something* at the top that is not fully accessible from below. The discovery layer is mandatory. The public/private split of the primary space is not.
|
||||
|
||||
Heritage-root-driven default:
|
||||
- Iron trade towers: `Restricted` (roof belongs to guild leadership)
|
||||
- Commission institutional: `PublicWithHiddenLayer` (public observation gallery + restricted records floor)
|
||||
- Frost isolated structures: `Restricted` (roof is heating systems, not a social space)
|
||||
|
||||
Visual grammar (Araminta):
|
||||
- Public rooftop: warm amber lighting cluster (`#f0b840`) + social furniture (tables/chairs clusters) + designed railing (`#2a2018` warm pavers)
|
||||
- Restricted rooftop: cold work lights only (`#c0d0e0` directed down) + mechanical equipment (HVAC, antennae) + service hatch
|
||||
|
||||
Ozzie's verdict: "Most rooftops: maintenance access and a view. Some rooftops: IT'S A BAR. The rarity is what creates the moment."
|
||||
|
||||
---
|
||||
|
||||
## 4. Ysabel Vorn — The NPC Litmus Test
|
||||
|
||||
**Summary of the 10-axis exercise result:** 4.5 of 5 playstyle hooks covered.
|
||||
|
||||
| Axis | Miri's field | Playstyle hook |
|
||||
|------|-------------|----------------|
|
||||
| 1 | Behavioral Pattern (ANCHOR + REMNANT secondary) | All lenses: community position |
|
||||
| 2 | Surface Motivation (water equity) | Political: the stated tiebreaker role |
|
||||
| 3 | Actual Motivation (stay hidden) | Investigation + Dating Sim: the closed core |
|
||||
| 4 | Vulnerability/Secret (Commission warrant, Callen file chain) | Investigation + Assassination |
|
||||
| 5 | Information Access (complete settlement knowledge + aging Commission expertise) | Tycoon + Investigation |
|
||||
| 6 | Trust Architecture (Stone/Tide blend, slow building) | Dating Sim: the arc |
|
||||
| 7 | Routine Pattern (dawn inspection, 6-weekly boundary check) | Assassination: the window |
|
||||
| 8 | Economic Position (water control lever, undisclosed evidence) | Tycoon: the entry point |
|
||||
| 9 | Relationship Network (3 triangles, 1 active/2 latent) | Political + Investigation + Tactical |
|
||||
| 10 | Tolerance Threshold (near-zero for exposure, declining for Kael Voss) | Dating Sim + Assassination |
|
||||
|
||||
**The gap (Axis 11):** Locally, Ysabel registers as `assassination_difficulty: Extreme` (150-person tight community, Stone observation, Tide aftermath). But the Tactical triangle (Ysabel ↔ Callen's agents ↔ player) only becomes visible with network-level access. The 10-axis model as currently specified cannot flag this from local data alone.
|
||||
|
||||
**New Q-record to raise:** `Q-NNN: Axis 11 (Network Footprint) — authored field for network-significant NPCs in locally-insignificant positions.`
|
||||
|
||||
---
|
||||
|
||||
## 5. D-Record Sign-Off — All 12 Items + 2 New
|
||||
|
||||
All 12 D-ready items from Round 3 were reviewed by all six participants. Status: **all signed off**, with amendments documented below.
|
||||
|
||||
| # | Item | Status | Key amendments |
|
||||
|---|------|--------|----------------|
|
||||
| D-READY-1 | DistrictLayoutMode: Grid / Organic | ✅ SIGNED OFF | Araminta: 45° rotation cap is a hard technical constraint (pathfinding), not a design preference. Must be stated as non-negotiable in D-record. Nigel: Grid/Organic distribution proportion must vary per seed. |
|
||||
| D-READY-2 | Guarantee Tier System | ✅ SIGNED OFF | Gestalt: added Power Gradient Visibility + Economic Asymmetry Signal as conditional Tier 3 checks. Araminta: rooftop destination clause added as Tier 2 guarantee. Nigel: archetype placement must vary in angular position across seeds, not just distance from center — this is verifiable and testable. |
|
||||
| D-READY-3 | TrianglePurpose Enum | ✅ SIGNED OFF | No structural amendments. Nigel: TrianglePurpose is a multi-playstyle accessibility feature, not a replayability feature. |
|
||||
| D-READY-4 | WallBackside / TileBehindState | ✅ SIGNED OFF | Gestalt: both enums are canonical and complementary — WallBackside (structural/LOS) and TileBehindState (gameplay). D-record must document both and their mapping. Araminta: Era-tagged infrastructure cavity contents (Era 1–3 bundle density) with standardized color codes. Nigel: backside assignments within a template must have seed-driven variation (not fixed-template values). |
|
||||
| D-READY-5 | Dynamic Modification via Overlay | ✅ SIGNED OFF | Add `DamageOverlay` struct and `RegenerationStrategy` enum from OQ-R4-F resolution. XOR is explicitly prohibited for in-playthrough events. Araminta: trauma event → visual destruction stage mapping added (PhysicalDestruction → Stage 2; economic/political/migration → quarter fill modifier, not destruction stages). |
|
||||
| D-READY-6 | ZonePalette Modifier System | ✅ SIGNED OFF | Araminta: explicitly name T1 (warm organic, natural lighting) and T2 (cool grey-green, artificial lighting) as rustic vs. industrial farmland. Nigel: palette modifiers should influence NPC appearance as well as environment. |
|
||||
| D-READY-7 | Horizon View Corridor | ✅ SIGNED OFF | Araminta: clarify as negative space (instruction to not place blockers), not a placed object. Low z=2 element marks waterfront point as designed viewing location. Nigel: corridor position should vary per seed — the Wow Moment needs to be discovered, not expected. |
|
||||
| D-READY-8 | Assassin Lens Spatial Guarantees (A-1 through A-4) | ✅ SIGNED OFF | Gestalt: A-1–A-3 are Tier 3 Conditional; A-4 is mandatory Full-complexity. Framing: derived properties of existing spatial configuration, not assassin-tagged features. Araminta: A-1 Elevated Vantage requires overhead-clear LOS corridor (no z=4 elements in LOS cone). Nigel: angular variation requirement is hard — guarantee audit should fail if archetype placement clusters in predictable angular positions across N seeds. |
|
||||
| D-READY-9 | Heritage Grammar Overlay for Non-Urban Palettes | ✅ SIGNED OFF | Now lockable with OQ-R4-D resolved. Miri: `HeritageGrammarOverlay` struct with organizational principles. Araminta: TOML modifier files with visual expression parameters. Both specify the `ObjectTag` shared vocabulary requirement. Phase 1 exception: `gathering_probability` evaluated at block planning for quarter pre-assignment. |
|
||||
| D-READY-10 | Non-Urban Informal Zone Typology | ✅ SIGNED OFF | Araminta: visual grammar per type (social_permission = gathering infrastructure present; physical_distance = sparse, unmaintained path; utilitarian_cover = functional work space with no obvious unofficial purpose). Nigel: each type demands different player strategies — the variation is in how to USE cover, not merely what it is. |
|
||||
| D-READY-11 | Vertical Scale Architecture | ✅ SIGNED OFF | Add Rooftop Bar Clause (RooftopConfig enum from Section 3). Araminta: roof zone must be assigned `PublicDestination | RestrictedDiscovery` during block planning. Nigel: z-band floor boundaries must have seed-variation within cultural ordering constraints (executive always in upper zone, but which exact floor varies per seed). |
|
||||
| D-READY-12 | Trauma Events as EraModification Subtypes | ✅ SIGNED OFF | Gestalt + Tyre: TraumaEvent uses LocalOverlay, not XOR reseeding. Physical destruction and cultural aftermath are separate tracks. Araminta: `trauma_visual_decay_rate: slow | medium | fast` per heritage root, with seed-variation within root baseline (Nigel). |
|
||||
|
||||
### D-READY-13: MobileChunk Specification (New)
|
||||
|
||||
**Status: D-READY.** The final canonical `MobileChunk` struct from Tyre (Round 4, §1/§5a) is complete and signed off. Contains:
|
||||
|
||||
- Full struct with `VesselClass`, `MobileInterior`, `MobileMovementState`, `TransitSocialModifier`, `NpcPersistence` enums
|
||||
- `Docked` state with `connected_chunk`, `docked_since`, `scheduled_departure`
|
||||
- `InTransit` and `InterSystem` states
|
||||
- Vessel template size reference (TrainCar → LargeMerchant)
|
||||
- Boarding sequence implementation notes
|
||||
- Memory budget: ~0.5–4 KB metadata + up to 64 KB ChunkData per vessel
|
||||
|
||||
**Replayability requirements from Nigel (R-V-1 through R-V-6):**
|
||||
- R-V-1: At least 50% of variable passenger slots must turn over between adjacent voyages
|
||||
- R-V-2: Crew persistent, passengers variable
|
||||
- R-V-3: In-transit events are voyage-seeded, not vessel-seeded
|
||||
- R-V-4: Arrival time is storyteller-modifiable
|
||||
- R-V-5: Interior does NOT re-generate per voyage
|
||||
- R-V-6: Vessel carries ChunkMutations for accumulated damage history
|
||||
|
||||
**Miri's cultural grammar:** `TransitSocialModifier` with `TransitVariant` (BoundedLinear / BoundedMobile / InterSystem) is the canonical vessel cultural layer. Heritage-root behavior tables by vehicle type and jurisdictional state.
|
||||
|
||||
### D-READY-14: DamageOverlay / RegenerationStrategy (New)
|
||||
|
||||
**Status: D-READY.** Produced by OQ-R4-F resolution with unanimous participant agreement.
|
||||
|
||||
Covers:
|
||||
- `DamageOverlay` struct (epicenter, radius, intensity, scatter_seed)
|
||||
- `DamageOverlayType` enum (GasExplosion, Fire, Structural, Flooding)
|
||||
- `RegenerationStrategy` enum (LocalOverlay / SoftReseed / FullReseed)
|
||||
- Hard constraint: in-playthrough events are ALWAYS LocalOverlay
|
||||
- Hard prohibition: XOR-seeding for in-playthrough events is explicitly rejected
|
||||
- Per-tile damage computation (distance from epicenter × scatter → tile modification)
|
||||
|
||||
---
|
||||
|
||||
## 6. New Open Questions for Sprint Work
|
||||
|
||||
| Q-ID | Question | Owner | Priority |
|
||||
|------|----------|-------|----------|
|
||||
| Q-NNN-a | Axis 11 (Network Footprint) — authored field for network-significant NPCs in locally-insignificant positions | Miri | High — affects assassination scenario instantiation |
|
||||
| Q-NNN-b | Departure schedule model — departure windows as generator output for docked vessels | Tyre + Miri | High — vessel persistence requires it (Ozzie requirement) |
|
||||
| Q-NNN-c | Mobile environment social arc — structural representation of the journey timeline (who talks to whom at which journey stage) | Miri + Gestalt | Medium — Ozzie: "the journey is content; if the social arc isn't structured, the content is random" |
|
||||
| Q-NNN-d | DramaDensity enum naming — Tyre's Round 4 struct uses Quiescent/Active/Intense (3 values) vs. Round 3's Zero/Low/Medium/High/Flashpoint (5 values). Which is canonical? | Tyre + Gestalt | Low — naming only, but should be settled before D-record |
|
||||
| Q-NNN-e | ObjectTag vocabulary co-maintenance — shared between Miri's HeritageGrammarOverlay and Araminta's asset categorization system | Miri + Araminta | Medium — needed for heritage grammar implementation |
|
||||
|
||||
---
|
||||
|
||||
## 7. Final Canonical Structures (Summary)
|
||||
|
||||
### DistrictSkeleton — Final (Tyre §5)
|
||||
|
||||
New fields since Round 3:
|
||||
- `world_tier: WorldTier` (renamed from `significance: SignificanceTier`)
|
||||
- `grid_orientation: f32` (district rotation from world-north)
|
||||
- `vertical_structure: VerticalStructure` (Flat / Medium / Tall / Skyscraper)
|
||||
- `breach_only_zones: Vec<ZoneId>` (AccessTier::BreachOnly zones explicitly tracked)
|
||||
- `derived_analysis: DerivedDistrictAnalysis` (assassination_difficulty, target_density, playstyle affinities) — Miri's addition
|
||||
|
||||
DramaDensity remains absent from DistrictSkeleton. Confirmed by all participants. Lives in `DistrictRuntimeState` in the simulation module.
|
||||
|
||||
### Three-Layer Model — Locked (Gestalt §5)
|
||||
|
||||
```
|
||||
GENERATOR STATE (immutable after Phase 1)
|
||||
├── Phase 1: DistrictSkeleton
|
||||
│ ├── world_tier: WorldTier
|
||||
│ ├── complexity_tier: ComplexityTier
|
||||
│ ├── layout_mode: DistrictLayoutMode (Grid | Organic)
|
||||
│ ├── guarantee_audit: GuaranteeAuditResult (3-tier)
|
||||
│ ├── rooftop: RooftopConfig (per MultiBlockReservation)
|
||||
│ ├── derived_analysis: DerivedDistrictAnalysis
|
||||
│ └── society_profile: SocietyProfileRef
|
||||
└── Phase 2: PreparedDistrict
|
||||
├── SocialSitePlacement (triangles with Vec<TrianglePurpose>)
|
||||
├── NpcManifest (seeded from society_profile)
|
||||
├── ZonePalette assignments (base + heritage modifiers)
|
||||
└── ChunkMutations pending
|
||||
|
||||
SIMULATION STATE (runtime storyteller)
|
||||
├── DistrictRuntimeState.drama_density: DramaDensity
|
||||
├── active_triangles: Vec<TriangleId>
|
||||
├── npc_pattern_weights: NpcPatternWeightSet
|
||||
└── assassination_difficulty on-demand computation
|
||||
(SocietyProfile + spatial_audit + StorytellerState → DifficultyDescriptor)
|
||||
|
||||
DELTA LAYER (post-generation)
|
||||
├── DamageOverlay / ChunkMutations::LocalOverlay
|
||||
├── NpcRemoved / NpcStateChanged
|
||||
├── AccessTierChanged
|
||||
└── WorldStateDelta (composed from all active mutations)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 8. Memory Budget — Final
|
||||
|
||||
| Component | Size per district |
|
||||
|-----------|------------------|
|
||||
| Identity + WorldTier + ComplexityTier | ~96 bytes |
|
||||
| Blocks (4×4 × BlockSkeleton) | ~2 KB |
|
||||
| Social sites + triangles | ~1–4 KB |
|
||||
| Reservations + corridors (incl. z-bands) | ~0.5–3 KB |
|
||||
| Boundaries | ~4 KB |
|
||||
| Society profile ref | ~32 bytes |
|
||||
| Zone palette | ~0.5–1 KB |
|
||||
| Guarantee audit (3-tier expanded) | ~512 bytes |
|
||||
| Layout mode (Organic) | 0–1 KB |
|
||||
| VerticalStructure + breach zones + derived_analysis | ~128 bytes |
|
||||
| **Total per district** | **~9–16 KB** |
|
||||
|
||||
Fleet: 300 worlds × ~6 districts × ~13 KB = **~23 MB**
|
||||
Mobile chunks: ~3 MB at 50 active entities (paged by streaming model)
|
||||
Grand total: ~26 MB — within accepted RAM budget
|
||||
|
||||
---
|
||||
|
||||
## 9. Qatux Observations
|
||||
|
||||
**For the record:**
|
||||
|
||||
1. The XOR rejection is the single most unanimously confirmed decision of this workshop. All four participants who addressed it reached the same verdict by independent reasoning. The D-record should state the prohibition unambiguously.
|
||||
|
||||
2. The assassination_difficulty tension (Gestalt: computed-on-demand vs. Miri: DerivedDistrictAnalysis at Phase 1) is resolvable by synthesis: stored cultural baseline + on-demand runtime computation for player-facing assessment. This should be explicit in the D-record rather than left as a gap.
|
||||
|
||||
3. Ozzie's two additions to D-READY (departure schedules + mobile environment social arc) are requirements, not preferences. Both are downstream of the vessel persistence decision (D-READY-13). They should be raised as Q-records with high priority.
|
||||
|
||||
4. The Ysabel Vorn exercise is the single most complete demonstration of the NPC generation model produced in this workshop. It should be referenced in the NPC system D-record as the canonical litmus test case for validating the 10-axis model.
|
||||
|
||||
5. Tyre's DramaDensity enum in Round 4 (Quiescent/Active/Intense, 3 values) differs from Round 3's (Zero/Low/Medium/High/Flashpoint, 5 values). This naming gap should be resolved before the D-record is written.
|
||||
|
||||
6. WorldTier enum values are now canonical from Tyre's Round 4 output: Core / Regional / Local / Transit / Dormant. The Round 3 naming (CenterStage/Regional/Backwater/Waypoint/Insignificant) is superseded.
|
||||
|
||||
---
|
||||
|
||||
**Round 4 closes with all OQs resolved, all 12 D-records signed off (with amendments), 2 new D-records added, and 5 new Q-records raised for sprint work. The pipeline is locked. D-record production proceeds.**
|
||||
Reference in New Issue
Block a user