Files
settled-reach/docs/sprints/sprint-31/retro.md
T
jpmschweitzerandClaude Opus 4.6 a22bc6ce46 chore(meta): release v0.1.31
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-05 10:23:56 +02:00

4.1 KiB

Sprint 31: Bedrock — Retrospective

Period: 2026-04-05 (single day) Velocity: 9/9 tickets completed (100%) PRs: 4 merged (#110 copy, #111 server, #112 ci, #113 client)

What Shipped

  • #766 Cultural diversity sweep — 10 systems enriched across 3 corridors, Afrikaans/Dutch subversions, per-body GTTR depth
  • #782 Per-body GTTR entries for 25 moons and stations at hub systems
  • #774 Nova Estrada and Entremeio enriched to batch standard
  • #773 D-168 Iserlohn IP evaluation — retained with documented rationale and Altena alternative on record
  • #780 Star map click-through popup with GTTR excerpt, edge-only-on-selected visibility rule
  • #775 main.gd decomposed from 28KB/644 lines to 13.4KB/322 lines (SnapshotConsumers, DialogueCoordinator, SnapshotHandler extracted)
  • #783 All 354 gdlint warnings resolved — zero warnings policy achieved
  • #776 atlas.rs split from 2119-line monolith into 8 focused modules
  • #777 Shared Python DB module (common.py), ruff linting, pre-push integration

What Went Well

  • First sprint on ephemeral branchesstart-sprint.sh created worktrees, opened tabs, auto-ran /sprint-start. No cross-boundary issues, no stuck agents with uncommitted work, no stale index.lock collisions. The worktree migration paid off immediately.
  • Zero warnings achieved — gdlint went from 354 warnings to 0, ruff is clean, clippy is clean. Pre-push now catches all three. Quality baseline established.
  • 4 teams in parallel, same day — copy, server, ci, client all delivered PRs within hours. The ephemeral branch model handled parallel execution cleanly.
  • Review cycles were fast — server needed 2 rounds (changelog fix), ci and copy merged on first review, client merged on first review. No busywork rounds.
  • Process improvements shipped inline — sprint-start process fix (team branches must not run pr-review) came in with the copy PR and merged naturally. Auto-unassign on sprint close fixed a recurring bookkeeping issue.

What Hurt

  • SI agent died during sprint planning — had to redo planning manually. The agent's death left a stale index.lock on main, which was the exact problem the worktree migration was designed to prevent. Root cause: SI was spawned in the main worktree, not an isolated one. Planning agents should use isolation: "worktree" in future.
  • Ptyxis tab placement — first start-sprint.sh run opened 3 windows instead of tabs in the current window. Fixed quickly (switched --new-window to --tab), but the initial experience was messy.
  • Cargo.lock conflicts on merge — server branch had a stale Cargo.lock from pre-v0.1.30. Required manual git checkout before merge. This will recur until sprint branches are created after the version bump.

What We Learned

  • The cascade is load-bearing — redirecting Sprint 31 from tycoon/character work back to Phase 1 wiki completion was the right call. The star map popup only works because 301 systems have GTTR content. Skipping ahead would have produced empty popups.
  • God object decomposition is safe in GDScript — the autoload parse-order constraint was the main risk. The load() inline pattern works, and non-autoload classes can use class_name freely. Documented as convention in CLAUDE.md.
  • Copy PR review scope rule continues to work — Paula's Fragua warning and Miri's GJ-1111 sync issue were correctly classified as content tickets, not PR blockers. Zero scope creep on copy reviews.

Carry-Over

(none — 100% completion)

Action Items

  1. Done: Auto-unassign on sprint close added to tooling/db/sprint stop (committed)
  2. Done: Zero-warnings policy added to pr-push and pr-review skills
  3. Done: start-sprint.sh fixed to open tabs in current window
  4. Backlog: Panel height bug in star map popup for hub systems (cosmetic — Hoshe flagged)
  5. Backlog: show.rs SQL duplication maintenance trap (Tyre flagged — ticket-worthy)
  6. Backlog: qdrant/audio connectors still have local load_config() — incomplete shared module adoption
  7. Future: Planning agents should spawn with isolation: "worktree" to avoid main index.lock