Six test runner scripts at tests/: run-rust, run-godot, run-ipc-fixtures,
run-ipc-protocol, run-ipc-integration, run-all. Plus run-ipc-benchmark
for Layer 3 timing. All produce structured JSON stdout, support --filter,
and exit 0/non-zero. Makefile targets updated to delegate to scripts.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Five new .msgpack fixtures: snapshot_minimal, snapshot_full,
player_input_move, player_input_interact, malformed. Rust generator in
gen_fixtures.rs, 7 Rust validation tests in serialization.rs, GDScript
cross-language test in test_ipc_fixtures.gd (22 assertions).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Removed duplicate examine_result from ObserverSnapshot (old ExamineResultEvent
superseded by ExamineResultWire). Fixed serde_default test version assertion.
Regenerated golden file and all fixture .msgpack files. 1070 Rust tests passing.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
#556: HANDSHAKING state in sim_bridge.gd — decodes first framed message
as HandshakeMessage, validates vs Protocol.PROTOCOL_VERSION, 5s timeout,
handshake_complete/handshake_failed signals.
#342: IPC benchmark now reads and validates HandshakeMessage before
starting the timing loop.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Solid infrastructure work. D-030 three-layer IPC architecture faithfully implemented. Scripts well-structured with consistent JSON output, correct set -euo pipefail, portable PIPESTATUS usage. Benchmark methodology (warmup rounds, percentile calculation, #[ignore] gating) is correct. Fixture cross-language pattern is exactly right.
#
File
Severity
Issue
1
client/scripts/protocol/protocol.gd:14
critical
Protocol version mismatch: GDScript has PROTOCOL_VERSION = 14, server has 15. All fixture snapshot tests will fail with null dereference. Note: This file lives on client branch — CI can't fix it directly. Coordinate with client team or fix on main.
2
server/tests/gen_fixtures.rs:293,313
warning
Comments say version=14 but code uses PROTOCOL_VERSION (15). Misleading when investigating version mismatch.
3
tests/run-ipc-benchmark
warning
--iterations and --threshold-ms flags parsed but never forwarded to Rust test (uses compile-time constants). Silently ignored. Either remove flags or wire through via env vars.
Notes (non-blocking):
observer/mod.rs confidence change (Direct → KnowsDetails) is correct per D-041
run-all benchmark exclusion is correct design
run-godot filter path resolution is fine
ipc_bench.rs cleanup/timeout logic is correct
serde_default_fields test version change (14 → 13) is intentional backward-compat test
Confidence level changed from Direct to KnowsDetails silently — add a code comment explaining why
2
tests/run-ipc-benchmark
suggestion
Benchmark not separately accounted in run-all JSON — consider adding as optional suite
3
.gitignore / CI config
suggestion
No binary-size guard for server target. Consider adding a CI step.
4
tests/run-all
suggestion
run-ipc-integration invokes benchmark internally — two benchmark runs if both called separately
Verdict: CHANGES REQUESTED
Blockers are the protocol version mismatch (critical — cross-branch coordination needed) and dead benchmark CLI flags (warning). The version mismatch is a main-level fix since both server and client are now merged.
## Review: ci → main (type: code) — Round 1
### Hoshe (Code Quality): REQUEST_CHANGES
Solid infrastructure work. D-030 three-layer IPC architecture faithfully implemented. Scripts well-structured with consistent JSON output, correct `set -euo pipefail`, portable PIPESTATUS usage. Benchmark methodology (warmup rounds, percentile calculation, `#[ignore]` gating) is correct. Fixture cross-language pattern is exactly right.
| # | File | Severity | Issue |
|---|------|----------|-------|
| 1 | `client/scripts/protocol/protocol.gd:14` | critical | Protocol version mismatch: GDScript has `PROTOCOL_VERSION = 14`, server has 15. All fixture snapshot tests will fail with null dereference. **Note:** This file lives on client branch — CI can't fix it directly. Coordinate with client team or fix on main. |
| 2 | `server/tests/gen_fixtures.rs:293,313` | warning | Comments say `version=14` but code uses `PROTOCOL_VERSION` (15). Misleading when investigating version mismatch. |
| 3 | `tests/run-ipc-benchmark` | warning | `--iterations` and `--threshold-ms` flags parsed but never forwarded to Rust test (uses compile-time constants). Silently ignored. Either remove flags or wire through via env vars. |
Notes (non-blocking):
- `observer/mod.rs` confidence change (`Direct` → `KnowsDetails`) is correct per D-041
- `run-all` benchmark exclusion is correct design
- `run-godot` filter path resolution is fine
- `ipc_bench.rs` cleanup/timeout logic is correct
- `serde_default_fields` test version change (14 → 13) is intentional backward-compat test
### Tyre (Architecture): APPROVE
D-030 three-layer architecture faithfully implemented. Test runners output JSON summaries, Makefile targets aligned, DEVOPS.md updated.
| # | File | Severity | Issue |
|---|------|----------|-------|
| 1 | `server/src/perception/observer/mod.rs` | suggestion | Confidence level changed from `Direct` to `KnowsDetails` silently — add a code comment explaining why |
| 2 | `tests/run-ipc-benchmark` | suggestion | Benchmark not separately accounted in run-all JSON — consider adding as optional suite |
| 3 | `.gitignore` / CI config | suggestion | No binary-size guard for server target. Consider adding a CI step. |
| 4 | `tests/run-all` | suggestion | `run-ipc-integration` invokes benchmark internally — two benchmark runs if both called separately |
### Verdict: CHANGES REQUESTED
Blockers are the protocol version mismatch (critical — cross-branch coordination needed) and dead benchmark CLI flags (warning). The version mismatch is a main-level fix since both server and client are now merged.
---
🤖 Generated with [Claude Code](https://claude.com/claude-code)
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 19 CI deliverables:
tests/(run-rust, run-godot, run-ipc-fixtures, run-ipc-protocol, run-ipc-integration, run-ipc-benchmark, run-all). Structured JSON output,--filtersupport, Makefile integration.examine_resultfield compile error, fixed serde_default version assertion.Test results
Test plan
cargo test— all greentests/run-allfull suite (GDScript side needsmake build-client)🤖 Generated with Claude Code
Review: ci → main (type: code) — Round 1
Hoshe (Code Quality): REQUEST_CHANGES
Solid infrastructure work. D-030 three-layer IPC architecture faithfully implemented. Scripts well-structured with consistent JSON output, correct
set -euo pipefail, portable PIPESTATUS usage. Benchmark methodology (warmup rounds, percentile calculation,#[ignore]gating) is correct. Fixture cross-language pattern is exactly right.client/scripts/protocol/protocol.gd:14PROTOCOL_VERSION = 14, server has 15. All fixture snapshot tests will fail with null dereference. Note: This file lives on client branch — CI can't fix it directly. Coordinate with client team or fix on main.server/tests/gen_fixtures.rs:293,313version=14but code usesPROTOCOL_VERSION(15). Misleading when investigating version mismatch.tests/run-ipc-benchmark--iterationsand--threshold-msflags parsed but never forwarded to Rust test (uses compile-time constants). Silently ignored. Either remove flags or wire through via env vars.Notes (non-blocking):
observer/mod.rsconfidence change (Direct→KnowsDetails) is correct per D-041run-allbenchmark exclusion is correct designrun-godotfilter path resolution is fineipc_bench.rscleanup/timeout logic is correctserde_default_fieldstest version change (14 → 13) is intentional backward-compat testTyre (Architecture): APPROVE
D-030 three-layer architecture faithfully implemented. Test runners output JSON summaries, Makefile targets aligned, DEVOPS.md updated.
server/src/perception/observer/mod.rsDirecttoKnowsDetailssilently — add a code comment explaining whytests/run-ipc-benchmark.gitignore/ CI configtests/run-allrun-ipc-integrationinvokes benchmark internally — two benchmark runs if both called separatelyVerdict: CHANGES REQUESTED
Blockers are the protocol version mismatch (critical — cross-branch coordination needed) and dead benchmark CLI flags (warning). The version mismatch is a main-level fix since both server and client are now merged.
🤖 Generated with Claude Code
Pull request closed