Move wiki from docs/wiki/ to root wiki/. Add 14 category templates with
YAML frontmatter, governance model, hierarchical spatial structure
(system > station > district > location). Populate Krenn System entry
as first concrete star system. Update cross-references in workshop and
sprint docs.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Server proof room now has 3 NPCs instead of 1. Find player entity
by kind instead of assuming entities[0]. Wall-hides test checks
specific NPC position (16.5, 13.5) rather than asserting zero NPC
count. Corner-reveal test searches for NPC1 by position.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Server team shipped strict PROTOCOL_VERSION enforcement (c05ff7b),
1-indexed verb priorities, and "Observe" label for ExamineNpc.
Updates all test snapshots to include version: 4, fixes sim_bridge
test mode priorities (0-indexed → 1-indexed) and labels, replaces
v1 backward-compat tests with strict version rejection tests.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Content conversion and authoring sprint — 19 tickets across copy (8),
server (9), client (1 carry-over), and CI (1). Critical path runs
through wiki→YAML NPC conversion (#398) to content loader (#408).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Server-driven interaction prompt that displays "E - Talk" when near
an interactable NPC. Decodes v4 nearby_interactions from snapshot,
stores in GameState, renders via InteractionPrompt UI with fade
animation. Extensible interface (get_interaction_target/get_selected_verb)
for future radial verb menu (v0.2).
- Protocol: decode nearby_interactions array with nested VerbOption structs,
entity relationship/observation fields, tick_rate in GameTime
- GameState: store/clear nearby_interactions per snapshot
- SimBridge: test mode generates v4 format with structured verbs
- InteractionPrompt: PanelContainer with fade in/out, polls GameState
- Tests: 19 new test cases covering protocol, state, sim bridge, UI, encoding
- Fixture assertions updated for v4 protocol version
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Client now rejects snapshots where version != PROTOCOL_VERSION (4).
Returns null with error log on mismatch. Test snapshot updated to
use Protocol.PROTOCOL_VERSION and v4 game_time format (tick_rate
replaces paused field).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Extract visibility geometry into a separate system behind a
PerceptionQuery trait, enabling D-017 perception mode swapping.
Two-stage pipeline: compute_visibility_geometry writes to
VisibilityGeometry resource, compute_observer_snapshot reads it.
Remove KnowledgeGraph from compute_nearby_interactions (simulation
phase boundary violation). Verb availability stays in simulation;
POI-based priority adjustment moves to observer via
apply_poi_verb_priority helper.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
These patterns were added for the renderer (now separate). Client
gitignore rules are the client team's responsibility.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Separates the 3D-to-2D render pipeline from the game client into its
own minimal Godot project. No autoloads, no plugins, no game code —
just the render scene, models, textures, and export script. Eliminates
SimBridge parse errors and gdUnit4 scanning during renders.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Godot 4.6 generates .uid files for script resources and .import files
in subdirectories. Both are editor-local and should not be tracked.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Godot @tool render scene that takes a textured 3D model and produces
2D sprites at 1024/256/64 from 4 cardinal directions with outlines
applied at working resolution. Camera at "the angle" (-72.5deg ortho).
Includes two POC wall models with Nano Banana textures, CLI wrapper
script with headless import step, and .uid files added to gitignore.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Four-agent workshop (Araminta, Ozzie, Miri, Gore) establishing visual
identity for The Settled Reach. 9 mood board images, 16 art direction
principles, 10 candidate decisions (D-042 through D-051), v0.1.1 sprite
plan. Post-workshop technical session resolved 3D render pipeline,
resolution chain (1024/256/64), and camera angle lock ("the angle").
Pipeline test samples included: Era 1 institutional wall + bar green
wall rendered through the full Nano Banana -> 3D model -> sprite chain.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Entity::to_bits() roundtrip test guards against bevy version changes
silently breaking wire IDs (Hoshe #1)
- PROTOCOL_VERSION constant used in test helpers instead of hardcoded 4
- TickRate switch mid-accumulation test verifies Half→Full→Paused→Half
transitions preserve accumulator state correctly (Tyre N3)
- POI mid-range test now asserts priority=1 (Hoshe #4)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Split observer/mod.rs (820 lines) into production code (244 lines) and
tests (480 lines). Reduces module size per Hoshe #3 review item.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Per-entity Component attached to PlayerCharacter instead of global
Resource. Makes the interaction buffer multiplayer-ready (D-009) —
each observer gets their own buffer without pipeline refactoring.
Updated all 8 files touching the buffer: system signatures, player
spawn bundles, and ~30 test spawn sites.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Replace silent Entity::to_bits() fallbacks with tracing::error in
observer.rs and interaction.rs (makes unregistered entities loud)
- Add PROTOCOL_VERSION constant to types.rs, use in observer snapshot
- Document single-observer assumption on NearbyInteractionBuffer
- Document proximity-only (no LOS) limitation on compute_nearby_interactions
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Delete generate_snapshot from bridge/mod.rs — superseded by
perception::observer::compute_observer_snapshot. Not referenced
in any schedule or test.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace flat content/districts/ with hierarchical campaign/system/
station/district structure. Path mirrors canonical IDs, enables
glob-based discovery, and is multi-campaign/DLC ready.
- git mv 46 files preserving history
- New metadata: campaign.yaml, system.yaml, station.yaml
- Rewrite content.yaml with glob-based district discovery
- Add campaign, system, station JSON schemas
- Update district schema: hierarchy fields derived from path
- Update npc-profile schema: accept district-scoped IDs
- Add TODO to 17 dialogue/monologue pool files for generator revision
- Update _meta/README.md with new hierarchy documentation
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Re-added system/station/district fields to district.yaml that were
incorrectly removed during Tyre10 cleanup. These carry hierarchical
context (planet, station), not redundant identity. Made canonical_id
optional in schema since it's derived from directory path at load time.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implement compute_nearby_interactions system that detects entities
within close (≤2) and mid (≤5) Manhattan distance, computes
available verbs per D-060 spec. NPCs get Talk+Observe at close
range, Observe-only at mid range; PersonOfInterest flips priority.
Objects get Examine. Results populate nearby_interactions[] on
ObserverSnapshot v4. Bump protocol version 3→4. Implements #404.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace binary paused flag with TickRate enum (Full/Half/Paused)
per D-052. Full rate advances every frame, Half every 2 frames
via fractional accumulation, Paused blocks all advances. Add
SetTickRate player action for client-driven rate changes.
Implements ticket #406.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Scaffolds the full content directory structure per D-057 spec:
district-as-atomic-pack layout with Sova Transit as the first
district. Includes 17 NPC stubs, 3 locations, 5 triangles,
9 dialogue pools, 8 monologue pools, routines, 7 factions,
7 knowledge catalogs, 8 enum definitions, and global region.
Implements ticket #385.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Miri (critical):
- Fix 3 stale "Hael" references in decisions/content.md (D-034, D-036)
Paula (suggestions):
- Flag dual-fire 15-30s delay as tuning target in smuggler moral arc
- Clarify MIRROR NPCs can be wrong (lied to) without being dishonest
- Add implementation note for Path C deferred follow-up fork
- Note detective-NPC dialogue rotation variants for post-v0.1
- Clarify detective vs smuggler moral_weight criteria in entity attributes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- search-docs: remove content already in CLAUDE.md (basic commands,
endpoints, examples), keep only unique operations and workflows
- ticket: remove duplicated access method and SQL wrapper docs, add
missing show --brief command reference
- review-pr: extract branch-type reviewer profiles to
references/reviewer-profiles.md, reducing SKILL.md from 287 to 187
lines while preserving all reviewer specifications
- create-skill: remove empty .gitkeep placeholders from unused
references/ and scripts/ directories
Reviewed all skills against /create-skill conventions. Main findings
were CLAUDE.md content duplication wasting context tokens and a
progressive disclosure opportunity in the longest skill.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Paula, Miri, Ozzie lack Bash access and cannot git show from branches.
Skill now documents which agents can self-serve and instructs the caller
to read and paste file contents into prompts for agents that can't.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Pushes current branch and creates or updates a PR without ever
merging into main. Prevents accidental PR merges by restricting
the skill to branch-side operations only.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Use #[derive(Default)] + #[default] instead of manual Default impls
for FacingDirection, KnowledgeState, RelationshipState, EntityVisibility
- Replace manual modulo check with .is_multiple_of()
- Collapse nested if in shadowcast symmetry check
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Fix NpcPlugin system ordering: .before(compute_paths) instead of
.after(advance_tick) so PathRequests are picked up same frame
- Fix stale doc comment in interpretation.rs: system runs BEFORE
knowledge events, not after
- Add TODO(v0.2) on RelationshipGraph about information boundary
limitation for multiplayer
- Document cardinal-only movement as deliberate v0.1 choice
- Add comment on manhattan_distance u32::MAX fallback for cross-z
- Pin pathfinding crate to 4.11
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements ticket #239 for Sprint 3:
- ObservationTrigger enum: RoutineDeviation (NPC not at expected
routine location), Absence (expected location visible but NPC
missing), NewEntity (unknown entity in LOS)
- ObservationEventQueue resource with push/drain/len/is_empty
- generate_observation_events system runs after emit_observation_events
but before process_knowledge_events so it can compare current
snapshot against previous-tick knowledge state
- Populate PerceptionPlugin with ObservationEventQueue resource and
system registration with correct ordering constraints
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements ticket #84 for Sprint 3:
- Replace single bare NPC with 3 distinct NPCs: dock worker (16,13)
with full 4-phase routine and MovementSpeed(2), field tech (14,18)
with partial routine, stationary guard (18,14) with no routine
- Register all entities (player + 3 NPCs) in EntityRegistry
- Populate RelationshipGraph with colleague and rival edges
- Add NpcPlugin to app for routine system registration
- Add multi-entity visibility tests: 3 NPCs in LOS all visible,
NPC behind wall excluded from snapshot
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements ticket #341 for Sprint 3:
- Add DeserializationWithDump and MutexPoisoned variants to BridgeError
- Replace .expect("mutex poisoned") with graceful error propagation
in LocalBridge and TcpBridge (4 locations)
- Log first 256 bytes as hex dump on deserialization failure for
debugging malformed payloads
- Classify errors in receive_bridge_inputs: BrokenPipe/ConnectionReset
→ clean shutdown, MutexPoisoned → shutdown, DeserializationWithDump
→ skip frame (recoverable)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements tickets #237 and #238 for Sprint 3:
- Add pathfinding crate dependency for A* algorithm
- PathRequest component triggers compute_paths system which uses
cardinal-neighbor A* with manhattan distance heuristic
- ComputedPath component with step navigation (next_step, advance,
is_complete) and PathBlocked marker for no-route cases
- MovementSpeed component throttles NPC movement (ticks_per_step)
- follow_paths system advances NPCs along computed paths, creating
MoveIntent per step; cleanup_path_blocked removes markers after
one tick
- System ordering: input → compute_paths → follow_paths →
validate_movement → cleanup_path_blocked → advance_tick
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements tickets #86, #87, #88 for Sprint 3:
- Replace stub string/f32 NPC fields with typed enums and integer
types for D-010 determinism (WantKind, SecretSeverity, Skill, etc.)
- Add RelationshipGraph global resource with BTreeMap<(StableId,
StableId), RelationshipEdge> for efficient prefix queries
- Add DailyRoutine with phase-based RoutineEntry and PreviousDayPhase
resource for detecting day-phase transitions
- Create NpcPlugin that initializes relationship graph, day-phase
tracking, and registers check_phase_transition system
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Wave 0 wiki maintenance for Sprint 3:
- #372: Rename Hael → Naia Tamm across 16 living wiki files (phonetic collision fix)
- #371: Apply canonical full names to 11 single-name NPC headers and roster table
- #375: Replace hub_m_ → terminal_m_ shortcodes, add shortcode reference table,
situation overlap rules, and mood exclusivity rules to monologue guide
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replace the solo plan-mode step with team orchestration: parse the
Agents line from the sprint briefing, create a team, create tasks
from tickets with dependency chains, and spawn all listed agents as
background teammates. User confirmation gates the spawn.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Previous briefings referenced tickets not assigned to sprint 3.
Rewrote all four team briefings (server, client, joint, copy) to
match actual sprint 3 ticket assignments in the database.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- tooling/db-backup: copies shared settledreach.db to docs/backups/
for git tracking (main branch only)
- tooling/db-install: restores from backup for new clones
- make db-backup / make db-install Makefile targets
- worktree-update skill runs make db-backup after merges on main
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Claude Code's CWD is always the worktree root, so all script
invocations work with plain relative paths (db/connectors/ticket,
db/connectors/qdrant-search, etc.). The REPO_ROOT environment
variable and its settings.local.json definitions are no longer needed.
Updated: CLAUDE.md, all skill files, qatux agent file.
The settings.local.json env sections were also removed across all
9 worktrees (non-git files, edited directly).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The SQLite database now lives at ../settledreach.db, shared across all
git worktrees. This eliminates binary merge conflicts that occurred
whenever two branches modified the database independently.
All Python connectors (ticket CLI, sqlite_connector, decisions_sync)
now resolve the DB path relative to their own location — three levels
up from db/connectors/ reaches the worktree parent. The _main_worktree()
git-rev-parse pattern and config.json sqlite_db key are removed.
The database file is untracked from git; a backup mechanism commits
snapshots through the main branch (see following commits).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Document the librarian + parallel writers + reviewer pattern for
producing many files efficiently with agent teams.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add workshop brief for Control & Interaction Scheme (next workshop).
Update index with wiki-review (complete) and v0.1-content-scoping
(complete, 38 tickets).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Long-term content strategy workshop: 300-world generator model,
cultural ingredients menu, three-system NPC architecture (9 patterns
x 6 motivations), Sacred/Profane/Middle Kingdom framework. 9 agents
across 4 rounds plus lead interview establishing the production path
from hand-authored Sova to generated 300 worlds.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Non-destructive branch sync utility. On main: shows worktree branches
ahead of main with PR flags, lets user pick which to merge. On other
branches: merges main in. Stops on conflicts, never force-pushes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Each worktree now has REPO_ROOT pre-set in .claude/settings.local.json,
removing the need for git rev-parse --show-toplevel at runtime. Updated
CLAUDE.md, skills (start-sprint, plan-sprint, ticket, search-docs),
briefing template, and qatux agent to use the env var prefix.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sprint 3: Know — 11 tickets across server, client, joint, copy.
Sprint 2 remains active until #368 completes.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
NPC data model, pathfinding, observation events, and interaction
foundation. Briefings for server, client, joint, and copy teams.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>