Well-structured PR delivering four tickets cleanly. HashMap-to-BTreeMap migration is correct with principled clippy enforcement and documented exceptions. Tracing infrastructure is clean with JSON toggle via CI env var. rng_seed field completes the WRONG button replay loop with correct serde annotations. 566/566 tests pass.
#
File
Severity
Issue
1
server/src/main.rs:187
warning
Duplicate doc comment on dump_schedule_graphFixed in e047218
2
server/tests/serialization.rs
warning
Missing rng_seed round-trip test and v9-to-v10 backward compat testFixed in e047218
3
server/src/main.rs:109
suggestion
Bare .unwrap() on local_addr() — pre-existing, not introduced by this PR
4
server/src/perception/query.rs
suggestion
sector_lookup HashMap exemption could use an inline field comment
Tyre (Architecture): APPROVE
Architecturally sound and aligned with D-010, D-041, D-030. HashMap ban is correct for deterministic simulation. The #![allow] exemptions in perception/ are defensible — per-frame scratch buffers where iteration order is irrelevant. rng_seed addition is clean protocol design. Tracing is solid: JSON on CI, human-readable locally, stderr always clean for LISTENING handshake.
Arg parsing skip_next list could use a maintenance comment
3
server/.clippy.toml + Makefile
warning
No committed schedule baseline file — doc comment oversells CI integration. Consider follow-on ticket
4
server/src/simulation/rng.rs
suggestion
seed() returns initial seed not stream position — correct for replay, noted for future optimization
Verdict: APPROVED
Both reviewers approve. Warning-level issues from initial review have been addressed in commit e047218 (duplicate doc comment removed, serialization tests added). Remaining items are suggestions only.
## Review: ci -> main (type: code)
### Hoshe (Code Quality): APPROVE
Well-structured PR delivering four tickets cleanly. HashMap-to-BTreeMap migration is correct with principled clippy enforcement and documented exceptions. Tracing infrastructure is clean with JSON toggle via CI env var. rng_seed field completes the WRONG button replay loop with correct serde annotations. 566/566 tests pass.
| # | File | Severity | Issue |
|---|------|----------|-------|
| 1 | server/src/main.rs:187 | warning | ~~Duplicate doc comment on dump_schedule_graph~~ **Fixed in e047218** |
| 2 | server/tests/serialization.rs | warning | ~~Missing rng_seed round-trip test and v9-to-v10 backward compat test~~ **Fixed in e047218** |
| 3 | server/src/main.rs:109 | suggestion | Bare .unwrap() on local_addr() — pre-existing, not introduced by this PR |
| 4 | server/src/perception/query.rs | suggestion | sector_lookup HashMap exemption could use an inline field comment |
### Tyre (Architecture): APPROVE
Architecturally sound and aligned with D-010, D-041, D-030. HashMap ban is correct for deterministic simulation. The `#![allow]` exemptions in perception/ are defensible — per-frame scratch buffers where iteration order is irrelevant. rng_seed addition is clean protocol design. Tracing is solid: JSON on CI, human-readable locally, stderr always clean for LISTENING handshake.
| # | File | Severity | Issue |
|---|------|----------|-------|
| 1 | server/src/main.rs:187 | suggestion | ~~Duplicate doc comment~~ **Fixed in e047218** |
| 2 | server/src/main.rs | suggestion | Arg parsing skip_next list could use a maintenance comment |
| 3 | server/.clippy.toml + Makefile | warning | No committed schedule baseline file — doc comment oversells CI integration. Consider follow-on ticket |
| 4 | server/src/simulation/rng.rs | suggestion | seed() returns initial seed not stream position — correct for replay, noted for future optimization |
### Verdict: APPROVED
Both reviewers approve. Warning-level issues from initial review have been addressed in commit e047218 (duplicate doc comment removed, serialization tests added). Remaining items are suggestions only.
Add clippy::disallowed_types for std::collections::HashMap scoped to
the simulation crate. Replace HashMap with BTreeMap in movement.rs for
deterministic iteration order. Allow exception in perception/query.rs
where iteration order is irrelevant (per-frame scratch buffer).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add rng_seed: Option<u64> to ObserverSnapshot (protocol v10). Populated
from SimRng state each tick. Completes the WRONG button capture loop —
seed.txt now writes a valid u64 instead of "unavailable", enabling
deterministic replay from bug reports.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds rng_seed: Option<u64> to ObserverSnapshot. The WRONG button (#507) captures
inputs.jsonl and seed.txt for replay, but seed.txt was writing "unavailable"
because the server did not include the RNG seed in ObserverSnapshot.
Changes:
- bridge/types.rs: PROTOCOL_VERSION 9→10, rng_seed field with serde(default,
skip_serializing_if = "Option::is_none") for backward compatibility
- perception/observer/mod.rs: inject Res<SimRng> into compute_observer_snapshot,
populate rng_seed: Some(rng.seed()) each tick
- All test files: add rng_seed: None to ObserverSnapshot constructors
- tests/serialization.rs: bump protocol_version_constant assertion 9→10
- Regenerate msgpack fixtures and golden file for protocol v10
Completes the WRONG button capture loop: replays can now fully reproduce
observed bugs with the exact RNG seed from the capture.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Tracing (#344):
- Add 'json' feature to tracing-subscriber dependency
- Emit JSON log format when CI=true or RUST_LOG_FORMAT=json is set
(structured log ingestion in CI pipelines)
- Add tracing::debug! with tick_ms/budget_ms/over_budget fields on each
tick for performance profiling and tier system debugging prerequisite
Schedule dump (#346):
- Add --dump-schedule CLI flag that prints bevy_ecs schedule graph and exits
without requiring TCP bridge or world setup
- Add make debug-schedule target for CI artifact generation and diff-based
regression detection of unintended system reordering
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Review fixes: deduplicate dump_schedule_graph doc comment,
add rng_seed round-trip test and v9→v10 backward compat test.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
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 12 CI tasks — all 4 tickets done, 564/564 tests pass, clippy clean.
#343 — Ban HashMap in simulation via clippy disallowed_types
server/.clippy.tomlwithdisallowed-typesforstd::collections::HashMapandHashSetsimulation/movement.rs:WalkabilityMap.chunksandoccupiedmap →BTreeMap; addedPartialOrd+OrdtoChunkCoord,TilePosition,TilePresencesimulation/monologue.rs:MonologueState.shown_ids→BTreeSet(was simulation state)shadowcast.rs,interpretation.rs,query.rs):#![allow(clippy::disallowed_types)]— per-frame scratch buffers where iteration order is irrelevant#527 — Add rng_seed to ObserverSnapshot (protocol v10)
bridge/types.rs:PROTOCOL_VERSION9→10,rng_seed: Option<u64>with#[serde(default, skip_serializing_if = "Option::is_none")]perception/observer/mod.rs: injectRes<SimRng>, populaterng_seed: Some(rng.seed())each tick#344 — Tracing crate infrastructure
tracing-subscribergainsjsonfeatureCI=trueorRUST_LOG_FORMAT=json(structured log ingestion)tracing::debug!(tick_ms, budget_ms, over_budget)on each game tick#346 — Schedule dependency graph debug command
--dump-scheduleCLI flag prints bevy_ecs registered schedules (7 schedules, Update has 23 systems) and exits — no TCP bridge requiredmake debug-scheduleMakefile target for CI artifact generation and baseline diffingTest plan
cargo clippy -- -D warningscleancargo fmt --checkcleancargo nextest run— 564/564 pass, 3 skippedcargo run -- --dump-schedule— outputs schedule graph correctly🤖 Generated with Claude Code
Review: ci -> main (type: code)
Hoshe (Code Quality): APPROVE
Well-structured PR delivering four tickets cleanly. HashMap-to-BTreeMap migration is correct with principled clippy enforcement and documented exceptions. Tracing infrastructure is clean with JSON toggle via CI env var. rng_seed field completes the WRONG button replay loop with correct serde annotations. 566/566 tests pass.
Duplicate doc comment on dump_schedule_graphFixed ine047218Missing rng_seed round-trip test and v9-to-v10 backward compat testFixed ine047218Tyre (Architecture): APPROVE
Architecturally sound and aligned with D-010, D-041, D-030. HashMap ban is correct for deterministic simulation. The
#![allow]exemptions in perception/ are defensible — per-frame scratch buffers where iteration order is irrelevant. rng_seed addition is clean protocol design. Tracing is solid: JSON on CI, human-readable locally, stderr always clean for LISTENING handshake.Duplicate doc commentFixed ine047218Verdict: APPROVED
Both reviewers approve. Warning-level issues from initial review have been addressed in commit
e047218(duplicate doc comment removed, serialization tests added). Remaining items are suggestions only.Pull request closed