Commit Graph

1 Commits

Author SHA1 Message Date
rUv 9d4f7820b2
docs(adr): ADR-098 — evaluate midstream for RuView's CSI/WS/mesh pipeline (Rejected) (#553)
`vendor/midstream` is a git submodule of RuView but no `v2/crates/*` depends
on a `midstreamer-*` crate and no Rust source uses one — i.e. it is vendored
but not consumed, the same state `vendor/rvcsi` was in before ADR-097.

ADR-098 evaluates whether to change that. The candidate seams (from the
prompt) were:

  1. Streaming / pub-sub for the WS fan-out (today: `tokio::sync::broadcast`
     at `wifi-densepose-sensing-server/src/main.rs:4769`).
  2. CSI → DSP → event pipeline (today: rvcsi-events::EventPipeline, just
     adopted by ADR-097).
  3. Multi-source merging / TDM for the ESP32 mesh (ADR-029, ADR-073).
  4. Backpressure / flow control between the UDP receiver and downstream
     consumers (firmware `stream_sender` ENOMEM; host-side bounded
     broadcast channel).

Reading all six midstream workspace crates end-to-end
(`vendor/midstream/crates/{temporal-compare,nanosecond-scheduler,
temporal-attractor-studio,temporal-neural-solver,strange-loop,
quic-multistream}/src/*.rs` — ~3,455 LOC) shows midstream's identity
unambiguously: `Cargo.toml:16` calls itself "Real-time LLM streaming with
inflight analysis", the README frames it as analyzing *LLM token streams*
in real time, and zero hits across the workspace for `csi|wifi|sensing|
sensor`. midstream's abstractions are LLM-token / dashboard-telemetry
shaped; RuView's pipeline is RF-frame / event-detector shaped.

Decisions:

  D1 — WS fan-out: keep `tokio::sync::broadcast::channel::<String>(256)`.
       midstream offers no equivalent in-process broadcast primitive.
  D2 — CSI pipeline: keep `rvcsi-events::EventPipeline` (deterministic,
       single-frame-at-a-time, replayable per ADR-095 D9). midstream's
       attractor / LTL crates operate on multi-dimensional trajectories,
       not validated single CSI frames.
  D3 — TDM / aggregator: keep `wifi-densepose-hardware::aggregator` +
       firmware-side TDM. midstream has no UDP merger and no cross-device
       wall-clock scheduler.
  D4 — Backpressure: the firmware ENOMEM rate-limit and the bounded host
       `broadcast` channel are correct at each end; midstream's QUIC
       primitives don't help the actual UDP+WS topology.
  D5 — Carve-out: `midstreamer-temporal-compare` (DTW / LCS / Levenshtein)
       is a plausible future-evaluation option if a *second* DTW use case
       appears in RuView. RuvSense already has one (`gesture.rs`).
  D6 — Carve-out: `midstreamer-scheduler` (deadline-aware, EDF / LLF /
       RM) is a plausible future option if the cluster-Pi aggregator ever
       takes over real-time scheduling. Today that lives in firmware.
  D7 — Submodule: keep `vendor/midstream` pinned at `30fe5eb` as reference
       material; do not advance the pin per-release (unlike vendor/rvcsi
       under ADR-097 D7) because there is no in-build consumer.
  D8 — Docs: cross-reference, don't import. ADR-098 added to
       `docs/adr/README.md`.

Status: Rejected (with named re-evaluation triggers in §6 — second DTW use
case, host-side real-time scheduler, midstream gains a CSI adapter, or a
QUIC-to-external-client requirement that WS can't service).
2026-05-17 17:49:21 -04:00