From 3dc9cc431cdcf305ff472dffbebeaba4af92e629 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Sun, 5 Jul 2026 19:47:04 +0200 Subject: [PATCH] chore(meta): close T-1084/T-1085 (done), file T-1086/T-1087 follow-ups MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PR #172 merged. T-1084 (mosaic) + T-1085 (biosphere register) → done. Remaining T-1085 work split into T-1086 (propagate Linnaeus to bodies.proper_name) and T-1087 (Forest/Wetland biome palettes + introduced-Earth register + §8 material follow-up). Co-Authored-By: Claude Opus 4.8 --- .pql/changelog/ticket_history/2026-07.sql | 107 ++++++++++++++++++ .pql/changelog/ticket_idmap/2026-07.sql | 2 + .pql/changelog/tickets/2026-07.sql | 125 ++++++++++++++++++++++ 3 files changed, 234 insertions(+) diff --git a/.pql/changelog/ticket_history/2026-07.sql b/.pql/changelog/ticket_history/2026-07.sql index 49cac7986..2f35592f7 100644 --- a/.pql/changelog/ticket_history/2026-07.sql +++ b/.pql/changelog/ticket_history/2026-07.sql @@ -482,3 +482,110 @@ Workstream 3 DONE + committed (cc7c5ada0): biosphere_class plumbing via the stam T-1085 STATUS: WS1 (chirality assignment) DONE, WS2 (wiki continuity) DONE, WS3 (biosphere plumbing) DONE, WS4 (vocab→palette) DONE-partial (grassland biome-awareness + vocab doc; Forest/register/§8-material continuation noted). REMAINING: (a) rename completion — propagate Linnaeus to bodies.proper_name in the DB (still Cadwal; proper_name is atlas-CLI-owned, wipe+reimport would drop non-proposal cols → needs a targeted approach); (b) WS4 continuation; (c) Burnelli food-economy consumer (separate stakeholder follow-on).', NULL, '2026-07-05 09:57:14', '2026-07-05 09:57:14.888', '2026-07-05 09:57:14.888', NULL, '869fe82bcfe88a3270abefd09e0e941d', 2) ON CONFLICT(hash) DO NOTHING; INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FGSK19FGZAC3H25VRAV4JRFW', 'status', 'in_progress', 'review', NULL, '2026-07-05 11:04:20', '2026-07-05 11:04:20.117', '2026-07-05 11:04:20.117', NULL, 'a7164036d1b3711d22d912020fc4dde9', 2) ON CONFLICT(hash) DO NOTHING; INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FJ91R8RV38BJXGB2V55FP3B8', 'status', 'in_progress', 'review', NULL, '2026-07-05 11:04:20', '2026-07-05 11:04:20.119', '2026-07-05 11:04:20.119', NULL, '75373d6899b3793b3b8a33526ad01d48', 2) ON CONFLICT(hash) DO NOTHING; +INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FJ91R8RV38BJXGB2V55FP3B8', 'description', 'Operationalize the D-247 native-biosphere premise. Full brief appended. + +--- +BRIEF (2026-07-02) — governing record: D-247 (governance/decisions/content.md); consumer: D-246 / T-1084 mosaic register. + +WHAT THIS IS +D-247 established that habitable Reach worlds were alive before humans (the settlement timeline forbids terraforming from dead rock), and that an AUTHORED per-world chirality bit gates whether native life is edible. This ticket turns that canon into data + reconciled wiki + the vocabulary the mosaic needs. Owner: Miri (worldbuilding/continuity). Stakeholder: Burnelli (food-import economics). Co-maintainer for the vocab: Araminta (visual grammar, per the T-995 ObjectTag precedent). + +THE MODEL (locked in D-247 — do not re-litigate, apply it): +- `biosphere_class ∈ {NativeCompatible, NativeMirror, TerraformedSterile, Airless}`. It is an AUTHORED INPUT, never seed-derived — it follows a world''s economic/cultural identity. +- Compatible ("levo") = edible; coupling *permits* an authored hazard but does not force it (most are benign gardens). +- Mirror ("dextro") = inedible but *guaranteed* inert (can''t infect/poison — safe to study). +- "Safe" ≠ "edible" — decoupled. Bio-safe is guaranteed on Mirror; food-safe is Compatible-only. +- Achiral seam (always works either way): breathe air, drink water, mine ore, burn/build with native biomass. Only eat/metabolize/medicate/infect/chirally-poison are gated. +- ~50/50 Compatible:Mirror is a DESIGN TARGET across canon-silent worlds, not a per-world draw. + +WORKSTREAMS +1. CHIRALITY ASSIGNMENT (Miri). Give every inhabited body a biosphere_class by authored identity: principled default from `economic_base_primary` + `planet_class` (food/drink exporters → Compatible; dead+maintained-atmosphere → TerraformedSterile), explicit overrides where canon speaks. Locked exemplars: Arbour (GJ-338B)=Compatible; Solandar (GJ-827)=Mirror; Keid (GJ-166A)=Compatible (preserved *from exploitation* of edible alien life — the stronger conservation motive; Solandar is the Mirror-inert preserve); Oshima (GJ-79)=TerraformedSterile. Hit the ~50/50 target across the silent remainder. +2. WIKI CONTINUITY (Miri). Reconcile the entries that already gesture at native biochemistry so each is consistent with its assigned bit + the mechanism: GJ-827, GJ-524, GJ-166A, GJ-684A, GJ-197, GJ-79, GJ-124 (resolve whether Hạ Long''s "protein" is native-Compatible harvest or Earth aquaculture). Additive/explanatory, not contradictory — preserve deliberately-vague lines as intentional. +3. biosphere_class AUTHORING PATH (asset-pipeline discipline — schema + source + values together, per .claude/rules/asset-pipeline.md). Add `biosphere_class` to wiki body frontmatter (where `substrate:` already lives), a nullable `bodies.biosphere_class` column in systems-schema.sql + MIGRATION_SQL, and importer read. NOT needed for D-246; lands with this pass. +4. ALIEN-ECOLOGY VOCABULARY (Miri + Araminta) — feeds T-1084 directly. The mosaic palette is keyed on surface-class × climate-biome × biosphere-register (D-246 Palette-key). Provide the micro-habitat NAMES per biome × register: native-mirror niches get *alien* clade names (Solandar''s "five kingdoms" flavor); introduced-Earth niches get Earth names (wheatfield, orchard, pasture). Fill the fixed niche spine (canopy / understory / wet-hollow / pioneer / bare) per climate-biome (savanna gallery-copse, tundra thermokarst / lichen-heath, boreal muskeg / deadfall, …). DETERMINISM: the vocab must be fixed before T-1084 generates its first world (a later addition re-rolls affected voxels). Table size is not a perf/storage concern — author generously but to taste (~100k is headroom, not a target). + +BURNELLI (stakeholder, follow-on): a food-supply demand primitive keyed on biosphere_class (Mirror + frontier → import dependency; Compatible → local-food capable). Phase-2 economy consumer; does not block this ticket. + +CONSTRAINTS +- Authored input, not derivation (Arbour''s estate food must never be coin-flipped inedible). +- Semantic axes stay clade-agnostic (Forest = canopy whether oak or mega-fungus); the register skins niches, it does not change gameplay semantics. +- The mosaic geometry is chirality-blind — this work does NOT touch voxel geometry, only edibility/economy/naming/vocab. + +Chirality decisions resolved (2026-07-02, with Jeroen): +- Locked exemplars: Arbour=NativeCompatible, Solandar=NativeMirror, Keid=NativeCompatible, Oshima=TerraformedSterile. +- Miri assignments accepted: GJ-524=Mirror, Freyburg(GJ-684A)=Compatible, Hạ Long(GJ-124)=Compatible (native-Compatible harvest, per her rationale). +- USER OVERRIDES: Puerto Último(GJ-197)=NativeCompatible (breadbasket identity over Miri''s balance-motivated Mirror). Edict/Sirius(GJ-244A)=Airless — keep the world harsh/frozen (deliberately-inconvenient below-grade transit capital is load-bearing canon); no climate change; below-grade sealed habitat = no open-air biosphere. +- Two-gate default rule ACCEPTED for canon-silent worlds: Gate 0 (habitability from atmosphere/hydrosphere frontmatter → Airless / TerraformedSterile / Alive), Gate 1 (Compatible vs Mirror from economic_base_primary; agriculture→Compatible near-lock, penal→Mirror, research→50/50 lever). +- NAMING: Keid''s habitable body renamed Cadwal→(pending final pick; rec Linnaeus — pairs with Solander, its student naturalist; or Beagle). Capital stays ''Vance'' (already the author tribute). Miri''s IP flag (Cadwal = Vance''s exact book title) is the driver. +- Still to APPLY: the 7 additive wiki continuity edits (Miri specified exact text), the biosphere_class frontmatter+schema+importer plumbing (workstream 3), and the Cadwal→ rename across wiki + the GJ166A atlas proposal. + +NAMING CONFIRMED: Keid''s habitable body Cadwal → Linnaeus (the great classifier; ties to Solander/Solandar taxonomy + the ''five kingdoms''). Capital stays Vance. + +PROGRESS 2026-07-03: Workstreams 1-2 DONE + committed (388168eef, branch micro-habitat-mosaic). +- Cadwal→Linnaeus rename applied (body frontmatter name + biosphere_class:NativeCompatible, GJ-166A infobox, atlas proposal, D-247 clarified). Capital stays Vance. +- 5 wiki continuity edits applied (GJ-524 Mirror, GJ-166A/Keid Compatible, GJ-684A Freyburg Compatible, GJ-124 Hạ Long Compatible, GJ-197 Puerto Último Compatible). Solandar/Oshima needed none. +REMAINING: +- Workstream 3 (biosphere_class plumbing): add nullable bodies.biosphere_class column to systems-schema.sql; teach tooling/db/wiki_sync.py import_from_wiki to read biosphere_class frontmatter + apply the two-gate DEFAULT for canon-silent bodies (Gate0 atmosphere/hydrosphere, Gate1 economic_role/economic_base); add explicit frontmatter for the 3 override bodies still needing it (Solandar=NativeMirror, GJ-524=NativeMirror [uninhabited-but-alive → default would mis-Airless it], Edict/GJ244Ad=Airless [standard-atm+ice edge case]); ensure generate_wiki round-trips biosphere_class; then the BAKE (run import_from_wiki + generate_wiki → systems.db + regenerated infoboxes, incl. the Linnaeus name propagation) + commit systems.db. Add biosphere_class to BodyParams read set (D-240) as the D-247 code hook. NOTE: the bake is a systems.db binary-artifact commit — consequential, do deliberately. +- Workstream 4 (alien-ecology vocab → palette): integrate Miri''s biome × register vocabulary (cane/vane/wrack/husk/drum-root native-mirror lexicon + Earth-register names, per her Deliverable 3) into atlas/mosaic.rs + mosaic_constants.toml — extends the temperate/native baseline to the full surface-class × climate-biome × register palette. This also completes T-1084''s biome-awareness. Determinism: lock before generation. +Miri''s full Deliverable 3 vocab (the source for workstream 4) is in her T-1085 agent report. + +Workstream 4 DONE (partial) + committed (5fb34675e): grassland biome-awareness (ClimateBiome from temperature_c+moisture_q → savanna/temperate/boreal/tundra palettes; savanna Forest-copses, tundra lichen/sparse) + Miri''s full biome×register vocab preserved as docs/design/alien-ecology-vocabulary.md. Cold-barren districts now render structured-sparse (D-245 climate-appropriateness): vegetated_districts 8→20, 0→39 on cold bodies. Full suite green, believability golden regenerated. CONTINUATION (noted): Forest biomes (tropical/boreal), Wetland/extreme-class biomes, the introduced-Earth register (needs biosphere_class + the managed layer), and the §8 material follow-up. REMAINING on T-1085: workstream 3 (biosphere_class schema+importer+default-rule+bake) + this WS4 continuation. + +Workstream 3 DONE + committed (cc7c5ada0): biosphere_class plumbing via the stamped regen-db path. Nullable bodies.biosphere_class column (schema + migration); economy_import/bodies.py populate_biosphere_class (frontmatter override + D-247 two-gate default, recompute-all); wired as import step 17; frontmatter overrides for Solandar/GJ-524/Hạ Long (the 3 whose default deviated). systems.db regenerated + stamped (make regen-db). VERIFIED: all 9 canon exemplars correct; distribution 111 Compatible : 108 Mirror among inhabited alive (~50/50), Airless for uninhabited, TerraformedSterile for thin-atm. BodyParams Rust hook deferred (no consumer yet — mosaic is chirality-blind; Burnelli economy is the future consumer). + +T-1085 STATUS: WS1 (chirality assignment) DONE, WS2 (wiki continuity) DONE, WS3 (biosphere plumbing) DONE, WS4 (vocab→palette) DONE-partial (grassland biome-awareness + vocab doc; Forest/register/§8-material continuation noted). REMAINING: (a) rename completion — propagate Linnaeus to bodies.proper_name in the DB (still Cadwal; proper_name is atlas-CLI-owned, wipe+reimport would drop non-proposal cols → needs a targeted approach); (b) WS4 continuation; (c) Burnelli food-economy consumer (separate stakeholder follow-on).', 'Operationalize the D-247 native-biosphere premise. Full brief appended. + +--- +BRIEF (2026-07-02) — governing record: D-247 (governance/decisions/content.md); consumer: D-246 / T-1084 mosaic register. + +WHAT THIS IS +D-247 established that habitable Reach worlds were alive before humans (the settlement timeline forbids terraforming from dead rock), and that an AUTHORED per-world chirality bit gates whether native life is edible. This ticket turns that canon into data + reconciled wiki + the vocabulary the mosaic needs. Owner: Miri (worldbuilding/continuity). Stakeholder: Burnelli (food-import economics). Co-maintainer for the vocab: Araminta (visual grammar, per the T-995 ObjectTag precedent). + +THE MODEL (locked in D-247 — do not re-litigate, apply it): +- `biosphere_class ∈ {NativeCompatible, NativeMirror, TerraformedSterile, Airless}`. It is an AUTHORED INPUT, never seed-derived — it follows a world''s economic/cultural identity. +- Compatible ("levo") = edible; coupling *permits* an authored hazard but does not force it (most are benign gardens). +- Mirror ("dextro") = inedible but *guaranteed* inert (can''t infect/poison — safe to study). +- "Safe" ≠ "edible" — decoupled. Bio-safe is guaranteed on Mirror; food-safe is Compatible-only. +- Achiral seam (always works either way): breathe air, drink water, mine ore, burn/build with native biomass. Only eat/metabolize/medicate/infect/chirally-poison are gated. +- ~50/50 Compatible:Mirror is a DESIGN TARGET across canon-silent worlds, not a per-world draw. + +WORKSTREAMS +1. CHIRALITY ASSIGNMENT (Miri). Give every inhabited body a biosphere_class by authored identity: principled default from `economic_base_primary` + `planet_class` (food/drink exporters → Compatible; dead+maintained-atmosphere → TerraformedSterile), explicit overrides where canon speaks. Locked exemplars: Arbour (GJ-338B)=Compatible; Solandar (GJ-827)=Mirror; Keid (GJ-166A)=Compatible (preserved *from exploitation* of edible alien life — the stronger conservation motive; Solandar is the Mirror-inert preserve); Oshima (GJ-79)=TerraformedSterile. Hit the ~50/50 target across the silent remainder. +2. WIKI CONTINUITY (Miri). Reconcile the entries that already gesture at native biochemistry so each is consistent with its assigned bit + the mechanism: GJ-827, GJ-524, GJ-166A, GJ-684A, GJ-197, GJ-79, GJ-124 (resolve whether Hạ Long''s "protein" is native-Compatible harvest or Earth aquaculture). Additive/explanatory, not contradictory — preserve deliberately-vague lines as intentional. +3. biosphere_class AUTHORING PATH (asset-pipeline discipline — schema + source + values together, per .claude/rules/asset-pipeline.md). Add `biosphere_class` to wiki body frontmatter (where `substrate:` already lives), a nullable `bodies.biosphere_class` column in systems-schema.sql + MIGRATION_SQL, and importer read. NOT needed for D-246; lands with this pass. +4. ALIEN-ECOLOGY VOCABULARY (Miri + Araminta) — feeds T-1084 directly. The mosaic palette is keyed on surface-class × climate-biome × biosphere-register (D-246 Palette-key). Provide the micro-habitat NAMES per biome × register: native-mirror niches get *alien* clade names (Solandar''s "five kingdoms" flavor); introduced-Earth niches get Earth names (wheatfield, orchard, pasture). Fill the fixed niche spine (canopy / understory / wet-hollow / pioneer / bare) per climate-biome (savanna gallery-copse, tundra thermokarst / lichen-heath, boreal muskeg / deadfall, …). DETERMINISM: the vocab must be fixed before T-1084 generates its first world (a later addition re-rolls affected voxels). Table size is not a perf/storage concern — author generously but to taste (~100k is headroom, not a target). + +BURNELLI (stakeholder, follow-on): a food-supply demand primitive keyed on biosphere_class (Mirror + frontier → import dependency; Compatible → local-food capable). Phase-2 economy consumer; does not block this ticket. + +CONSTRAINTS +- Authored input, not derivation (Arbour''s estate food must never be coin-flipped inedible). +- Semantic axes stay clade-agnostic (Forest = canopy whether oak or mega-fungus); the register skins niches, it does not change gameplay semantics. +- The mosaic geometry is chirality-blind — this work does NOT touch voxel geometry, only edibility/economy/naming/vocab. + +Chirality decisions resolved (2026-07-02, with Jeroen): +- Locked exemplars: Arbour=NativeCompatible, Solandar=NativeMirror, Keid=NativeCompatible, Oshima=TerraformedSterile. +- Miri assignments accepted: GJ-524=Mirror, Freyburg(GJ-684A)=Compatible, Hạ Long(GJ-124)=Compatible (native-Compatible harvest, per her rationale). +- USER OVERRIDES: Puerto Último(GJ-197)=NativeCompatible (breadbasket identity over Miri''s balance-motivated Mirror). Edict/Sirius(GJ-244A)=Airless — keep the world harsh/frozen (deliberately-inconvenient below-grade transit capital is load-bearing canon); no climate change; below-grade sealed habitat = no open-air biosphere. +- Two-gate default rule ACCEPTED for canon-silent worlds: Gate 0 (habitability from atmosphere/hydrosphere frontmatter → Airless / TerraformedSterile / Alive), Gate 1 (Compatible vs Mirror from economic_base_primary; agriculture→Compatible near-lock, penal→Mirror, research→50/50 lever). +- NAMING: Keid''s habitable body renamed Cadwal→(pending final pick; rec Linnaeus — pairs with Solander, its student naturalist; or Beagle). Capital stays ''Vance'' (already the author tribute). Miri''s IP flag (Cadwal = Vance''s exact book title) is the driver. +- Still to APPLY: the 7 additive wiki continuity edits (Miri specified exact text), the biosphere_class frontmatter+schema+importer plumbing (workstream 3), and the Cadwal→ rename across wiki + the GJ166A atlas proposal. + +NAMING CONFIRMED: Keid''s habitable body Cadwal → Linnaeus (the great classifier; ties to Solander/Solandar taxonomy + the ''five kingdoms''). Capital stays Vance. + +PROGRESS 2026-07-03: Workstreams 1-2 DONE + committed (388168eef, branch micro-habitat-mosaic). +- Cadwal→Linnaeus rename applied (body frontmatter name + biosphere_class:NativeCompatible, GJ-166A infobox, atlas proposal, D-247 clarified). Capital stays Vance. +- 5 wiki continuity edits applied (GJ-524 Mirror, GJ-166A/Keid Compatible, GJ-684A Freyburg Compatible, GJ-124 Hạ Long Compatible, GJ-197 Puerto Último Compatible). Solandar/Oshima needed none. +REMAINING: +- Workstream 3 (biosphere_class plumbing): add nullable bodies.biosphere_class column to systems-schema.sql; teach tooling/db/wiki_sync.py import_from_wiki to read biosphere_class frontmatter + apply the two-gate DEFAULT for canon-silent bodies (Gate0 atmosphere/hydrosphere, Gate1 economic_role/economic_base); add explicit frontmatter for the 3 override bodies still needing it (Solandar=NativeMirror, GJ-524=NativeMirror [uninhabited-but-alive → default would mis-Airless it], Edict/GJ244Ad=Airless [standard-atm+ice edge case]); ensure generate_wiki round-trips biosphere_class; then the BAKE (run import_from_wiki + generate_wiki → systems.db + regenerated infoboxes, incl. the Linnaeus name propagation) + commit systems.db. Add biosphere_class to BodyParams read set (D-240) as the D-247 code hook. NOTE: the bake is a systems.db binary-artifact commit — consequential, do deliberately. +- Workstream 4 (alien-ecology vocab → palette): integrate Miri''s biome × register vocabulary (cane/vane/wrack/husk/drum-root native-mirror lexicon + Earth-register names, per her Deliverable 3) into atlas/mosaic.rs + mosaic_constants.toml — extends the temperate/native baseline to the full surface-class × climate-biome × register palette. This also completes T-1084''s biome-awareness. Determinism: lock before generation. +Miri''s full Deliverable 3 vocab (the source for workstream 4) is in her T-1085 agent report. + +Workstream 4 DONE (partial) + committed (5fb34675e): grassland biome-awareness (ClimateBiome from temperature_c+moisture_q → savanna/temperate/boreal/tundra palettes; savanna Forest-copses, tundra lichen/sparse) + Miri''s full biome×register vocab preserved as docs/design/alien-ecology-vocabulary.md. Cold-barren districts now render structured-sparse (D-245 climate-appropriateness): vegetated_districts 8→20, 0→39 on cold bodies. Full suite green, believability golden regenerated. CONTINUATION (noted): Forest biomes (tropical/boreal), Wetland/extreme-class biomes, the introduced-Earth register (needs biosphere_class + the managed layer), and the §8 material follow-up. REMAINING on T-1085: workstream 3 (biosphere_class schema+importer+default-rule+bake) + this WS4 continuation. + +Workstream 3 DONE + committed (cc7c5ada0): biosphere_class plumbing via the stamped regen-db path. Nullable bodies.biosphere_class column (schema + migration); economy_import/bodies.py populate_biosphere_class (frontmatter override + D-247 two-gate default, recompute-all); wired as import step 17; frontmatter overrides for Solandar/GJ-524/Hạ Long (the 3 whose default deviated). systems.db regenerated + stamped (make regen-db). VERIFIED: all 9 canon exemplars correct; distribution 111 Compatible : 108 Mirror among inhabited alive (~50/50), Airless for uninhabited, TerraformedSterile for thin-atm. BodyParams Rust hook deferred (no consumer yet — mosaic is chirality-blind; Burnelli economy is the future consumer). + +T-1085 STATUS: WS1 (chirality assignment) DONE, WS2 (wiki continuity) DONE, WS3 (biosphere plumbing) DONE, WS4 (vocab→palette) DONE-partial (grassland biome-awareness + vocab doc; Forest/register/§8-material continuation noted). REMAINING: (a) rename completion — propagate Linnaeus to bodies.proper_name in the DB (still Cadwal; proper_name is atlas-CLI-owned, wipe+reimport would drop non-proposal cols → needs a targeted approach); (b) WS4 continuation; (c) Burnelli food-economy consumer (separate stakeholder follow-on). + +CLOSED 2026-07-05 (PR #172 merged to main @ 895bb83ba). Core deliverable shipped: WS1 chirality assignment, WS2 wiki continuity, WS3 biosphere_class plumbing (stamped regen-db), WS4 grassland biome-awareness + vocab doc. Both blocking review findings (C1 over-vegetation, H1 biosphere gate) fixed + N1 (Wetland gate) folded in; both reviewers approved. Remaining work split into follow-ups: T-1086 (propagate Linnaeus to bodies.proper_name) and T-1087 (Forest/Wetland biome palettes + introduced-Earth register + §8 material). Burnelli food-economy consumer stays a Phase-2 stakeholder follow-on (noted, not filed — cross-phase).', NULL, '2026-07-05 17:46:33', '2026-07-05 17:46:33.511', '2026-07-05 17:46:33.511', NULL, '3cae4321f60cc166089db5d3c656ef6f', 2) ON CONFLICT(hash) DO NOTHING; +INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FGSK19FGZAC3H25VRAV4JRFW', 'status', 'review', 'done', NULL, '2026-07-05 17:46:36', '2026-07-05 17:46:36.690', '2026-07-05 17:46:36.690', NULL, '75db59fc46ee90ad66e9c61eadf627ac', 2) ON CONFLICT(hash) DO NOTHING; +INSERT INTO ticket_history (ticket_record_id, field, old_value, new_value, changed_by, changed_at, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FJ91R8RV38BJXGB2V55FP3B8', 'status', 'review', 'done', NULL, '2026-07-05 17:46:36', '2026-07-05 17:46:36.698', '2026-07-05 17:46:36.698', NULL, '09edd98de1f765ba1a946b57f54533d9', 2) ON CONFLICT(hash) DO NOTHING; diff --git a/.pql/changelog/ticket_idmap/2026-07.sql b/.pql/changelog/ticket_idmap/2026-07.sql index df8352613..6c07cb90d 100644 --- a/.pql/changelog/ticket_idmap/2026-07.sql +++ b/.pql/changelog/ticket_idmap/2026-07.sql @@ -1 +1,3 @@ INSERT INTO ticket_idmap (record_id, ticket_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FJ91R8RV38BJXGB2V55FP3B8', 'T-1085', '2026-07-02 20:30:57.224', '2026-07-02 20:30:57.224', NULL, 'a654aaf34a004714211b088d1ba2ca28', 2) ON CONFLICT(record_id) DO UPDATE SET ticket_id=excluded.ticket_id, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_idmap.updated_at OR (excluded.updated_at = ticket_idmap.updated_at AND excluded.hash > ticket_idmap.hash); +INSERT INTO ticket_idmap (record_id, ticket_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FK6RTBN796N8WZ0GW8BREG0R', 'T-1086', '2026-07-05 17:46:13.289', '2026-07-05 17:46:13.289', NULL, '43700db551218d61b2f78202d07ed71d', 2) ON CONFLICT(record_id) DO UPDATE SET ticket_id=excluded.ticket_id, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_idmap.updated_at OR (excluded.updated_at = ticket_idmap.updated_at AND excluded.hash > ticket_idmap.hash); +INSERT INTO ticket_idmap (record_id, ticket_id, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FK6RVP1HS8RHN29XQPEXT5QM', 'T-1087', '2026-07-05 17:46:24.140', '2026-07-05 17:46:24.140', NULL, '74a9cd82e7d4d0baa22ff63537ddda14', 2) ON CONFLICT(record_id) DO UPDATE SET ticket_id=excluded.ticket_id, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > ticket_idmap.updated_at OR (excluded.updated_at = ticket_idmap.updated_at AND excluded.hash > ticket_idmap.hash); diff --git a/.pql/changelog/tickets/2026-07.sql b/.pql/changelog/tickets/2026-07.sql index 79b53d61c..43cb9bbe4 100644 --- a/.pql/changelog/tickets/2026-07.sql +++ b/.pql/changelog/tickets/2026-07.sql @@ -431,3 +431,128 @@ Workstream 4 DONE (partial) + committed (5fb34675e): grassland biome-awareness ( Workstream 3 DONE + committed (cc7c5ada0): biosphere_class plumbing via the stamped regen-db path. Nullable bodies.biosphere_class column (schema + migration); economy_import/bodies.py populate_biosphere_class (frontmatter override + D-247 two-gate default, recompute-all); wired as import step 17; frontmatter overrides for Solandar/GJ-524/Hạ Long (the 3 whose default deviated). systems.db regenerated + stamped (make regen-db). VERIFIED: all 9 canon exemplars correct; distribution 111 Compatible : 108 Mirror among inhabited alive (~50/50), Airless for uninhabited, TerraformedSterile for thin-atm. BodyParams Rust hook deferred (no consumer yet — mosaic is chirality-blind; Burnelli economy is the future consumer). T-1085 STATUS: WS1 (chirality assignment) DONE, WS2 (wiki continuity) DONE, WS3 (biosphere plumbing) DONE, WS4 (vocab→palette) DONE-partial (grassland biome-awareness + vocab doc; Forest/register/§8-material continuation noted). REMAINING: (a) rename completion — propagate Linnaeus to bodies.proper_name in the DB (still Cadwal; proper_name is atlas-CLI-owned, wipe+reimport would drop non-proposal cols → needs a targeted approach); (b) WS4 continuation; (c) Burnelli food-economy consumer (separate stakeholder follow-on).', 'review', 'medium', 'miri', NULL, 'D-247', '2026-07-02 20:30:57.222', '2026-07-05 11:04:20.119', NULL, '8adc7b9bdd2f69889aae0237c1670291', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FK6RTBN796N8WZ0GW8BREG0R', 'task', '06FGSJNP8YM537DJCC82ZD6544', 'Propagate Linnaeus rename to bodies.proper_name in systems.db', 'Follow-up from T-1085 (D-247 biosphere pass), confirmed by the PR #172 re-review FYI. GJ166Ac''s biosphere_class is correctly NativeCompatible, but bodies.proper_name in systems.db still reads ''Cadwal'' — the wiki + atlas proposal were renamed to Linnaeus, but proper_name is atlas-CLI-owned and a wipe+reimport would drop non-proposal columns (e.g. founding_age_years). Needs a targeted approach: an atlas-CLI update path or a migration that sets proper_name without clobbering the enriched columns. Capital stays ''Vance''.', 'backlog', 'low', NULL, 'server', NULL, '2026-07-05 17:46:13.289', '2026-07-05 17:46:13.289', NULL, 'f5d4541a945a07b3325e072416ea8680', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FK6RVP1HS8RHN29XQPEXT5QM', 'story', '06FGSJNP8YM537DJCC82ZD6544', 'Mosaic biome palettes continuation — Forest/Wetland + introduced-Earth register + §8 material (D-246)', 'Continuation of T-1084/T-1085 WS4 (PR #172 shipped grassland biome-awareness + the alien-ecology vocab doc). Remaining: (1) Forest biome palettes (tropical/boreal) + Wetland/extreme-class biome variants — the D-246 vocab table grows past the temperate baseline rows. (2) The introduced-Earth managed register — needs the biosphere_class consumer + the D-166 managed/settlement layer (the D-228 wild->managed override). (3) The D-246 v1 material-variant follow-up (PR #172 H2): wire the material-driven families (Sand/Rock/Gravel/Lava, currently _ => false) so TerrainMaterial::{Hardpan, Scree} become reachable, with shape-aware §8 reconciliation. Source vocab: docs/design/alien-ecology-vocabulary.md. Determinism: lock any new palette entries before generation (a later addition re-rolls affected voxels). Threshold calibration deferred to Q-123.', 'backlog', 'medium', NULL, 'server', NULL, '2026-07-05 17:46:24.140', '2026-07-05 17:46:24.140', NULL, '3eed7ddc24e2ed5f65c7558f02a3dcd1', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FJ91R8RV38BJXGB2V55FP3B8', 'story', '06FGSJNP8YM537DJCC82ZD6544', 'Biosphere register (D-247) — chirality bits, wiki continuity, biosphere_class authoring + alien-ecology vocab', 'Operationalize the D-247 native-biosphere premise. Full brief appended. + +--- +BRIEF (2026-07-02) — governing record: D-247 (governance/decisions/content.md); consumer: D-246 / T-1084 mosaic register. + +WHAT THIS IS +D-247 established that habitable Reach worlds were alive before humans (the settlement timeline forbids terraforming from dead rock), and that an AUTHORED per-world chirality bit gates whether native life is edible. This ticket turns that canon into data + reconciled wiki + the vocabulary the mosaic needs. Owner: Miri (worldbuilding/continuity). Stakeholder: Burnelli (food-import economics). Co-maintainer for the vocab: Araminta (visual grammar, per the T-995 ObjectTag precedent). + +THE MODEL (locked in D-247 — do not re-litigate, apply it): +- `biosphere_class ∈ {NativeCompatible, NativeMirror, TerraformedSterile, Airless}`. It is an AUTHORED INPUT, never seed-derived — it follows a world''s economic/cultural identity. +- Compatible ("levo") = edible; coupling *permits* an authored hazard but does not force it (most are benign gardens). +- Mirror ("dextro") = inedible but *guaranteed* inert (can''t infect/poison — safe to study). +- "Safe" ≠ "edible" — decoupled. Bio-safe is guaranteed on Mirror; food-safe is Compatible-only. +- Achiral seam (always works either way): breathe air, drink water, mine ore, burn/build with native biomass. Only eat/metabolize/medicate/infect/chirally-poison are gated. +- ~50/50 Compatible:Mirror is a DESIGN TARGET across canon-silent worlds, not a per-world draw. + +WORKSTREAMS +1. CHIRALITY ASSIGNMENT (Miri). Give every inhabited body a biosphere_class by authored identity: principled default from `economic_base_primary` + `planet_class` (food/drink exporters → Compatible; dead+maintained-atmosphere → TerraformedSterile), explicit overrides where canon speaks. Locked exemplars: Arbour (GJ-338B)=Compatible; Solandar (GJ-827)=Mirror; Keid (GJ-166A)=Compatible (preserved *from exploitation* of edible alien life — the stronger conservation motive; Solandar is the Mirror-inert preserve); Oshima (GJ-79)=TerraformedSterile. Hit the ~50/50 target across the silent remainder. +2. WIKI CONTINUITY (Miri). Reconcile the entries that already gesture at native biochemistry so each is consistent with its assigned bit + the mechanism: GJ-827, GJ-524, GJ-166A, GJ-684A, GJ-197, GJ-79, GJ-124 (resolve whether Hạ Long''s "protein" is native-Compatible harvest or Earth aquaculture). Additive/explanatory, not contradictory — preserve deliberately-vague lines as intentional. +3. biosphere_class AUTHORING PATH (asset-pipeline discipline — schema + source + values together, per .claude/rules/asset-pipeline.md). Add `biosphere_class` to wiki body frontmatter (where `substrate:` already lives), a nullable `bodies.biosphere_class` column in systems-schema.sql + MIGRATION_SQL, and importer read. NOT needed for D-246; lands with this pass. +4. ALIEN-ECOLOGY VOCABULARY (Miri + Araminta) — feeds T-1084 directly. The mosaic palette is keyed on surface-class × climate-biome × biosphere-register (D-246 Palette-key). Provide the micro-habitat NAMES per biome × register: native-mirror niches get *alien* clade names (Solandar''s "five kingdoms" flavor); introduced-Earth niches get Earth names (wheatfield, orchard, pasture). Fill the fixed niche spine (canopy / understory / wet-hollow / pioneer / bare) per climate-biome (savanna gallery-copse, tundra thermokarst / lichen-heath, boreal muskeg / deadfall, …). DETERMINISM: the vocab must be fixed before T-1084 generates its first world (a later addition re-rolls affected voxels). Table size is not a perf/storage concern — author generously but to taste (~100k is headroom, not a target). + +BURNELLI (stakeholder, follow-on): a food-supply demand primitive keyed on biosphere_class (Mirror + frontier → import dependency; Compatible → local-food capable). Phase-2 economy consumer; does not block this ticket. + +CONSTRAINTS +- Authored input, not derivation (Arbour''s estate food must never be coin-flipped inedible). +- Semantic axes stay clade-agnostic (Forest = canopy whether oak or mega-fungus); the register skins niches, it does not change gameplay semantics. +- The mosaic geometry is chirality-blind — this work does NOT touch voxel geometry, only edibility/economy/naming/vocab. + +Chirality decisions resolved (2026-07-02, with Jeroen): +- Locked exemplars: Arbour=NativeCompatible, Solandar=NativeMirror, Keid=NativeCompatible, Oshima=TerraformedSterile. +- Miri assignments accepted: GJ-524=Mirror, Freyburg(GJ-684A)=Compatible, Hạ Long(GJ-124)=Compatible (native-Compatible harvest, per her rationale). +- USER OVERRIDES: Puerto Último(GJ-197)=NativeCompatible (breadbasket identity over Miri''s balance-motivated Mirror). Edict/Sirius(GJ-244A)=Airless — keep the world harsh/frozen (deliberately-inconvenient below-grade transit capital is load-bearing canon); no climate change; below-grade sealed habitat = no open-air biosphere. +- Two-gate default rule ACCEPTED for canon-silent worlds: Gate 0 (habitability from atmosphere/hydrosphere frontmatter → Airless / TerraformedSterile / Alive), Gate 1 (Compatible vs Mirror from economic_base_primary; agriculture→Compatible near-lock, penal→Mirror, research→50/50 lever). +- NAMING: Keid''s habitable body renamed Cadwal→(pending final pick; rec Linnaeus — pairs with Solander, its student naturalist; or Beagle). Capital stays ''Vance'' (already the author tribute). Miri''s IP flag (Cadwal = Vance''s exact book title) is the driver. +- Still to APPLY: the 7 additive wiki continuity edits (Miri specified exact text), the biosphere_class frontmatter+schema+importer plumbing (workstream 3), and the Cadwal→ rename across wiki + the GJ166A atlas proposal. + +NAMING CONFIRMED: Keid''s habitable body Cadwal → Linnaeus (the great classifier; ties to Solander/Solandar taxonomy + the ''five kingdoms''). Capital stays Vance. + +PROGRESS 2026-07-03: Workstreams 1-2 DONE + committed (388168eef, branch micro-habitat-mosaic). +- Cadwal→Linnaeus rename applied (body frontmatter name + biosphere_class:NativeCompatible, GJ-166A infobox, atlas proposal, D-247 clarified). Capital stays Vance. +- 5 wiki continuity edits applied (GJ-524 Mirror, GJ-166A/Keid Compatible, GJ-684A Freyburg Compatible, GJ-124 Hạ Long Compatible, GJ-197 Puerto Último Compatible). Solandar/Oshima needed none. +REMAINING: +- Workstream 3 (biosphere_class plumbing): add nullable bodies.biosphere_class column to systems-schema.sql; teach tooling/db/wiki_sync.py import_from_wiki to read biosphere_class frontmatter + apply the two-gate DEFAULT for canon-silent bodies (Gate0 atmosphere/hydrosphere, Gate1 economic_role/economic_base); add explicit frontmatter for the 3 override bodies still needing it (Solandar=NativeMirror, GJ-524=NativeMirror [uninhabited-but-alive → default would mis-Airless it], Edict/GJ244Ad=Airless [standard-atm+ice edge case]); ensure generate_wiki round-trips biosphere_class; then the BAKE (run import_from_wiki + generate_wiki → systems.db + regenerated infoboxes, incl. the Linnaeus name propagation) + commit systems.db. Add biosphere_class to BodyParams read set (D-240) as the D-247 code hook. NOTE: the bake is a systems.db binary-artifact commit — consequential, do deliberately. +- Workstream 4 (alien-ecology vocab → palette): integrate Miri''s biome × register vocabulary (cane/vane/wrack/husk/drum-root native-mirror lexicon + Earth-register names, per her Deliverable 3) into atlas/mosaic.rs + mosaic_constants.toml — extends the temperate/native baseline to the full surface-class × climate-biome × register palette. This also completes T-1084''s biome-awareness. Determinism: lock before generation. +Miri''s full Deliverable 3 vocab (the source for workstream 4) is in her T-1085 agent report. + +Workstream 4 DONE (partial) + committed (5fb34675e): grassland biome-awareness (ClimateBiome from temperature_c+moisture_q → savanna/temperate/boreal/tundra palettes; savanna Forest-copses, tundra lichen/sparse) + Miri''s full biome×register vocab preserved as docs/design/alien-ecology-vocabulary.md. Cold-barren districts now render structured-sparse (D-245 climate-appropriateness): vegetated_districts 8→20, 0→39 on cold bodies. Full suite green, believability golden regenerated. CONTINUATION (noted): Forest biomes (tropical/boreal), Wetland/extreme-class biomes, the introduced-Earth register (needs biosphere_class + the managed layer), and the §8 material follow-up. REMAINING on T-1085: workstream 3 (biosphere_class schema+importer+default-rule+bake) + this WS4 continuation. + +Workstream 3 DONE + committed (cc7c5ada0): biosphere_class plumbing via the stamped regen-db path. Nullable bodies.biosphere_class column (schema + migration); economy_import/bodies.py populate_biosphere_class (frontmatter override + D-247 two-gate default, recompute-all); wired as import step 17; frontmatter overrides for Solandar/GJ-524/Hạ Long (the 3 whose default deviated). systems.db regenerated + stamped (make regen-db). VERIFIED: all 9 canon exemplars correct; distribution 111 Compatible : 108 Mirror among inhabited alive (~50/50), Airless for uninhabited, TerraformedSterile for thin-atm. BodyParams Rust hook deferred (no consumer yet — mosaic is chirality-blind; Burnelli economy is the future consumer). + +T-1085 STATUS: WS1 (chirality assignment) DONE, WS2 (wiki continuity) DONE, WS3 (biosphere plumbing) DONE, WS4 (vocab→palette) DONE-partial (grassland biome-awareness + vocab doc; Forest/register/§8-material continuation noted). REMAINING: (a) rename completion — propagate Linnaeus to bodies.proper_name in the DB (still Cadwal; proper_name is atlas-CLI-owned, wipe+reimport would drop non-proposal cols → needs a targeted approach); (b) WS4 continuation; (c) Burnelli food-economy consumer (separate stakeholder follow-on). + +CLOSED 2026-07-05 (PR #172 merged to main @ 895bb83ba). Core deliverable shipped: WS1 chirality assignment, WS2 wiki continuity, WS3 biosphere_class plumbing (stamped regen-db), WS4 grassland biome-awareness + vocab doc. Both blocking review findings (C1 over-vegetation, H1 biosphere gate) fixed + N1 (Wetland gate) folded in; both reviewers approved. Remaining work split into follow-ups: T-1086 (propagate Linnaeus to bodies.proper_name) and T-1087 (Forest/Wetland biome palettes + introduced-Earth register + §8 material). Burnelli food-economy consumer stays a Phase-2 stakeholder follow-on (noted, not filed — cross-phase).', 'review', 'medium', 'miri', NULL, 'D-247', '2026-07-02 20:30:57.222', '2026-07-05 17:46:33.511', NULL, '7ff082f949e3b57a35709dc94c97d655', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FGSK19FGZAC3H25VRAV4JRFW', 'story', '06FGSJNP8YM537DJCC82ZD6544', 'Intra-class micro-habitat mosaic — seed-scattered sub-features within every terrain type', 'A third believability lever, distinct from T-1080 (macro field gradient) and T-1081 (relief): within a SINGLE terrain class the sub-chunk seed should paint a spatially-coherent mosaic of micro-habitats, generalized to ALL terrain types. Motivating case: the probe''s ''Wetland 100%'' should resolve into clearings, copses, creeks, meadows, bogs, marshes — and likewise for every other class. NOT D-210/T-948: D-210 SubBiomeVariant is a MACRO biome tag per attractor (Tundra vs TemperateForest vs Wetland) — ''which biome''. THIS is finer: the intra-class MICRO-mosaic (''texture within a class''), at sub-chunk (<64 m) scale. MECHANIC: district/biome picks the PALETTE; the sub-chunk seed (SeedDomain::Voxel) paints the MOSAIC, reusing the derive-don''t-store tier (detail_scatter.rs, domain_warp, D-227). Three properties: (1) spatially COHERENT — patches (copse/clearing/bog/meadow) are blobs via low-frequency noise; creeks are lines following micro-drainage; never per-tile salt-and-pepper. (2) causally CONDITIONED on micro-relief/micro-drainage/moisture/slope/aspect (bogs in wettest lows, meadows on drier rises, copses where drainage improves, creeks along micro-thalwegs) — legible, not random. (3) MODULATES the existing D-228 axes, not a new axis. PER-CLASS VOCAB (one mechanism, per-class data): Wetland: clearing/copse/creek/meadow/bog/marsh; Forest: glade/dense stand/deadfall/brook/fern undergrowth; Grassland: tussock/scrub island/wildflower/dry wash; Sand: dune crest/slack/hardpan/oasis/scrub clump; Rock: outcrop/scree/ledge/lichen/talus; Gravel: bar/active channel/vegetated island; Lava: fresh sheet/weathered crust/tube collapse/pioneer scrub. Needs a Q/D-record before implementation. Relates to T-948 (D-210 macro), T-1081 (relief, a conditioning input), T-1083 (protocol must measure intra-class mosaic diversity). + +--- +Refinement (2026-07-02, /whats-next Si pass + user resolution): design gate resolved. First work item: write the Q/D-record (claim via `pql decisions claim D architecture`), pinning the five decisions below; then implement. + +DECISIONS (user-resolved): +1. MECHANISM: new `voxel_mosaic()` octave band in detail_scatter.rs (~[64,32,16,8] m) + `SeedDomain::VoxelMosaic = 12` (append-only; update the pinned-discriminant test in server/src/seed.rs) → organic blob patches. Creeks + wet/dry conditioning follow the existing voxel_relief field''s micro-thalwegs (creeks along lowest-relief paths; bogs in lows, meadows on rises). ~4 extra value_noise calls/voxel — same cost class as voxel_relief. +2. VOCAB→AXES: expand D-228 enum VARIANTS (values on existing axes — not new axes) to cover the FULL shipped vocabulary NOW, all 7 classes. User rationale: palette composition affects the deterministic realization, so adding variants later would shift generated worlds — front-load the vocabulary. The complete axis-combination table for all 7×5–6 vocab items is the load-bearing content of the D-record, with a D-228 amendment for every item needing a new variant (deadfall / hardpan / lichen / fern-undergrowth have no honest existing mapping). +3. PALETTE RESIDENCY: `server/data/mosaic_constants.toml`, runtime-loaded like climate_constants.toml (T-1080 precedent). Note: the TOML is part of the deterministic input surface — weight changes change realizations; expected during Q-123 calibration, freeze after. +4. DoD METRIC IN SCOPE: add a within-patch intra-class variety field to ContrastMetrics (server/src/atlas/believability.rs) + a provisional criterion K≥3 distinct micro-features per sampled patch; Q-123 calibrates the final K. Matches the T-1081 precedent (mechanic + metric land together). +5. FAMILY GATING (grounded default, accepted): flat families (AlluvialPlain, LavaField, BraidedDelta, DuneStrand, MeanderReach) take the full mosaic; dramatic families (CliffCoast, FjordWall, IncisedGorge) get a per-family-gated non-structural modulation pass (vegetation/material only — must not warp carved geometry), mirroring voxel_relief gating. WaterBody: none. <5 ms chunk budget verification is part of implementation (T-1081 harness precedent). + +CODE TOUCHPOINTS (Si-verified 2026-07-02): detail_scatter.rs:87-96 (voxel_relief pattern to extend), seed.rs:84-118 (SeedDomain; pinned-discriminant test ~:267), voxel.rs:1907-1943 (scatter_vegetation — the per-voxel salt-and-pepper this replaces), voxel.rs:445-495 (post-dispatch modulation seam), believability.rs (ContrastMetrics; evaluate_criteria ~:319). Overlaps to reconcile in the axis table: tube_depression (voxel.rs:710-717, Lava vocab) and braided-delta gravel-bar scrub (voxel.rs:1069-1092, Gravel vocab). + +D-record written: D-246 (governance/decisions/architecture.md) pins all five resolved decisions + the full 32-row vocab→D-228 axis table + palette-key rule. D-228 amended to add the five new axis values (Vegetation::{Meadow,Deadfall,Lichen}, TerrainMaterial::{Hardpan,Scree}). D-246 is now the governing record for implementation; decision_ref D-227 kept as the derive-don''t-store parent.', 'done', 'high', NULL, 'server', 'D-227', '2026-06-28 05:55:34.396', '2026-07-05 17:46:36.689', NULL, 'b5fff3907c71295a337361bce8f8720b', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash); +INSERT INTO tickets (record_id, type, parent_record_id, title, description, status, priority, assigned_to, team, decision_ref, created_at, updated_at, deleted_at, hash, canonical_version) VALUES ('06FJ91R8RV38BJXGB2V55FP3B8', 'story', '06FGSJNP8YM537DJCC82ZD6544', 'Biosphere register (D-247) — chirality bits, wiki continuity, biosphere_class authoring + alien-ecology vocab', 'Operationalize the D-247 native-biosphere premise. Full brief appended. + +--- +BRIEF (2026-07-02) — governing record: D-247 (governance/decisions/content.md); consumer: D-246 / T-1084 mosaic register. + +WHAT THIS IS +D-247 established that habitable Reach worlds were alive before humans (the settlement timeline forbids terraforming from dead rock), and that an AUTHORED per-world chirality bit gates whether native life is edible. This ticket turns that canon into data + reconciled wiki + the vocabulary the mosaic needs. Owner: Miri (worldbuilding/continuity). Stakeholder: Burnelli (food-import economics). Co-maintainer for the vocab: Araminta (visual grammar, per the T-995 ObjectTag precedent). + +THE MODEL (locked in D-247 — do not re-litigate, apply it): +- `biosphere_class ∈ {NativeCompatible, NativeMirror, TerraformedSterile, Airless}`. It is an AUTHORED INPUT, never seed-derived — it follows a world''s economic/cultural identity. +- Compatible ("levo") = edible; coupling *permits* an authored hazard but does not force it (most are benign gardens). +- Mirror ("dextro") = inedible but *guaranteed* inert (can''t infect/poison — safe to study). +- "Safe" ≠ "edible" — decoupled. Bio-safe is guaranteed on Mirror; food-safe is Compatible-only. +- Achiral seam (always works either way): breathe air, drink water, mine ore, burn/build with native biomass. Only eat/metabolize/medicate/infect/chirally-poison are gated. +- ~50/50 Compatible:Mirror is a DESIGN TARGET across canon-silent worlds, not a per-world draw. + +WORKSTREAMS +1. CHIRALITY ASSIGNMENT (Miri). Give every inhabited body a biosphere_class by authored identity: principled default from `economic_base_primary` + `planet_class` (food/drink exporters → Compatible; dead+maintained-atmosphere → TerraformedSterile), explicit overrides where canon speaks. Locked exemplars: Arbour (GJ-338B)=Compatible; Solandar (GJ-827)=Mirror; Keid (GJ-166A)=Compatible (preserved *from exploitation* of edible alien life — the stronger conservation motive; Solandar is the Mirror-inert preserve); Oshima (GJ-79)=TerraformedSterile. Hit the ~50/50 target across the silent remainder. +2. WIKI CONTINUITY (Miri). Reconcile the entries that already gesture at native biochemistry so each is consistent with its assigned bit + the mechanism: GJ-827, GJ-524, GJ-166A, GJ-684A, GJ-197, GJ-79, GJ-124 (resolve whether Hạ Long''s "protein" is native-Compatible harvest or Earth aquaculture). Additive/explanatory, not contradictory — preserve deliberately-vague lines as intentional. +3. biosphere_class AUTHORING PATH (asset-pipeline discipline — schema + source + values together, per .claude/rules/asset-pipeline.md). Add `biosphere_class` to wiki body frontmatter (where `substrate:` already lives), a nullable `bodies.biosphere_class` column in systems-schema.sql + MIGRATION_SQL, and importer read. NOT needed for D-246; lands with this pass. +4. ALIEN-ECOLOGY VOCABULARY (Miri + Araminta) — feeds T-1084 directly. The mosaic palette is keyed on surface-class × climate-biome × biosphere-register (D-246 Palette-key). Provide the micro-habitat NAMES per biome × register: native-mirror niches get *alien* clade names (Solandar''s "five kingdoms" flavor); introduced-Earth niches get Earth names (wheatfield, orchard, pasture). Fill the fixed niche spine (canopy / understory / wet-hollow / pioneer / bare) per climate-biome (savanna gallery-copse, tundra thermokarst / lichen-heath, boreal muskeg / deadfall, …). DETERMINISM: the vocab must be fixed before T-1084 generates its first world (a later addition re-rolls affected voxels). Table size is not a perf/storage concern — author generously but to taste (~100k is headroom, not a target). + +BURNELLI (stakeholder, follow-on): a food-supply demand primitive keyed on biosphere_class (Mirror + frontier → import dependency; Compatible → local-food capable). Phase-2 economy consumer; does not block this ticket. + +CONSTRAINTS +- Authored input, not derivation (Arbour''s estate food must never be coin-flipped inedible). +- Semantic axes stay clade-agnostic (Forest = canopy whether oak or mega-fungus); the register skins niches, it does not change gameplay semantics. +- The mosaic geometry is chirality-blind — this work does NOT touch voxel geometry, only edibility/economy/naming/vocab. + +Chirality decisions resolved (2026-07-02, with Jeroen): +- Locked exemplars: Arbour=NativeCompatible, Solandar=NativeMirror, Keid=NativeCompatible, Oshima=TerraformedSterile. +- Miri assignments accepted: GJ-524=Mirror, Freyburg(GJ-684A)=Compatible, Hạ Long(GJ-124)=Compatible (native-Compatible harvest, per her rationale). +- USER OVERRIDES: Puerto Último(GJ-197)=NativeCompatible (breadbasket identity over Miri''s balance-motivated Mirror). Edict/Sirius(GJ-244A)=Airless — keep the world harsh/frozen (deliberately-inconvenient below-grade transit capital is load-bearing canon); no climate change; below-grade sealed habitat = no open-air biosphere. +- Two-gate default rule ACCEPTED for canon-silent worlds: Gate 0 (habitability from atmosphere/hydrosphere frontmatter → Airless / TerraformedSterile / Alive), Gate 1 (Compatible vs Mirror from economic_base_primary; agriculture→Compatible near-lock, penal→Mirror, research→50/50 lever). +- NAMING: Keid''s habitable body renamed Cadwal→(pending final pick; rec Linnaeus — pairs with Solander, its student naturalist; or Beagle). Capital stays ''Vance'' (already the author tribute). Miri''s IP flag (Cadwal = Vance''s exact book title) is the driver. +- Still to APPLY: the 7 additive wiki continuity edits (Miri specified exact text), the biosphere_class frontmatter+schema+importer plumbing (workstream 3), and the Cadwal→ rename across wiki + the GJ166A atlas proposal. + +NAMING CONFIRMED: Keid''s habitable body Cadwal → Linnaeus (the great classifier; ties to Solander/Solandar taxonomy + the ''five kingdoms''). Capital stays Vance. + +PROGRESS 2026-07-03: Workstreams 1-2 DONE + committed (388168eef, branch micro-habitat-mosaic). +- Cadwal→Linnaeus rename applied (body frontmatter name + biosphere_class:NativeCompatible, GJ-166A infobox, atlas proposal, D-247 clarified). Capital stays Vance. +- 5 wiki continuity edits applied (GJ-524 Mirror, GJ-166A/Keid Compatible, GJ-684A Freyburg Compatible, GJ-124 Hạ Long Compatible, GJ-197 Puerto Último Compatible). Solandar/Oshima needed none. +REMAINING: +- Workstream 3 (biosphere_class plumbing): add nullable bodies.biosphere_class column to systems-schema.sql; teach tooling/db/wiki_sync.py import_from_wiki to read biosphere_class frontmatter + apply the two-gate DEFAULT for canon-silent bodies (Gate0 atmosphere/hydrosphere, Gate1 economic_role/economic_base); add explicit frontmatter for the 3 override bodies still needing it (Solandar=NativeMirror, GJ-524=NativeMirror [uninhabited-but-alive → default would mis-Airless it], Edict/GJ244Ad=Airless [standard-atm+ice edge case]); ensure generate_wiki round-trips biosphere_class; then the BAKE (run import_from_wiki + generate_wiki → systems.db + regenerated infoboxes, incl. the Linnaeus name propagation) + commit systems.db. Add biosphere_class to BodyParams read set (D-240) as the D-247 code hook. NOTE: the bake is a systems.db binary-artifact commit — consequential, do deliberately. +- Workstream 4 (alien-ecology vocab → palette): integrate Miri''s biome × register vocabulary (cane/vane/wrack/husk/drum-root native-mirror lexicon + Earth-register names, per her Deliverable 3) into atlas/mosaic.rs + mosaic_constants.toml — extends the temperate/native baseline to the full surface-class × climate-biome × register palette. This also completes T-1084''s biome-awareness. Determinism: lock before generation. +Miri''s full Deliverable 3 vocab (the source for workstream 4) is in her T-1085 agent report. + +Workstream 4 DONE (partial) + committed (5fb34675e): grassland biome-awareness (ClimateBiome from temperature_c+moisture_q → savanna/temperate/boreal/tundra palettes; savanna Forest-copses, tundra lichen/sparse) + Miri''s full biome×register vocab preserved as docs/design/alien-ecology-vocabulary.md. Cold-barren districts now render structured-sparse (D-245 climate-appropriateness): vegetated_districts 8→20, 0→39 on cold bodies. Full suite green, believability golden regenerated. CONTINUATION (noted): Forest biomes (tropical/boreal), Wetland/extreme-class biomes, the introduced-Earth register (needs biosphere_class + the managed layer), and the §8 material follow-up. REMAINING on T-1085: workstream 3 (biosphere_class schema+importer+default-rule+bake) + this WS4 continuation. + +Workstream 3 DONE + committed (cc7c5ada0): biosphere_class plumbing via the stamped regen-db path. Nullable bodies.biosphere_class column (schema + migration); economy_import/bodies.py populate_biosphere_class (frontmatter override + D-247 two-gate default, recompute-all); wired as import step 17; frontmatter overrides for Solandar/GJ-524/Hạ Long (the 3 whose default deviated). systems.db regenerated + stamped (make regen-db). VERIFIED: all 9 canon exemplars correct; distribution 111 Compatible : 108 Mirror among inhabited alive (~50/50), Airless for uninhabited, TerraformedSterile for thin-atm. BodyParams Rust hook deferred (no consumer yet — mosaic is chirality-blind; Burnelli economy is the future consumer). + +T-1085 STATUS: WS1 (chirality assignment) DONE, WS2 (wiki continuity) DONE, WS3 (biosphere plumbing) DONE, WS4 (vocab→palette) DONE-partial (grassland biome-awareness + vocab doc; Forest/register/§8-material continuation noted). REMAINING: (a) rename completion — propagate Linnaeus to bodies.proper_name in the DB (still Cadwal; proper_name is atlas-CLI-owned, wipe+reimport would drop non-proposal cols → needs a targeted approach); (b) WS4 continuation; (c) Burnelli food-economy consumer (separate stakeholder follow-on). + +CLOSED 2026-07-05 (PR #172 merged to main @ 895bb83ba). Core deliverable shipped: WS1 chirality assignment, WS2 wiki continuity, WS3 biosphere_class plumbing (stamped regen-db), WS4 grassland biome-awareness + vocab doc. Both blocking review findings (C1 over-vegetation, H1 biosphere gate) fixed + N1 (Wetland gate) folded in; both reviewers approved. Remaining work split into follow-ups: T-1086 (propagate Linnaeus to bodies.proper_name) and T-1087 (Forest/Wetland biome palettes + introduced-Earth register + §8 material). Burnelli food-economy consumer stays a Phase-2 stakeholder follow-on (noted, not filed — cross-phase).', 'done', 'medium', 'miri', NULL, 'D-247', '2026-07-02 20:30:57.222', '2026-07-05 17:46:36.698', NULL, '8b1b13167ab0c9f9ef270ce13532778b', 2) ON CONFLICT(record_id) DO UPDATE SET type=excluded.type, parent_record_id=excluded.parent_record_id, title=excluded.title, description=excluded.description, status=excluded.status, priority=excluded.priority, assigned_to=excluded.assigned_to, team=excluded.team, decision_ref=excluded.decision_ref, updated_at=excluded.updated_at, deleted_at=excluded.deleted_at, hash=excluded.hash, canonical_version=excluded.canonical_version WHERE excluded.updated_at > tickets.updated_at OR (excluded.updated_at = tickets.updated_at AND excluded.hash > tickets.hash);