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>
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>