Commit Graph
1760 Commits
Author SHA1 Message Date
jpmschweitzerandClaude Opus 4.6 962596fd57 feat(ui): implant component library + star map refactor (D-169)
New component library at client/ui/implant/:
- ImplantTheme: shared Resource with colors, spacing, font sizes
- ImplantPanel: PanelContainer root with themed background/border
- ImplantHeader: title + subtitle
- ImplantSeparator: themed horizontal rule with above/below spacing
- ImplantDataRow: single-line text with optional color override
- ImplantTextBlock: RichTextLabel for wrapping narrative text
- default_implant.tres: default theme resource

Star map info panel refactored from 140 lines of manual draw_string
calls to 50 lines of component composition via _rebuild_info_panel().

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 10:47:23 +02:00
jpmschweitzerandClaude Opus 4.6 4dd95ba50b docs(decisions): D-169 Implant UI component library — Control node tree
Control nodes with shared Theme resource, not _draw() components.
Dynamic implant system (hardware variants, upgrades, faction overlays)
requires layout automation and theme swapping that _draw() can't provide.

Component set: Panel, Header, Separator, DataRow, TextBlock, StatusBadge,
ProgressBar, TabRow, Expandable. Semantic color roles defined.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 10:43:05 +02:00
jpmschweitzerandClaude Opus 4.6 8d02b110ae fix(ui): star map info panel spacing — split separator padding
Separators now have explicit above (6px) and below (12px) spacing
relative to text baselines. Previously a single 8px block didn't
account for baseline positioning, causing text to merge with
separator lines. Line height bumped to 18px.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 10:35:05 +02:00
jpmschweitzerandClaude Opus 4.6 73ed0be22c chore(process): quality and polish is the golden standard
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 10:31:44 +02:00
jpmschweitzerandClaude Opus 4.6 b14c19c65e chore(process): all review comments actionable + pushback flow
Remove severity tiers from PR reviews. Every comment must be addressed
before merge — no "suggestion" category that gets skipped. Teams can
push back on specific comments with a technical rationale; team lead
evaluates and can retract. Bar: "the reviewer was wrong" not "we don't
want to."

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 10:30:21 +02:00
jpmschweitzerandClaude Opus 4.6 d2ea687ec3 fix(ui): star map info panel — dynamic height measurement
Panel now measures all variable content (GTTR text, adjacent systems)
before calculating height. Fixes clipping on hub systems with many
neighbors and long GTTR excerpts. Unified separator spacing (8px).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 10:27:45 +02:00
jpmschweitzerandClaude Opus 4.6 a22bc6ce46 chore(meta): release v0.1.31
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
v0.1.31
2026-04-05 10:23:56 +02:00
jpmschweitzerandClaude Opus 4.6 ea57a9da70 fix(db): auto-unassign done tickets on sprint close
sprint stop now clears assigned_to on all done tickets in the closing
sprint. Agents don't clean up after themselves — this was causing
5 bookkeeping warnings every sprint.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 10:20:31 +02:00
jpmschweitzer bee93ddbb7 Merge remote-tracking branch 'origin/sprint-31/client' 2026-04-05 10:17:15 +02:00
jpmschweitzerandClaude Opus 4.6 4eb54a6f7a fix(client): resolve all gdlint warnings — zero warnings policy
Fix 354 gdlint warnings across 65 files: 194 class-definitions-order
(reorder declarations), 138 max-line-length (split long lines),
22 code issues (unused args, no-else-return, naming). Update .gdlintrc
to exclude addons/ and raise max-public-methods for test files.
No logic changes — declaration order, whitespace, and naming only.

Ticket: #783

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 09:59:56 +02:00
jpmschweitzer 5941ff791f Merge remote-tracking branch 'origin/sprint-31/server'
# Conflicts:
#	CHANGELOG.md
2026-04-05 09:59:46 +02:00
jpmschweitzerandClaude Opus 4.6 260eefcdd1 refactor(client): decompose main.gd and game_state.gd god objects
Extract SnapshotHandler (static snapshot parsing), SnapshotConsumers
(non-dialogue consumers + audio handlers), and DialogueCoordinator
(dialogue consumers + signal handlers) as class_name scripts.

