Background tier state machines (#95), NPC vision (#115), player-
awareness behavior (#244), skill system & combat flag (#91), social
propagation (#249), examine mechanic (#242), character pressure
framework (#248), save state data model (#256), tell state wiring
(#337). Protocol version bumped 13→14 for examine_result and
character_pressure snapshot fields.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Regenerated MsgPack fixtures for protocol v14 (examine_result and
character_pressure fields). Updated golden test, serialization
assertions, and cross-language fixture generator.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Nine systems with strong test coverage and consistent D-010 determinism. Two concrete bugs.
#
File
Severity
Issue
1
server/src/npc/vision.rs:144-147
warning
Entities at NPC's own tile iterated twice (entities_in_range + entities_at). BTreeSet deduplicates but wastes work and is fragile. No test for non-NPC entity on same tile.
2
server/src/simulation/pressure.rs:182
warning
who_knows_full_scan (documented as "not per-tick") called every 10 ticks. O(N) over all edges — acceptable at v0.1 scale but violates the method's own contract. Document or add reverse index.
3
server/src/npc/generate.rs:272
suggestion
format\!("Routine schedule") — Clippy lint. Use .to_string().
4
server/src/npc/vision.rs:265
suggestion
Hardcoded 10 instead of TICKS_PER_GAME_MINUTE.
5
server/src/npc/relationships.rs:299-303
suggestion
Comments say "~15%" but code does 2/10 = 20%. Pick one.
6
server/src/simulation/pressure.rs:88
suggestion
total() floor-truncation not documented.
7
server/src/simulation/input.rs:40-48
suggestion
Dropped inputs silently warn — no test for drop-at-capacity.
8
server/src/npc/awareness.rs:74
suggestion
suspicion_level is i16 but range 0–100. u8 would enforce invariant.
Tyre (Architecture): REQUEST_CHANGES
Solid sprint with clean ECS decomposition. Two issues warrant changes.
#
File
Severity
Issue
1
server/src/content/spawn.rs:103-226
warning
Content-spawned NPCs missing NpcVisionState, NpcMemory, PlayerAwareness components. Vision/awareness systems silently skip them. generate_npc() inserts these but spawn_npc() does not.
2
server/src/bridge/types.rs:41
warning
Protocol version doc comment says "Current: 13" but constant is 14. Stale.
3
server/src/simulation/pressure.rs:181-186
suggestion
Call site doesn't document why O(N) per-interval is acceptable despite method's warning.
4
server/src/simulation/save_state.rs:29-33
suggestion
NpcMemory not in the deferred list. Document whether reset-on-load is intentional.
Verdict: CHANGES REQUESTED
Key issues: content-spawned NPCs missing components (silent no-op), vision duplicate iteration, stale protocol version comment.
## Review: server -> main — PR #66
### Hoshe (Code Quality): REQUEST_CHANGES
Nine systems with strong test coverage and consistent D-010 determinism. Two concrete bugs.
| # | File | Severity | Issue |
|---|------|----------|-------|
| 1 | `server/src/npc/vision.rs:144-147` | warning | Entities at NPC's own tile iterated twice (`entities_in_range` + `entities_at`). BTreeSet deduplicates but wastes work and is fragile. No test for non-NPC entity on same tile. |
| 2 | `server/src/simulation/pressure.rs:182` | warning | `who_knows_full_scan` (documented as "not per-tick") called every 10 ticks. O(N) over all edges — acceptable at v0.1 scale but violates the method's own contract. Document or add reverse index. |
| 3 | `server/src/npc/generate.rs:272` | suggestion | `format\!("Routine schedule")` — Clippy lint. Use `.to_string()`. |
| 4 | `server/src/npc/vision.rs:265` | suggestion | Hardcoded `10` instead of `TICKS_PER_GAME_MINUTE`. |
| 5 | `server/src/npc/relationships.rs:299-303` | suggestion | Comments say "~15%" but code does 2/10 = 20%. Pick one. |
| 6 | `server/src/simulation/pressure.rs:88` | suggestion | `total()` floor-truncation not documented. |
| 7 | `server/src/simulation/input.rs:40-48` | suggestion | Dropped inputs silently warn — no test for drop-at-capacity. |
| 8 | `server/src/npc/awareness.rs:74` | suggestion | `suspicion_level` is `i16` but range 0–100. `u8` would enforce invariant. |
### Tyre (Architecture): REQUEST_CHANGES
Solid sprint with clean ECS decomposition. Two issues warrant changes.
| # | File | Severity | Issue |
|---|------|----------|-------|
| 1 | `server/src/content/spawn.rs:103-226` | warning | Content-spawned NPCs missing `NpcVisionState`, `NpcMemory`, `PlayerAwareness` components. Vision/awareness systems silently skip them. `generate_npc()` inserts these but `spawn_npc()` does not. |
| 2 | `server/src/bridge/types.rs:41` | warning | Protocol version doc comment says "Current: 13" but constant is 14. Stale. |
| 3 | `server/src/simulation/pressure.rs:181-186` | suggestion | Call site doesn't document why O(N) per-interval is acceptable despite method's warning. |
| 4 | `server/src/simulation/save_state.rs:29-33` | suggestion | `NpcMemory` not in the deferred list. Document whether reset-on-load is intentional. |
### Verdict: CHANGES REQUESTED
Key issues: content-spawned NPCs missing components (silent no-op), vision duplicate iteration, stale protocol version comment.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Sprint 18: Touch — all 9 server tickets implemented and tested (1064 tests, 0 failures).
New systems:
Protocol: v13 → v14 (examine_result + character_pressure fields)
Test plan
Review: server -> main — PR #66
Hoshe (Code Quality): REQUEST_CHANGES
Nine systems with strong test coverage and consistent D-010 determinism. Two concrete bugs.
server/src/npc/vision.rs:144-147entities_in_range+entities_at). BTreeSet deduplicates but wastes work and is fragile. No test for non-NPC entity on same tile.server/src/simulation/pressure.rs:182who_knows_full_scan(documented as "not per-tick") called every 10 ticks. O(N) over all edges — acceptable at v0.1 scale but violates the method's own contract. Document or add reverse index.server/src/npc/generate.rs:272format\!("Routine schedule")— Clippy lint. Use.to_string().server/src/npc/vision.rs:26510instead ofTICKS_PER_GAME_MINUTE.server/src/npc/relationships.rs:299-303server/src/simulation/pressure.rs:88total()floor-truncation not documented.server/src/simulation/input.rs:40-48server/src/npc/awareness.rs:74suspicion_levelisi16but range 0–100.u8would enforce invariant.Tyre (Architecture): REQUEST_CHANGES
Solid sprint with clean ECS decomposition. Two issues warrant changes.
server/src/content/spawn.rs:103-226NpcVisionState,NpcMemory,PlayerAwarenesscomponents. Vision/awareness systems silently skip them.generate_npc()inserts these butspawn_npc()does not.server/src/bridge/types.rs:41server/src/simulation/pressure.rs:181-186server/src/simulation/save_state.rs:29-33NpcMemorynot in the deferred list. Document whether reset-on-load is intentional.Verdict: CHANGES REQUESTED
Key issues: content-spawned NPCs missing components (silent no-op), vision duplicate iteration, stale protocol version comment.
Review Round 2: server -> main — PR #66
Hoshe (Code Quality): APPROVE
All 4 round 1 warnings confirmed fixed:
who_knows_full_scan— Both sides documented.NpcVisionState,NpcMemory,PlayerAwarenessinserted with parity comment.relationships.rs:367input.rsTyre (Architecture): APPROVE
All issues resolved. Component insertion correct. NpcMemory reset-on-load documented as intentional.
spawn.rsVerdict: APPROVED
Ready to merge.
Pull request closed