atlas-update-field: update system-level fields across star_systems,
system_gates, and system_history tables with field whitelist.
atlas-commit-and-sync: full per-system pipeline (verify → wipe → commit
→ sync-wiki → git commit). Updated atlas SKILL.md with new commands.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
atlas-check shows planet count, body summary, and flags for quick
proposal diagnostics. atlas-verify now accepts "unusual" as a valid
star_type alongside "binary".
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Uninhabited bodies may have proper names for lore reasons — the check
was too strict.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- star_type check now skips binary systems (star_type="binary" is valid)
- Strip dwarf prefixes (d, sd) before comparing spectral class letter
- Case-insensitive comparison for lowercase spectral classes
- Exclude GJ0.json (Sol) and GJ1221.json from verification (hand-authored)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Rewrite atlas-verify as proper Python script (was inline Python in
bash with path injection risk). Adds star_type/spectral_class
consistency check. Supports multiple files via glob.
- Add atlas-names and atlas-systems-done query helpers (clean versions
of what the copy branch created — supersedes atlas-helpers.sh)
- Wire atlas-verify into Makefile (make atlas-verify, pre-pr-content)
- Update atlas skill references to point to the script
- Merge diff-based skip into pre-push hook: only lint client/ or
server/ when those dirs actually changed in the push. Combined with
existing directory-existence guards for cold worktrees.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
docs/wireframes/star-map.f0 — Frame0 wireframe for the galaxy
navigator (created during wireframing session).
tooling/wipe-bodies.sh — utility to clear bodies/stations tables
in systems.db (preserves star_systems).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Rust binary (server/src/bin/atlas.rs) with commands: show-system,
show-body, show-station, list-bodies, list-stations, add-body,
add-station, stats, populate. Reads from server/data/systems.db.
Wrapper at tooling/atlas, skill at .claude/skills/atlas/SKILL.md.
Scope note: atlas will grow to cover the full geographic hierarchy
(planetary surfaces, settlements, districts) as the cascade progresses.
Also: removed stale star_systems table from settledreach.db (belongs
in systems.db only) and ran initial populate pass (329 bodies + 301
horizon stations across 301 systems).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Segmentation:
- Face-based exclusive assignment (no overlap, no caps needed)
- Hips split from torso (pelvis as own segment)
- Torso_upper independent (spine_03 + clavicle, not a variant)
- Clavicle moved from arm_upper to torso_upper
Hair pipeline:
- Solidify modifier (20mm) for scalp hair volume
- Normal recalculation before solidify for consistent direction
- Eyebrows/facial hair NOT solidified
- Fixed mask generation (was outputting black, now white)
Clothing pipeline:
- Solidify modifier (25mm) for clothing thickness
- Peasant shoes added from Fantasy pack
Tooling:
- convert_outfit.py with solidify support
- inspect_glb.py, check_hair_symmetry.py for debugging
- Segment reference distribution locked
- Q-063 footsteps VFX filed
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Warning fix:
- Remove torso_upper from hides in 3 coverage.json files
(coveralls_basic, jacket_utility, shirt_henley) and the generator
script — redundant when torso_variant is "full"
Suggestions addressed:
- Add pants_cargo authoring note about foot segment distinction
- Add pipeline_log.json provenance output to Surface Deform batch
pipeline (tracks method per variant: surface_deform/shrinkwrap/copy)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Three new Blender/Python scripts for the clothing production pipeline:
- blender_surface_deform_batch.py: fits a reference clothing GLB to all
11 body types via Surface Deform modifier in headless mode
- blender_create_clothing_refs.py: procedurally creates placeholder
reference meshes from average_m body segments
- setup_clothing_metadata.py: generates coverage.json and
reference_mask.png for each clothing item
Surface Deform headless bind confirmed working in Blender 5.0 via
temp_override — upgrades confidence from MEDIUM to HIGH (#710).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix stale 21→18 segment count in architecture doc, script docstrings,
and disk budget table (critical — both reviewers)
- Add average_m/README.md noting role as clothing reference body
- Add __main__ guards to diagnostic scripts
- Preflight-check all source paths in blender_process_bodies.py
- Document solid-white hair masks as v0.2 placeholder for multi-region
- Add fallback size comment for head mask generation
- Add bald_mask.png (1×1 black) for sidecar convention consistency
- Document child non-uniform scale rationale (Y=0.72 vs XZ=0.75)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add CharacterVisualDescriptor (11-variant BodyType enum, wire format
encode/decode, body_type_key mapping) and CharacterVisual compositor
(runtime 3D character assembler with slot architecture, BoneAttachment3D,
clothing coverage, recolor mask loading, skin tone tinting, bone
validation). Includes 64 unit tests and Blender utility scripts.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add .gitignore entries for spike Godot caches, import artifacts,
and vendor asset downloads. Add tooling/blender wrapper that resolves
flatpak/native Blender installs and auto-converts relative paths to
absolute for flatpak sandbox compatibility.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add session_hash to all API calls (maintains gr.State between
image_to_3d and extract_glb)
- Pass is_multiimage=False at position 2 (9-param image_to_3d)
- Pass output_buf=None at position 0 (3-param extract_glb)
- Document full API parameter reference and failure modes
- Add trellis-batch.sh for gentle sequential batch generation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Simplified image-gen SKILL.md, removed obsolete DDS/style references
(replaced by Gemini API connector). Updated audio_connector, gitignore,
and CLAUDE.md.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New skill for converting concept images to game-ready .glb models via
Trellis (image-to-3D) and Blender post-processing (scale normalization,
material setup, recolor mask generation).
Connectors: trellis_connector.py (Gradio API), image_connector.py
(Gemini API for concept art).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New --check-name-collisions mode scans all culture-*.ron files and
reports given/family names appearing in multiple culture pools.
Exits 1 on collision with machine-readable output. Sprint 26 review
caught 6 overlaps manually — this automates the check.
Ticket: #665
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Content files (RON templates, YAML campaigns, gauntlet data) are consumed
exclusively by the server. Colocate them at server/content/ and update all
path references in Rust source, tooling scripts, and schema files.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Canvas now 16:9 with circle filling height. Radial fade gradient uses
userSpaceOnUse for true circular shape. Hop 15+ folded into final ring.
Margins trimmed to fit content.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Script now auto-converts to PNG after generating SVG. Tries magick,
convert, or rsvg-convert in order.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Reproducible concentric-ring star map: Gateway at center, hop rings
radiating outward, sectors in cardinal wedges (N/E/S/W), alternating
band colors per sector, hop 15+ folded into final ring with fade-out
zone. Sol pinned due west.
Run: python3 tooling/generate-star-map-svg.py
Output: docs/diagrams/design/star-map-concentric.svg
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
GJ 702A was a deprecated binary system entry. Replace with GJ 1221,
a real catalog star — DXP9 peculiar magnetic white dwarf at 20.03 ly.
Dead-end topology connecting to EZ Aqr (GJ 866A).
Updates: star-map.json, systems.db, gj-catalog-real.json, catalog.md,
EZ Aqr topology reference. New wiki entry and Drifter's Guide entry.
System count restored to 301.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replaces manual Explore agent searches with a fast Python script
that finds unwritten wiki stubs by sector and hop range. Reads
star-map.json for topology and wiki stubs for star type/sector/wave.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update wiki_sync.py and process-wiki-system-changes to remove
astronomical_id references. Add migrate-s-to-gj.py migration script.
Update generate-stubs.py and validate-ron for new schema.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
New data flow: wiki → star-map.json + SQLite.
- tooling/process-wiki-system-changes: unified script that reads
wiki, updates star-map.json topology, syncs to SQLite
- tooling/db/wiki_sync.py: wiki frontmatter parser + SQLite upsert
- generate-stubs.py: updated for full-frontmatter wiki format
- Removed extract-csv.py (replaced by SQLite queries)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replaced fabricated designations with real Gliese-Jahreiss entries
sourced from HYG Database v4.1. Selection: 215 G/K/F + 75 M + 10
unusual (white dwarfs, flare stars, subdwarfs) = 300 systems.
Habitable star types (G/K/F) are preferred at each distance shell,
spreading usable planets wider through the network. M-dwarfs fill
remaining slots — station economies, mining, frontier outposts.
Distance range: 4.2-46.8 ly. 51 named stars including Tau Ceti
(Gateway), Alpha Centauri, Delta Pavonis, Barnard's Star, Sirius,
Procyon, Arcturus, Pollux, Vega, Fomalhaut.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
All systems use Gliese-Jahreiss (GJ) designations as primary catalog.
35 real nearby stars assigned by proximity to Gateway; 265 fabricated
across GJ sub-catalogs (main, southern, supplement, post-settlement).
Notable assignments:
- Gateway (S-001): GJ 71 / Tau Ceti
- Alpha Centauri A/B (S-090): GJ 559A, binary junction at hop 3
- Delta Pavonis (S-265): GJ 780, core dead_end at hop 2
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
300-node gate network with 334 edges, generated from seed config then
hand-balanced and tuned. Gateway (S-001) is the first hop from Earth
with 4 active + 1 dormant Sol aperture.
Final topology: 20% dead_end, 14% spur_end, 31% through_route,
10% loop_member, 19% junction, 6% hub. Frontier sectors have
distinct linear corridors; core is densely interconnected.
Includes generation pipeline (generate, sculpt, patch-core, tune),
seed config, and star-map-plan.md with algorithm documentation.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The YAML→RON converter and its make target are v0.1 artifacts superseded
by the v0.2 RON-first generator pipeline. content-ron/ was already
gitignored; this removes the tool that generated it.
Closes#667.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
tea-comment now accepts @/path/to/file.md syntax to read comment body
from a file, avoiding $() subshells that break permission matching.
Updated pr-review skill and tea-cli rules with the new pattern.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Define ZoneSpec, CultureProfile, and NpcBlueprint structs with serde/RON
deserialization. Ship example RON files as schema contract for the copy
team (#609, #610). Add validate-ron CLI for copy team to lint their files
without compiling the server.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Updated docstrings in sqlite_connector, qdrant_connector,
decisions_sync, schema.sql, and two doc comments in generator.rs.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add live server lifecycle to tests/run-visual (start/stop server per
scenario, parse LISTENING:{port}). Add MessagePack snapshot replay to
visual_capture.gd via Protocol.decode_snapshot() — exercises the full
client pipeline from wire bytes to rendered fog. Three replay scenarios
(hub_spawn, fog_theater, hub_after_movement) plus one live scenario
(fog_live_hub). Add gen_gauntlet_fixtures.rs to produce .msgpack fixtures
from the Gauntlet test world. Add max_diff_pct threshold to visual-diff.
Makefile: add fixtures-gauntlet target, fix build-client double-import,
preserve .godot cache in clean.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Consolidates all connector scripts under tooling/ per project
structure conventions. Symlink at db/connectors → tooling/db/
preserves backwards compatibility (remove after Sprint 22).
Updated references in CLAUDE.md, Makefile, DEVOPS.md, all skill
files, agent files, rules, schema comments, and Sprint 21
briefings. Python scripts updated with correct SCHEMA_PATH
(now relative to WORKTREE_ROOT/db/schema.sql).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- `db/connectors/decision next [D|Q|R]` — show next available ID
- `db/connectors/decision claim <prefix> <domain> [title]` — reserve ID in DB
- `db/connectors/decision check-dupes` — detect duplicate IDs in markdown
- `tooling/check-decision-ids` — pre-commit hook for dupe detection
- D-035 added as known exception (139 files, too embedded to renumber)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Single-command wrapper that handles temp file creation and cleanup
so tea comment works reliably with multi-line strings. Pre-approved
in settings.json, referenced in CLAUDE.md and pr-review skill.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Document non-blocking receive contract in perf_bench.rs docstring,
confirming no TCP deadlock race (Hoshe #1, critical)
- Make shadowcast parser order-independent — flush on new config header
instead of requiring Recursive after Symmetric (Hoshe #2)
- Fix p95 calculation: use floor(0.95*(N-1)) nearest-rank instead of
ceil(0.95*N)-1 which was off-by-one at N=50 (Hoshe #4)
- Error on --compare when no baseline file exists (Hoshe #5)
- Add D-031 10tps assumption comment to TICK_BUDGET_US (Tyre #1)
- Strengthen snapshot assertion: require warmup + half measurement
window instead of warmup + 1 (Tyre #2)
- Regenerate baseline with corrected p95 (356µs, was 526µs)
Hoshe #3 (.PHONY) was already addressed — perf-baseline is in the
.PHONY declaration on Makefile line 10.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds `make perf-baseline` — boots the full server plugin stack with
real content, measures 50 ticks (5 warmup), captures per-tick timing,
entity counts, and process RSS. Includes shadowcast benchmarks. Saves
structured JSON to tests/perf/baseline.json for regression detection.
Supports --compare mode (>20% threshold).
First baseline: mean 366µs, p95 526µs (0.5% of D-026 100ms budget).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>