main.gd: 28KB → 13KB. game_state.gd: 20KB → 8.5KB.
Autoload parse-order safety maintained via load() inline pattern.

Ticket: #775

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 09:59:34 +02:00
jpmschweitzerandClaude Opus 4.6 8eb9e0a383 feat(ui): star map click-through with wiki/GTTR popup and edge visibility
Show system profile popup on select: name, star type, hop distance,
corridor, GTTR excerpt, body count, population, adjacent systems.
Edge rendering changed to show no edges by default, only selected
system's gate lines on click. Star map data extended with wiki fields
for all 301 systems.

Ticket: #780

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 09:59:18 +02:00
jpmschweitzerandClaude Opus 4.6 65bcbd0aa7 fix(meta): move changelog entry to root CHANGELOG.md
Remove erroneous server/CHANGELOG.md and add the atlas split entry
to the project root CHANGELOG.md where it belongs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 09:56:53 +02:00
jpmschweitzer 784bcbf034 Merge remote-tracking branch 'origin/sprint-31/copy' 2026-04-05 09:54:47 +02:00
jpmschweitzer 742d51a3c4 Merge remote-tracking branch 'origin/sprint-31/ci' 2026-04-05 09:54:31 +02:00
jpmschweitzerandClaude Opus 4.6 84c3314924 fix(skills): sprint-start team branch must not run pr-review
Team worktree windows stay on their sprint branch. PR reviews run from
main. Updated step 9b to explicitly stop the team lead from spawning
reviewers — push the PR and wait for feedback instead.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 09:47:50 +02:00
jpmschweitzerandClaude Opus 4.6 f60ae48769 chore(meta): update changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 09:40:32 +02:00
jpmschweitzerandClaude Opus 4.6 fe788a0ae3 fix(simulation): rustfmt long argument lists in atlas dispatch
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 09:40:28 +02:00
jpmschweitzerandClaude Opus 4.6 74d6aee0c1 chore(ci): add ruff to pre-push hook and Makefile
Add Python/ruff block to .config/hooks/pre-push (runs on tooling/
changes). Add lint-python and setup-venv Makefile targets, wire
both into make lint and make setup respectively.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 09:40:10 +02:00
jpmschweitzerandClaude Opus 4.6 2300d9659d fix(tooling): remove unused imports flagged by ruff
Drop unused hashlib, math, and os imports from assign-astro-ids,
generate-star-map, and test_quaternius_raw to pass ruff clean.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 09:40:02 +02:00
jpmschweitzerandClaude Opus 4.6 980201fb49 chore(db): wire ensure_venv() into connector scripts
Add venv auto-activation to audio_batch, audio_connector,
image_connector, qdrant_connector, and trellis_connector.
Scripts re-exec into .venv/bin/python when invoked outside
the venv, with a friendly error if .venv is missing.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 09:39:55 +02:00
jpmschweitzerandClaude Opus 4.6 1640c880da fix(simulation): suppress clippy too_many_arguments on cmd_add_body
The refactor from &Commands to individual parameters exposed the
13-argument signature to clippy. Allow attribute is appropriate
here — the parameters map 1:1 to DB columns.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 09:39:52 +02:00
jpmschweitzerandClaude Opus 4.6 d86ebada8d refactor(db): extract shared DB module from duplicated patterns
Create tooling/db/common.py with resolve_db_path(), load_config(),
get_connection(), and ensure_venv(). Update ticket, sprint,
sqlite_connector.py, and decisions_sync.py to import from common
instead of duplicating. Fixes pre-existing NameError in
decisions_sync.py (missing import os). Add pyproject.toml with
ruff config (ruff==0.15.9, CVE-clean) and dev dependencies.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 09:39:46 +02:00
jpmschweitzerandClaude Opus 4.6 7f23185035 chore(meta): update changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 09:38:15 +02:00
jpmschweitzerandClaude Opus 4.6 fb5c8854e8 refactor(simulation): split atlas.rs subcommands into modules
Extract 2119-line monolithic atlas.rs into 8 focused modules under
src/bin/atlas/: main.rs (thin dispatch), common.rs (shared types and
DB helpers), show.rs, mutate.rs, stats.rs, systems.rs, author.rs,
and sync_wiki.rs. Commands enum stays in main.rs; each match arm
delegates to module::cmd_fn(&conn, args). No behavior change.

