diff --git a/.claude/skills/atlas/SKILL.md b/.claude/skills/atlas/SKILL.md index fdf0b58de..218516228 100644 --- a/.claude/skills/atlas/SKILL.md +++ b/.claude/skills/atlas/SKILL.md @@ -2,10 +2,11 @@ name: atlas description: > Query and manage celestial bodies and stations in systems.db. Use when the user - says "atlas", "show system", "list bodies", "list stations", "populate bodies", - "show body", or invokes /atlas. Wraps the Rust atlas CLI binary. + says "atlas", "show system", "list bodies", "list stations", "author system", + "show body", or invokes /atlas. Wraps the Rust atlas CLI binary. Also provides + the full per-system authoring pipeline via "author-system" subcommand. user-invocable: true -allowed-tools: Bash, Read, Grep, Glob +allowed-tools: Bash, Read, Grep, Glob, Write, Edit, Agent --- # Atlas Skill @@ -125,6 +126,32 @@ System (star_systems) Bodies have a self-referential `parent_body_id` for moons → planet relationships. Stations reference `orbits_body_id` for what they orbit. +## Author System (Full Pipeline) + +```bash +/atlas author-system "GJ XXX" +``` + +Walks a single system through the complete body catalog authoring pipeline. +See `references/author-system.md` for the full workflow. + +**Steps:** +1. Wiki analysis → build context from index.md + gttr.md +2. Astrophysical skeleton → generate bodies from star type rules +3. Naming → spawn Miri (wiki-derived register, collision avoidance) +4. Narrative review → Paula gate (names, population, stations vs wiki) +5. Dual quality review → Paula (narrative) + Ozzie (experience + astrophysics) +6. Mechanical integrity check +7. Commit + sync-wiki + git commit + +**Review references:** +- `references/author-system.md` — full step-by-step workflow +- `references/wiki-analysis.md` — extraction logic and 7-questions framework +- `references/naming-brief.md` — Miri prompt template +- `references/review-paula.md` — Paula's review checklist +- `references/review-ozzie.md` — Ozzie's review checklist (includes astrophysical sanity) +- `references/integrity-check.md` — automated verification rules + ## Scope — A True Atlas This skill will grow to cover the full geographic hierarchy of the Reach: diff --git a/.claude/skills/atlas/references/author-system.md b/.claude/skills/atlas/references/author-system.md new file mode 100644 index 000000000..e3ab07147 --- /dev/null +++ b/.claude/skills/atlas/references/author-system.md @@ -0,0 +1,98 @@ +# Author System — Full Pipeline + +Process a single star system from wiki analysis to committed body catalog. + +## Invocation + +``` +/atlas author-system "GJ XXX" +``` + +## Step 1: Wiki Analysis + +Read `wiki/star-systems/{slug}/index.md` and `wiki/star-systems/{slug}/gttr.md`. + +Build understanding of: +- System identity: name, sector, hop, wave, topology, apertures, star type +- Economic character: what does the system produce, import, export? +- Cultural heritage: founding culture, corridor, exception archetype +- Industrial affiliation: MVG, DSMC, Gate Corp, Prometheus, Agricultural Syndic +- Named bodies/locations already in the wiki text +- Population (if wiki specifies) +- The 7 questions (see `references/wiki-analysis.md`) + +This context feeds all subsequent steps but is NOT written to the JSON. + +## Step 2: Astrophysical Skeleton + +Run `tooling/atlas author "{system_id}"` to generate the base proposal JSON. + +Enrich with realistic body counts per star type: +- G/F stars: 8+ planets +- K stars: 7+ planets +- M dwarfs: 6+ planets +- A/B hot stars: 6+ planets + +Always include: oort cloud, asteroid belt (unless wiki contradicts), gas giant +(most systems have one), horizon station. + +Moons: 1 per habitable planet, 2-3 per gas giant, max 4. + +Fill physical parameters: +- surface_gravity from mass_class (terrestrial 0.2-1.1, dwarf 0.01-0.15) +- orbital_period from orbit position + star luminosity +- rotation_period from orbital mechanics + tidal considerations +- atmosphere/biome/hydrosphere from habitable zone position + +Fill structural fields from wiki context: +- economic_role, industrial_corridor, settlement_pattern +- Add stations where wiki implies: transit hub → orbital, industrial → manufacturing station, research → research station, agricultural exporter → freight terminal + +Write the enriched proposal to `docs/atlas/proposals/{id}.json`. + +## Step 3: Naming + +Spawn Miri (subagent_type: miri). See `references/naming-brief.md` for the +full prompt template. + +Key rules: +- Miri reads the wiki text directly — derives naming register from THAT +- Names ALL inhabited bodies AND ALL stations in one pass +- Checks for collisions against existing DB names +- Uninhabited bodies get proper_name = null (body_id is the label) + +Update the proposal JSON with Miri's names. + +## Step 4: Narrative Review (Paula Gate) + +Spawn Paula (subagent_type: paula). See `references/review-paula.md`. + +Format the proposal as a markdown table and present to Paula with the +wiki text. Paula reviews for narrative/political coherence. + +Loop Steps 3-4 until Paula approves. + +## Step 5: Dual Quality Review + +Spawn Paula + Ozzie in parallel. See `references/review-paula.md` and +`references/review-ozzie.md`. + +Both review the proposal JSON + wiki. Both must approve before commit. +Either can flag issues that loop back to Step 3. + +## Step 6: Integrity Check + +Run automated checks per `references/integrity-check.md`. Fix any +failures before proceeding. + +## Step 7: Commit + +```bash +tooling/atlas commit-system docs/atlas/proposals/{id}.json +tooling/atlas sync-wiki "{system_id}" +git add docs/atlas/proposals/{id}.json wiki/star-systems/{slug}/index.md +git commit -m "data(atlas): author {system_name} ({system_id}) — {named bodies summary}" +``` + +Post-commit: verify topology section survived sync-wiki. If missing, +restore from star-map.json data and recommit. diff --git a/.claude/skills/atlas/references/integrity-check.md b/.claude/skills/atlas/references/integrity-check.md new file mode 100644 index 000000000..7e6cf4ed5 --- /dev/null +++ b/.claude/skills/atlas/references/integrity-check.md @@ -0,0 +1,50 @@ +# Integrity Check — Automated Verification + +Run these checks on the proposal JSON before commit. All must pass. + +## Checks + +1. **Inhabited bodies have names:** + Every body with `inhabited: true` must have `proper_name` set (not null). + +2. **Uninhabited bodies have no names:** + Every body with `inhabited: false` must have `proper_name: null`. + Exception: bodies that serve as named research outposts (e.g., "Corrosion + Bench") where the name IS the body's identity. + +3. **All stations have names:** + Every station must have `proper_name` set. Use the station_id as the + name if the station has no cultural name (e.g., "GJ406g-S1" for an + anonymous fuel depot). + +4. **No name collisions:** + ```sql + SELECT proper_name FROM bodies WHERE proper_name IS NOT NULL + UNION SELECT proper_name FROM stations WHERE proper_name IS NOT NULL + ``` + No proposed name may duplicate an existing name in the database. + +5. **Body count minimum:** + - G/F stars: ≥ 8 planets (excluding moons, belts, oort) + - K stars: ≥ 7 planets + - M dwarfs: ≥ 6 planets + - A/B stars: ≥ 6 planets + +6. **Required structures:** + - Oort cloud body present + - Horizon station present with `has_gate_infrastructure: true` + - At least 1 asteroid belt (unless wiki explicitly contradicts) + +7. **Orbit consistency:** + - `orbit_index` increases monotonically for top-level bodies + - No duplicate `orbit_index` at the same parent level + - Moon `orbit_index` starts at 1 within parent + +8. **Parent references valid:** + - Every moon's `parent_body_id` references a body in the same proposal + - Every station's `orbits_body_id` references a body in the same proposal + +## Running the Check + +Parse the proposal JSON and verify each rule programmatically. Report +all failures, not just the first one. diff --git a/.claude/skills/atlas/references/naming-brief.md b/.claude/skills/atlas/references/naming-brief.md new file mode 100644 index 000000000..069cc91df --- /dev/null +++ b/.claude/skills/atlas/references/naming-brief.md @@ -0,0 +1,41 @@ +# Miri Naming Brief Template + +## Spawn Prompt + +``` +Name bodies and stations for {system_name} ({system_id}). + +Read wiki/star-systems/{slug}/index.md and wiki/star-systems/{slug}/gttr.md. + +{star_type}, {sector}, {topology} with {apertures} apertures, {wave}. +{one-line summary of system character from wiki}. + +Names needed: +{list each inhabited body and station that needs a proper_name} + +Register: derive the naming register from the wiki text. The wiki already +carries the cultural variation from the corridor authoring. Read the wiki +voice — the names should match the culture described THERE, not a lookup +table. + +Collision avoidance — these names are already in use: +{query: SELECT proper_name FROM bodies WHERE proper_name IS NOT NULL + UNION SELECT proper_name FROM stations WHERE proper_name IS NOT NULL} + +Name ALL inhabited bodies AND ALL stations in one pass. +Uninhabited bodies do NOT get names (proper_name stays null). + +ONE name + one-line rationale per location. Message only, no file. +``` + +## Rules + +- Wiki names override Miri: if the wiki already names a body or station, + USE THAT NAME. Do not invent alternatives. +- Do not translate names in the notes field — translations flatten the name + into a label. +- Station names should not be generic descriptions of function ("Transit Hub", + "The Exchange"). They should feel like real place names that happened to + be assigned to transit/exchange facilities. +- Every inhabited body and every station MUST get a proper_name. +- Uninhabited bodies MUST have proper_name = null (body_id is the UI label). diff --git a/.claude/skills/atlas/references/review-ozzie.md b/.claude/skills/atlas/references/review-ozzie.md new file mode 100644 index 000000000..125de47e7 --- /dev/null +++ b/.claude/skills/atlas/references/review-ozzie.md @@ -0,0 +1,71 @@ +# Ozzie Review Checklist + +Ozzie reviews for player experience quality AND astrophysical sanity. + +## Spawn Prompt + +``` +Review the body catalog proposal for {system_name} ({system_id}). + +Read: +- wiki/star-systems/{slug}/index.md +- wiki/star-systems/{slug}/gttr.md +- docs/atlas/proposals/{id}.json + +You are reviewing from two angles: player experience and astrophysical +integrity. + +## Player Experience + +1. **Does this system feel like a real place?** Read the body table as + if you were a player opening the navigator. Does it have character, + or is it generic? Would you want to visit? + +2. **Is there at least one interesting detail?** An empty habitable + moon nobody claimed. A research outpost with a functional name. A + gas giant with rings. Something the player notices. + +3. **Orbital schematic test:** Picture the system in the orbital + schematic wireframe (star → concentric orbits → bodies). Does it + look good? Is there visual variety — not all bodies clumped at the + same distance? + +4. **Does the system have texture?** Are there enough bodies to feel + like a real star system? (Minimum 6 planets for any star.) Are + there moons, belts, gas giants — not just habitable worlds? + +## Astrophysical Sanity + +Review as an astronomer. Check against the wiki — if the wiki states +an explicit reason for an exception (variable star, subgiant, binary +companion, unusual stellar history), the body catalog should reflect +that exception. If no exception is stated, standard astrophysics applies. + +5. **Body count for star type:** G/F → 8+, K → 7+, M → 6+, A/B → 6+. + Is the count met? + +6. **Habitable zone position:** Is the habitable planet at the right + orbital distance for this spectral type? M-dwarfs: close in (short + orbital periods). A/B stars: far out (long orbital periods). + +7. **Orbital periods:** Do they increase monotonically outward? Are + they plausible for the star's luminosity? Inner planets: days to + months. Habitable zone: months to a year. Outer: years. + +8. **Surface gravity:** Terrestrial 0.2-1.2g. Dwarf/moon 0.01-0.15g. + Gas giants: null. Does mass_class match gravity? + +9. **Tidal locking:** Close-in M-dwarf planets and moons should be + tidally locked (rotation_period ≈ orbital_period × 24). + +10. **Atmosphere consistency:** Barren inner planets: none. Habitable: + breathable. Venus-analogs: toxic. Frozen outer: thin or none. + Gas giants: dense. Do any bodies have impossible atmospheres? + +11. **Binary/exotic handling:** If the star is binary, are bodies + on plausible orbits (circumbinary or around one component)? If + exotic (white dwarf, subgiant, variable), does the body catalog + reflect the stellar physics? + +Respond with: APPROVE, or specific issues to fix (with rationale). +``` diff --git a/.claude/skills/atlas/references/review-paula.md b/.claude/skills/atlas/references/review-paula.md new file mode 100644 index 000000000..c2f0d96ac --- /dev/null +++ b/.claude/skills/atlas/references/review-paula.md @@ -0,0 +1,42 @@ +# Paula Review Checklist + +Paula reviews the proposal JSON + wiki for narrative and political integrity. + +## Spawn Prompt + +``` +Review the body catalog proposal for {system_name} ({system_id}). + +Read: +- wiki/star-systems/{slug}/index.md +- wiki/star-systems/{slug}/gttr.md +- docs/atlas/proposals/{id}.json + +Check the following against the wiki's established narrative: + +1. **Names vs cultural voice:** Do the proper_names fit the cultural + register established in the wiki text? A Japanese-heritage system + should have Japanese-register names. A Commonwealth system should + have institutional names. Does anything jar? + +2. **Population vs narrative role:** Do the population numbers make + sense for this system's described economic and political role? + A "modest transit waypoint" shouldn't have 3B people. A "major + manufacturing base" shouldn't have 50M. + +3. **Stations vs power dynamics:** Do the station placements reflect + the political and economic dynamics described in the wiki? If the + wiki describes a corporate-controlled system, is there a corporate + station? If the wiki describes a research mandate, is there a + research facility? + +4. **Coherence:** Read the body catalog as a table. Does it tell a + story that's consistent with the wiki's narrative? Would a reader + of the wiki be surprised by anything in the body catalog? + +5. **Contradictions:** Does anything in the body catalog directly + contradict the wiki's faction notes, silence topic, or calibration + note? + +Respond with: APPROVE, or specific issues to fix (with rationale). +``` diff --git a/.claude/skills/atlas/references/wiki-analysis.md b/.claude/skills/atlas/references/wiki-analysis.md new file mode 100644 index 000000000..d5d50d302 --- /dev/null +++ b/.claude/skills/atlas/references/wiki-analysis.md @@ -0,0 +1,53 @@ +# Wiki Analysis Framework + +## What to Extract + +Read `wiki/star-systems/{slug}/index.md` and `gttr.md`. Build context for: + +### Identity +- System proper name (from wiki heading, may differ from DB) +- Star type and spectral class +- Sector, hop distance, settlement wave +- Gate topology and aperture count + +### Economy & Culture +- Economic character (from Supply Dependency section) +- Cultural heritage (from Calibration Note or Faction Notes) +- Industrial corridor affiliation (MVG, DSMC, Gate Corp, Prometheus, Agricultural Syndic) +- Exception archetype if applicable (Early Arrival, Corporate Reset, Refugee Colony, Idealist Exception, Gate Silence Survivor, Perpetual Founder Stamp) + +### Existing Names +- Any body names mentioned in the wiki text (planets, moons, stations) +- Any location names (cities, districts, facilities) +- These MUST be used in the proposal — do not invent alternatives + +### Population +- Wiki population number (from frontmatter or text) +- If not specified, estimate from system role and hop distance + +## The 7 Questions + +Derive answers from the wiki text. These guide naming, population, +and station decisions: + +1. **What do people do here?** → economic_role for inhabited bodies +2. **Who holds power?** → governance implications for station types +3. **What is the main tension?** → narrative character of the system +4. **What does the Assembly mean here?** → institutional presence level +5. **Relationship to nearest hub?** → transit infrastructure needs +6. **Oldest living thing?** → cultural depth and naming age +7. **What is this system afraid of?** → vulnerability that shapes infrastructure + +## Population Heuristics + +When wiki doesn't specify: + +| Topology | Wave 1-2 | Wave 3-4 | Wave 5 | +|----------|----------|----------|--------| +| Hub (5+) | 2-5B | 1-3B | 100-500M | +| Junction (3-4) | 1-3B | 500M-2B | 50-200M | +| Loop/Through (2) | 500M-2B | 200M-1B | 20-100M | +| Dead end/Spur (1-2) | 200M-1B | 50-500M | 5-50M | + +Adjust for: system role (capital → higher, research → lower), industrial +corridor (manufacturing → higher), agricultural character (dispersed → moderate).