Walked all 18 docs/*.md for stale followup references and outdated
TODO markers. Two real fixes:
docs/M6-buffered-evidence.md:
- Three references to "F45" for the LMX-proxy Suspend/Activate
Frida instrumentation were stale. That work was actually filed
as F46 when the followups list got renumbered (F45 was reassigned
to "Recovery replay should re-issue RegisterReference for
buffered subscriptions"). F46 landed in commit 808fea1, and the
follow-up live capture landed as F50 in commit 349e217.
- Updated all three references to point at F46 + F50 + the
resolution evidence in docs/F50-suspend-activate-evidence.md.
- Renamed the "Sub-followup filed: F45" section to
"Sub-followup F46 — RESOLVED 2026-05-06" with the verdict from
the live capture.
docs/M6-live-verification.md:
- "Open work" section listed F50 as a residual gap. F50 closed
2026-05-06 per docs/F50-suspend-activate-evidence.md. Updated
to "None. F49 sweep complete; F50 closed".
Other docs scanned, no real staleness:
- Capture-Run-2026-04-25.md, Current-Sprint-State.md,
DotNet10-Native-Library-Plan.md — historical snapshot docs,
intentionally pinned to their dates.
- ASB-Native-Integration-Decision.md, MxNativeSession-API.md,
NMX-COM-Contracts.md, MXAccess-* — describe the .NET reference's
state; "not yet" wording reflects the .NET planning context, not
the Rust port's current state.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Three M6 sub-followups landed in this wave (sub-agent worktrees +
manual reconciliation in main):
**F36 — Session::subscribe_buffered (NMX) per R2 single-sample**
- `BufferedOptions::rounded_update_interval_ms()` — 100ms rounding
helper mirroring MxNativeCompatibilityServer.cs:638
((updateInterval + 99) / 100) * 100, saturating on overflow.
- `Session::subscribe_buffered` (public, lib.rs:604) delegates to
the new private `subscribe_buffered_nmx` which uses the buffered
RegisterReference path: item_definition suffixed with
`.property(buffer)`, subscribe=true (no separate
AdviseSupervisory follow-up — verified against capture 082).
- Per R2 verified at wwtools/mxaccesscli/docs/api-notes.md the wire
semantic is single-sample-per-event with a server-side cadence
knob; rounded_ms is held client-side only (native MXAccess does
not emit a separate SetBufferedUpdateInterval RPC, verified by
absence in 079/082 captures).
- New crates/mxaccess/examples/subscribe-buffered.rs.
- New crates/mxaccess-codec/tests/buffered_register_reference_parity.rs:
4 tests (capture 079/082 round-trip, suffix helper, constructive
forward-build vs capture 082).
**F40 — Optional metrics feature**
- New crates/mxaccess/src/metrics.rs (275 lines): `pub(crate)`
thin wrappers (`record_write_latency`, `record_read_latency`,
`inc_writes`, `inc_reads`, `inc_advises`, `inc_recovery_*`,
`set_active_subscriptions`, etc.) that compile to no-ops under
`#[cfg(not(feature = "metrics"))]`. Call sites in session.rs +
asb_session.rs invoke them unconditionally; the gate is inside
the wrapper.
- `metrics = { version = "0.24", optional = true }` added to
workspace + mxaccess crate Cargo.toml.
- Default build: zero metrics dep, zero runtime cost.
**F44 — Buffered batch + suspend capture decode evidence**
- New docs/M6-buffered-evidence.md: per-capture summary for
077, 079, 080, 081, 082, 094 — call sequence, key wire bytes,
R2/R5 verdict.
- R2 confirmed silently as "not a real risk" — single-sample
observed across 079/080/082/094.
- R5 trigger conditions documented from capture 077: AdviseSupervisory
+ Suspend pair, 1-second intervals, succeeds on enum attributes.
- design/70-risks-and-open-questions.md R2/R5 status updated.
Workspace: 759 → 792 tests, clippy clean, rustdoc -D warnings clean.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>