Closes #776.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 09:37:04 +02:00
jpmschweitzerandClaude Opus 4.6 9135f1c656 data(wiki): update west corridor Adams ratings for Lichtung and Haltefenn (#766)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 09:36:31 +02:00
jpmschweitzerandClaude Opus 4.6 a97e2267f0 data(wiki): per-body GTTR entries for 25 moons and stations (#782)
Hub systems at hops 0-4 with pop >10K now have individual GTTR entries.
Covers Gateway, Sirius, ACB, Cygni B, Bastion, Nova Roma, Fremantle,
Kampala Gate, Aurelius, Puerto Rivera, and Okafor Station. Each follows
the established drifter's-voice format with Adams rating and practical
information sections.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 09:36:16 +02:00
jpmschweitzerandClaude Opus 4.6 807e8b74a6 data(wiki): cultural diversity sweep — 4 additional systems enriched (#766)
Schuilhoek (GJ-68): data-wealth commercial dynasty subversion.
Helderoog (GJ-111): genetic protocol precision subversion.
Helle Wacht (GJ-598): philosophical colony governance cost.
Altgrund (GJ-189): institutional archive refugee integration.
Also updates Adams ratings in gttr-deep.md for all enriched systems.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 09:35:56 +02:00
jpmschweitzerandClaude Opus 4.6 898b9c747f data(wiki): enrich Nova Estrada and Entremeio GTTRs to batch standard (#774)
Nova Estrada: added founding agreement time-bomb, thirty-year cost, and
infrastructure audition sections. Entremeio: added transit policy, lake
settlement, and Assembly defiance sections. Both now match Kettenschmied
quality bar.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 09:35:47 +02:00
jpmschweitzerandClaude Sonnet 4.6 2ee095306b docs(wiki): cultural stereotyping sweep — 6 entries enriched (ticket #766)
Subversions added or made explicit across 3 most-imbalanced groups:

Afrikaans/Dutch:
- Breëvlei (GJ-661B): xenobiology research community, pre-settlement
  marsh stakes of unknown origin drive community identity
- Bestevaer (GJ-103): Dutch maritime mystery culture; Diepzeecommissie
  secretly building capacity to investigate restricted deep zone

German:
- Lichtung (GJ-356A): full rewrite → artists' colony, F-type light
  environment, no industrial or agricultural purpose
- Haltefenn (GJ-1248): Moorlesen craft tradition (peat-layer reading as
  art) now primary economic identity over peat fuel extraction

Portuguese:
- Espinho (GJ-1075): science/research subversion made explicit on page
- Nascente (GJ-2097): Irmandade reframed as commercial dynasty via 400
  years of freight transit intelligence

Also creates docs/audits/cultural-stereotyping-audit.md with full audit
findings, ratios, recommendations, and follow-up scope for Sprint 32+.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 09:28:56 +02:00
jpmschweitzerandClaude Sonnet 4.6 b21b28df61 docs(decisions): D-168 Iserlohn (GJ-532c) IP evaluation — retained
Real German city origin (Sauerland wire-drawing centre) documented.
Context diverges fundamentally from LoGH fortress. Altena recorded
as preferred alternative. Ticket #773.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-05 09:28:34 +02:00
jpmschweitzerandClaude Opus 4.6 b3ae632530 fix(skills): auto-run /sprint-start in team tabs
Pass "claude /sprint-start" as the initial tmux command so each team
tab loads its briefing and spawns agents automatically — no manual
step needed after tabs open.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 08:53:40 +02:00
jpmschweitzerandClaude Opus 4.6 4249a79aa6 fix(skills): open sprint tabs in current window, no duplicate main tab
start-sprint.sh now uses --tab for all teams (opens in active Ptyxis
window) instead of --new-window. No separate main tab — the caller
is already on main.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 08:51:46 +02:00
jpmschweitzerandClaude Opus 4.6 4dd866c9ad feat(skills): integrate start-sprint into sprint-start skill
Move start-sprint.sh into .claude/skills/sprint-start/scripts/ (was
standalone at parent directory level). Sprint-start Case B now calls
the script automatically after activating a sprint — creates ephemeral
worktrees and opens Ptyxis tabs for each active team.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 08:47:49 +02:00
jpmschweitzerandClaude Opus 4.6 4628458ab0 chore(process): add zero-warnings policy to pr-push and pr-review
- pr-push step 1b: lint check before pushing (gdlint, clippy, ruff)
- pr-review step 0c: check warning count before spawning reviewers
- Added .gdlintrc with max-line-length: 120
- Created ticket #783 for Sprint 31: clean up existing 253 warnings
- Updated #780 with edge visibility rule (show edges only for selected system)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 08:39:50 +02:00
jpmschweitzerandClaude Opus 4.6 469114cb0e fix(ui): wire M keybind for star map toggle, clean up info panel
- Add _unhandled_key_input to main.gd: M toggles star_map.toggle_visible()
- Remove topology line from info panel (internal data, not player-facing)
- Cast aperture_count to int (was showing decimal point)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 08:33:07 +02:00
jpmschweitzerandClaude Opus 4.6 822cf34bbc chore(meta): plan Sprint 31: Bedrock
Phase 1 wiki completion (cultural sweep, GTTR depth, star map popups)
+ infrastructure refactors (atlas.rs, main.gd, Python tooling).

8 tickets: copy (4), client (2), server (1), ci (1).
Cascade dependencies locked: Phase 1→2→3→4→5→6.
#693 cancelled (superseded by #704 compositor).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 08:17:28 +02:00
jpmschweitzerandClaude Opus 4.6 dd75203d11 refactor(process): replace persistent team worktrees with ephemeral sprint branches
Persistent worktrees (server, client, copy, audio, visual, ci, planning,
maintenance) caused agents crossing boundaries, stuck agents leaving
uncommitted work, and index.lock collisions. Replaced with ephemeral
sprint branches (sprint-{N}/{team}) and worktrees created on demand.

Changes:
- New start-sprint script replaces start-session (dynamic tabs per active team)
- Sprint teardown integrated into sprint-start skill (A1c step)
- SR_DB_PATH env var for database access from any directory
- CLAUDE.md team boundaries rewritten (scope-based, not directory-based)
- Agent Rule 0 updated to team scope dirs instead of worktree isolation
- PR review uses git show instead of cross-directory reads
- Briefing template updated for sprint-{N}/{team} branch naming
- Deleted worktree-update skill (obsolete)
- Removed WORKTREE_TEAM env var and cross-directory Read permissions
- All 8 persistent worktrees removed

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 00:33:02 +02:00
jpmschweitzerandClaude Opus 4.6 f94d4c7a2c chore(meta): release v0.1.30
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
v0.1.30
2026-04-05 00:20:23 +02:00
jpmschweitzer 68afd94a57 Merge remote-tracking branch 'origin/client'
# Conflicts:
#	CHANGELOG.md
2026-04-05 00:17:52 +02:00
jpmschweitzerandClaude Opus 4.6 c94c5d7acb fix(client): address PR #109 review — 6 warnings + 5 suggestions
Star map (W1-W3, S3):
- _process visibility guard + dirty flag (no redraw when hidden/unchanged)
- _system_hash masked to 31-bit positive range
- Extracted _find_nearest_system() shared helper

game_state.gd (W4):
- Inline load() in apply_snapshot() replaces per-tick overhead; safe at
  runtime because script is already in resource cache

Data pipeline (W5-W6):
- Script-relative path resolution via __file__
- --check mode + make check-star-map staleness target

Minor (S1-S2, S5):
- Removed redundant bone_idx assignment
- Simplified double-negative test assertion
- Documented autoload parse-order convention in CLAUDE.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-05 00:12:48 +02:00
jpmschweitzerandClaude Opus 4.6 16b7fe0bb5 fix(simulation): address PR #108 review — LEFT JOIN, JSON output, atmosphere default
Review fixes:
- corridor-status: INNER JOIN → LEFT JOIN so systems without gate
  records are included in counts instead of silently excluded
- corridor-status: output as JSON (serde_json) matching all other
  atlas commands, instead of plain-text ASCII table
- generate_body_matrix: emit atmosphere "standard" instead of
  "breathable" to match committed-system conventions
- Doc header: add corridor-status usage example
- CHANGELOG: note stale habitable_planet_count in pre-fix systems

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 23:50:11 +02:00
jpmschweitzerandClaude Opus 4.6 0d5323f66c fix(client): resolve GDScript autoload parse-order errors
Autoload scripts are parsed before regular scripts, so class_name
types (CharacterVisualDescriptor, TestHarness, YamlParser) are not
available at parse time. Replace type annotations with untyped vars
and use load() for in-body class references. Fixes all 14 headless
parse errors (9 pre-existing + 5 from Sprint 30 changes).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 23:40:28 +02:00
jpmschweitzerandClaude Opus 4.6 c758bcd5d6 chore(meta): update changelog
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 23:35:12 +02:00
jpmschweitzerandClaude Opus 4.6 d876923485 test(client): add Sprint 30 acceptance tests
27 tests covering all 5 sprint tickets: descriptor persistence (#718),
overhead anchor (#712), hair highlight swatch (#719), manifest JSON
completeness (#720), and star map scene/HUD integration (#674).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 23:34:48 +02:00
jpmschweitzerandClaude Opus 4.6 aed513eb71 feat(ui): star map insert module — concentric hop-ring view (#674)
New StarMapRenderer: 301 systems in concentric hop-rings from player
location, sector-colored, click-to-select with info panel, pan/zoom.
Integrated into HUD (hidden by default), insert state propagation
wired in main.gd. Data enriched from systems.db + star-map.json via
tooling/generate-star-map-data.py regeneration script.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 23:34:36 +02:00
jpmschweitzerandClaude Opus 4.6 bc168c861a feat(client): hair highlight swatch + manifest JSON for exports (#719, #720)
#719: Add display-only hair highlight swatch (Option B) — auto-derived
from primary tint, non-interactive (MOUSE_FILTER_IGNORE).

#720: Remove DirAccess.open() fallback scanning (breaks in PCK exports).
Fully populate manifest.json (11 body types, 14 hair, 4 heads, 4
eyebrows, 8 clothing). Add tooling/generate-character-manifest script
and make manifest target for regeneration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 23:34:23 +02:00
jpmschweitzerandClaude Opus 4.6 4c1e0e9c85 feat(client): wire CharacterVisualDescriptor into startup IPC (#718)
encode_startup_message() now accepts optional CharacterVisualDescriptor
as third param, serialized via to_dict(). sim_bridge passes the
descriptor from GameState on new game start. apply_snapshot() restores
descriptor from server snapshot on save/load cycle.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 23:34:11 +02:00
jpmschweitzerandClaude Opus 4.6 e8a053080c feat(client): add BoneAttachment3D overhead anchor above Head bone (#712)
Infrastructure for floating UI elements (status indicators, thought
bubbles, alert markers). Marker3D at Vector3(0, 0.3, 0) offset from
Head bone, exposed via get_overhead_anchor() public API.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-04-04 23:34:00 +02:00