feat(rvcsi): rvcsi-adapter-file (.rvcsi capture/replay) + rvcsi-ruvector (RF memory)
- rvcsi-adapter-file (ADR-095 FR1/FR10, D9): the `.rvcsi` JSONL capture format
(CaptureHeader line + one CsiFrame per line), FileRecorder, FileReplayAdapter
(a CsiSource — deterministic replay, preserves timestamps/ordering/validation
verbatim, carries an unenforced replay_speed for the daemon/CLI), read_all().
20 unit tests + 1 doctest.
- rvcsi-ruvector (ADR-095 FR8, D8) — standin for the production RuVector binding:
deterministic embeddings (window_embedding = 32 resampled mean_amplitude bins +
32 resampled phase_variance bins + [motion_energy, presence_score, quality_score,
ln1p(frame_count)], L2-normalized, dim 68; event_embedding = 10-wide kind
one-hot + confidence + ln1p(evidence count), dim 12), cosine_similarity, the
RfMemoryStore trait + value objects (EmbeddingId/RecordKind/SimilarHit/
DriftReport), and InMemoryRfMemory + JsonlRfMemory (file-backed append log,
identical query semantics, latest-baseline-per-room-wins on reopen).
20 unit tests + 1 doctest.
All rvcsi crates build and test together: core 29, dsp 28, events 18,
adapter-file 20(+1), adapter-nexmon 9, ruvector 20(+1) — 124 unit + 2 doc tests,
0 failures. forbid(unsafe_code) everywhere except rvcsi-adapter-nexmon (FFI).
https://claude.ai/code/session_01CdYAPvRTjcch6YrYf42n1z