diff --git a/.claude/rules/asset-pipeline.md b/.claude/rules/asset-pipeline.md index 7a5ff8025..91b2ee6e6 100644 --- a/.claude/rules/asset-pipeline.md +++ b/.claude/rules/asset-pipeline.md @@ -23,8 +23,8 @@ Two generators write to `systems.db`: | Generator | Command | Source files (all contribute to the meta stamp SHA) | |-----------|---------|--------------| -| `import_economics` | `python3 tooling/economy-db/import_economics.py` | `tooling/economy-db/import_economics.py` + the Rust brand binary sources it invokes: `server/src/bin/generate_brands/main.rs`, `server/src/bin/generate_brands/names.rs`, `tooling/generate-brands` | -| `generate_atlas` | `python3 tooling/planet-gen/generate_atlas.py --seed 42` | `tooling/planet-gen/generate_atlas.py` | +| `import_economics` | `python3 tooling/economy-db/import_economics.py` | `tooling/economy-db/import_economics.py` + the Rust brand binary sources it invokes: `server/src/bin/generate_brands/main.rs`, `server/src/bin/generate_brands/names.rs`, `tooling/generate-brands` + shared `tooling/schema_version.py` | +| `generate_atlas` | `python3 tooling/planet-gen/generate_atlas.py --seed 42` | `tooling/planet-gen/generate_atlas.py` + shared `tooling/schema_version.py` | `import_economics` shells out to the Rust `generate_brands` binary as its first step to refresh `wiki/economics/corporations/generated_brands.toml`, then reads @@ -44,12 +44,21 @@ After every successful non-dry-run, each generator writes a row to the `meta` ta ```sql CREATE TABLE meta ( generator_name TEXT PRIMARY KEY, -- 'import_economics' | 'generate_atlas' - schema_version TEXT NOT NULL, -- SHA-1 of server/data/systems-schema.sql at generation time + schema_version TEXT NOT NULL, -- monotonic semver string (e.g. "1.0.0") — see #888 + schema_sha TEXT, -- SHA-1 of server/data/systems-schema.sql (tamper detection) generator_sha TEXT NOT NULL, -- SHA-1 of the generator source file(s) generated_at TEXT NOT NULL DEFAULT (datetime('now')) ); ``` +`schema_version` is a **monotonic semver string** (e.g. `"1.0.0"`), not a hash. +It is defined as the `SCHEMA_VERSION` constant in `tooling/schema_version.py` +and must be bumped manually whenever the schema changes in a backwards-incompatible way. +Unlike a SHA-1 hash, semver strings are orderable — this enables savegame migration +lineage in Phase 5+: a save file can record which schema version it derives from and +determine exactly which migrations to apply (#888). The old SHA-1 is preserved in +`schema_sha` for tamper detection alongside the semver. + The `generator_sha` is the SHA-1 of the concatenated bytes of the generator's source files (sorted by path, so order is deterministic). If any source file changes and `make regen-db` is not re-run, the stamped SHA will differ from the @@ -166,8 +175,14 @@ no hand-edit path that survives regen. --- -## Future: savegame migration lineage +## Savegame migration lineage (Phase 5+) -The `meta.schema_version` field records the schema SHA at generation time. When the -savegame system is built (Phase 5+), a save file can record which systems.db snapshot -it derives from, enabling forward migration without branching the DB file itself. +`meta.schema_version` now stores a monotonic semver string (#888). When the savegame +system is built (Phase 5+), a save file records its `schema_version` string; the +loader can determine which migrations to apply by comparing that version to the +current one. `meta.schema_sha` retains the old SHA-1 for tamper detection. + +**When to bump `SCHEMA_VERSION`:** edit the `SCHEMA_VERSION = "1.0.0"` constant in +`tooling/schema_version.py` whenever a schema change is backwards-incompatible +(column removed, type changed, FK constraint added, table dropped). Additive changes +(new nullable columns, new tables, new indexes) do not require a bump. diff --git a/CHANGELOG.md b/CHANGELOG.md index 43acc0e8b..056e1ff20 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,6 +13,10 @@ Format based on [Keep a Changelog](https://keepachangelog.com/). - **District skeleton generator** (#899) — `generate_skeleton()` wires the full atlas pipeline to produce filled `DistrictSkeleton` instances from city markers + planet data. Phase 1 scope: SettingType/ComplexityTier derivation, layout mode assignment, 4×4 block grid with zoning, multi-block reservations - **SystemNameIndex** (#926) — Aho-Corasick text scanner over body/station/system names for background pre-generation queue integration (D-206) - **Stamp expansion** (#892) — `gemma_naming.py` and `naming_core.py` added to `check-systems-db-stamp` source tracking and `/pr-push` watch list +- **`make decisions-orphan-tickets`** (#887) — new CLI subcommand (`tooling/db/decision orphan-tickets`) that scans tickets with a `decision_ref` not matching any decision in the DB, surfacing silently orphaned tickets from typo'd or renumbered D-IDs + +### Changed +- **`meta.schema_version` switched to monotonic semver** (#888) — replaces SHA-1 hash with an orderable semver string (`"1.0.0"`); old SHA preserved in new `schema_sha` column for tamper detection; `check-systems-db-stamp` now rejects legacy SHA-hex values ### Fixed - **Bevy baseline test panics** (#885) — `SnapshotBuffer` Option-wrapped in economy.rs, `TickPhase::configure` added to SimulationPlugin, stale golden file regenerated. All 6 previously-failing tests pass diff --git a/Makefile b/Makefile index 57ae9ea82..1184b2b55 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,7 @@ GODOT := $(shell command -v godot4 2>/dev/null || command -v godot 2>/dev/null) .PHONY: help setup build check-protocol client server game stop test lint lint-python setup-venv ci ci-client ci-server clean \ - decisions-sync decisions-coverage decisions-active decisions-orphan \ + decisions-sync decisions-coverage decisions-active decisions-orphan decisions-orphan-tickets \ db-backup db-install validate-content check-fact-ids setup-hooks install-hooks \ audit deny atlas-verify economy-db atlas-generate regen-db check-systems-db \ pre-pr pre-pr-lint pre-pr-build pre-pr-test pre-pr-validate pre-pr-fixtures \ @@ -48,7 +48,8 @@ help: @echo " make decisions-sync Sync decisions/*.md into SQLite" @echo " make decisions-coverage Each decision with its implementing ticket(s)" @echo " make decisions-active List active decisions" - @echo " make decisions-orphan Decisions without implementing tickets" + @echo " make decisions-orphan Decisions without implementing tickets" + @echo " make decisions-orphan-tickets Tickets with invalid or missing decision_ref" @echo " make audit Run cargo audit (security advisory check)" @echo " make deny Run cargo deny check (license/ban policy)" @echo " make validate-content Validate content YAML against schemas" @@ -404,6 +405,9 @@ decisions-active: decisions-orphan: @tooling/db/sqlite-query "SELECT id, title FROM decisions WHERE type='confirmed' AND status='active' AND id NOT IN (SELECT DISTINCT decision_ref FROM tickets WHERE decision_ref IS NOT NULL)" +decisions-orphan-tickets: + @tooling/db/decision orphan-tickets + # --- Content Validation --- validate-content: diff --git a/server/data/systems-schema.sql b/server/data/systems-schema.sql index fd495f4c7..326ed81e0 100644 --- a/server/data/systems-schema.sql +++ b/server/data/systems-schema.sql @@ -538,10 +538,13 @@ CREATE INDEX IF NOT EXISTS idx_star_systems_currency ON star_systems(currency_zo CREATE INDEX IF NOT EXISTS idx_gate_links_from ON gate_links(from_system_id); CREATE INDEX IF NOT EXISTS idx_gate_links_to ON gate_links(to_system_id); --- Generator metadata stamp (#855, #856) +-- Generator metadata stamp (#855, #856, #888) -- One row per generator, updated on each successful non-dry-run. --- schema_version: SHA-1 of server/data/systems-schema.sql content at generation time --- generator_sha: SHA-1 of the generator source file(s) content +-- schema_version: monotonic semver string (e.g. "1.0.0") — bump on backwards-incompatible changes. +-- Orderable, enabling savegame migration lineage (Phase 5+). +-- Defined as SCHEMA_VERSION constant in tooling/schema_version.py. +-- schema_sha: SHA-1 hex of systems-schema.sql content at generation time (tamper detection). +-- generator_sha: SHA-1 hex of the generator source file(s) content -- generated_at: ISO-8601 UTC timestamp of the run -- -- Used by: @@ -549,8 +552,9 @@ CREATE INDEX IF NOT EXISTS idx_gate_links_to ON gate_links(to_system_id); -- .config/hooks/pre-push — rejects pushes with stale DB (#857) -- /pr-push skill — triggers make regen-db if stale (#858) CREATE TABLE IF NOT EXISTS meta ( - generator_name TEXT PRIMARY KEY, -- 'import_economics' | 'generate_atlas' | 'generate_brands' - schema_version TEXT NOT NULL, -- SHA-1 hex of systems-schema.sql content + generator_name TEXT PRIMARY KEY, -- 'import_economics' | 'generate_atlas' + schema_version TEXT NOT NULL, -- monotonic semver string (e.g. "1.0.0") — see #888 + schema_sha TEXT, -- SHA-1 hex of systems-schema.sql content (tamper detection) generator_sha TEXT NOT NULL, -- SHA-1 hex of generator source file(s) content generated_at TEXT NOT NULL DEFAULT (datetime('now')) ); diff --git a/server/data/systems.db b/server/data/systems.db index a69795733..cbb9dd6f0 100644 Binary files a/server/data/systems.db and b/server/data/systems.db differ diff --git a/tooling/check-systems-db-stamp b/tooling/check-systems-db-stamp index a4e8e019b..b89a58b49 100644 --- a/tooling/check-systems-db-stamp +++ b/tooling/check-systems-db-stamp @@ -20,10 +20,14 @@ Decision refs: #855 (generator versioning), #857 (pre-push hook) """ import hashlib +import re import sqlite3 import sys from pathlib import Path +# semver pattern: MAJOR.MINOR.PATCH (no pre-release or build metadata) +_SEMVER_RE = re.compile(r"^\d+\.\d+\.\d+$") + REPO_ROOT = Path(__file__).resolve().parent.parent DB_PATH = REPO_ROOT / "server" / "data" / "systems.db" @@ -41,6 +45,7 @@ GENERATOR_SOURCES: dict[str, list[Path]] = { REPO_ROOT / "server" / "src" / "bin" / "generate_brands" / "main.rs", REPO_ROOT / "server" / "src" / "bin" / "generate_brands" / "names.rs", REPO_ROOT / "tooling" / "generate-brands", + REPO_ROOT / "tooling" / "schema_version.py", ], "generate_atlas": [ REPO_ROOT / "tooling" / "planet-gen" / "generate_atlas.py", @@ -48,6 +53,7 @@ GENERATOR_SOURCES: dict[str, list[Path]] = { REPO_ROOT / "tooling" / "planet-gen" / "naming_core.py", REPO_ROOT / "tooling" / "planet-gen" / "import_heightmaps.py", REPO_ROOT / "tooling" / "planet-gen" / "import_province_boundaries.py", + REPO_ROOT / "tooling" / "schema_version.py", ], } @@ -77,7 +83,7 @@ def check(verbose: bool = False) -> int: try: conn = sqlite3.connect(str(DB_PATH)) rows = conn.execute( - "SELECT generator_name, generator_sha FROM meta" + "SELECT generator_name, schema_version, generator_sha FROM meta" ).fetchall() conn.close() except sqlite3.OperationalError: @@ -95,7 +101,19 @@ def check(verbose: bool = False) -> int: stale: list[str] = [] unknown: list[str] = [] - for generator_name, stored_sha in rows: + bad_version: list[str] = [] + seen_versions: dict[str, str] = {} # generator_name -> schema_version + for generator_name, schema_version, stored_sha in rows: + seen_versions[generator_name] = schema_version + # Validate schema_version is a semver string (#888). + # Old DBs may still carry a SHA-1 hex (40-char) — flag them as stale + # so the user knows to run make regen-db rather than getting a silent pass. + if not _SEMVER_RE.match(schema_version or ""): + bad_version.append( + f"{generator_name}: schema_version='{schema_version}' " + f"(expected semver like '1.0.0' — run make regen-db)" + ) + sources = GENERATOR_SOURCES.get(generator_name) if sources is None: # Unknown generator — fail closed (T6). A future branch adding a @@ -122,6 +140,24 @@ def check(verbose: bool = False) -> int: f"\n current: {current_sha}" ) + if bad_version: + for msg in bad_version: + print(f"check-systems-db-stamp: BAD schema_version — {msg}", file=sys.stderr) + return 1 + + # All generators must agree on the same schema_version (#888 defense-in-depth). + # If they differ, the DB was partially regenerated with different source trees. + unique_versions = set(seen_versions.values()) + if len(unique_versions) > 1: + print( + "check-systems-db-stamp: CONFLICT — generators disagree on schema_version:", + file=sys.stderr, + ) + for gen, ver in sorted(seen_versions.items()): + print(f" {gen}: {ver}", file=sys.stderr) + print(" Run: make regen-db", file=sys.stderr) + return 1 + if unknown: print( "check-systems-db-stamp: UNKNOWN generator(s) in meta table: " diff --git a/tooling/db/decision b/tooling/db/decision index 82492f616..4c5260b14 100755 --- a/tooling/db/decision +++ b/tooling/db/decision @@ -1,8 +1,10 @@ #!/usr/bin/env bash # Decision ID management — claim, query, and validate decision IDs. # Usage: -# decision next [D|Q|R] Show next available ID -# decision claim [title] Claim next ID (reserves in DB) -# decision check-dupes Check for duplicate IDs in markdown -# decision sync Sync markdown -> DB +# decision sync Sync decisions/*.md into SQLite +# decision show Show a decision with linked tickets + refs +# decision next [D|Q|R] Show next available ID +# decision claim [title] Claim next ID (reserves in DB) +# decision check-dupes Check for duplicate IDs in markdown +# decision orphan-tickets List tickets with invalid/missing decision_ref exec python3 "$(dirname "$0")/decisions_sync.py" "$@" diff --git a/tooling/db/decisions_sync.py b/tooling/db/decisions_sync.py index 8a0e23aa0..c85d823a9 100644 --- a/tooling/db/decisions_sync.py +++ b/tooling/db/decisions_sync.py @@ -310,16 +310,14 @@ def sync(cfg): ) continue - try: - conn.execute( - """INSERT OR IGNORE INTO decision_refs - (source_id, target_id, ref_type, note) - VALUES (?, ?, ?, ?)""", - (d["id"], target_id, ref_type, note), - ) + cur = conn.execute( + """INSERT OR IGNORE INTO decision_refs + (source_id, target_id, ref_type, note) + VALUES (?, ?, ?, ?)""", + (d["id"], target_id, ref_type, note), + ) + if cur.rowcount > 0: refs_created += 1 - except sqlite3.IntegrityError: - pass # duplicate ref, skip conn.commit() @@ -457,6 +455,35 @@ def show_decision(cfg, decision_id): conn.close() +def orphan_tickets(cfg): + """List tickets whose decision_ref is set but does not match any decision in the DB.""" + conn = get_connection(cfg) + try: + rows = conn.execute( + """SELECT t.id, t.title, t.decision_ref, t.status, t.team + FROM tickets t + WHERE t.decision_ref IS NOT NULL + AND t.decision_ref != '' + AND t.decision_ref NOT IN (SELECT id FROM decisions) + ORDER BY t.decision_ref, t.id""", + ).fetchall() + + orphans = [dict(r) for r in rows] + + return { + "ok": True, + "count": len(orphans), + "orphans": orphans, + "summary": ( + f"{len(orphans)} orphan ticket(s) found" + if orphans + else "No orphan tickets — all decision_ref values are valid" + ), + } + finally: + conn.close() + + def check_dupes(cfg): """Check for duplicate decision IDs across all markdown files.""" # Pre-existing collisions too deeply embedded to renumber (139+ references). @@ -508,6 +535,7 @@ Usage: decisions_sync.py next [D|Q|R] Show next available ID (all prefixes or one) decisions_sync.py claim [title] Claim next ID and insert placeholder decisions_sync.py check-dupes Check for duplicate IDs across markdown files + decisions_sync.py orphan-tickets List tickets with invalid/missing decision_ref decisions_sync.py --help Show this help message ID claiming workflow: @@ -554,6 +582,8 @@ def main(): result = claim_id(cfg, prefix, domain, title) elif cmd == "check-dupes": result = check_dupes(cfg) + elif cmd == "orphan-tickets": + result = orphan_tickets(cfg) else: result = {"ok": False, "error": f"Unknown command: {cmd}. Use --help for usage."} diff --git a/tooling/economy-db/import_economics.py b/tooling/economy-db/import_economics.py index 390506227..0663148e1 100755 --- a/tooling/economy-db/import_economics.py +++ b/tooling/economy-db/import_economics.py @@ -35,6 +35,10 @@ from pathlib import Path REPO_ROOT = Path(__file__).resolve().parent.parent.parent +# Import shared schema version constant (#888) — single source of truth in tooling/schema_version.py +sys.path.insert(0, str(REPO_ROOT / "tooling")) +from schema_version import SCHEMA_VERSION # noqa: E402 + DB_PATH = REPO_ROOT / "server" / "data" / "systems.db" STAR_MAP = REPO_ROOT / "docs" / "design" / "star-map.json" COMMODITIES_TOML = REPO_ROOT / "wiki" / "economics" / "commodities.toml" @@ -78,6 +82,7 @@ IMPORT_ECONOMICS_SOURCES: tuple[Path, ...] = ( GENERATE_BRANDS_RS, GENERATE_BRANDS_NAMES_RS, GENERATE_BRANDS_WRAPPER, + REPO_ROOT / "tooling" / "schema_version.py", ) @@ -99,9 +104,10 @@ def _write_stamp(conn: sqlite3.Connection, generator_name: str, *source_files: P schema_sha = _file_sha1(SCHEMA_SQL) generator_sha = _file_sha1(*source_files) conn.execute( - """INSERT OR REPLACE INTO meta (generator_name, schema_version, generator_sha, generated_at) - VALUES (?, ?, ?, datetime('now'))""", - (generator_name, schema_sha, generator_sha), + """INSERT OR REPLACE INTO meta + (generator_name, schema_version, schema_sha, generator_sha, generated_at) + VALUES (?, ?, ?, ?, datetime('now'))""", + (generator_name, SCHEMA_VERSION, schema_sha, generator_sha), ) @@ -350,6 +356,7 @@ COLUMN_MIGRATIONS = [ ("corporations", "shadow_economy_access", "INTEGER DEFAULT 0"), ("brand_products", "price_tier", "TEXT"), ("bodies", "body_radius_km", "REAL"), # D-204 — physical radius in km, nullable + ("meta", "schema_sha", "TEXT"), ] diff --git a/tooling/planet-gen/generate_atlas.py b/tooling/planet-gen/generate_atlas.py index 53ad05ebd..9e5695f47 100644 --- a/tooling/planet-gen/generate_atlas.py +++ b/tooling/planet-gen/generate_atlas.py @@ -49,6 +49,10 @@ import yaml from planet_simulation import simulate +# Import shared schema version constant (#888) — single source of truth in tooling/schema_version.py +sys.path.insert(0, str(REPO_ROOT / "tooling")) +from schema_version import SCHEMA_VERSION # noqa: E402 + # --------------------------------------------------------------------------- # Constants # --------------------------------------------------------------------------- @@ -121,7 +125,6 @@ def _write_stamp(conn: sqlite3.Connection) -> None: a double-commit with the atlas data write that precedes it. """ schema_sha = _file_sha1(SYSTEMS_SCHEMA_PATH) - # Hash all generate_atlas sources — must match GENERATOR_SOURCES in check-systems-db-stamp. _atlas_dir = Path(__file__).parent generator_sha = _file_sha1( Path(__file__), @@ -129,12 +132,13 @@ def _write_stamp(conn: sqlite3.Connection) -> None: _atlas_dir / "naming_core.py", _atlas_dir / "import_heightmaps.py", _atlas_dir / "import_province_boundaries.py", + REPO_ROOT / "tooling" / "schema_version.py", ) conn.execute( """INSERT OR REPLACE INTO meta - (generator_name, schema_version, generator_sha, generated_at) - VALUES ('generate_atlas', ?, ?, datetime('now'))""", - (schema_sha, generator_sha), + (generator_name, schema_version, schema_sha, generator_sha, generated_at) + VALUES ('generate_atlas', ?, ?, ?, datetime('now'))""", + (SCHEMA_VERSION, schema_sha, generator_sha), ) @@ -180,11 +184,18 @@ def ensure_atlas_schema(conn: sqlite3.Connection) -> None: CREATE TABLE IF NOT EXISTS meta ( generator_name TEXT PRIMARY KEY, schema_version TEXT NOT NULL, + schema_sha TEXT, generator_sha TEXT NOT NULL, generated_at TEXT NOT NULL DEFAULT (datetime('now')) ); """ ) + # Add schema_sha column to existing DBs that pre-date #888 (#888 migration). + try: + conn.execute("ALTER TABLE meta ADD COLUMN schema_sha TEXT") + except sqlite3.OperationalError as e: + if "duplicate column" not in str(e).lower(): + raise def _first_int(values, default: int = 0) -> int: diff --git a/tooling/schema_version.py b/tooling/schema_version.py new file mode 100644 index 000000000..c6282d3c9 --- /dev/null +++ b/tooling/schema_version.py @@ -0,0 +1,14 @@ +""" +Canonical systems.db schema version — shared by all generators (#888). + +Bump SCHEMA_VERSION manually on any backwards-incompatible schema change +(column removed, type changed, FK constraint added, table dropped). +Additive changes (new nullable columns, new tables, new indexes) do not +require a bump. + +Imported by: + tooling/economy-db/import_economics.py + tooling/planet-gen/generate_atlas.py +""" + +SCHEMA_VERSION = "1.0.0" diff --git a/wiki/corporations/arbour-aggregates.md b/wiki/corporations/arbour-aggregates.md index f67fd9a23..5165f1fb5 100644 --- a/wiki/corporations/arbour-aggregates.md +++ b/wiki/corporations/arbour-aggregates.md @@ -5,13 +5,13 @@ slug: arbour-aggregates category: corporation status: canonical created: 2026-04-21 -updated: 2026-04-21 -scope: GJ 338B local; north corridor secondary +updated: 2026-05-02 +scope: GJ 338B local; core zone construction supply faction_type: economic headquarters: Arbour (GJ 338B) tags: [stone, timber, extraction, tractus] decision_refs: [D-175] -cross_refs: [] +cross_refs: [earth-standard-group] --- # Arbour Aggregates @@ -19,7 +19,7 @@ cross_refs: [] **Type:** Corporation — Stone and Timber Extraction Cooperative **Also Known As:** Arbour Agg, AAC **Status:** Canonical -**Scope:** Arbour system primary; corridor construction supply secondary +**Scope:** Arbour system primary; core zone construction supply secondary **Headquarters:** Arbour (GJ 338B) — surface operations, cooperative ownership **Classification:** Extraction cooperative; producer behavioral archetype @@ -27,10 +27,36 @@ cross_refs: [] ## Overview -Arbour was settled early and settled well. The planet's mixed biome — temperate forest belts alongside sedimentary stone formations — gave the founding cooperative two resource streams that corridor construction has needed ever since. +Arbour was settled early and settled well. The planet's mixed biome — temperate forest belts alongside sedimentary stone formations — gave the founding cooperative two resource streams that corridor construction has needed ever since. A system that could produce both structural aggregate and certified timber without requiring either to be shipped in from the inner corridor had a material advantage during the settlement expansion period, and the cooperative built its commercial identity around that advantage. -Arbour Aggregates handles both. Stone quarrying supplies aggregate and cut stone to corridor station builders; managed timber harvest (certified regrowth cycles, 80-year rotation) supplies structural panel manufacturers who can't rely on synthetic composite alone. +Arbour Aggregates handles both extraction operations. Stone quarrying supplies aggregate and cut stone to corridor station builders; managed timber harvest, run on certified regrowth cycles with an 80-year rotation, supplies structural panel manufacturers who cannot rely on synthetic composite alone. The two operations share logistics infrastructure and governance under a single cooperative structure, which has made both more efficient than they would have been under separate ownership. -**Primary operations:** Open-face stone quarrying at Arbour's central plateau, managed softwood and hardwood forest operations in the temperate belt. +--- -**Market position:** Reliable bulk supplier to north and core corridor. ESG dominates Sol-side stone; Arbour Aggregates holds the east-corridor share where transit distances from Sol make ESG supply expensive. +## Operations + +**Stone quarrying:** Open-face extraction at Arbour's central plateau, producing aggregate for bulk construction supply and cut stone in the grades that corridor station builders specify. The plateau formation is not the Reach's richest stone deposit, but its accessibility — surface extraction requiring minimal infrastructure relative to belt mining — keeps extraction costs low enough to compete at the transit distances involved. + +**Timber operations:** Managed softwood and hardwood harvest from Arbour's temperate forest belt, certified under an 80-year rotation program. The certification covers both the harvest practices and the replanting schedule; buyers whose procurement specifications require documented sustainable sourcing use Arbour Aggregates' timber on the basis of this certification. The 80-year rotation is slower than the production timelines some buyers would prefer, which makes the timber operation a long-cycle asset rather than a short-cycle one. + +**Logistics:** Freight from Arbour surface to transit moves through the system's own aperture facilities. The cooperative manages its own outbound logistics rather than contracting through an intermediary, which keeps margin on freight within the cooperative at the cost of maintaining logistics staff who are not otherwise needed for extraction. + +--- + +## Market Position + +Arbour Aggregates holds the core zone construction supply share where transit distances from Sol make Earth Standard Group supply expensive. GJ 338B sits at hop 3 from Gateway, connected to both Sirius and Renaissance — a core zone position that gives the cooperative competitive reach across the inner orbit's construction sector. The market position is geographic rather than technical — ESG's Sol-system throughput far exceeds anything Arbour can match — but geographic advantage in a freight-intensive sector is durable. Construction projects in the core and inner corridor systems buy from Arbour because the transit math works in the cooperative's favor at those distances. + +The managed timber certification creates a secondary position in the premium structural timber market, which is smaller but commands better pricing than bulk aggregate. Buyers who specify certified sustainable sourcing pay a premium the aggregate business does not generate. + +--- + +**Cross-References:** +- [Arbour](../star-systems/GJ-338B/index.md) — Headquarters system; surface quarrying and forest operations +- [Earth Standard Group](earth-standard-group.md) — Sol-system competitor; ESG dominates Sol-side stone supply + +--- + +**Status:** Canonical +**Created:** 2026-04-21 +**Updated:** 2026-05-02 diff --git a/wiki/corporations/bergkraft-antriebswerke.md b/wiki/corporations/bergkraft-antriebswerke.md index ea84de4ea..56dd54db7 100644 --- a/wiki/corporations/bergkraft-antriebswerke.md +++ b/wiki/corporations/bergkraft-antriebswerke.md @@ -20,7 +20,7 @@ cross_refs: [bavarian-craft, rheintal-systems, durban-engineering] **Also Known As:** Bergkraft, BKA **Status:** Canonical **Scope:** West reach primary; inward industrial procurement secondary -**Headquarters:** Bergtor (GJ 505A) — west reach, 4 hops from Gateway +**Headquarters:** Bergtor (GJ 505A) — west reach, 7 hops from Gateway **Classification:** Sub-Syndic precision engineering enterprise; industrial supply and transit systems --- diff --git a/wiki/corporations/bifrost-marmor.md b/wiki/corporations/bifrost-marmor.md index 216806787..0140eb77b 100644 --- a/wiki/corporations/bifrost-marmor.md +++ b/wiki/corporations/bifrost-marmor.md @@ -11,7 +11,7 @@ faction_type: economic headquarters: Nyrheim (GJ 3737) tags: [stone, quarrying, west_reach, mark] decision_refs: [D-175] -cross_refs: [] +cross_refs: [gate-corporation, GJ-3737] --- # Bífröst Marmor @@ -63,8 +63,14 @@ The cooperative has responded by maintaining the manufacturing division at its c --- -## Silence +## What They Don't Talk About The geological survey that discovered the marble formation also mapped the full extent of the metamorphic layer. The formation runs deeper and wider than the current quarry face exploits. The cooperative's published reserve estimates describe "decades of extractable material at current production rates." The actual survey data, held in the practical council's sealed records, describes something significantly larger. The cooperative has not disclosed the full extent because doing so would invite exactly the kind of outside commercial interest that the founding charter was written to prevent. There is also the question of the formation's origin. The specific pressure-temperature conditions that created the Kvitfjell veining pattern are consistent with the moon's current tidal relationship with the gas giant — but the geological survey noted that the formation appears older than the current orbital configuration should allow. The survey team flagged this as "requiring further investigation" and the cooperative filed the flag without commissioning the investigation. + +--- + +**Cross-References:** +- [Nyrheim](../star-systems/GJ-3737/index.md) — Headquarters system; Kvitfjell moon quarry operations +- [Gate Corporation](gate-corporation.md) — Transit fee dispute over freight through Nyrheim's apertures diff --git a/wiki/corporations/earth-standard-group.md b/wiki/corporations/earth-standard-group.md index 05658fefb..9abec0864 100644 --- a/wiki/corporations/earth-standard-group.md +++ b/wiki/corporations/earth-standard-group.md @@ -11,7 +11,7 @@ faction_type: economic headquarters: Earth (GJ 0) tags: [stone, advanced_alloys, industrial, sol_system] decision_refs: [D-175] -cross_refs: [] +cross_refs: [gate-corporation, arbour-aggregates] --- # Earth Standard Group @@ -29,8 +29,43 @@ cross_refs: [] Three centuries of colonization outpaced the Reach's ability to supply itself. Earth Standard Group filled the gap that the colonization wave left behind — old-world industrial capacity on Sol-system scale, producing the stone aggregate and advanced alloys that new settlements needed before their own extraction infrastructure came online. -ESG is not glamorous. It is large, methodical, and has survived every economic cycle since the first gate opened by doing one thing well: producing reliable bulk materials at Sol-system throughput and shipping them corridor-wide. +ESG is not glamorous. It is large, methodical, and has survived every economic cycle since the first gate opened by doing one thing well: producing reliable bulk materials at Sol-system throughput and shipping them corridor-wide. The company does not pursue margin by differentiating its products or cultivating institutional relationships. It pursues margin by producing at volumes that smaller regional suppliers cannot approach and by holding long-term supply contracts with the construction and infrastructure buyers who need guaranteed material availability over multi-year project timelines. -**Primary operations:** Stone quarrying and aggregate processing (Luna surface operations, Martian regolith processing), advanced alloy fabrication at orbital foundries. +Three centuries of this approach have made ESG one of the largest material suppliers in the Reach without making it particularly visible. Bulk industrial suppliers do not attract the kind of attention that consumer brands or financial institutions do. They are present in everything and noticed by almost no one. -**Market position:** Dominant in corridor construction supply during early settlement phases; retains long-term supply contracts with the Gate Corporation and major station builders. +--- + +## Origin + +ESG's origins are pre-colonization — the company's core businesses were established on Earth and the Sol system before the first Founder Gates were activated. What changed when the gates opened was the market: suddenly an industrial conglomerate with Luna surface quarrying operations and Martian regolith processing could supply aggregate to systems that had none. The colonization wave created demand that Sol-system industry was positioned to meet before the new systems had developed their own extraction capacity. + +The company's early corridor contracts were with settlement authorities purchasing aggregate for habitat construction and with the engineering concerns building the first span gate installations. Both client relationships have continued in various forms across three centuries. + +--- + +## Operations + +**Stone quarrying and aggregate processing:** Luna surface operations producing aggregate from the Moon's regolith formations, and Martian surface processing of regolith into construction-grade material. The Luna operations have been running continuously since the early settlement period. The Martian processing operation is larger by throughput and serves the heavy construction supply function for the inner corridor. + +**Advanced alloy fabrication:** Orbital foundries in the Sol system producing advanced alloys for the corridor's manufacturing and construction sectors. The orbital foundries use the zero-gravity manufacturing environment for alloy compositions that benefit from it. This product line is technically distinct from the aggregate business but uses the same gate transit and freight infrastructure for corridor distribution. + +**Gate Corporation supply contracts:** Long-term supply agreements with the Gate Corporation for materials used in span gate construction and maintenance. The Gate Corporation's manufacturing base at Renaissance (GJ 251) draws on ESG supply for specific alloy specifications that the Gate Corporation's own fabrication facilities do not produce. The relationship is commercially standard and operationally significant for both parties. + +--- + +## Market Position + +ESG is dominant in corridor construction supply for inner and core systems during settlement phases, and retains long-term supply contracts with the Gate Corporation and major station builders that make its revenue predictable across multi-decade project cycles. In systems where transit costs from Sol become prohibitive — the east corridor, the outer reach — regional suppliers hold the market share. ESG's geographic advantage is the core and inner corridor, where Sol proximity makes its throughput competitive with anything a regional supplier can produce. + +--- + +**Cross-References:** +- [Earth (Sol system)](../star-systems/GJ-0/index.md) — Headquarters; Luna and Martian operations +- [Gate Corporation](gate-corporation.md) — Long-term supply client; span gate construction materials +- [Arbour Aggregates](arbour-aggregates.md) — Regional competitor; east corridor stone supply + +--- + +**Status:** Canonical +**Created:** 2026-04-21 +**Updated:** 2026-04-21 diff --git a/wiki/corporations/gate-corporation.md b/wiki/corporations/gate-corporation.md index 0600109dd..f7791db1a 100644 --- a/wiki/corporations/gate-corporation.md +++ b/wiki/corporations/gate-corporation.md @@ -9,7 +9,7 @@ updated: 2026-03-14 scope: reach-wide faction_type: economic headquarters: Renaissance (GJ 251) -tags: [fusion_fuel, gate_infrastructure, reach_wide, monopolist] +tags: [gate_components, gate_infrastructure, reach_wide, monopolist] decision_refs: [D-095, D-175] cross_refs: [kaur-observatory-equipment] --- diff --git a/wiki/corporations/hanyang-precision.md b/wiki/corporations/hanyang-precision.md index f08f4fea8..018451c73 100644 --- a/wiki/corporations/hanyang-precision.md +++ b/wiki/corporations/hanyang-precision.md @@ -9,7 +9,7 @@ updated: 2026-04-05 scope: regional faction_type: economic headquarters: Changwon (GJ 860B) -tags: [lattice_substrate, electronics, precision_instruments, east_reach, korean, assembly] +tags: [electronics, lattice_substrate, precision_instruments, east_reach, korean, assembly] decision_refs: [D-175] cross_refs: [kaur-observatory-equipment] --- diff --git a/wiki/corporations/jeju-lattice.md b/wiki/corporations/jeju-lattice.md index 89d7f020b..a24f3ee62 100644 --- a/wiki/corporations/jeju-lattice.md +++ b/wiki/corporations/jeju-lattice.md @@ -20,7 +20,7 @@ cross_refs: [kumho-navigation, namsan-collective, kyoei-design] **Also Known As:** Jeju, JL Components **Status:** Canonical **Scope:** East reach primary; corridor-wide institutional distribution secondary -**Headquarters:** Yeongwol (GJ 268) — 2-aperture system, 4 hops from Gateway +**Headquarters:** Yeongwol (GJ 268) — 2-aperture system, 6 hops from Gateway **Classification:** Sub-Syndic technology enterprise; certified industrial component supplier --- diff --git a/wiki/corporations/nordmark-skog.md b/wiki/corporations/nordmark-skog.md index 416225722..e52695a34 100644 --- a/wiki/corporations/nordmark-skog.md +++ b/wiki/corporations/nordmark-skog.md @@ -55,6 +55,6 @@ The company's freight moves inward through Groenland and disperses into the west --- -## Silence +## What They Don't Talk About The condition of the old-growth zones beyond the current harvest boundary. The original concession surveys mapped significantly more old-growth area than the current regeneration cycle accounts for. What happened in those sections is not discussed. diff --git a/wiki/corporations/norrland-woodcraft.md b/wiki/corporations/norrland-woodcraft.md index b54849ecb..247c4a0b5 100644 --- a/wiki/corporations/norrland-woodcraft.md +++ b/wiki/corporations/norrland-woodcraft.md @@ -20,7 +20,7 @@ cross_refs: [kellervolk, nordhavn-financial, lowlands-consumer] **Also Known As:** Norrland, Norrland House **Status:** Canonical **Scope:** West reach corridor primary; inward premium distribution secondary -**Headquarters:** Nyrheim (GJ 3737) — 3-aperture hub, 6 hops from Gateway +**Headquarters:** Nyrheim (GJ 3737) — 2-aperture loop member, 7 hops from Gateway **Classification:** Sub-Syndic artisan enterprise; certified sustainable woodcraft production --- diff --git a/wiki/corporations/rush-mining.md b/wiki/corporations/rush-mining.md index b122cf289..70853f713 100644 --- a/wiki/corporations/rush-mining.md +++ b/wiki/corporations/rush-mining.md @@ -1,17 +1,17 @@ --- title: "Rush Mining" -description: "Frontier extraction operation at Rush (GJ 725B) — metallic ore, rare minerals, and lattice-grade material from Struve's belt and surface deposits, supplying corridor processors who can't source from the established south_reach operations" +description: "Multi-resource extraction operation at Rush (GJ 725B) — metallic ore, rare minerals, and lattice-grade material from Struve's belt and surface deposits, operating one hop from Gateway in a system that has been a junction for only forty years" slug: rush-mining category: corporation status: canonical created: 2026-04-21 -updated: 2026-04-21 -scope: GJ 725B local; outer corridor secondary +updated: 2026-05-02 +scope: GJ 725B local; corridor-wide secondary faction_type: economic headquarters: Rush (GJ 725B) tags: [metallic_ore, rare_minerals, lattice_grade_material, mining, frontier, independent] decision_refs: [D-175] -cross_refs: [] +cross_refs: [rare-vein-survey] --- # Rush Mining @@ -19,7 +19,7 @@ cross_refs: [] **Type:** Corporation — Multi-Resource Extraction **Also Known As:** Rush, Rush Mining Co. **Status:** Canonical -**Scope:** Struve system primary; outer corridor spot market secondary +**Scope:** Struve system primary; corridor-wide secondary **Headquarters:** Rush (GJ 725B, Struve system) — surface and orbital operations **Classification:** Mining operation; producer behavioral archetype @@ -27,10 +27,46 @@ cross_refs: [] ## Overview -Struve's belt is productive but awkward — the system is off the main transit corridors, which keeps extraction costs high and competition low. Rush Mining has operated here for four generations, making a virtue of the location: without corridor competitors, they've developed deep extraction expertise across the belt's varied ore profile. +Struve is one hop from Gateway and has been a junction for forty years. The second gate activation opened a three-aperture system in what had been a dead-end spur — geographically central, institutionally empty. Rush Mining was among the first extraction operations to establish on the habitable body, and the four decades since have given the company time to develop the belt's varied ore profile while the system's governance remained unsettled enough to keep the established inner-orbit combines from investing here directly. The combines require settled property tenure before committing extraction capital — they will not build infrastructure on claims that a future governance framework might redistribute. Rush Mining, founded under frontier conditions, holds its sites by continuous occupation rather than by institutional registration. -The company mines a wider commodity range than most single-system operations: metallic ore from the main belt deposits, rare mineral concentrates from the inner system's geologically active secondary bodies, and lattice-grade material from a fractured lunar body that proved unexpectedly rich. Each stream is sold independently into the corridor spot market when the gate schedule permits transit. +The company mines a wider commodity range than most single-system operations: metallic ore from the main belt deposits, rare mineral concentrates from the inner system's geologically active secondary bodies, and lattice-grade material from a fractured lunar body that proved unexpectedly rich when surveyed in the second generation of operations. The diversity reflects the Struve belt's geological character rather than a deliberate portfolio strategy, but it has produced an operation that competes in three markets simultaneously — each with different buyer profiles, different pricing dynamics, and different competitive pressures. The one-hop transit to Gateway means every major processor in the corridor can reach Struve directly. Rush Mining has no logistics problem. What it has, and what defines its commercial position, is the gap between the system's excellent geography and its unresolved institutional conditions. -**Primary operations:** Belt extraction (metallic ore, rare minerals), surface and sub-surface mining of lattice-grade material on Struve's secondary moon. +--- -**Market position:** Frontier supplier with niche advantage on lattice-grade material quality — Rare Vein Survey (the primary reach-wide supplier) doesn't consistently reach Struve volumes. Rush Mining fills the gap for east and outer corridor buyers. +## Origin + +The founding generation arrived at Struve with the wave-five settlement push that followed the second aperture activation, carrying extraction equipment and limited capital. What distinguished the Struve situation was location and timing: a geologically productive system, one hop from the Reach's commercial center, with no established claims and no governance framework to adjudicate competing ones. The early settlers who moved fastest secured the most productive sites. Rush Mining's founders were among them. + +The second generation committed resources to a proper survey of a fractured lunar body that initial prospecting had flagged as geologically active. The survey found lattice-grade material in concentrations that had not been expected. Lattice-grade material at this distance from Gateway is unusual; the deposits that produce it are more commonly found in systems further from the corridor's industrial center. The discovery gave Rush Mining a specialist position that its generic belt extraction did not. + +The lattice-grade operation required capital. The second generation financed it through a long-term supply agreement with a core corridor buyer who provided upfront investment in exchange for preferential pricing during the agreement term. The buyer wanted reliable lattice-grade supply with minimal transit; Struve's one-hop position made Rush Mining the answer. + +--- + +## Operations + +**Belt extraction:** Metallic ore and rare mineral concentrates from the main Struve belt. Continuous operations with no gate-schedule dependency problem — Struve's three connections mean transit slots are not the constraint. The constraint is production capacity relative to the number of competing operators working the same buyer relationships. + +**Lattice-grade operations:** Surface and sub-surface mining of the fractured lunar body, with on-site initial processing to the purity grade that lattice-grade specifications require. This is Rush Mining's differentiated product. Lattice-grade material from a hop-1 system commands a transit premium that the company converts into pricing discipline — buyers who need guaranteed delivery and quality pay for proximity, and Struve delivers both. + +**Supply agreements:** The lattice-grade stream is under a long-term supply commitment with a core corridor buyer. The metallic ore and rare mineral streams move through competitive buyer relationships rather than fixed agreements — Struve's accessibility means buyers can and do compare Rush Mining's pricing against other operators in the system. + +--- + +## Market Position + +Rush Mining's position is defined by the contradiction between Struve's geography and its institutional maturity. The geography is excellent — one hop from Gateway, three-aperture junction, direct access to the inner corridor's commodity markets. The institutional conditions are frontier: contested governance, unsettled property claims, and the regulatory uncertainty that keeps the established extraction combines from committing capital here. Rush Mining operates in the gap between those two facts. The geography delivers the logistics. The institutional immaturity delivers the operating room. + +The lattice-grade niche is the company's most durable advantage. A hop-1 deposit of this quality is unusual enough that the corridor's lattice-grade buyers pay attention to it. Rare Vein Survey, the primary reach-wide supplier, serves the corridor at greater transit distances; Rush Mining's supply reaches core corridor buyers faster and at lower freight cost. The bulk extraction business — metallic ore and rare minerals — competes on transit cost against larger operations at more established systems, a viable position for now. If Struve's property tenure resolves and the institutional environment stabilizes, the same logistics advantage that sustains Rush Mining will attract the competition that has so far stayed away. + +--- + +**Cross-References:** +- [Rush (Struve system)](../star-systems/GJ-725B/index.md) — Headquarters system; belt and surface operations +- [Rare Vein Survey](rare-vein-survey.md) — Reach-wide lattice-grade competitor; serves at greater transit distances + +--- + +**Status:** Canonical +**Created:** 2026-04-21 +**Updated:** 2026-05-02 diff --git a/wiki/corporations/salud-alliance.md b/wiki/corporations/salud-alliance.md index 3d0e6ca1c..a0c77d4cf 100644 --- a/wiki/corporations/salud-alliance.md +++ b/wiki/corporations/salud-alliance.md @@ -9,7 +9,7 @@ updated: 2026-04-05 scope: reach-wide faction_type: economic headquarters: Matamba (GJ 884) -tags: [chemical_feedstock, medical_goods, chemicals, south_reach, tractus, assembly, distributor] +tags: [medical_goods, chemicals, chemical_feedstock, south_reach, tractus, assembly, distributor] decision_refs: [D-175] cross_refs: [] --- diff --git a/wiki/corporations/scapa-flow-industries.md b/wiki/corporations/scapa-flow-industries.md index ace890def..cac314711 100644 --- a/wiki/corporations/scapa-flow-industries.md +++ b/wiki/corporations/scapa-flow-industries.md @@ -1,17 +1,17 @@ --- title: "Scapa Flow Industries" -description: "Station-based industrial manufacturer at Scapa Flow (GJ 570A) — fusion fuel bunkering and structural panel fabrication for the Bastion corridor, operating as the system's primary heavy industrial concern" +description: "Core hub industrial operation at Quaterna (GJ 570A) — fusion fuel bunkering and structural panel fabrication at one of the Reach's most connected systems, where transit volume alone makes the bunkering business work at scale" slug: scapa-flow-industries category: corporation status: canonical created: 2026-04-21 -updated: 2026-04-21 -scope: GJ 570A local; Bastion corridor secondary +updated: 2026-05-02 +scope: reach-wide faction_type: economic -headquarters: Scapa Flow (GJ 570A) +headquarters: Quaterna (GJ 570A) tags: [fusion_fuel, structural_panels, manufacturing, tractus] decision_refs: [D-175] -cross_refs: [] +cross_refs: [GJ-570A] --- # Scapa Flow Industries @@ -19,18 +19,51 @@ cross_refs: [] **Type:** Corporation — Industrial Manufacturing and Fuel Bunkering **Also Known As:** Scapa Flow, SFI **Status:** Canonical -**Scope:** Bastion system primary; outer corridor secondary -**Headquarters:** Scapa Flow station (GJ 570A, Bastion system) — orbital industrial platform +**Scope:** Bastion system primary; reach-wide secondary +**Headquarters:** Quaterna station (GJ 570A, Bastion system) — commercial orbital platform **Classification:** Industrial manufacturer; producer behavioral archetype --- ## Overview -Scapa Flow station was built as a fuel depot and grew into something larger. The outer corridor systems need bunkering infrastructure, and Scapa Flow's position in Bastion made it the logical hub — ships transiting the outer routes pass through here, and the infrastructure investment compounded over generations. +Bastion is a five-aperture hub three hops from Gateway — one of the most connected points in the Reach, in the same tier of transit importance as Gateway itself. The system is Assembly-administered, its military installation at Scapa Flow serving as the fleet's permanent base. But the fleet is not the only thing at Bastion. Quaterna station, the system's commercial platform, houses 350 million people and the civilian economy that exists alongside — and partly because of — the military presence. Scapa Flow Industries operates from Quaterna's industrial levels, not from the restricted military station, and its business is civilian transit rather than fleet supply. -Scapa Flow Industries now runs two parallel operations from the station: fuel bunkering (buying fusion fuel from frontier suppliers and reselling at a Bastion-corridor price) and structural panel fabrication for station-scale construction projects in the outer systems. The panel operation started as a necessity — outer systems had long lead times on materials from the inner corridor — and became a competitive product in its own right. +Fuel bunkering at a five-aperture hub is not a frontier service or a regional convenience — it is a high-volume industrial operation processing transit traffic at a scale that most bunkering stations in the Reach cannot approach. Every ship that converges on Bastion needs fuel, and the convergence is enormous. The structural panel fabrication operation that SFI runs alongside the bunkering business is an outward-facing enterprise: a core hub with five gate connections is optimally positioned to supply construction materials to every corridor direction at once, without the transit cost penalty that a single-corridor supplier carries. -**Primary operations:** Fusion fuel bunkering and resale, structural composite panel fabrication for station construction. +--- -**Market position:** Dominant in Bastion system; cost-competitive in outer corridor against inner-corridor suppliers due to reduced transit costs. +## Origin + +Quaterna's original bunkering infrastructure was built early, when Bastion's gate topology was already understood to be significant. The founding investors were not speculating on Bastion's future traffic — the hub position was established before the commercial station was built, and the bunkering operation was designed for the civilian traffic the hub would produce rather than the traffic it had at founding. The gap between projected and actual early-era volumes required patience; the patience was rewarded. + +The panel fabrication operation came later, as a deliberate expansion rather than a response to a supply crisis. SFI's position at a five-aperture hub means that construction material produced at Quaterna can reach corridor destinations in any direction without the freight penalty that single-corridor producers pay when supplying the opposite side of the Reach. The fabrication investment was sized from the start to serve the hub's full gate-facing footprint, not any single corridor. + +--- + +## Operations + +**Fuel bunkering:** SFI sources fusion fuel from producers in the systems connected to Bastion's five apertures and resells at hub pricing to the transit operators who converge on Bastion. The volume is substantial — a five-aperture hub generates transit traffic that a single-corridor bunkering stop cannot match — and the operation requires storage infrastructure scaled accordingly. SFI maintains buffer stock sized for the hub's peak transit periods, which occur on the intersection of multiple corridor schedules simultaneously. + +**Structural panel fabrication:** Composite structural panels for station and habitat construction, produced at SFI's fabrication level on Quaterna. The core hub position means the panels can be routed outward in five directions without asymmetric freight cost — a construction project at three hops in any direction from Bastion pays the same transit cost for SFI panels. This matters for the large station-building programs where procurement is centralized and suppliers are evaluated across the full project scope rather than corridor by corridor. + +**Hub logistics:** SFI's two operations share the same freight infrastructure and the same relationships with the transit operators who move through Bastion. The fuel bunkering gives SFI ongoing commercial contact with the full range of operators transiting the hub; the panel fabrication gives those operators a reason to carry outbound freight from Bastion rather than deadheading. The logistics overlap between the two businesses is not incidental — it is a competitive advantage that a single-product operation at the same hub would not have. + +--- + +## Market Position + +In fuel bunkering, Bastion's hub position is SFI's market. Five-aperture transit convergence produces demand that the operation was built to serve and that no competitor can replicate without replicating the hub itself. SFI is not the only bunkering operation at Bastion — the traffic volume supports multiple suppliers — but its scale and its established relationships with the hub's regular transit operators give it the majority of the commercial traffic. + +In panel fabrication, SFI competes across the full corridor reach from Bastion, including against inner-corridor specialists with greater production scale. The competitive argument is logistics: SFI's hub position eliminates the freight asymmetry that makes inner-corridor fabricators expensive for outward-reaching construction projects. For projects where the freight cost matters more than the production cost difference, SFI is the rational choice. For projects where scale and product specification depth matter more, the inner-corridor specialists hold the position. + +--- + +**Cross-References:** +- [Quaterna (Bastion system)](../star-systems/GJ-570A/index.md) — Headquarters; commercial station industrial operations + +--- + +**Status:** Canonical +**Created:** 2026-04-21 +**Updated:** 2026-05-02 diff --git a/wiki/corporations/sede-chemical-works.md b/wiki/corporations/sede-chemical-works.md index 7c5afac80..fdd2669a5 100644 --- a/wiki/corporations/sede-chemical-works.md +++ b/wiki/corporations/sede-chemical-works.md @@ -5,13 +5,13 @@ slug: sede-chemical-works category: corporation status: canonical created: 2026-04-21 -updated: 2026-04-21 -scope: GJ 559B local; ACB corridor secondary +updated: 2026-05-02 +scope: GJ 559B local; ACB (Alpha Centauri B) corridor secondary faction_type: economic headquarters: Sede (GJ 559B) tags: [chemical_feedstock, chemicals, manufacturing, tractus] decision_refs: [D-175] -cross_refs: [] +cross_refs: [societe-chimique] --- # Sede Chemical Works @@ -19,7 +19,7 @@ cross_refs: [] **Type:** Corporation — Chemical Feedstock Processing and Synthesis **Also Known As:** Sede Chemical, SCW **Status:** Canonical -**Scope:** ACB corridor primary; reach-wide specialty supply secondary +**Scope:** ACB (Alpha Centauri B, GJ 559B) corridor primary; reach-wide specialty supply secondary **Headquarters:** Sede (GJ 559B) — industrial processing campus **Classification:** Chemical manufacturer; producer behavioral archetype @@ -27,10 +27,44 @@ cross_refs: [] ## Overview -ACB system sits at a transit intersection that made it a logical location for chemical processing: raw feedstocks can arrive from multiple corridor directions, and finished chemical products distribute outward on the same gate network. +ACB — Alpha Centauri B, one of the Reach's core hubs — sits at a transit intersection that made it a logical location for chemical processing: raw feedstocks can arrive from multiple corridor directions, and finished chemical products distribute outward on the same gate network. Sede Chemical Works (SCW) was built to service that intersection. The company processes raw chemical feedstock into pharmaceutical-grade and industrial-grade outputs, operating under Assembly environmental protocols and the Lattice Commission's chemical regulatory framework. -Sede Chemical Works was built to service that intersection. The company processes raw chemical feedstock into pharmaceutical-grade and industrial-grade outputs, operating under strict Assembly environmental protocols. Their location at Sede means most ACB corridor pharmaceutical producers carry SCW as a primary supplier. +The company is not SCV. It does not have SCV's three centuries of certification history or SCV's reach-wide institutional relationships. What it has is position — transit geometry that makes it the lowest-cost supplier for ACB corridor buyers — and the Commission certification that allows it to operate in the same pharmaceutical-grade market segment that SCV anchors at the reach-wide level. -**Primary operations:** Chemical feedstock fractionation, industrial chemical synthesis, pharmaceutical precursor production. +--- -**Market position:** Dominant ACB corridor supplier; competes with Société Chimique on reach-wide accounts but holds the ACB corridor share due to lower transit costs. +## Origin + +Sede Chemical Works was established as the ACB corridor's chemical processing capacity grew beyond what inner-corridor suppliers could serve efficiently. The transit intersection's geometry was the founding argument: a processing facility at Sede could receive feedstock from three corridor directions and distribute finished product outward on the same gate network that brought the feedstock in. The capital investment made sense at the transit intersection in a way it would not have made sense at a dead-end system. + +The pharmaceutical-grade processing capability came later, added when ACB corridor pharmaceutical producers identified the transit cost savings of sourcing precursors locally rather than from the inner corridor. + +--- + +## Operations + +**Feedstock fractionation:** Processing raw chemical feedstock into refined intermediates for industrial and pharmaceutical applications. The fractionation operation is the company's highest-throughput function and the one that benefits most directly from the transit intersection's feedstock supply. + +**Industrial chemical synthesis:** Production of industrial-grade chemical outputs for the ACB corridor's manufacturing sector. Synthesized under Assembly environmental protocols; certified for industrial use under the relevant Lattice Commission standards. + +**Pharmaceutical precursor production:** Processing to pharmaceutical-grade specifications for ACB corridor drug manufacturers. This product line requires higher Commission certification maintenance than the industrial line — periodic audits, documentation requirements, and quality control standards that the company maintains at higher cost in exchange for the margin that pharmaceutical-grade supply commands. + +**Long-term supply agreements:** SCW holds multi-year supply agreements with its primary ACB corridor clients, which stabilizes revenue and allows capacity planning across the multi-year investment cycles that chemical processing infrastructure requires. + +--- + +## Market Position + +SCW is the dominant chemical supplier for the ACB corridor, where its transit cost advantage over reach-wide suppliers is the primary competitive differentiator. Société Chimique du Vide competes on reach-wide accounts — clients large enough or specialized enough that SCV's certification depth and institutional relationships outweigh the transit cost premium. For ACB corridor buyers below that threshold, SCW holds the market. + +--- + +**Cross-References:** +- [Sede (ACB system)](../star-systems/GJ-559B/index.md) — Headquarters; processing campus +- [Société Chimique du Vide](societe-chimique.md) — Reach-wide competitor; competes on reach-wide pharmaceutical accounts + +--- + +**Status:** Canonical +**Created:** 2026-04-21 +**Updated:** 2026-04-21 diff --git a/wiki/corporations/shetland-wool.md b/wiki/corporations/shetland-wool.md index 179aa3c37..527eb12a5 100644 --- a/wiki/corporations/shetland-wool.md +++ b/wiki/corporations/shetland-wool.md @@ -19,7 +19,7 @@ cross_refs: [orkney-ceramics, highland-cooperative, thrds] **Type:** Corporation — Heritage Craft Manufacturer (Natural Fiber Textiles) **Status:** Canonical **Scope:** North reach primary; inward corridor premium textile market secondary -**Headquarters:** Crown's Hollow (GJ 661A) — north reach corridor, 5 hops from Gateway +**Headquarters:** Crown's Hollow (GJ 661A) — north reach corridor, 3 hops from Gateway **Classification:** Sub-Syndic artisan enterprise; heritage breed certification holder --- diff --git a/wiki/corporations/societe-chimique.md b/wiki/corporations/societe-chimique.md index d75046f0d..2632359db 100644 --- a/wiki/corporations/societe-chimique.md +++ b/wiki/corporations/societe-chimique.md @@ -20,7 +20,7 @@ cross_refs: [] **Also Known As:** SCV, "the Society," "Vide Chemicals" **Status:** Canonical **Scope:** Reach-wide — Commission-certified industrial chemicals supply -**Headquarters:** Confluent (GJ 395) — west_reach mid-corridor hub, French-heritage +**Headquarters:** Confluent (GJ 395) — west_reach outer corridor, French-heritage **Classification:** Industrial chemicals producer; Assembly compliance-linked supply chain --- diff --git a/wiki/corporations/svanevann-waters.md b/wiki/corporations/svanevann-waters.md index 31304f541..a8b896d59 100644 --- a/wiki/corporations/svanevann-waters.md +++ b/wiki/corporations/svanevann-waters.md @@ -19,7 +19,7 @@ cross_refs: [rheingold-distillers, schwarzwald-gin, mercado-travessia] **Type:** Corporation — Regional Specialty Producer (Mineral Water) **Status:** Canonical **Scope:** West reach primary; inward corridor premium beverage market secondary -**Headquarters:** Nyrheim (GJ 3737) — west reach corridor, 5 hops from Gateway via Mark currency zone +**Headquarters:** Nyrheim (GJ 3737) — west reach corridor, 7 hops from Gateway via Mark currency zone **Classification:** Sub-Syndic artisan enterprise; Lattice Commission geographic indication holder (mineral waters) --- diff --git a/wiki/corporations/thrds.md b/wiki/corporations/thrds.md index a78dc1f50..783688aa8 100644 --- a/wiki/corporations/thrds.md +++ b/wiki/corporations/thrds.md @@ -1,6 +1,6 @@ --- title: "thrds" -description: "North_reach cold-weather technical clothing cooperative based at Braemar (GJ 475) — brach fiber garments, local cooperative ownership, creative direction that stayed at origin" +description: "North reach cold-weather technical clothing cooperative based at Braemar (GJ 475) — brach fiber garments, local cooperative ownership, creative direction that stayed at origin" slug: thrds category: corporation status: canonical diff --git a/wiki/corporations/threshold-fuel-syndicate.md b/wiki/corporations/threshold-fuel-syndicate.md index ff6f1dc04..44ce7a511 100644 --- a/wiki/corporations/threshold-fuel-syndicate.md +++ b/wiki/corporations/threshold-fuel-syndicate.md @@ -1,15 +1,15 @@ --- title: "Threshold Fuel Syndicate" -description: "Ice harvesting and fusion fuel production at Tau Ceti — the corridor's most reliable frontier fuel supplier, operating from Threshold's outer ice bodies where water supply is consistent and competition is thin" +description: "Ice harvesting and fusion fuel production at Tau Ceti (GJ 71) — Gateway's only local fuel producer, covering a fraction of the system's enormous demand and reducing import dependency for the Reach's busiest transit hub" slug: threshold-fuel-syndicate category: corporation status: canonical created: 2026-04-21 -updated: 2026-04-21 -scope: tau_ceti local; east corridor secondary +updated: 2026-05-02 +scope: tau_ceti local faction_type: economic headquarters: Threshold (GJ 71) -tags: [fusion_fuel, water, ice_harvesting, frontier, independent] +tags: [fusion_fuel, water, ice_harvesting, independent] decision_refs: [D-175] cross_refs: [] --- @@ -19,7 +19,7 @@ cross_refs: [] **Type:** Corporation — Ice Harvesting and Fusion Fuel Refinery **Also Known As:** Threshold Fuel, TFS **Status:** Canonical -**Scope:** Tau Ceti primary; corridor fuel supply secondary +**Scope:** Tau Ceti local **Headquarters:** Threshold (GJ 71, Tau Ceti system) — outer system operations **Classification:** Resource extraction syndicate; monopolist behavioral archetype (local) @@ -27,10 +27,43 @@ cross_refs: [] ## Overview -Tau Ceti's outer ice bodies contain one of the most accessible water reserves in the east corridor. Threshold Fuel Syndicate was formed by a consortium of Threshold settlers who realized that controlling that water supply meant controlling fuel production for every ship passing through. +Tau Ceti is the Reach's transit center. Five gate apertures, 1.2 billion people, and every ship that enters or leaves the Reach passes through Gateway. The system imports fusion fuel — enormously, continuously, from multiple corridor suppliers — because its own consumption outstrips anything local production could cover. Threshold Fuel Syndicate does not try to cover it. What TFS provides is the fraction of Gateway's fuel demand that can be sourced locally, from the system's own outer ice bodies, without depending on gate transit from external suppliers. -Three generations later, TFS operates a vertically integrated operation: ice extraction, water processing, and fusion fuel refinery all under one contract structure. Local competitors have tried and withdrawn; the capital cost of orbital ice-cracking infrastructure is a high barrier. +The fraction is small relative to Gateway's total consumption. It is not small in absolute terms. Tau Ceti's outer system contains accessible ice reserves, and the Syndicate controls extraction rights across the relevant bodies. The fuel that TFS produces reaches Gateway's bunkering infrastructure without passing through a single gate — no transit cost, no gate-schedule dependency, no exposure to the supply disruptions that affect imported fuel when corridor traffic peaks or gate maintenance closes an aperture. For a system whose entire economy depends on transit reliability, a local fuel source that operates independently of the gate network has value beyond its volume. -**Primary operations:** Comet and ice-body water extraction, electrolytic processing, fusion fuel synthesis at Threshold orbital platform. +--- -**Market position:** Dominant fuel supplier for Tau Ceti system; significant spot-market presence in the east corridor where Lagrange Fuel Systems has thinner coverage. +## Origin + +The founding consortium was not a single company. It was a group of Threshold settlers in Tau Ceti's outer system who agreed to pool their extraction claims and equipment rather than compete for the same ice bodies with insufficient capital. The syndicate structure reflects the founding logic: individual operators with small operations could not finance orbital ice-cracking; the collective could, and the collective's combined claim coverage prevented any later entrant from establishing an independent water supply at the same system. + +The fusion fuel refinery was a second-generation addition. The founding generation extracted water and sold it to Gateway's municipal and commercial buyers. The second generation built the refinery and captured the margin between raw water and processed fuel. The refinery investment was financed by forward contracts with Gateway-based transit operators who wanted a local fuel source that did not depend on imported supply arriving through the same gate network their ships used. + +--- + +## Operations + +**Ice extraction:** Comet and ice-body water extraction from Tau Ceti's outer system, conducted from the Threshold orbital platform using extraction vessels that operate on rotation schedules from the platform. The ice bodies are not depleting at current extraction rates; the system's outer region contains more than the operation can process at its current scale. + +**Water processing:** Electrolytic processing of extracted ice to the purity grade that fusion fuel synthesis requires. The processing step runs continuously at the platform; the output feeds directly into the refinery. + +**Fusion fuel refinery:** Synthesis of hydrogen fusion fuel at the orbital platform, refined to the grade specifications that commercial vessel operators require. The refinery operates at a scale calibrated to the portion of Gateway's fuel demand that local supply can realistically serve — a fraction of total consumption, but a fraction that TFS delivers without gate transit. + +**Local extraction monopoly:** TFS holds all water extraction licenses in the Tau Ceti outer system. No competing local extraction operation exists. The monopoly is on local production, not on Gateway's fuel supply — the vast majority of Gateway's fuel arrives through the gates from corridor producers. + +--- + +## Market Position + +TFS is not Gateway's primary fuel supplier. That position belongs to the corridor's major fuel producers — Lagrange Fuel Systems and others — who ship through the gate network at volume. TFS is Gateway's only *local* fuel supplier, which gives it a strategic position disproportionate to its market share. When gate traffic peaks, when an aperture goes down for maintenance, when corridor supply chains are disrupted, TFS's fuel is the supply that continues arriving. The premium that transit operators pay for gate-independent supply — and the contracts that Gateway's logistics administrators maintain with TFS for strategic buffer stock — reflect this. + +--- + +**Cross-References:** +- [Tau Ceti (Gateway)](../star-systems/GJ-71/index.md) — Headquarters system; outer system extraction and orbital platform operations + +--- + +**Status:** Canonical +**Created:** 2026-04-21 +**Updated:** 2026-05-02 diff --git a/wiki/corporations/tongyeong-drive.md b/wiki/corporations/tongyeong-drive.md index 014a75867..d3617e0fe 100644 --- a/wiki/corporations/tongyeong-drive.md +++ b/wiki/corporations/tongyeong-drive.md @@ -19,7 +19,7 @@ cross_refs: [kumho-navigation, higashiyama-vehicle, dalbit-systems] **Type:** Corporation — Precision Technology Manufacturer (Vessel Drive and Navigation Systems) **Status:** Canonical **Scope:** East reach primary; corridor-wide small commercial vessel supply secondary -**Headquarters:** Miryang (GJ 754) — east reach corridor, 4 hops from Gateway +**Headquarters:** Miryang (GJ 754) — east reach corridor, 5 hops from Gateway **Classification:** Sub-Syndic technical enterprise; drive systems and navigation hardware manufacturer ---