Files
settled-reach/CHANGELOG.md
T
2026-02-11 19:32:56 +01:00

9.5 KiB
Raw Blame History

Changelog

All notable changes to The Settled Reach project will be documented in this file.

Format based on Keep a Changelog.

[Unreleased]

Added

  • LocalBridge IPC over Unix domain sockets (#78) — length-prefixed MessagePack framing, SimBridge implementation, BridgeResource ECS wrapper
  • Tile collision system (#236) — TilePosition component, chunk-based WalkabilityMap (D-012), MoveIntent + validate_movement system
  • TilePosition ↔ f32 render coordinate conversion (to_render_coords, from_render_coords) bridging simulation and wire format
  • Chunk load/unload support in WalkabilityMap — HashMap<ChunkCoord, ChunkData> with 32x32 tile chunks
  • 21 new tests (4 framing + 2 IPC integration + 14 movement unit + 1 movement integration), total 41
  • db/connectors/ticket CLI — ergonomic ticket management (list, show, create, assign, sprint, deps, search, epics, children, count) with JSON output
  • Sprint 1 "Run" created with 8 stories targeting moving character on screen via IPC bridge
  • Ticket skill rewritten to use ticket CLI instead of raw SQL wrapper scripts
  • Godot 4 client boilerplate (epic #277) — scenes, autoloads (SimBridge, GameState, InputMapper), rendering stubs, UI shell (HUD, minimap, monologue display), input system with semantic actions
  • gdUnit4 test framework with 7 tests (2 smoke + 5 D-030 Layer 1 fixture tests for snapshot parsing)
  • make ci-client pipeline (lint, build, test via gdUnit4 headless runner)
  • Camera tracking locked to player position (D-015), monologue display wired to snapshot data (D-016)
  • Gitea tea CLI instructions in CLAUDE.md — non-interactive flags, PR workflow patterns
  • /review-pr skill — dual-agent PR review with Hoshe (code quality) and Tyre (architecture) in parallel, Gitea integration, vendor file exclusion patterns, local merge workflow, heredoc workaround
  • Automated Rust install via make setup (tooling/install-rust script, rustup + clippy + rustfmt)
  • Automated Godot download/install via make setup (tooling/install-godot script, installs to ~/bin/godot4)
  • InputQueue tick ordering enforcement via debug_assert (determinism guard)
  • Serialization roundtrip tests for all PlayerAction and EntityKind variants (D-030 Layer 1)
  • Edge case tests: day wraparound at midnight, day() calculation, out-of-order input rejection
  • Test runner switched to cargo-nextest (D-030 requirement)
  • Rust/bevy_ecs simulation server boilerplate (epic 276) — Cargo project, module structure, core ECS types, plugin scaffolding, deterministic simulation resources, test infrastructure
  • SimulationTime resource with D-031 time system (10 ticks/game-minute, 4 day phases)
  • SimRng deterministic RNG resource (ChaCha20, seeded for replay)
  • InputQueue resource for timestamped semantic player actions
  • ObserverSnapshot and PlayerInput IPC types with MessagePack serialization (D-020)
  • SimBridge trait abstracting client-server transport
  • CauseChain production component for information provenance tracking (D-030)
  • SimulationTier types with LRU eviction support (D-026: Active/Background/StateSaved/Ungenerated)
  • NPC 10-axis model components (D-024: 7 essential + 3 supporting + CombatCapability)
  • Server test infrastructure: 11 inline unit tests + 4 integration tests (smoke + serialization round-trips)
  • make ci-server pipeline verified green (clippy, fmt, build, test)
  • Round 18 v0.1 gap analysis workshop — 7 agents, 2 rounds, 4 tracks (concept proof, wow factor, missing systems, testability)
  • D-030: Testability architecture — 8 sub-decisions for ticket #214 (gdUnit4, hybrid Rust testing, CauseChain component, three-layer IPC testing)
  • D-031: Time system — 10 ticks = 1 game-minute, 4 day phases (Morning/Afternoon/Evening/Night), diegetic clock display
  • 41 new tickets from gap analysis: 3 epics (Movement & Collision, Observation & Interaction, Game State Management) + 38 stories
  • 15 priority promotions including 3 tickets to critical (deterministic replay, divergent knowledge, divergent relationships)
  • 21 new dependency records mapping critical path through collision → pathfinding → NPC movement → routine execution
  • Workshop directory convention established with per-workshop subdirectories
  • Project directory scaffold: client/, server/, tooling/, tests/, .config/, .cache/
  • Top-level Makefile with dev workflow targets (setup, build, run, test, lint, ci, clean)
  • Whitelistable sqlite-init and sqlite-seed wrapper scripts completing the db/connectors/sqlite-* set
  • Round 17 content architecture workshop — Full team (8 agents, 3 rounds) defining content pipeline
  • D-023: Three-tier content model (authored drama modules, templated content, procedural filler) with life-sim substrate
  • D-024: NPC generation model — 10 axes (7 essential + 3 supporting) with CombatCapability ECS component
  • D-025: Social site / functional cluster as atomic Tier 2 template unit (4-8 NPCs, 15-40 tiles)
  • D-026: Simulation tiers with timestamp-based LRU eviction (Active/Background/State-saved/Ungenerated)
  • D-027: Vertical slice — smuggler + detective two-character proof-of-concept (supersedes D-006)
  • D-028: Dialogue architecture — tagged line pools with four relational layers (access tiers, history, trust-gating, unprompted disclosure)
  • D-029: Population entanglement ratio — 30% flat / 50% mundane triangles / 20% intrigue-entangled
  • Content architecture workshop brief documenting the "life first, drama second" design philosophy
  • Mellanie (Copywriter) activated from standby for content authoring phase
  • Round 16 faction development — Full faction framework with lore, political analysis, mechanical grounding (session closed, awaiting team input for v0.1 selection)
  • 3D reputation system: Trust × Usefulness × Exposure per faction
  • Faction mechanical grounding: starting loadouts, information asymmetry, blind spots, resource loops
  • Power dynamics analysis: formal vs. real power distribution across factions
  • Character drama templates: whistleblower, inspector with conscience, dual-loyalty operative, reluctant conspirator
  • Betrayal vectors and conspiracy potential for all six factions
  • "First 30 Minutes" test demonstrating six mechanically distinct faction perspectives
  • D-021: Official project title "The Settled Reach" confirmed, domain settledreach.com secured
  • Round 14 worldbuilding — "The Settled Reach" original SF setting foundation with full team reactions
  • Original terminology established: Settled Reach, Founder Gates, Span Gates, Interstitium, neural lattice, Meridian, imprint, re-embodiment, Perpetuals, the Unbound, Forking, Severance
  • Four enhancement tiers: Baseline, Augmented, Transcendent, Elevated (plus the Threshold as endgame horizon)
  • Two-tier death system: soft death (lattice intact) and hard death (lattice destroyed, imprint restore)
  • Six factions: Concord Assembly, Syndics, Separatists, Guardians of Autonomy/Severance, Veil Institute, Lattice Commission
  • Infrastructure-as-mystery: Builders inhabiting the Interstitium, Gyre events as leakage
  • Miri's IP originality guardian role — flags concepts too close to source franchises
  • Whitelistable wrapper scripts for SQLite and Qdrant connectors (sqlite-query, sqlite-exec, qdrant-search, qdrant-index, qdrant-health, qdrant-count)
  • Architecture evaluation and risk assessment documents for Godot+Rust bridge approach
  • Round 13 engine selection discussion — full team debate on engine paradigms
  • D-020: Engine and architecture selection — Godot 4 client + Rust/bevy_ecs simulation server via subprocess/IPC
  • Rejected alternatives R-004 through R-010 documented (pure Bevy, pure Godot, GDExtension, C++ GDExtension, Fyrox, custom framework, protobuf)

Fixed

  • WalkabilityMap rewritten from flat Vec to chunk-based HashMap per D-012 architecture (Tyre review)
  • LocalBridge mutex .unwrap() → .expect() for clearer panic messages (Hoshe review)
  • Documented 16MB MAX_MESSAGE_SIZE rationale in framing.rs (Hoshe review)
  • Client input_mapper double-check bug (redundant event.pressed + is_action_pressed)
  • Bounds validation on snapshot position arrays in game_state.gd and entity_renderer.gd
  • Deterministic test snapshots (replaced Time.get_ticks_msec() with incrementing counter)
  • Tween overlap in monologue_display.gd (cancel active tween before creating new one)
  • SubViewportContainer missing SubViewport child in minimap.tscn
  • Cargo.toml edition 2024 → 2021 for broader toolchain compatibility
  • Relationship.target_name: String → target_id: u64 for entity scalability (Tyre review)
  • DayPhase enum now derives Serialize/Deserialize (consistent with other enums)
  • Replaced all absolute paths (macOS and Linux) with project-relative paths across round-16 docs
  • Removed duplicate ROUND-16-STATUS.md from project root (content already in round-16-session-notes.md)
  • Added relative-path convention to Qatux agent persona for cross-system consistency

Removed

  • dotfiles/tmux.conf (no longer needed)

Changed

  • All 18 agent briefings updated for decisions/ directory split and DEVOPS.md references
  • Implementation agents (Dudley, Hoshe, Justine, Oscar, Si, Stig, Tyre) now include Development Workflow sections with Makefile targets
  • Q-009 (time system) resolved via D-031
  • Ticket catalog expanded from 232 to 273 tickets with sprint sequencing (Run → Feel → Content → Validate)
  • Ticket skill updated to use wrapper scripts exclusively (no more direct python3 calls)
  • Miri's role updated from Canon Guardian to Worldbuilder & Setting Designer (original IP pivot)
  • Project description updated to reflect D-020 engine decision
  • Connector usage instructions now reference wrapper scripts instead of python3 directly
  • Q-001 (engine selection) resolved via D-020