Phase 1 (certificate spine, initial implementation planned): ADR-298 calibration certificate, ADR-299 OOD KNOWN/DEGRADED/UNKNOWN gating, ADR-301 evidence engine, ADR-302 authenticated sensor identity, ADR-303 canonical spatial ontology, ADR-314 multi-domain benchmark scorecard, ADR-315 capability certificates, ADR-316 witness chain. Phase 2 (Proposed): ADR-300 ground truth, ADR-304 tracking, ADR-307 802.11bf-native, ADR-308 fusion, ADR-313 fleet, ADR-317 HAL. Phase 3 (Proposed): ADR-305 placement, ADR-306 active sensing, ADR-309 spatial memory, ADR-310 counterfactual, ADR-311 info-gain, ADR-312 RF twin. Each references ADR-297 and cross-references its dependencies; phase-1 ADRs carry implementation intent, phase-2/3 are design-intent Proposed. Co-Authored-By: claude-flow <ruv@ruv.net> Claude-Session: https://claude.ai/code/session_015TcKegTS7QqhWPC2L2SzaS
6.5 KiB
ADR-300: Ground-truth synchronization — reference sensors as a formal validation plane
- Status: Proposed (ADR-297 phase 2)
- Date: 2026-08-11
- Deciders: ruv
- Tags: ground-truth, validation, fusion, evidence, benchmark, honesty, substrate
Context
This ADR is primitive 3 of the perception-substrate program (ADR-297), authored as Proposed in phase 2: it is design intent and a validation plan, not implemented by the phase-1 swarm. It sits on top of the phase-1 certificate spine and feeds the evidence engine (ADR-301) and the real benchmark service (ADR-314). It generalizes the vitals ground-truth rig (ADR-290) from a single measurand to a modality-agnostic plane.
RuView's evidence discipline (CLAUDE.md; ADR-282 ladder) requires MEASURED
accuracy claims to be backed by an independent reference. ADR-290 built exactly
this for vitals: reference-series ingest, time alignment (cross-correlation
lag + optional clock-drift fit), and agreement statistics (MAE/RMSE/bias/
Bland–Altman/within-tolerance), with an EvidenceGrade that is only
constructible as Measured when a real reference, non-zero paired samples,
minimum coverage, and a reproducer are present. That machinery is measurand- and
device-shaped: it knows about heart rate and breathing rate.
The substrate needs the same discipline for every phenomenon RuView senses — presence, count, localization, pose, posture, activity — and for reference sources of many modalities (cameras, mmWave, pressure mats, wearables, pulse oximeters, microphones, manual labels). The critical design decision is that these reference sensors form a validation plane, not additional inference inputs.
Options considered
- Fuse reference sensors as extra inference inputs. Rejected on principle: folding cameras/mmWave into the estimator would make RuView's RF claims unfalsifiable — the reference would be training the thing it is meant to check, and a camera-fed result is no longer a camera-free RF result. It would also violate the ADR-282 layering (RuView is probabilistic exteroception, never ground truth) and the honesty rule against presenting fused-with-camera output as WiFi sensing.
- One-off rigs per measurand (extend ADR-290 ad hoc each time). Rejected: duplicates alignment/agreement code per phenomenon and never yields a shared validation surface for the benchmark.
- A first-class, modality-agnostic
GroundTruthAPI that is strictly a validation plane. Chosen.
Decision
Introduce a GroundTruth API — a modality-agnostic validation plane that
compares RF inference against independent observation and never feeds it.
1. Modality-agnostic reference ingest
- A
ReferenceObservationgeneralizing ADR-290'sReferenceSeries: a timestamped, typed observation of aPhenomenon(presence, count, localization, pose keypoints, posture, activity, heart rate, breathing rate) from aReferenceModality(camera, mmWave, pressure, wearable, pulse oximeter, microphone, manual label), with device/source metadata and the measurement principle recorded. - Untrusted reference files are validated at the boundary (row-numbered rejections, non-monotonic timestamps are errors), reusing ADR-290's ingest discipline. Camera/mmWave references arrive as exported label/keypoint streams, not live model feeds.
2. Synchronization
- Generalize ADR-290's time alignment (bounded-lag normalized cross-correlation
- optional linear clock-drift fit) to arbitrary measurands on a common resampled grid, with no interpolation across gaps beyond a configurable limit. Alignment parameters are always reported, never silently applied.
- Spatial synchronization where relevant: reference observations are expressed in the ADR-303 spatial ontology so an RF localization/pose result and a camera/mmWave observation are compared in one coordinate frame.
3. Agreement as validation, not fusion
- A modality-appropriate
AgreementReportper phenomenon: continuous measurands reuse ADR-290's MAE/RMSE/bias/Bland–Altman/within-tolerance; categorical/detection phenomena (presence, activity) report confusion-matrix metrics; spatial phenomena report localization error percentiles and pose PCK with the mandatory mean-pose baseline and leakage-free split (CLAUDE.md; ADR-288). - Session scope is mandatory metadata (subject count, motion state, LOS/NLOS/ through-wall, distance band) — a report without scope cannot be constructed, as in ADR-290.
4. Evidence and isolation guarantees
- The plane is one-directional by type: the inference path has no read access
to
GroundTruthat runtime. A build/test-time isolation check (and the type boundary) prevents a reference observation from becoming an estimator input. - Reports carry an
EvidenceLevel(ADR-282) and anEvidenceGradeconstructible asMeasuredonly with a real reference, paired samples, coverage, and a reproducer (ADR-290 rule). Reports feed the ADR-301 evidence engine and are the substrate ADR-314 scores against.
Consequences
- Every phenomenon RuView senses gets the same MEASURED-vs-independent-observer discipline vitals already has, in one shared surface.
- Keeping references strictly as validation preserves the falsifiability and the camera-free identity of RF results; it costs the (tempting) accuracy a camera-fused estimator would show, which is the correct trade.
- Reference capture is an operational burden (a camera/mmWave rig per validated session); acceptable because it is a validation activity, not a runtime requirement, and it is what turns CLAIMED into MEASURED.
- Because this is Proposed (phase 2), the API shape may be revised once the phase-1 spine (ADR-298/299/301/303) lands and the benchmark (ADR-314) exercises it.
Validation
- Unit tests (planned): modality-agnostic ingest rejection cases; alignment recovery of known synthetic offsets/drifts across measurands; agreement math per phenomenon against hand-computed fixtures; pose PCK path requires a mean-pose baseline and rejects leaky splits; evidence-grade constructibility; the isolation check fails a build that wires a reference into the inference path.
- Cross-ADR: an ADR-314 benchmark scenario consumes
GroundTruthreports as its scored reference; ADR-301 ingests the agreement reports as evidence records. - Real-session validation (RF capture synchronized with a real camera/mmWave/ pressure/wearable reference) is the phase-2 exit and requires hardware evidence per CLAUDE.md; a synthetic run is not hardware evidence.