Iter 32. Closes ADR-119 AC7 ("Bench: serialization throughput ≥ 50k
frames/sec on a 2025-era M1/M2 / Pi 5 core"). Pure std::time::Instant
timing; no criterion / no dev-deps added.
Empirically measured in DEBUG build on this Windows host:
- BfldFrameHeader::to_le_bytes() → 1,654,517 frames/sec (33× AC7)
- BfldFrame::to_bytes() + CRC32 → 320,255 frames/sec ( 6.4× AC7)
- Parse-cost ratio (1024B vs 512B payload): 1.59× (linear)
Release builds typically run 20–100× faster than debug; the AC7 target
is for release, so debug already smashing 50k means release has very
comfortable margin.
Added (tests/serialization_throughput.rs):
- pub const RELEASE_TARGET_FRAMES_PER_SEC = 50_000.0 (the AC7 number)
- const DEBUG_FLOOR_FRAMES_PER_SEC = 5_000.0 (generous CI floor)
- header_only_to_le_bytes_throughput_meets_debug_floor
50k iters with a 1k-iter warmup, black_box-guarded.
Prints throughput to stderr so CI logs show the measured number.
- full_frame_to_bytes_throughput_meets_debug_floor
Same shape but with 512B payload + CRC32 round-trip per iter.
- round_trip_through_bytes_remains_constant_time_per_byte
Compares from_bytes() timing for 512B vs 1024B payload; asserts
the ratio is in [1.0, 4.0] to catch an accidental O(n²) parser
regression. Empirical ratio: 1.59× (expected ~2× for O(n)).
- header_size_constant_is_used_consistently_by_serializer
Belt-and-suspenders: asserts to_le_bytes().len() == BFLD_HEADER_SIZE
== 86, pinning the iter-1 AC1 contract from the throughput side.
ADR-124 status (iter step 0 sibling check):
- docs/adr/ADR-124-rvagent-mcp-ruvector-npm-integration.md NOW PRESENT
(sibling agent landed it; 431 lines). Codename SENSE-BRIDGE. Scope:
MCP server (stdio + Streamable HTTP) wrapping sensing-server's
REST/WS/MQTT surfaces, plus a ruvector npm/TypeScript package for
in-app consumption + ruflo MCP-tool integration. Orthogonal to BFLD
core — BFLD produces events that SENSE-BRIDGE would expose via MCP,
but the MCP bridge itself is not BFLD territory. No scope overlap
with this iter or backlog targets.
ACs progressed:
- ADR-119 AC7 — debug-build serialization throughput is already 33×
the documented release-build target. Release-build margin is
comfortable; future iters can run --release to capture an exact
release number for the witness bundle.
Test config:
- cargo test --no-default-features → 72 passed
- cargo test → 221 passed (217 + 4)
Out of scope (next iter target):
- GitHub Actions workflow with mosquitto Docker (lifts iter 24/29
e2e from skip-mode in CI).
- ADR-122 AC3: 1Hz motion-publish-rate integration test against the
BfldPipelineHandle worker thread (would use a Barrier + Instant
delta over N sustained publishes).
Co-Authored-By: claude-flow <ruv@ruv.net>