From a45415b23ae305d4a5918e37949422cbd35fa213 Mon Sep 17 00:00:00 2001 From: Jeroen Schweitzer Date: Wed, 2 Sep 2026 14:45:15 +0200 Subject: [PATCH] =?UTF-8?q?fix(docs):=20D-262=20=E2=80=94=20the=20data-flo?= =?UTF-8?q?w=20diagram=20named=20a=20retired=20atlas=20path?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The gate caught its own case. tooling/atlas moved into the reach CLI in T-1285, and wiki-generator-flow.d2 still named it as the bodies catalog origin — exactly the silent staleness D-262 exists to prevent, found by the check rather than by a reader months later. Co-Authored-By: Claude Opus 5 (1M context) --- .../diagrams/data-flow/wiki-generator-flow.d2 | 2 +- .../data-flow/wiki-generator-flow.svg | 158 +++++++++--------- 2 files changed, 80 insertions(+), 80 deletions(-) diff --git a/docs/diagrams/data-flow/wiki-generator-flow.d2 b/docs/diagrams/data-flow/wiki-generator-flow.d2 index 90c64c4b0..15afd7754 100644 --- a/docs/diagrams/data-flow/wiki-generator-flow.d2 +++ b/docs/diagrams/data-flow/wiki-generator-flow.d2 @@ -44,7 +44,7 @@ econ: "wiki/economics/\nTOMLs + 37 commodity pages" {class: authored} corp: "wiki/corporations/*.md\n156 pages" {class: authored} gttr: "gttr*.md\nDrifter's Guide prose" {class: authored} prose: "system-page prose sections" {class: authored} -cli: "tooling/atlas add-body\nTHE bodies catalog origin" {class: authored} +cli: "reach atlas db add-body\nTHE bodies catalog origin" {class: authored} # ---- generators (blue hexagons) ---- econimp: "import_economics\n+ generate_brands" {class: tool} diff --git a/docs/diagrams/data-flow/wiki-generator-flow.svg b/docs/diagrams/data-flow/wiki-generator-flow.svg index 26bedb3b3..e5b00dda1 100644 --- a/docs/diagrams/data-flow/wiki-generator-flow.svg +++ b/docs/diagrams/data-flow/wiki-generator-flow.svg @@ -1,16 +1,16 @@ -wiki/economics/TOMLs + 37 commodity pageswiki/corporations/*.md156 pagesgttr*.mdDrifter's Guide prosesystem-page prose sectionstooling/atlas add-bodyTHE bodies catalog originimport_economics+ generate_brandswiki_sync.pyscaffold_bodies.py+ body_definition_parserpopulate_gttr_hookpopulate_terrain_referenceimport_heightmaps+ planet_simulationsystems.dbstar-map.jsonwiki/star-systems/GJ-*/index.mdREAD-ONLY blockswiki/star-systems/GJ-*/bodies/{id}/index.mdfrontmatter = body definitionheightmap · reliefmap · globeterrain.npz · markers.jsongenerated_brands.tomlserver cascadeGodot clientREADING THIS COLOUR = kind. green authored · blue generator · amber store grey generated-into-wiki/ · purple runtimeLINE = when. solid build-time · green runtime dashed one-time/bootstrap · RED the trap TWO PATHS RUN BOTH WAYSwiki_sync.py renders DB→wiki (generate_wiki(), routine) ANDparses wiki→DB (import_from_wiki(), bootstrap only).Not a drawing error. THE RED EDGE IS THE EXPENSIVE ONEscaffold_bodies.py writes a body page once and NEVERoverwrites it; the generator then reads that frontmatterdirectly. A hand-edit there is not reverted — it is OBEYED,and silently changes world generation. Hence theGOVERNANCE.md prohibition. TWO ROUTES INTO THE GAMEsystems.db ships with the build; the per-body PNGs are readat RUNTIME via bodies.terrain_reference, never baked in. FIELD RESOLUTION IN A BODY PAGE (body_definition_parser)override > direct read > derived > inferred > seeded random.Continuous fields vary because they fall to the last tier;categorical ones are concentrated because they come fromthe bodies table. cataloggttr_hookrenderspreservedbodies tablewrites ONCE parses (bootstrap) read as INPUTterrain_reference read at runtimeshipped + .d2-3605573183 .fill-N1{fill:#0A0F25;} + .d2-3605573183 .fill-N2{fill:#676C7E;} + .d2-3605573183 .fill-N3{fill:#9499AB;} + .d2-3605573183 .fill-N4{fill:#CFD2DD;} + .d2-3605573183 .fill-N5{fill:#DEE1EB;} + .d2-3605573183 .fill-N6{fill:#EEF1F8;} + .d2-3605573183 .fill-N7{fill:#FFFFFF;} + .d2-3605573183 .fill-B1{fill:#0D32B2;} + .d2-3605573183 .fill-B2{fill:#0D32B2;} + .d2-3605573183 .fill-B3{fill:#E3E9FD;} + .d2-3605573183 .fill-B4{fill:#E3E9FD;} + .d2-3605573183 .fill-B5{fill:#EDF0FD;} + .d2-3605573183 .fill-B6{fill:#F7F8FE;} + .d2-3605573183 .fill-AA2{fill:#4A6FF3;} + .d2-3605573183 .fill-AA4{fill:#EDF0FD;} + .d2-3605573183 .fill-AA5{fill:#F7F8FE;} + .d2-3605573183 .fill-AB4{fill:#EDF0FD;} + .d2-3605573183 .fill-AB5{fill:#F7F8FE;} + .d2-3605573183 .stroke-N1{stroke:#0A0F25;} + .d2-3605573183 .stroke-N2{stroke:#676C7E;} + .d2-3605573183 .stroke-N3{stroke:#9499AB;} + .d2-3605573183 .stroke-N4{stroke:#CFD2DD;} + .d2-3605573183 .stroke-N5{stroke:#DEE1EB;} + .d2-3605573183 .stroke-N6{stroke:#EEF1F8;} + .d2-3605573183 .stroke-N7{stroke:#FFFFFF;} + .d2-3605573183 .stroke-B1{stroke:#0D32B2;} + .d2-3605573183 .stroke-B2{stroke:#0D32B2;} + .d2-3605573183 .stroke-B3{stroke:#E3E9FD;} + .d2-3605573183 .stroke-B4{stroke:#E3E9FD;} + .d2-3605573183 .stroke-B5{stroke:#EDF0FD;} + .d2-3605573183 .stroke-B6{stroke:#F7F8FE;} + .d2-3605573183 .stroke-AA2{stroke:#4A6FF3;} + .d2-3605573183 .stroke-AA4{stroke:#EDF0FD;} + .d2-3605573183 .stroke-AA5{stroke:#F7F8FE;} + .d2-3605573183 .stroke-AB4{stroke:#EDF0FD;} + .d2-3605573183 .stroke-AB5{stroke:#F7F8FE;} + .d2-3605573183 .background-color-N1{background-color:#0A0F25;} + .d2-3605573183 .background-color-N2{background-color:#676C7E;} + .d2-3605573183 .background-color-N3{background-color:#9499AB;} + .d2-3605573183 .background-color-N4{background-color:#CFD2DD;} + .d2-3605573183 .background-color-N5{background-color:#DEE1EB;} + .d2-3605573183 .background-color-N6{background-color:#EEF1F8;} + .d2-3605573183 .background-color-N7{background-color:#FFFFFF;} + .d2-3605573183 .background-color-B1{background-color:#0D32B2;} + .d2-3605573183 .background-color-B2{background-color:#0D32B2;} + .d2-3605573183 .background-color-B3{background-color:#E3E9FD;} + .d2-3605573183 .background-color-B4{background-color:#E3E9FD;} + .d2-3605573183 .background-color-B5{background-color:#EDF0FD;} + .d2-3605573183 .background-color-B6{background-color:#F7F8FE;} + .d2-3605573183 .background-color-AA2{background-color:#4A6FF3;} + .d2-3605573183 .background-color-AA4{background-color:#EDF0FD;} + .d2-3605573183 .background-color-AA5{background-color:#F7F8FE;} + .d2-3605573183 .background-color-AB4{background-color:#EDF0FD;} + .d2-3605573183 .background-color-AB5{background-color:#F7F8FE;} + .d2-3605573183 .color-N1{color:#0A0F25;} + .d2-3605573183 .color-N2{color:#676C7E;} + .d2-3605573183 .color-N3{color:#9499AB;} + .d2-3605573183 .color-N4{color:#CFD2DD;} + .d2-3605573183 .color-N5{color:#DEE1EB;} + .d2-3605573183 .color-N6{color:#EEF1F8;} + .d2-3605573183 .color-N7{color:#FFFFFF;} + .d2-3605573183 .color-B1{color:#0D32B2;} + .d2-3605573183 .color-B2{color:#0D32B2;} + .d2-3605573183 .color-B3{color:#E3E9FD;} + .d2-3605573183 .color-B4{color:#E3E9FD;} + .d2-3605573183 .color-B5{color:#EDF0FD;} + .d2-3605573183 .color-B6{color:#F7F8FE;} + .d2-3605573183 .color-AA2{color:#4A6FF3;} + .d2-3605573183 .color-AA4{color:#EDF0FD;} + .d2-3605573183 .color-AA5{color:#F7F8FE;} + .d2-3605573183 .color-AB4{color:#EDF0FD;} + .d2-3605573183 .color-AB5{color:#F7F8FE;}.appendix text.text{fill:#0A0F25}.md{--color-fg-default:#0A0F25;--color-fg-muted:#676C7E;--color-fg-subtle:#9499AB;--color-canvas-default:#FFFFFF;--color-canvas-subtle:#EEF1F8;--color-border-default:#0D32B2;--color-border-muted:#0D32B2;--color-neutral-muted:#EEF1F8;--color-accent-fg:#0D32B2;--color-accent-emphasis:#0D32B2;--color-attention-subtle:#676C7E;--color-danger-fg:red;}.sketch-overlay-B1{fill:url(#streaks-darker-d2-3605573183);mix-blend-mode:lighten}.sketch-overlay-B2{fill:url(#streaks-darker-d2-3605573183);mix-blend-mode:lighten}.sketch-overlay-B3{fill:url(#streaks-bright-d2-3605573183);mix-blend-mode:darken}.sketch-overlay-B4{fill:url(#streaks-bright-d2-3605573183);mix-blend-mode:darken}.sketch-overlay-B5{fill:url(#streaks-bright-d2-3605573183);mix-blend-mode:darken}.sketch-overlay-B6{fill:url(#streaks-bright-d2-3605573183);mix-blend-mode:darken}.sketch-overlay-AA2{fill:url(#streaks-dark-d2-3605573183);mix-blend-mode:overlay}.sketch-overlay-AA4{fill:url(#streaks-bright-d2-3605573183);mix-blend-mode:darken}.sketch-overlay-AA5{fill:url(#streaks-bright-d2-3605573183);mix-blend-mode:darken}.sketch-overlay-AB4{fill:url(#streaks-bright-d2-3605573183);mix-blend-mode:darken}.sketch-overlay-AB5{fill:url(#streaks-bright-d2-3605573183);mix-blend-mode:darken}.sketch-overlay-N1{fill:url(#streaks-darker-d2-3605573183);mix-blend-mode:lighten}.sketch-overlay-N2{fill:url(#streaks-dark-d2-3605573183);mix-blend-mode:overlay}.sketch-overlay-N3{fill:url(#streaks-normal-d2-3605573183);mix-blend-mode:color-burn}.sketch-overlay-N4{fill:url(#streaks-normal-d2-3605573183);mix-blend-mode:color-burn}.sketch-overlay-N5{fill:url(#streaks-bright-d2-3605573183);mix-blend-mode:darken}.sketch-overlay-N6{fill:url(#streaks-bright-d2-3605573183);mix-blend-mode:darken}.sketch-overlay-N7{fill:url(#streaks-bright-d2-3605573183);mix-blend-mode:darken}.light-code{display: block}.dark-code{display: none}]]>wiki/economics/TOMLs + 37 commodity pageswiki/corporations/*.md156 pagesgttr*.mdDrifter's Guide prosesystem-page prose sectionsreach atlas db add-bodyTHE bodies catalog originimport_economics+ generate_brandswiki_sync.pyscaffold_bodies.py+ body_definition_parserpopulate_gttr_hookpopulate_terrain_referenceimport_heightmaps+ planet_simulationsystems.dbstar-map.jsonwiki/star-systems/GJ-*/index.mdREAD-ONLY blockswiki/star-systems/GJ-*/bodies/{id}/index.mdfrontmatter = body definitionheightmap · reliefmap · globeterrain.npz · markers.jsongenerated_brands.tomlserver cascadeGodot clientREADING THIS COLOUR = kind. green authored · blue generator · amber store grey generated-into-wiki/ · purple runtimeLINE = when. solid build-time · green runtime dashed one-time/bootstrap · RED the trap TWO PATHS RUN BOTH WAYSwiki_sync.py renders DB→wiki (generate_wiki(), routine) ANDparses wiki→DB (import_from_wiki(), bootstrap only).Not a drawing error. THE RED EDGE IS THE EXPENSIVE ONEscaffold_bodies.py writes a body page once and NEVERoverwrites it; the generator then reads that frontmatterdirectly. A hand-edit there is not reverted — it is OBEYED,and silently changes world generation. Hence theGOVERNANCE.md prohibition. TWO ROUTES INTO THE GAMEsystems.db ships with the build; the per-body PNGs are readat RUNTIME via bodies.terrain_reference, never baked in. FIELD RESOLUTION IN A BODY PAGE (body_definition_parser)override > direct read > derived > inferred > seeded random.Continuous fields vary because they fall to the last tier;categorical ones are concentrated because they come fromthe bodies table. cataloggttr_hookrenderspreservedbodies tablewrites ONCE parses (bootstrap) read as INPUTterrain_reference read at runtimeshipped