mirror of
https://github.com/ruvnet/RuView.git
synced 2026-06-02 00:58:56 +02:00
main
852 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
35722529bf |
cog-ha-matter (ADR-116 P4): pure mDNS service-record builder
Opens P4 with the smallest extractable unit: a pure builder that
produces the wire-format `MdnsService` the responder will publish
next iter. Splitting the record-builder from the responder lets
us:
* lock the TXT-record surface with named unit tests so drift
between the cog and the HA-side YAML auto-discovery binding
fires a test instead of silently breaking deployments,
* swap the responder library (mdns-sd / zeroconf / pnet) without
touching content,
* include the advertisement in `--print-manifest` for Seed
integration tests that can't boot tokio.
TXT surface (sorted, RFC 6763):
| cog_id | "ha-matter" |
| cog_version | CARGO_PKG_VERSION |
| node_id | identity.node_id |
| mqtt_port | u16 stringified |
| privacy | "1" | "0" |
| proto | "ruview-ha/1" |
9 new tests:
* service_type locked to `_ruview-ha._tcp`
* instance_name carries node_id
* control_port advertises the *control plane*, not MQTT
* privacy flag is "1"/"0" (HA config flow reads it byte-stable)
* proto version locked to ruview-ha/1 (bump is deliberate)
* cog_id in TXT matches crate constant
* txt_records sorted for byte-stable mDNS responses
* **PII leak guard**: TXT must NOT carry hr_bpm, br_bpm, pose_*,
keypoint, ssid, lat, lon, mac, rssi — broadcasts in cleartext
so a future "let's add hr_bpm for convenience" patch fires
here, not in a privacy incident.
* required-keys lock — adding is fine, removing/renaming breaks
every deployed Seed.
21/21 cog tests green (12 → 21).
ADR-116 P4 flipped pending → in progress, with the responder /
embedded broker / witness chain enumerated as the remaining P4
sub-units.
Co-Authored-By: claude-flow <ruv@ruv.net>
|
||
|
|
c9f005c360 |
cog-ha-matter (ADR-116 P3): wire publisher::spawn into main.rs
P3 closes the publisher wiring loop. `main.rs` now:
1. builds `PublisherInputs` from CLI args via the pure helper
extracted last iter,
2. opens a `broadcast::channel::<VitalsSnapshot>(256)`,
3. calls `runtime::spawn_publisher(inputs, rx)` — a thin
wrapper around ADR-115's `publisher::spawn` that owns the
`Arc<MqttConfig>` wrap,
4. holds the tx side so the channel stays open until P3.5
wires the sensing-server bridge,
5. awaits Ctrl-C or unexpected publisher exit (logged at WARN).
Two new tests:
* `spawn_publisher_returns_live_handle_without_broker` — proves
the wiring compiles and the rumqttc event loop survives an
unreachable broker (it retries internally; we abort the handle
inside 100 ms). Catches breakage from a future refactor that
accidentally pre-validates host reachability.
* `default_state_channel_capacity_is_reasonable` — locks the
`DEFAULT_STATE_CHANNEL_CAPACITY = 256` default; a regression to
e.g. 1 would surface here instead of as a dropped frame in
production under bursty multi-Seed federation.
12/12 cog-ha-matter tests green (10 → 12).
ADR-116 phase table: P3 flipped from "in progress" to ✅ wiring done,
with the P3.5 follow-up (sensing-server `/v1/snapshot` WS bridge)
explicitly named.
Co-Authored-By: claude-flow <ruv@ruv.net>
v1222
|
||
|
|
5723f505b7 |
cog-ha-matter (ADR-116 P3): extract pure publisher-input builder
Adds `runtime::build_publisher_inputs(host, port, privacy, identity)` —
the side-effect-free helper that turns the cog's CLI surface into the
`(MqttConfig, OwnedDiscoveryBuilder)` pair ADR-115's `publisher::spawn`
consumes. Keeps the tokio runtime wiring out of the pure unit so the
mDNS responder + Seed control plane (P4) can build the same inputs
from different sources without going through clap.
8 new tests lock the wire-format invariants:
* host/port round-trip into MqttConfig
* privacy_mode propagation (P1 dossier item 7, FDA Jan 2026)
* discovery_prefix defaults to "homeassistant"
* discovery carries node_id + sw_version + friendly_name
* via_device advertises COG_ID (ADR-101/102 device-registry shape)
* client_id includes node_id (lesson from ADR-115 iter 45-48 session
takeover post-mortem — two publishers sharing a client_id loop)
* tls defaults to Off for v1 LAN-only (lock against silent enablement)
* default_identity carries CARGO_PKG_VERSION + PID for uniqueness
Plus the existing 2 manifest tests → 10/10 green
(`cargo test -p cog-ha-matter --no-default-features --lib`).
Also lands the deep-researcher dossier (`docs/research/ADR-116-ha-...`)
that the ADR §3+§4 reference — it was produced last iter but only the
ADR was committed; this puts the source-of-truth into the tree so the
ADR's "8 sections, 30+ citations" claim is actually verifiable.
P3 status in the ADR phase table flipped from "pending" to "in progress"
with the helper named; next iter tokio::spawns publisher::run(...) in
main.rs and registers the mDNS responder.
Co-Authored-By: claude-flow <ruv@ruv.net>
|
||
|
|
56265023dc |
feat(cog-ha-matter): P2 scaffold + ADR-116 P1 research-dossier fold-in
cron iter 1. Three things landed atomically because they cross-cite:
P1 — research dossier complete
Deep-researcher agent (a4dd35950ffd) shipped
docs/research/ADR-116-ha-matter-cog-research.md: 8 sections,
30+ citations across Matter / HACS / cog arch / local-AI /
federation / competitors / regulatory / v1 scope. Key
findings folded into ADR-116 §3 and §4:
- Matter device class: OccupancySensor (0x0107) +
RFSensing feature on cluster 0x0406 (1.4 rev 5)
- ESP32-C6 Thread Border Router: one Kconfig flag away
(CONFIG_OPENTHREAD_BORDER_ROUTER=y)
- HACS quality tier: target Gold (repairs + diagnostics +
reconfiguration), start from hacs.integration_blueprint
- CSA cert: ~$30-42k/yr — skip for v1, "Works with HA"
positioning instead
- Cog RAM/CPU: 128 MB / 15% on the Seed; 10 KB INT8
semantic-primitive classifier fits without PSRAM
- SONA: <100 µs/query confirmed by ruvllm-esp32 v0.3.3
- FDA Jan 2026 wellness guidance covers HR / sleep / activity
anomaly when marketed as "anomaly notification" not "diagnosis"
- Competitor moat: Aqara FP300 / TOMMY / ESPectre all lack
HR + BR + pose + semantic + witness simultaneously
P2 — cog crate scaffold compiles
v2/crates/cog-ha-matter/ created with cog-pose-estimation as
precedent shape (ADR-101). Files:
- Cargo.toml: depends on wifi-densepose-sensing-server with
--features mqtt + wifi-densepose-hardware for the ADR-110
SyncPacket bridge.
- src/lib.rs: COG_ID = "ha-matter", MDNS_SERVICE_TYPE
"_ruview-ha._tcp", DEFAULT_CONTROL_PORT 9180.
- src/manifest.rs: typed CogManifest (8 fields) mirroring
cog-pose-estimation's manifest.template.json. Round-trip
test locks the JSON wire shape; id-constant test guards
against rename drift.
- src/main.rs: clap CLI with --sensing-url / --mqtt-host /
--mqtt-port / --privacy-mode / --print-manifest. The
--print-manifest flag emits the build-time template with
{{VERSION}} / {{ARCH}} placeholders for the signer.
- v2/Cargo.toml: cog-ha-matter added as workspace member.
Verification:
cargo check -p cog-ha-matter --no-default-features → green
cargo test -p cog-ha-matter --no-default-features --lib
→ 2/2 manifest tests pass
ADR-116 §3 + §4 + §5 (phases) updated to mark P1+P2 ✅ done and
seat the recommended v1 scope (privacy-mode audit-only → cog
signing → SONA loop → HACS gold → Matter Bridge as v0.8) ranked
by build cost × user impact per the dossier.
P3 (next iter): wrap the existing ADR-115 MQTT publisher as the
cog's main loop. The scaffold returns SUCCESS immediately today.
Co-Authored-By: claude-flow <ruv@ruv.net>
v1221
|
||
|
|
f751740d3d |
docs(adr): ADR-116 — Home Assistant + Matter as a Cognitum Seed cog
Proposes `cog-ha-matter` as a Cognitum Seed cog packaging the
ADR-115 HA-DISCO + HA-MIND surfaces as a first-class Seed-installable
artifact, rather than configuration of an external sensing-server.
P1 — research dossier in progress (deep-researcher agent), output at
`docs/research/ADR-116-ha-matter-cog-research.md`.
Seed-native enhancements vs the ADR-115 sensing-server flag:
- Embedded mosquitto (optional, for Seeds without external broker)
- mDNS service advertisement (_ruview-ha._tcp)
- RuVector-backed semantic-primitive thresholds (SONA adaptation,
per-home learning rather than static YAML)
- Ed25519 witness chain for state transitions (regulated deployments)
- OTA firmware coordination for the mesh's ESP32-C6 nodes
- Multi-Seed federation via ADR-110 ESP-NOW substrate (≤100 µs
sync enables cross-Seed dedup of events like falls in shared rooms)
7 open questions tracked for the research dossier to answer:
Matter Bridge vs Matter Root, Thread Border Router feasibility,
HACS value-add, CSA cert cost/timeline, cog binary RAM budget,
ruvllm latency, HIPAA/FDA classification.
10 implementation phases scaffolded. Tracking issue to file once
research lands. PR for the cog binary in P2.
Co-Authored-By: claude-flow <ruv@ruv.net>
v1220
|
||
|
|
db6df747b9 |
docs(ha): add cross-industry application examples to home-assistant.md
Add an 'Applications — what people actually do with this' section
above References, grouping real-world uses by category so prospective
users can pick what matches their space without having to invent
their own automations from the entity catalog.
Categories (7 tables, ~70 example use cases):
- Personal & home (goodnight routine, wake-up, meeting mode,
bathroom fan, forgotten stove, pet-only at home, sleep tracking,
toddler safety, pre-arrival lighting)
- Healthcare & assisted living (fall detection + escalation,
elderly inactivity anomaly, privacy-mode care, sleep apnea,
post-surgery, dementia wandering, bathroom timeout)
- Security & safety (auto-arm, intrusion, through-wall verification,
silent distress, garage / outbuilding, child safety zones)
- Commercial buildings & retail (office occupancy, demand-controlled
HVAC, meeting room truth, retail dwell + heat-map, queue length,
cleaning verification, lone-worker safety)
- Industrial & infrastructure (control rooms, restricted zones,
equipment rooms, hazardous area, construction after-hours,
maritime quarters)
- Education & public spaces (classroom occupancy, library, lecture
hall attendance, restroom signage, gym capacity, transit platforms)
- Energy & sustainability (per-room lighting, smart thermostat
zoning, vampire-load cut-off, solar / battery dispatch tuning,
cold-chain monitoring)
- Research, prototyping & developer use
Plus a 'Combining entities — recipe patterns' section that captures
5 reusable automation patterns (negative+duration trip wire, two-state
agreement guard, threshold+cooldown, calendar-vs-reality, privacy-mode
semantic-only) so users can build their own without reading the entity
reference cover-to-cover.
Plus a 'What about regulated environments?' subsection that names
the HIPAA / GDPR / CCPA properties of --privacy-mode + semantic-only
publishing — the architectural win for healthcare / education /
shared-housing deployments.
Co-Authored-By: claude-flow <ruv@ruv.net>
v1219
|
||
|
|
4bbb004f2d |
docs(readme): tighten ADR-079 caveat + drop What's-new callout
Tighten the ADR-079 camera-supervised limitation line and remove the prominent iter-50 'What's new (2026-05-23)' callout block — both preferred local edits. Co-Authored-By: claude-flow <ruv@ruv.net>v1218 |
||
|
|
62af91beb1 |
docs(readme): add 'What's new (2026-05-23)' callout for ADR-110 + ADR-115
Iter 50 — both ADRs merged today (PR #764 + PR #778). README's beta-software warning block was the natural location for a release callout above the main pitch; users hitting the README see today's shipped work first. Two-bullet block: - ADR-110 ESP32-C6 firmware substrate at v0.7.0-esp32 with the headline measured numbers (99.56 % match / 104 µs stdev / 3.95x EMA suppression) and the host-side surface (decoders + REST + Prometheus + WebSocket). - ADR-115 HA+Matter integration with the entity-count / blueprint / Lovelace count and the privacy-mode architectural win. Both link to their ADRs + PRs so reviewers can follow back. Co-Authored-By: claude-flow <ruv@ruv.net>v1216 v1217 |
||
|
|
249d6c327f |
ADR-115: Home Assistant + Matter integration (#778)
Closes ADR-115's MQTT track (HA-DISCO + HA-MIND + HA-FABRIC scaffolding). Headline: - 21 entity kinds per node (11 raw + 10 semantic primitives) - MQTT auto-discovery with HA conventions - Matter Bridge scaffolding (SDK wiring deferred to v0.7.1 per ADR §9.10) - Privacy mode strips biometrics at the wire, semantic primitives keep working - 420+ lib tests, mosquitto-backed integration tests, property-based fuzzing - 8 starter HA Blueprints + 3 Lovelace dashboards shipped Tracking issue: #776 |
||
|
|
00a234eda8 |
ADR-110: ESP32-C6 firmware extension (#764)
Closes the firmware-side ADR-110 design at v0.7.0-esp32 after a 38-iter /loop SOTA sprint. Headline (bench, COM9+COM12 ESP32-C6): - 99.56% cross-board RX, 104.1 µs smoothed offset stdev (≤100 µs §2.4 target met) - 3.95× EMA suppression, 1.4 ppm crystal skew preserved 4 firmware releases: v0.6.7 / v0.6.8 / v0.6.9 / v0.7.0-esp32. 42 ADR-110 unit tests, 1761 v2 workspace tests, full Firmware CI + QEMU green.v1201 |
||
|
|
5d544126ee |
fix(ui): unbreak viz.html — OrbitControls importmap, WS URL, toast NPE (#760) (#773)
* fix(ui): unbreak viz.html — OrbitControls importmap, WS URL, toast NPE (#760) Three independent bugs were stacking to make ui/viz.html unusable from `main`: 1. Three.js r160 removed `examples/js/OrbitControls.js`, so the script-tag load 404'd and `new THREE.OrbitControls(...)` threw. Switch to an importmap that pulls the ES module build, then re-expose `window.THREE` and `THREE.OrbitControls` so the existing component modules (scene.js, body-model.js, …) keep working without a wider refactor. 2. The WebSocket client was hardcoded to `ws://localhost:8000/ws/pose`, but the sensing-server listens on `--ws-port` (8765 default, 3001 in the Docker image) at `/ws/sensing`. Reuse the existing `buildSensingWsUrl()` helper from `sensing.service.js` so port pairings are handled centrally, and add a `?ws=…` query-string override for non-standard setups. The websocket-client.js default is also updated to derive from `window.location` instead of the dead `:8000/ws/pose` literal. 3. `ToastManager.show()` called `this.container.appendChild(...)` even when `init()` had never been called, throwing a TypeError that killed the rest of page initialization. Auto-init the container lazily on first show (patch from issue reporter). Closes #760. Co-Authored-By: claude-flow <ruv@ruv.net> * fix(ui): single module script + mutable THREE — OrbitControls validated Browser validation against the previous commit caught two stacked issues: 1. `import * as THREE from 'three'` returns a frozen Module Namespace Object — assignment `THREE.OrbitControls = OrbitControls` silently no-ops, so the global never gets the OrbitControls reference. 2. Two separate `<script type="module">` blocks (one installing the THREE global, one consuming it via Scene) are independently async-resolved. The second can finish dependency loading first and call `new THREE.OrbitControls(...)` before the first script has run. Fixed by spreading the namespace into a plain mutable object and merging all initialization into a single module script with `await import()` for component modules. Order is now strictly: import THREE → install window.THREE → import components → run init(). Validated via agent-browser: page logs `[VIZ] Initialization complete`, WebSocket targets the correct `ws://127.0.0.1:3001/ws/sensing` endpoint (derived from buildSensingWsUrl), toast lazy-init confirmed via eval. Co-Authored-By: claude-flow <ruv@ruv.net>v1160 |
||
|
|
004a63e82d |
fix(security): audit — fix RUSTSEC vulns, clippy warnings, dead code (#769)
- Upgrade openssl to 0.10.78 (CVE-2026-41676), jsonwebtoken to 9.4 - Suppress unmaintained-only/no-CVE advisories in .cargo/audit.toml with per-entry rationale - Fix all `cargo clippy --all-targets -- -D warnings` errors across 35 crates: derivable_impls, needless_range_loop, map_or→is_some_and/ is_none_or, await_holding_lock (drop MutexGuard before .await), ptr_arg (&mut Vec→&mut [T]), useless_conversion, approximate_constant (2.718→E, 3.14→PI), field_reassign_with_default, manual_inspect, useless_vec, lines_filter_map_ok, print_literal, dead_code - Apply `cargo fmt --all` - Pre-existing test failure in wifi-densepose-signal (test_estimate_occupancy_noise_only) is not introduced by this PRv1155 |
||
|
|
1906876541 |
fix: upgrade openssl to 0.10.78 (CVE-2026-41676) (#751)
* fix: CVE-2026-41676 security vulnerability Automated dependency upgrade by OrbisAI Security * fix: upgrade openssl to 0.10.78 (CVE-2026-41676) rust-openssl provides OpenSSL bindings for the Rust programming langua Resolves CVE-2026-41676v1153 |
||
|
|
423dc9fd5c |
docs(readme): add Cognitum creator affiliate program reference
Brief callout for TikTok/Instagram/YouTube creators — 25% commission, instant click-tracking, ~24h manual review. Links to cognitum.one/affiliate. Co-Authored-By: claude-flow <ruv@ruv.net>v1152 |
||
|
|
68abb385ae |
docs(readme): swap hero image to ruview-seed.png (#753)
Replaces assets/ruview-small-gemini.jpg with assets/ruview-seed.png as the hero image. Same Cognitum Seed link target.v1136 |
||
|
|
92badd84e6 |
research(sota-loop): final 00-summary.md — loop closes at 12:00 UTC stop (#747)
Closes the autonomous SOTA research loop kicked off 2026-05-21 ~21:00 UTC. ~15 hours, 41 cron-driven research ticks + 3 housekeeping PRs. Output inventory: - 19 research threads (R1, R3, R5-R15, R16, R17, R18, R19, R20, R20.1, R20.2) - 8 exotic verticals - 7 ADRs from loop (105/106/107/108/109/113/114) + bridges with 3 existing - 1 quantum-sensing doc (17) bridging the existing 11-16 series - 22 numpy reference implementations in 9 thematic folders - Production roadmap (6 tiers, ~3,500 LOC, ~25 person-weeks) - 41 per-tick summaries Three kinds of negative result demonstrated: - Missing-tool (revisitable): R12 -> R12 PABS POSITIVE -> R12.1 CLOSED LOOP - Architecture-error (correctable): R3.1 -> R3.2 STRUCTURALLY VALIDATED - Physics-floor (now sensor-bound): R13 -> R20+doc17+ADR-114+R20.1+R20.2 Three multi-tick research arcs: - R12 (3 ticks): structure detection NEG -> POS -> CLOSED - R3 (3 ticks): cross-room re-ID POS -> NEG (arch error) -> STRUCTURALLY VALIDATED - R20 (5 ticks): vision -> bridge -> spec -> demo -> refinement (45 min) R6 placement family (9 ticks) consolidated into ADR-113 4-axis matrix. Ship recipe: 2D chest-centric + multi-subject + N=5 = 100% coverage. Production Tier 1 (Q3 2026): 93x placement lift + 9.36x intruder lift + ADR-029 closed. ~490 LOC, 3-4 person-weeks. Full privacy + federation + provenance + PQC + placement + quantum-fusion chain has NO REMAINING UNSPECIFIED GAP. Cron d6e5c473 deleted at summary write. Autonomous phase ends here.v1127 v1093 v1133 v1057 v1059 v1061 v1063 v1065 v1067 v1069 v1071 v1073 v1075 v1077 v1079 v1081 v1083 v1085 v1087 v1089 v1091 v1131 v1095 v1097 v1099 v1101 v1103 v1105 v1107 v1109 v1111 v1113 v1115 v1117 v1119 v1121 v1123 v1125 v1129 |
||
|
|
fecb1da252 |
research(R20.2): threshold-based hand-off — works at 0.5 m, harmonic gap at 1 m surfaces Pan-Tompkins requirement (#746)
Implements R20.1's catalogued refinement: when NV conf > 60% AND amplitude > 3 pT, trust NV entirely. Mixed result (5 distances): - 0.5 m: NV=72.00 ✓, smart=72.0 (+0.0 error, NV trusted) ✓ - 1.0 m: NV=144 (harmonic!), smart trusts wrong NV (+72 BPM error) - 1.5 m+: falls back to weighted (NV conf below threshold) Production lesson: the threshold-based policy is correct in spirit but incorrect with simple FFT rate estimator (picks harmonics). Production needs: 1. Harmonic rejection (Pan-Tompkins QRS or autocorrelation) 2. Cross-check vs breathing band 3. Per-frame plausibility window R20.1's 'production needs Pan-Tompkins' note is confirmed BINDING, not nice-to-have, before threshold hand-off can ship. ADR-114 implementation budget refined: +30-50 LOC for Pan-Tompkins. Five-step quantum arc: - R20 vision (tick 37) - Doc 17 bridge (tick 38) - ADR-114 spec (tick 39) - R20.1 working demo (tick 40) - R20.2 threshold refinement (this tick) Production ADR-114 cog now has all known refinements catalogued BEFORE any Rust code is written. Honest mixed result — catalogue-then-revisit pattern works: R20.1 flagged production gap; R20.2 attempted fix; fix surfaced deeper gap (harmonic rejection). Three layers of refinement. |
||
|
|
eb88035699 |
docs(examples/research-sota): add main + 9 sub-folder READMEs (follow-up to #744) (#745)
PR #744 moved the files into 9 thematic folders via git mv but missed the READMEs due to a working-directory issue with git add. This PR adds the actual READMEs: - examples/research-sota/README.md (main overview) - examples/research-sota/01-physics-floor/README.md - examples/research-sota/02-placement/README.md - examples/research-sota/03-spatial-intelligence/README.md - examples/research-sota/04-rssi/README.md - examples/research-sota/05-cross-room-reid/README.md - examples/research-sota/06-structure-detection/README.md - examples/research-sota/07-negative-results/README.md - examples/research-sota/08-verticals/README.md - examples/research-sota/09-quantum-fusion/README.md Each sub-README documents: - Scripts + headlines table - Why this folder bounds/composes with others - Sample output / honest scope - Cross-references to related loop notes + ADRs Main README covers: - Folder map with thread numbers - Cross-folder dependency graph - 8-entry headline findings table - Reading order for newcomers (4 scripts in suggested order) - Honest scope (synthetic-physics caveats) |
||
|
|
4e879bf62a |
chore: organise examples/research-sota/ into 9 thematic folders with READMEs (#744)
User request: organise examples/research-sota/ into folders with READMEs and main overview. Moved 46 files into 9 thematic folders by thread family + research category: 01-physics-floor/ (R1, R6, R6.1) — bedrock primitives 02-placement/ (R6.2 family, 7 sub-ticks) — antenna placement 03-spatial-intelligence/ (R5, R7) — saliency + mincut 04-rssi/ (R8, R9) — RSSI-only sensing 05-cross-room-reid/ (R3 arc, 3 ticks) — cross-room identity 06-structure-detection/ (R12 arc, 3 ticks) — PABS + closed loop 07-negative-results/ (R13) — productive failure 08-verticals/ (R10, R11) — wildlife + maritime physics 09-quantum-fusion/ (R20.1) — ADR-114 quantum-classical demo Each folder has its own README.md documenting: - Scripts + headlines table - Why this folder bounds / composes with others - Sample output / honest scope - Cross-references to related loop notes + ADRs Main README.md at the top covers: - Folder map with thread numbers - Cross-folder dependency graph - Headline findings table (8 entries) - Reading order for newcomers (4 scripts in suggested order) - Honest scope (synthetic-physics caveats) All git mv operations preserve file history. Total: 46 files moved, 10 new READMEs (main + 9 sub) totalling ~1300 lines of organising documentation. |
||
|
|
759b487a82 |
research(R20.1): working Bayesian fusion demo for ADR-114 — empirically validates R13 NEG + doc 16 cube-law (#743)
Runnable numpy demo of ADR-114's three-input Bayesian fusion architecture. ~140 LOC pure NumPy. Validates the architecture before Rust implementation. Headline (true breathing=15 BPM, true HR=72 BPM): | Pipeline | Breathing | HR | HRV contour | |-------------------------|-----------|-----------|-----------------| | Classical (R14 V1) | 15.00 BPM | 105 BPM | not available | | | conf 69% | conf 38% | (R13 confirms) | | NV @ 1 m (6.25 pT) | n/a | 72.00 BPM | SDNN 119 ms | | NV @ 2 m (0.78 pT) | n/a | 96 marginal | degrading | | NV @ 3 m (0.23 pT) | n/a | 166 lost | NO | | FUSED (ADR-114) | 15.00 BPM | 84 BPM | SDNN 119 ms | Five confirmations: 1. Classical breathing rate is reliable (R14 V1 holds) 2. Classical HR is unreliable (R13 NEGATIVE EMPIRICALLY CONFIRMED: 38% confidence, 105 BPM estimate when truth was 72) 3. NV cardiac at 1 m works (R13 recovery validated) 4. CUBE-OF-DISTANCE FALLOFF IS REAL (doc 16 validated: 27x signal drop from 1 m to 3 m, matches 1/r^3 prediction) 5. Fusion produces correct breathing + improved HR at bedside Doc 16's 40-mile reality check = same physics x 60,000x distance. Press-release physics confirmed unphysical via working code. Caveat documented: demo's naive precision-weighted Bayesian gave 84 BPM (between classical 105 wrong and NV 72 right). Production fix catalogued — threshold-based hand-off when NV conf > 60% AND B-field > 3 pT, trust NV entirely. Engineering risk for ADR-114 Rust port (200 LOC, 3 weeks) lowered substantially: this 140 LOC numpy demo runs in <100 ms. Four-tick arc: - 11:15 UTC: R20 vision - 11:25 UTC: Doc 17 bridge - 11:35 UTC: ADR-114 spec - 11:40 UTC: R20.1 WORKING CODE Vision -> integration -> spec -> working code in 25 minutes. Honest scope: - Synthetic signals throughout - Cube-of-distance assumes clean dipole field - 5 deg phase noise assumes phase_align.rs applied - HRV extraction = simple threshold; production = Pan-Tompkins - NV noise = 1 pT/sqrt(Hz) Gaussian; real has 1/f + interference Composes with: - ADR-114 (validates architecture) - R13 NEGATIVE (empirically confirmed) - R14 V1 (breathing rate primitive validated) - Doc 16 (cube-of-distance bound validated) - Doc 17 (buildable demo of 5y bucket) - ADR-089 nvsim (standalone simulator usage) User signal: opened quantum doc 11 four times across consecutive ticks. Continuing the quantum-fusion direction with concrete code. Coordination: ticks/tick-40.md, no PROGRESS.md edit. Full quantum-classical fusion arc is now SHIPPABLE: - Vision (R20) - Integration (doc 17) - Spec (ADR-114) - Working demo (R20.1) |
||
|
|
f21d833c23 |
adr-114: cog-quantum-vitals — first quantum-augmented cog spec, recovers R13 NEGATIVE (#742)
Drafted in response to user's escalating signal (opened quantum-sensing doc 11 three times across consecutive ticks). Beyond R20 vision (tick 37) and doc 17 bridge (tick 38), this tick delivers a BUILDABLE ARTIFACT. First quantum-augmented cog spec. Bedside-only (1-2 m, inherits doc 16 sober posture). Composes nvsim (ADR-089) + R14 V1 + R12.1 pose-PABS + R3 AETHER + Bayesian fusion. Architecture: - ESP32 CSI -> R14 V1 breathing rate (classical primary) - nvsim NV -> R6.1 multi-source forward (cardiac magnetic, NV primary) - R12.1 pose-PABS hook for residual check - R3 + AETHER per-patient identity - Bayesian fusion: classical drives when confidence high; NV drives HRV contour (which R13 NEGATIVE ruled out classically) Outputs (with confidence scores per output): - Breathing rate +-0.1 BPM - Heart rate +-0.5 BPM - HRV CONTOUR (NV only - this is what R13 ruled out classically) - Per-patient identity (R3+AETHER, per-installation only) Cost analysis (bedside): - 4x ESP32-S3: 0 - 1x NV-diamond: 00-2000 today / ~00 by 2028 - Mount + cal: 0 - TOTAL: 10-2110 vs clinical monitor: 000-10000 Implementation: ~200 LOC, ~3 weeks - Crate scaffold: 30 - nvsim adapter: 40 - Bayesian fusion: 80 - R12.1 hook: 30 - Manifest schema: 20 Privacy chain unchanged: ADR-106 Layer 1 adds NV B(t) + HRV contour to on-device-only primitive list. ADR-100/109 dual signing for manifest. R14 V3 (attention-respecting) becomes shippable — was bound by R13's contour requirement; ADR-114 provides the contour. ADR chain after this tick (10 ADRs in loop's accumulated chain): - Existing: ADR-100, 103, 104 - Loop: ADR-105, 106, 107, 108, 109, 113, 114 - Critical dependency: ADR-089 (nvsim) Future ADRs catalogued: - ADR-115: cog-rydberg-anchor (7-10y) - ADR-116: real NV hardware bring-up - ADR-117: cog-quantum-vitals FDA/CE pathway - ADR-118: cog-mm-position (atomic-clock multistatic) The three-tick arc (R20 -> doc 17 -> ADR-114): - R20: vision (quantum recovers classical limits) - Doc 17: integration (bridges series 11-16 with loop) - ADR-114: shippable (concrete cog spec, 10-2110/bedside) Vision -> integration -> buildable in 35 minutes. Honest scope: - nvsim is deterministic SIMULATOR; cog ships with synthetic benefit until 2028-2030 real hardware - Cube-of-distance bounds <=2 m bedside (doc 16 posture) - Patient-side variability requires per-patient calibration - No bench validation on hybrid pipeline yet Composes with every loop thread (R3, R6.1, R12, R12.1, R13 NEG recovered, R14 V1/V2/V3, R15, R16-R20) + all ADRs (089, 100, 103-109, 113). Coordination: ticks/tick-39.md, no PROGRESS.md edit. |
||
|
|
be5eae2007 |
quantum-sensing(doc 17): honest classical-quantum fusion — bridges SOTA loop with quantum series 11-16 (#741)
Bridges the existing 6-doc quantum-sensing research series
(docs 11-16, 2026-03-08 onwards) with this loop's 37+ ticks
(2026-05-22). Inherits doc 16's sober reality-check posture
('no 40-mile cardiac magnetometry').
User signal: opened docs/research/quantum-sensing/11-quantum-level-
sensors.md twice in consecutive ticks. Strong repeat signal toward
quantum integration. Doc 17 explicitly bridges the two work streams.
Two reality-checks compose:
1. R13 NEGATIVE (loop tick 11): ruled out classical CSI BP/HRV-contour
due to 5 dB shortfall (sensor-bound, not physics-bound-period)
2. Doc 16 Ghost Murmur (2026-04-26): ruled out 40-mile NV cardiac
magnetometry due to cube-of-distance physics
Combined: HONEST FUSION adds NV-diamond cardiac magnetometry at 1-2 m
BEDSIDE RANGES (where cube law gives ~1 pT/sqrt(Hz) SNR), NOT 40 miles.
Classical primitives carry geometry; quantum carries fidelity.
Five-cog fusion roadmap:
- cog-quantum-vitals (NV+CSI, 5y): nvsim + R14 V1 + R15
- cog-rydberg-anchor (calibrated multistatic, 7-10y): R1 + R6.2.2 + Rydberg
- cog-mm-position (atomic clock, 10y): R1 + R3.2 + atomic clock
- cog-deep-rubble-survivor (NV drone, 15y): R18 + NV via drone
- cog-ICU-meg (room-temp SQUID, 20y): R14 V3 + SQUID array
All five stay sober — no Ghost Murmur 40-mile claims.
Cross-reference index: every loop output mapped to quantum-series doc.
- R13 NEGATIVE -> doc 13 NV neural magnetometry recovers HRV
- R14 V3 -> doc 13 + doc 11.2.2 SQUID for MEG
- R6.1 4.7 dB penalty -> doc 11.3.3 quantum illumination (+6 dB)
- R1 CRLB -> doc 11.4 Rydberg+atomic clock (~10 cm)
- R18 disaster -> doc 13 NV cardiac at 5+ m rubble depth
nvsim (ADR-089) integration concretised:
nvsim_output -> R14 V1 fusion / R12 PABS / R7 mincut / R6.1 residual
↓
cog-quantum-vitals
~150 LOC glue. Makes nvsim ACTUALLY USEFUL beyond simulator scope.
What this DOES enable:
- Clear integration between 6-doc series and SOTA loop
- Five honest-scope fusion-cog roadmap items
- 'What we are NOT building' list (no 40-mile, no through-multi-walls)
- Bridge for journalists/researchers/contributors
What this DOES NOT enable:
- 40-mile cardiac magnetometry (doc 16 stands)
- Through-multiple-walls quantum (1/r^3 falloff persists)
- Replacement of medical devices without FDA/CE
- Quantum-enhanced WiFi protocol changes (Layer 1 stays classical)
Doc 17 special status:
- First doc to bridge SOTA loop with quantum-sensing series
- Adopts doc 16's sober reality-check posture
- Identifies R13 NEGATIVE as conditionally recoverable (sensor-bound)
- Concretises nvsim → cog integration path
Composes with every loop output (R1, R3, R5-R15, R12.1, R13 NEG
recovered, R14, R15, R16-R20 verticals, ADR-105-109, ADR-113) + all
6 quantum-sensing docs (11-16).
Coordination: ticks/tick-38.md, no PROGRESS.md edit.
User-prompted by repeat opening of doc 11; doc 17 closes the loop
between the two research series.
|
||
|
|
0f930e929e |
research(R20): quantum sensing integration — recovers R13 NEGATIVE via NV-diamond magnetometry (#740)
Eighth exotic vertical. Recovers what R13 NEGATIVE physically excluded. Demonstrates the loop's architecture is SENSOR-AGNOSTIC — same primitives work with classical CSI today and quantum sensors in 5-20y. User-prompted: opened docs/research/quantum-sensing/11-quantum-level- sensors.md indicating quantum-integration interest. Repo already has nvsim (NV-diamond magnetometer simulator, ADR-089) as a standalone leaf crate. Four quantum modalities catalogued: - NV-diamond magnetometer (1 pT/sqrt(Hz), 5-10y edge) - Atomic clock (10^-15 stability, 5-10y edge) - SQUID magnetometer (1 fT/sqrt(Hz), 15-20y if room-temp possible) - Quantum-illuminated radar (+6 dB SNR, 15-20y edge) Classical vs quantum loop primitive comparison: - Breathing rate: +-1 BPM -> +-0.1 BPM (10x) - HR rate: +-5 BPM -> +-0.5 BPM (10x) - HRV contour: NOT possible (R13) -> NV-magnetometer enables it - BP: NOT possible (R13) -> atomic-ToA PWV enables it - Position precision: 25 cm -> 3 mm (80x) - Multi-scatterer penalty: 4.7 dB -> 1 dB (3.7 dB recovery) - Through-rubble: 2 m -> 5 m+ (2.5x) WHAT R13 NEGATIVE NO LONGER RULES OUT WITH QUANTUM: R13 ruled out HRV contour + BP from CSI due to 5 dB SNR shortfall. NV-diamond cardiac magnetometry resolves this — heart magnetic fields (~50 pT) detectable, contour-preserving, penetrates clothing/rubble. The 5 dB R13 shortfall was SENSOR-BOUND, not PHYSICS-BOUND-period. Different sensor recovers it. R20 identifies this categorisation explicitly. Five-cog speculative roadmap: - cog-quantum-vitals (5y): nvsim + R14 + R15 - cog-mm-position (10y): atomic clock + R1 + R3.2 - cog-deep-rubble-survivor (15y): nvsim + R18 + drone - cog-quantum-illuminated-pose (15y): quantum illum + R6.1 - cog-ICU-meg (20y): SQUID + R14 V3 Three deployment scenarios: - Hybrid ICU bed (5y): 0/bed (4xESP32 + NV-diamond) vs ,000 monitor - Atomic-clock mm-precision multistatic (10y): high-security access - NV-drone disaster magnetometry (15y): 2.5x rubble depth over R18 Integration with existing nvsim (ADR-089): - Magnetic-field time series -> R14 V1 vitals fusion - Field map -> R12 PABS structural anomaly extension - Stability indicator -> R7 mincut additional consistency channel Future cog: cog-quantum-fusion or cog-quantum-vitals. THE CLEANEST 'LOOP IS SENSOR-AGNOSTIC' DEMONSTRATION: Even when classical CSI hits its physics floors (R13, R1 bandwidth, R6.1 penalty), the ARCHITECTURE STAYS THE SAME; only the sensor swaps. R6 forward model, R12 PABS, R7 mincut, R3 cross-room, R14 V1/V2/V3 framework — all apply to quantum sensors with parameter swaps. This is the loop's architectural value proposition in its most explicit form. Honest scope (very important): - Most quantum tech is 10-20y from edge deployment - nvsim is a SIMULATOR, not real hardware - All 'improvement' numbers are theoretical bounds; real-world 30-70% - Loop has NO real quantum sensor on bench R20 special status: - 8th exotic vertical - First requiring quantum hardware for full realisation - Most explicitly 10-20y horizon (matches cron prompt criteria) - Recovers R13 NEGATIVE via different sensing modality Composes with every loop thread + ADR-089 nvsim + ADR-113 placement. Coordination: ticks/tick-37.md, no PROGRESS.md edit. Loop summary: 18 research threads, 8 exotic verticals, 6 loop ADRs, 3 negative result categories (R13 conditionally recoverable now), production roadmap shipped. 00-summary.md to follow at 12:00 UTC stop. |
||
|
|
a0fe392f4a |
research(R19): agricultural livestock — seventh exotic vertical, first non-human-centric (#739)
Seventh exotic vertical demonstrating the loop's vertical-agnostic infrastructure. R19 is the FIRST NON-HUMAN-CENTRIC vertical. R19 composes: - R10 gait taxonomy (extended to livestock species) - R6.2.5 multi-subject union (herd density) - R12 PABS (predator detection + cattle-fall) - R14 V1 (rate-level breathing for welfare scoring) - R15 (per-animal RF fingerprint for ID without tag) Per-species gait + vital tables: | Species | Stride | Normal RR | Stress RR | | Cattle | 0.6-1.2 Hz | 10-30 BPM | >40 | | Pig | 1.0-2.0 Hz | 10-25 BPM | >35 | | Sheep | 1.5-2.5 Hz | 12-25 BPM | >30 | | Horse | 1.0-1.8 Hz | 8-16 BPM | >20 | | Chicken | 3.0-5.0 Hz | 15-40 BPM | >50 | Six-cog roadmap (0-15y): - cog-cattle-monitor (5y): R10 + R14 + R6.2.5 + R12.1 - cog-pig-welfare (5y): R6.2.5 + R14 + correlation - cog-predator-alert (5y): R12 PABS + R10 classifier - cog-lameness-detector (10y): R10 gait asymmetry + drift - cog-birthing-alert (10y): R14 V1 species signature - cog-free-range-tracker (15y): R6.2.2 sparse + Tailscale mesh High-impact use cases: - Predator detection at pasture edges: mitigates 32M/year US livestock losses (USDA 2015) - Heat-stress detection in dairy: overheated cattle drop milk production 30-50% before visual signs - Lameness early detection: dairy industry's #1 welfare issue - Sick-pig isolation alert: tail-biting cascade prevention Three scenarios: - Dairy barn (5y): 00 vs 0K visual+RFID+behaviour - Free-range pasture (10y): self-organising solar+ESP32+Tailscale - Pig barn welfare (15y): EU End-the-Cage / Prop 12 alignment What's different from human verticals: - Mass range 1.5-1000 kg (3+ orders of magnitude) - Count 1-1000+ per pen - Privacy: farmer-consent regime, not HIPAA/OSHA/GDPR - Regulatory: USDA / EU welfare instead of FDA/OSHA - Cost sensitivity: very high (2-5% margins) - Chicken-scale economically marginal Honest scope: - Synthetic data only; per-species RCS measurements needed - Chicken-scale marginal economically - High-density pig (8-100/barn) may exceed R6.2.5's 4-occupant limit - Weather effects on outdoor RF not in scope - No animal-welfare ethics review (loop specifies infrastructure) R19 special status: FIRST NON-HUMAN-CENTRIC. Privacy framework doesn't apply (animals can't consent); replaced by animal-welfare regulations. R18+R19 = two verticals needing external partnerships (FEMA, USDA). Seven exotic verticals now: 1. R10 wildlife 2. R11 maritime 3. R14 empathic appliances (home) 4. R16 healthcare 5. R17 industrial 6. R18 disaster (integrates MAT crate) 7. R19 livestock (first non-human-centric) Composes with every loop thread (R1, R3, R5, R6/R6.1, R6.2.5, R7, R10, R12/R12.1, R13 NEG, R14, R15) + ADR-113 + ADR-105-109. Coordination: ticks/tick-36.md, no PROGRESS.md edit. |
||
|
|
ab80280f93 |
research: production roadmap synthesis — every loop output mapped to owner/LOC/priority (#738)
Terminal output of the SOTA research loop. Maps every research finding
to owner, LOC estimate, dependency, and priority across 6 tiers.
Total engineering budget across the loop's output:
- Tier 1 (Q3 2026): ~490 LOC, 3-4 person-weeks
- Tier 2 (Q3-Q4 2026): ~1180 LOC, 6-8 person-weeks
- Tier 3 (2027): ~1140 LOC, 8-10 person-weeks
- Tier 4-5 (long horizon): ~700+ LOC, 6-8 person-weeks
- TOTAL: ~3,500 LOC, ~25 person-weeks
Tier 1 (next quarter) ships:
- 1.1 wifi-densepose plan-antennas CLI tool (360 LOC) -- 93x placement lift
- 1.2 R12.1 pose-PABS in vital_signs cog (80 LOC) -- 9.36x intruder lift
- 1.3 cog-person-count v0.0.3 chest-centric (50 LOC)
- 1.4 ADR-029 amendment w/ ADR-113 matrix (0 LOC)
Critical-path graph:
1.1 + 1.2 -> 1.3 -> 2.1 ruview-fed -> 2.2 DP-vital-signs -> 3.1 cross-install -> 3.2 PQC
+-> 3.3 real-AETHER -> 3.4 fall-detect
+-> 4.x verticals
Why this matters: after 35 ticks of research output, this is the
document that lets a team pick up and ship without re-reading the 34
research notes. Priority alignment, estimate-anchoring, critical-path
visibility — all in one place.
R-thread mapping:
- R5/R6/R6.2 family/R6.1 -> Tier 1
- R12/R12.1 PABS -> Tier 1.2
- R3/R3.1/R3.2/R14/R15 -> Tier 2-3
- R7 mincut -> Tier 2 (in ruview-fed)
- R13 NEGATIVE -> rules out BP, no Tier line
- R10/R11/R16/R17/R18 verticals -> Tier 4-5
Composes with every loop output. Every thread, ADR, vertical sketch
has a line in some Tier. The TERMINAL output that needs the synthesis
power of a research loop to produce.
Honest scope:
- Estimates synthetic-data-based; may shift after bench validation
- Critical-path may have hidden dependencies (e.g. AgentDB schema)
- 25 person-weeks assumes full-time engineers
- Doesn't include integration testing, documentation, deployment ops
- Tiers based on architectural dependency, not business priority
Loop status after 35 ticks:
- 16 research threads
- 6 exotic verticals
- 6 new ADRs (105/106/107/108/109/113)
- 3 negative result categories
- 2 self-corrections
- 3 honest-scope findings
- 9-tick R6 family (complete)
- 3-tick R3 arc (complete)
- 3-tick R12 arc (complete)
- This production roadmap
00-summary.md will follow at 12:00 UTC / 08:00 ET cron stop.
Coordination: ticks/tick-35.md, no PROGRESS.md edit.
|
||
|
|
472774d3f8 |
research(R18): disaster response — first vertical integrating with existing repo crate (wifi-densepose-mat) (#737)
Third 'vertical demonstrates loop generality' tick. First vertical to integrate with an existing repo crate (wifi-densepose-mat), making loop-to-production path most direct. Headline: rubble is RF-leaky, not RF-opaque - Steel (1mm): 2,674 dB (opaque) - Mixed rubble 1-2m: 40-80 dB - Brick 10cm: 8-12 dB - Concrete 10cm: 20-30 dB - Drywall 1.5cm: 1-2 dB ESP32-S3 121 dB link budget gives 40-80 dB margin through typical rubble. Survivors at 1m depth: +37 dB (feasible), 2m: +7 dB (marginal), 3m: infeasible. Dramatically better than R11 maritime through-bulkhead case. Loop primitives -> MAT crate enhancements: - R12.1 pose-PABS: 9.36x fewer false alarms - R6.2.5: multi-survivor union (bounded ~4) - R1 CRLB: ~25 cm position precision - R14 V1 + R15: rate-level vitals confirmation - R3 + AETHER: survivor-vs-rescuer disambiguation - R7 mincut: BINDING at disaster sites - ADR-109 Dilithium: audit trail integrity Six-cog roadmap: - cog-mat-survivor-detect (NOW): wifi-densepose-mat baseline - cog-mat-pose-pabs (5y): + R12.1 - cog-mat-multi-survivor (5y): + R6.2.5 - cog-mat-vitals-confirm (5y): + R14 V1 + R15 - cog-mat-survivor-vs-rescuer (10y): + R3 + library - cog-mat-cross-deploy-fed (15y): + ADR-105-108 consent-bounded Three deployment scenarios: - Rapid response 5y: 00/survey unit, FEMA model - Pre-staged at seismic sites 10y: auto-activate on tremor - Cross-disaster fed 15y: consent-bounded across sites Vertical comparison (5 verticals now): - R18 disaster: rubble 40-80 dB, trapped, R7 binding, existing crate - R16 healthcare: air, stationary patients, R7 nice-to-have - R17 industrial: air, mobile workers, R7 binding Three of three target verticals (clinical/industrial/disaster) work with same architecture. Strong evidence loop is vertical-agnostic. Honest scope: - No bench-validated disaster-site data (ethics: can't simulate) - R7 mincut hostile-RF requirement - Cross-disaster fed has consent questions - Time-pressure tuning aggressive toward false-positive - MAT crate API doesn't yet consume R6.1 multi-scatterer - Steel-rubble (basement w/ rebar) impossible per R11 - Underwater impossible per R11 saltwater Composes with every loop thread (R1, R6/R6.1, R6.2.2/.5, R7, R10, R11, R12/R12.1, R13 NEG, R14, R15, R3) + all ADRs (105-109, 113) + R16/R17 parallel patterns. R18 special status: FIRST VERTICAL to integrate with existing repo crate. Loop-to-production path is shortest because production code exists; loop primitives enhance rather than replace. Coordination: ticks/tick-34.md, no PROGRESS.md edit. Loop now has 6 exotic verticals: 1. R10 wildlife 2. R11 maritime 3. R14 empathic appliances (home) 4. R16 healthcare 5. R17 industrial 6. R18 disaster (first to integrate with existing crate) |
||
|
|
8213741879 |
research(R17): industrial safety — second vertical composing loop primitives (#736)
Second exotic vertical demonstrating loop primitives compose to industrial safety. Parallel to R16 healthcare with different ADR-113 matrix rows (presence + vital-signs at coarser resolution) and R7 mincut becomes BINDING (not nice-to-have) due to hostile industrial RF environment. Three deployment scenarios: - Warehouse zone (5y): 0/zone vs 00-2000 camera+monitoring - Construction site (10y): per-project federation - Refinery/chemical plant (15y): adds CSI to gas+cam+badge infrastructure R17 vs R16 parallel: - R16: stationary patients, 30 m^2 ward, vital-signs row (chest, N=5), HIPAA - R17: mobile workers, 100-1000 m^2 zone, presence row (body, N=3-4), OSHA SAME ARCHITECTURE, different parameter regime. Five specialised cog roadmap items: - cog-fall-detection (5y): R12.1 + PPE-tuning - cog-zone-occupancy (5y): R12 PABS + R6.2.5 - cog-lone-worker-vitals (5y): R14 V1 rate-only - cog-worker-fatigue (10y): R10 gait + R15 - cog-multi-zone-orchestrator (5y): R6.2.5 + ADR-105 fed Why R7 mincut becomes binding: industrial RF has legitimate noise (cell, BLE tools, walkie-talkies) that must be disambiguated from sensor compromise. N >= 4 anchors required (already met by ADR-113 for multi-feature cogs). PPE-specific body model needed (R6.1 follow-up): Hard hat / high-vis / harness / tool belt / steel-toed boots change per-part reflectivity by ~5-15%. ~1-2 weeks labelled-data work for cog-industrial-pose. R10 gait taxonomy extends within humans: - Walking: 1.2-2.5 Hz - Fatigued: 0.8-1.5 Hz (slower + asymmetric) - Impaired: asymmetry > 25% OSHA-aligned pre-incident fatigue detection. Honest scope: - Synthetic data only; bench validation required for OSHA-grade - PPE-specific body model unbuilt - Outdoor/weather effects partly transfer from R10 - Worker consent + audit trail integration per-customer R17 closes parallel-vertical demonstration: loop has now shown VERTICAL-AGNOSTIC INFRASTRUCTURE: 1. R10 wildlife 2. R11 maritime 3. R14 empathic appliances (home) 4. R16 healthcare 5. R17 industrial safety Five exotic verticals + cross-thread identity work. Outputs that generalise beyond original problems = mark of well-factored research. Composes: - R1, R5, R6/R6.1, R6.2.5, R7 (binding here), R10, R12/R12.1, R13 NEG, R14, R15 — all loop threads - ADR-113 placement + ADR-105-109 privacy/PQC chain - R16 parallel pattern Coordination: ticks/tick-33.md, no PROGRESS.md edit. |
||
|
|
675233630d |
research(R16): healthcare ward monitoring — composes loop primitives, no new research (#735)
New exotic vertical (10-20y horizon) demonstrating the loop's 9-ADR + 13-thread output is sufficient to specify a complete clinical- deployment system. All required primitives exist; the gap is bench validation + BAA + regulatory pathway. Three deployment scenarios: - ICU bedside (5y): 0/bed vs ,000 hospital-grade monitor - General ward 8-bed (10y): 20/ward vs 00K/year staffing - At-home post-discharge (15y): empathic-appliance V1/V2/V3 + telemedicine Healthcare requirement -> loop primitive mapping: - Vitals: R14 V1 + R15 (rate-level only per R13 NEGATIVE) - Patient ID per bed: R3 + AETHER - Fall detection: R12.1 pose-PABS closed loop - Intruder detection: R12 PABS multi-subject - Multi-bed coverage: R6.2.5 + ADR-113 placement matrix - HIPAA privacy: ADR-106 medical-grade (epsilon=2) - Audit trail: ADR-109 Dilithium-signed - Cross-hospital fleet: ADR-107+108 quantum-resistant Two gaps blocking deployment (both solvable, neither new research): 1. Bench validation on real patient data (6-12 months) 2. BAA infrastructure with hospital partner (operational) What R13 NEGATIVE rules out: - Blood pressure cog -> keep arm cuff - HRV contour -> keep PPG wearable for ICU What R12.1 + R6.2.5 enables: - Fall detection at 9.36x lift - 100% coverage for 4-occupant rooms - Per-bed identity preservation Six cog roadmap items: - cog-vital-signs (5y): R14 V1 + R15 - cog-fall-detection (5y): R12.1 - cog-bed-occupancy (5y): R12 PABS + R6.2.5 - cog-respiratory-anomaly (10y): temporal R15 breathing - cog-post-discharge (15y): V1/V2/V3 + telemedicine - cog-elderly-care (20y): R10 gait + R15 limb-timing Honest scope: - Synthetic data only; bench validation pending - 8-bed wards may exceed R6.2.5's 4-occupant tested limit - Hospital RF environment harsh - Clinical workflow integration is substantial engineering - FDA/CE regulatory pathway is 6-18 months and 500K-2M per device class Why R16 matters: it confirms the loop's output is ARCHITECTURALLY COMPLETE for clinical deployment. Same primitives that ship empathic appliances ship healthcare. Composition, not research, is the remaining work. Composes with every loop thread (R1, R5, R6, R6.1, R6.2.5, R7, R10, R11, R12, R12.1, R13, R14, R15, R3 + all ADRs 105-109+113). Loop now has 5 exotic vertical sketches: wildlife (R10) / maritime (R11) / empathic appliances (R14) / healthcare (R16) + cross-thread identity/security work. Coordination: ticks/tick-32.md, no PROGRESS.md edit. |
||
|
|
e4f93b1617 |
adr-113: multistatic placement strategy — consolidates 9-tick R6 family into decision matrix (#734)
Amends ADR-029 (RuvSense multistatic). Consolidates the SOTA research
loop's 9-tick R6 family into a single 4-axis decision matrix
(dimension x zone-mode x occupants x cog).
Decision matrix highlights:
- 2D vital-signs cogs: chest-centric, N=5, walls 0.8/1.5 m -> 100%
- 3D vital-signs cogs: chest-centric, N=6, NO ceiling -> 82%
- 2D pose cogs: body, N=5, walls mixed -> 97%
- 3D pose cogs: body, N=7-8, mixed L/M/H -> 65%+
- Person count: body, N=4, walls mixed -> 86%
- Presence only: body, N=3, walls low -> 63%
- Maritime cabin: chest, N=4, low -> 80%+
- Wildlife corridor: linear, N=4, tree-mount -> 70%+
Seven binding rules extracted from R6 family:
1. Ceiling-only mounting fails (R6.2.1)
2. Vertical link diversity wins in 3D (R6.2.1)
3. Anchor heights match target zone heights (R6.2.4)
4. Chest-centric beats body for vital signs (R6.2.3)
5. Multi-subject union is the right target (R6.2.5)
6. N=5 is the consumer recommendation (R6.2.2 + R6.2.5)
7. Avoid placing target zones on LOS line (R6.1)
CLI productisation:
wifi-densepose plan-antennas
--room W H [Z] --target ... --target-mode {body,chest}
--freq-ghz F --n-anchors N --cog NAME
MCP tool:
ruview_placement_recommend(room, targets, cog)
-> {anchors, coverage, rationale}
~360 LOC total for placement-strategy productisation.
Per-cog auto-config (the --cog flag looks up):
- cog-presence: body, 3
- cog-person-count: body, 4
- cog-pose-estimation: body, 5 (2D) / 7 (3D)
- cog-vital-signs / breathing / heart-rate: CHEST, 5/6
- cog-intruder: body, 5
- cog-maritime-watch: chest, 4
- cog-wildlife: linear, 4
The R6 family produced 9 ticks of physics + simulation, each adding
1-2 axes to the placement question. ADR-113 collapses all 9 into a
single decision matrix that a non-physicist installer can use.
Composes:
- R6.2 family (9 ticks) all feed this ADR
- R7 mincut: N >= 4 satisfied for all multi-feature cogs
- R10/R11 wildlife/maritime entries in matrix
- R12 PABS/R12.1: placement coverage = intrusion-detection sensitivity
- R14 V1/V2/V3 all covered
- ADR-029 directly amended
Honest scope:
- Synthetic physics; bench validation pending
- Single room geometry baseline (5x5 + 4x6 m)
- 5 cm pose-tracker noise assumed
- Free-space, no multipath/furniture occlusion
- Greedy + 4-restart search
ADR chain after this tick (loop's 6 new ADRs + 3 existing):
105/106/107/108/109/113 + 100/103/104 = 9 ADRs in the full chain
(privacy + federation + provenance + placement).
Coordination: ticks/tick-31.md, no PROGRESS.md edit.
|
||
|
|
27d911ca6d |
adr-109: Dilithium PQC signatures — provenance side of post-quantum migration (#733)
Sister-ADR to ADR-108. Where ADR-108 closes the confidentiality side (Kyber key exchange), ADR-109 closes the integrity side (Dilithium signatures) of the post-quantum migration. Replaces Ed25519 in ADR-100 cog signing with Dilithium-3 (NIST FIPS 204, ~AES-192 equivalent, CNSA 2.0 default). Migration timeline (matches ADR-108): - Phase 0 (NOW 2026): Ed25519 only - Phase 1 (Q4 2026): Dual-sig (Ed25519 + Dilithium-3), accepts either - Phase 2 (Q2 2027): BOTH required (defence in depth) - Phase 3 (2030+): Pure Dilithium-3 Why now (backdating argument): An adversary who can break Ed25519 in 2035 with quantum computers can backdate signatures on cog binaries to install malicious code retroactively. The provenance chain breaks even for binaries deployed today. Hybrid mode prevents this: forging a 2026 cog signature still requires breaking BOTH Ed25519 AND Dilithium-3. Manifest size: 64 B (Ed25519) + 3293 B (Dilithium-3) = ~4 kB per cog. 50-cog catalogue overhead ~200 kB. Negligible. LOC: +270 on top of ADR-100. Combined chain budget (ADR-105+106+107+108+109): ~1,820 LOC, ~7 weeks. ADR CHAIN (8 ADRs) complete for both confidentiality and integrity at quantum-resistant tier: - ADR-100: cog packaging - ADR-103: cog-person-count - ADR-104: MCP + CLI - ADR-105: within-installation federation - ADR-106: DP-SGD + primitive isolation - ADR-107: cross-installation + secure aggregation - ADR-108: PQC key exchange (Kyber-768) - ADR-109: PQC signatures (Dilithium-3) <-- THIS Future ADRs catalogued: - ADR-110: PQC hardware acceleration on Cognitum-v0 - ADR-111: Owner key rotation policy - ADR-112: Cross-signing with external CA - ADR-113: Multistatic placement strategy (R6 family findings -> ADR-029 amendment) Composes: - R14/R15 privacy + biometric requires provenance integrity - R12 PABS / R12.1: intruder-detection cog must itself be signed - R10/R11 long-deployment cogs most affected by backdating - R7 mincut adversarial assumes the model is trustworthy Honest scope: - Dilithium ~5 years old; hybrid mitigates uncertainty - ESP32-S3 verification ~5-10 ms estimated; needs benchmarking - pqcrypto-dilithium Rust crate dependency - Owner key management = highest-risk operational change - Phase 3 Ed25519 retirement needs future decision Coordination: ticks/tick-30.md, no PROGRESS.md edit. |
||
|
|
50a7c4a645 |
research(R12.1): pose-PABS closed loop — 9.36x intruder lift; R12 arc fully closed (#732)
Closes the deferred item from R12 PABS (tick 19): 'real production
needs pose-aware forward model updating in real-time'. R12.1 implements
the closed loop in synthetic form.
Method: 50-frame walking subject + intruder entering at T=25. Compare
two PABS pipelines:
(a) Fixed-expected (R12 PABS naive)
(b) Pose-updated (R12.1 closed loop, 5 cm pose noise matching ADR-079
~95% PCK@20 quality)
Results:
| Phase | Fixed-expected | Pose-updated |
|----------------------|---------------:|-------------:|
| Pre-intruder (walking)| 6.02 | 0.30 |
| Post-intruder | 7.76 | 2.84 |
| Intruder lift | 1.29x | 9.36x |
Pose updates suppress subject-motion noise by 20x (6.02 -> 0.30),
leaving the intruder as a clean 9.36x spike. False-alarm problem
from R12 PABS RESOLVED.
R12 thread fully closed (3 ticks):
- R12 (tick 5): NEGATIVE SVD eigenshift 0.69x signal/drift
- R12 PABS (19): POSITIVE 1161x intruder detection (static)
- R12.1 (this): CLOSED 9.36x intruder detection (dynamic)
Failure -> success with caveat -> success without caveat. The
multi-tick arc that justifies a long research loop.
Production roadmap (~80 LOC + 30 LOC plumbing):
let pose = pose_tracker.estimate(csi_window)?;
let expected_scene = body_model.from_pose(pose) + room_walls;
let y_predicted = fresnel_forward.simulate(expected_scene);
let pabs = (csi_window - y_predicted).norm_sq() / csi_window.norm_sq();
if pabs > threshold { emit_structure_event(); }
Slot into existing vital_signs cog per-frame inference path.
Composes:
- R6.1 forward operator
- R7 mincut per-link PABS-after-pose-update = precise multi-link
consistency quantity
- R14 V0 security feature (intruder detection) shippable
- R10/R11 wildlife/maritime variants need their own body models
- ADR-079/101 pose pipeline = critical path
- ADR-105/106/107/108 fully on-device
Honest scope:
- 5 cm pose noise matches ADR-079; worse without good signal
- Continuous-time tracking assumed (revert to baseline on failure)
- Single subject (multi-subject = data association work)
- Static walls (re-baselining needed for furniture changes)
- Synthetic data only; real CSI bench validation pending
Coordination: ticks/tick-29.md, no PROGRESS.md edit.
After this tick, all research-loop work substantively complete:
- 13 research threads (R1, R3, R5-R15)
- 4 ADRs in privacy chain (105, 106, 107, 108)
- 3 negative-result categories
- 2 explicit self-corrections
- 3 honest-scope findings
- 9-tick R6 placement family
- 3-tick R3 cross-room re-ID arc
- 3-tick R12 structure detection arc
|
||
|
|
40e5a4d6f2 |
adr-108: Kyber post-quantum key exchange for cross-installation federation (#731)
Closes the quantum-resistance gap explicitly deferred from ADR-107. Final ADR in the privacy + federation chain. Replaces DH key exchange in ADR-107's Layer 4 secure aggregation with Kyber-768 KEM (NIST FIPS 203, CNSA 2.0 default). Migration timeline: - Phase 0 (NOW 2026): Classical X25519 (ADR-107 default) - Phase 1 (2026-Q4 -> 2027): Kyber-768 opt-in via --enable-pqc flag - Phase 2 (2027-Q2 -> 2028): Hybrid (X25519 + Kyber-768) becomes default - Phase 3 (2030+): Pure Kyber-768 (classical retired) Why hybrid for Phase 2 (belt-and-braces): - Protects against future Kyber breaks (Kyber is ~5 years old) - Protects against classical breaks (X25519 backup) - Protects against implementation bugs in either primitive - Cost: ~3 kB/round/installation extra (negligible) Why now (record-now-decrypt-later): Adversaries can record federated updates today and decrypt them in 2035 when quantum capabilities arrive. Without ADR-108, the (epsilon, delta) guarantees of ADR-106 silently expire when quantum computers arrive. Proactive migration is cheap insurance. Why Kyber-768 (not 512 or 1024): - NIST FIPS 203 (2024); ~AES-192 equivalent - CNSA 2.0 recommended default - Used by Cloudflare, Google, AWS in 2024-2026 rollouts - Public key 1184 B, ciphertext 1088 B, secret 32 B - 512 lacks CNSA 2.0 sign-off; 1024 doubles bandwidth without benefit LOC: +220 on top of ADR-107. Total federation budget ADR-105+106+107+108: ~1,550 LOC. Threat model: 8 threats, every row has mitigation. Hybrid mode is the belt-and-braces against both Kyber breaks AND classical breaks. ADR CHAIN COMPLETE: 7 ADRs in the privacy + federation chain: ADR-100 (cog packaging) -> ADR-103 (cog example) -> ADR-104 (MCP/CLI) -> ADR-105 (within-installation federation) -> ADR-106 (DP + isolation) -> ADR-107 (cross-installation + SA) -> ADR-108 (PQC key exchange). No remaining unspecified privacy gap at any threat horizon (classical or quantum). Future ADRs catalogued: - ADR-109: PQC signatures (Dilithium replaces Ed25519 in ADR-100) - ADR-110: PQC hardware acceleration on Cognitum-v0 - ADR-111: PQC for cog-store distribution Composes: - R3 / R14 / R15 / R7 / R12 PABS: privacy chain intact through quantum transition - R10 / R11 (long-deployment): benefit most from forward secrecy as data ages Honest scope: - Kyber ~5 years old; hybrid mitigates uncertainty - 'When do we need this?' uncertain (2030 aggressive / 2050+ conservative) - ESP32-S3 timing ~10 ms per handshake estimated negligible; needs measurement - Phase 3 retirement of classical needs future decision Coordination: ticks/tick-28.md, no PROGRESS.md edit. |
||
|
|
4e6ef76294 |
research(R6.2.5): multi-subject occupancy union — N=5 hits 100% for 4 occupants; R6 family complete (#730)
Extends R6.2.3 chest-centric placement to union of chest envelopes
across multiple occupants. Practical question: does coverage degrade
gracefully as occupant count grows?
Result: 2D chest-centric + N=5 + multi-subject union = 100% coverage
for households of 1-4 occupants. N=4 knee returns.
| Scenario | # zones | Cov @ N=5 |
|------------|--------:|----------:|
| 1 occupant | 1 | 100% |
| 2 occupants| 2 | 100% |
| 3 occupants| 3 | 100% |
| 4 occupants| 4 | 100% |
4-occupant saturation: N=4 = 99.0% (+26.1 pp marginal), N=5 = 100%,
N=6+ saturated. Knee at N=4 even for 4 occupants.
Cross-eval: single-subject placement gets 70.6% on 4 zones; multi-
subject-optimised gets 100%. +29.4 pp gain from multi-subject
optimisation. CLI MUST accept multiple --target args and compute union.
Why N=4 knee returns: each chest zone is 40x40 cm, fits inside one
Fresnel ellipsoid (~40 cm wide at midpoint of 5 m link). N=4 anchors
give 6 pairwise links, enough to cover 4 disjoint chest zones without
much waste. Chest-centric multi-subject is the SWEET SPOT for Fresnel
envelope geometry.
R6 family complete (9 ticks: R6, R6.1, R6.2, R6.2.1, R6.2.2, R6.2.2.1,
R6.2.3, R6.2.4, R6.2.5). Family's ship recipe:
- 2D chest-centric + multi-subject + N=5 = 100% coverage
Productisation CLI spec (50 LOC over original R6.2):
wifi-densepose plan-antennas
--room W H [Z] # 2D or 3D
--target NAME X Y W H [DX DY DZ] # repeatable
--target-mode {body, chest} # R6.2.3
--freq-ghz F
--n-anchors N # auto-saturation if omitted
--restarts K
Honest scope: 2D only (3D multi-subject = mechanical extension), static
positions, single 5x5 m geometry, greedy with 4 restarts, 4 occupants
max tested.
Composes:
- R6.2 / R6.2.3 direct extension (single -> multi)
- R6.2.2 / R6.2.4 same saturation behaviour
- R14 V1/V2/V3 in households of 2-4 use this recipe
- R3 / ADR-024 per-subject identity + multi-subject placement
- ADR-105/106/107 federation orthogonal
- R12 PABS multi-subject coverage = multi-subject intrusion detection
Coordination: ticks/tick-27.md, no PROGRESS.md edit.
|
||
|
|
4183ef651f |
research(R3.2): embedding-level physics-informed env — structural validation + AETHER dependency (#729)
Implements R3.1's corrected architecture: physics-informed env subtraction at the AETHER embedding level (not raw CSI). Tests whether moving the operation closes the cross-room gap that R3.1 NEGATIVE surfaced. Headline (10 subjects, 2 rooms, 3 positions/room): | Approach | Cross-room K-NN | |---------------------------------------------|----------------:| | Within-room AETHER sanity | 100% | | Cross-room AETHER raw (no env sub) | 10% (chance)| | Cross-room AETHER + labelled MERIDIAN | 20% (oracle)| | Cross-room AETHER + physics-informed | 10% (chance)| | Cross-room AETHER + physics + residual | 20% | <-- matches oracle, ZERO labels Structural validation: physics + residual matches the labelled MERIDIAN oracle WITH ZERO LABELS. The architecturally-correct approach works. But neither approach reaches 80%+. Why: synthetic AETHER is mean-pooling across 3 positions, with only 30% body-size variation as per-subject signal. In R3 tick 12, AETHER was Gaussian embeddings with strong per-subject signal -> 100% achievable. Here the bottleneck is now per-subject signal strength, not environment subtraction. R3.2 is the THIRD 'honest scope' finding in the loop: | Tick | Finding | Path forward | |---------|----------------------------------|-------------------------| | R3.1 | physics-informed at raw fails | embedding level (R3.2) | | R6.2.2.1| 2D N=5 knee doesn't hold in 3D | chest zones (R6.2.4) | | R3.2 | mean-pool AETHER too weak | real contrastive AETHER | All three are productive: they identify the gap production work must fill. R3.2 confirms ADR-024 (AETHER) is on the critical path for cross-room re-ID. Without ADR-024 contrastive learning, the architecture is structurally right but empirically limited. Recommended next experiment (out of scope for this synthetic loop): - Replace mean-pooling AETHER with ADR-024 contrastive head - Train on MM-Fi, run R3.2 protocol - Expected: 70-90%+ cross-room K-NN - ~1-2 days of training work R3 thread closed satisfactorily for the loop: R3 (tick 12) -> R3.1 NEGATIVE -> R3.2 STRUCTURALLY VALIDATED. Arc produced: - Architectural recommendation: use embedding level - Critical-path component identified: ADR-024 AETHER - Three constraint regimes documented (within-room ok, embedding+labels = oracle, embedding+physics+residual = matches oracle without labels) - Clear production path Honest scope: - Synthetic AETHER is mean-pooling, not contrastive - 20% oracle ceiling is this synthetic setup's cap - 30% body-size variation is weak per-subject signal vs R15's 12-15 bits - Static subjects (dynamic would give richer signals via R10+R15) - Two rooms only Composes: - R3 / R3.1 / R3.2 = full arc - R6 / R6.1 forward operator unchanged - R6.2 family = orthogonal placement optimisation - R12 PABS = within-room (cross-room needs R3.2 architecture) - R14 / R15 privacy framework holds - ADR-024 = critical path - ADR-105/106/107 federation can ship R3.2 outputs Coordination: ticks/tick-26.md, no PROGRESS.md edit. |
||
|
|
2e89fe61ef |
research(R6.2.4): 3D chest-centric N-anchor — validates R6.2.2.1 prediction with refinement (#728)
Composes R6.2.2.1 (3D N-anchor) with R6.2.3 (chest-centric zones).
Tests R6.2.2.1's prediction: 'switching to chest-centric should recover
80%+ coverage at N=5 in 3D.'
Result: 3D chest-centric N=5 = 76.8% (close to but below 80%);
3D chest-centric N=6 = 81.6% (knee shifts one anchor higher).
4-way comparison at N=5:
- R6.2.2 (2D body): 96.8%
- R6.2.3 (2D chest): 82.4%
- R6.2.2.1 (3D body): 49.4%
- R6.2.4 (3D chest): 76.8%
3D chest recovers 27 pp of the 47 pp gap R6.2.2.1 surfaced. Most of
the architectural fix works.
COUNTER-FINDING: no ceiling anchors selected for chest-centric zones.
Greedy picks 100% low (0.8 m) + mid (1.5 m). R6.2.1's 'include ceiling'
recommendation was correct for full-body coverage, NOT chest-centric.
Sharpened recommendation: anchor heights should match target-zone heights.
- Bed-only (z=0.3-0.6): Low only
- Chair sitting (z=0.5-1.0): Low + mid
- Standing chest (z=1.2-1.5): Mid only
- Mixed chest (z=0.3-1.5): Low + mid (NO ceiling)
- Full body (z=0.3-1.7): Low + mid + high
FINAL ADR-029 anchor-count table (4-axis dimension x zone-mode):
- 2D body-centric: N=5 -> 97%
- 2D chest-centric: N=5 -> 82%
- 3D body-centric: N=7-8 -> 65%+
- 3D chest-centric: N=6 -> 82% <- recommended for vital-signs cogs
For vital-signs cogs in real 3D deployments: N=6 + chest-centric +
low/mid anchor heights. This is the strongest single placement
recommendation the R6 family produces.
R6 family substantively complete after this tick (8 ticks total):
R6, R6.1, R6.2, R6.2.1, R6.2.2, R6.2.2.1, R6.2.3, R6.2.4.
Second self-corrective tick of the loop: R6.2.2.1 predicted 80%; actual
is 76.8%. Self-correction documented (prediction was 3.2 pp optimistic,
knee shifts to N=6). Integrity pattern continues.
Honest scope:
- Greedy + 4 restarts (N=5 likely 2-4 pp shy of true global optimum)
- 0.1 m grid, single 5x5x2.5 geometry
- Three chest zones; multi-subject = future
- R6.2.1's ceiling rec was for full-body, not invalidated -- refined
Composes:
- R6.2.1 / R6.2.2 / R6.2.2.1 (same physics, different zones)
- R6.2.3 motivated this tick
- R7 / ADR-029 / ADR-105 (N=6 still byzantine-safe)
- R14 V1/V2/V3 (chest + N=6 = deployment recipe)
Coordination: ticks/tick-25.md, no PROGRESS.md edit.
|
||
|
|
df13dcf597 |
research(R6.2.2.1): 3D N-anchor multistatic — 2D knee disappears; revises R6.2.2 down (#727)
Composes R6.2.2 (2D N-anchor knee at N=5) with R6.2.1 (3D ellipsoids, ceiling-only fails). The composed 3D result shows the 2D-derived knee DOES NOT hold in 3D. 3D saturation curve (5x5x2.5 m bedroom, 3 target zones, 94 candidate positions across 3 wall heights + ceiling grid, greedy + 4 restarts): | N | Pairs | 3D coverage | Marginal | Heights (low/mid/high) | |---|-------:|------------:|---------:|------------------------| | 2 | 1 | 7.7% | +7.7 pp | 1/1/0 | | 3 | 3 | 28.1% | +20.4 pp | 1/2/0 | | 4 | 6 | 40.6% | +12.5 pp | 3/0/1 | | 5 | 10 | 49.4% | +8.8 pp | 4/0/1 | | 6 | 15 | 59.1% | +9.8 pp | 4/1/1 | | 7 | 21 | 65.1% | +6.0 pp | 5/1/1 | Comparison vs R6.2.2 2D: - 2D N=5 = 96.8% (clean knee) - 3D N=5 = 49.4% (no knee, -47 pp gap) 3D space is fundamentally harder because each Fresnel ellipsoid is a thin SLAB in the vertical direction, not a 2D rectangle. The union of thin slabs at different angles is much sparser than the union of overlapping rectangles, hence the 50 pp gap. Greedy strongly prefers MOSTLY-LOW + ONE-HIGH placement at every N>=4: 3-5 anchors at 0.8m + 0-1 at 1.5m + 1 ceiling. Confirms R6.2.1's diagonal-in-z winning strategy. ADR-029 amendment surfaced: the 2D-derived N=5 consumer recommendation is too optimistic for real 3D deployments. Two responses: 1. Bump N to 7-8 for 65%+ 3D coverage 2. Use chest-centric zones (R6.2.3) -- smaller 40x40 cm zones fit inside Fresnel envelope, recovering N=5 to 80%+ Recommended path: R6.2.3 + R6.2.2 N=5 = realistic 80%+ 3D coverage at ADR-029 default N. Architectural lever that aligns 2D and 3D physics. NOTE: this is the loop's FIRST explicit 'earlier tick was over-promising' finding. Previous 23 ticks built constructively. R6.2.2.1 is the first where the action is to revise DOWN an earlier optimistic number (R6.2.2's 97% becomes 49% in honest 3D). Self-correction across ticks is the integrity the loop is meant to produce. Composes with: - R6.2 / R6.2.1 / R6.2.2: natural composition - R6.2.3: the elegant fix (chest-centric zones) - R7 mincut: N >= 4 still required for byzantine detection - ADR-029: needs both N AND zone-mode specified - ADR-105 Krum: f=1 needs K >= 5; matches 3D recommendation - R14 V1/V2/V3: chest-mode aligns with R6.2.3 = tractable 3D Honest scope: greedy approximate, 0.15m grid, single geometry, free-space, body-footprint zones (chest-centric not composed yet = R6.2.4 follow-up). Coordination: ticks/tick-24.md, no PROGRESS.md edit. |
||
|
|
8b850d8b2a |
research(R6.2.3): chest-centric placement — +26.9 pp coverage gain for vital-signs cogs (#726)
Direct follow-up from R6.1 (chest contributes 27.6% of CSI energy, 5x per-limb value, limbs are confound not signal). R6.2.3 re-runs R6.2's placement search with chest-only target zones (40x40 cm patches at expected chest positions) vs body-footprint zones (R6.2's default full-area definition). Headline result: | Configuration | Coverage | Placement | |----------------------------|---------:|----------------------------| | Body-centric (R6.2 default)| 49.3% | (4.25,0)-(0,3.25), 5.35 m | | CHEST-CENTRIC (R6.2.3 new) | 82.4% | (2.0,0)-(4.5,5), 5.59 m | Cross-eval: - Body-optimal on chest zones: 55.5% - Chest-targeting GAIN on chest: +26.9 pp - Chest-optimal on body zones: 40.3% (-9.0 pp loss) The two strategies are genuinely different. Same engine, different zones. Per-cog deployment recommendation surfaced: - --target-mode=body (default): cog-person-count, cog-pose, cog-presence - --target-mode=chest (new): cog-vital-signs, cog-breathing, cog-HR - --target-mode=extremity (future): gesture detection ~20 LOC change to R6.2 CLI. R14 vertical-specific: - V1 stress-responsive lighting: chest mode - V2 adaptive HVAC (presence+breathing): mixed - V3 attention-respecting conversation: chest mode R6.2.3 surfaces a per-cog config that empathic-appliance products need at install time. Why placements differ: when target ~ envelope width, envelope can cover it entirely; when target >> envelope, placement must compromise. 40 cm Fresnel envelope @ 5 m link comfortably covers 40 cm chest patches but must spread to cover 3 m^2 bed. Composes: - R6.1 motivated this tick - R6.2 / R6.2.1 / R6.2.2 -- orthogonal extensions - R14 V1/V3 should use chest mode - R12 PABS improves body-position-detection scenarios Honest scope: - Chest positions approximated - 2D still (3D chest-centric = R6.2.3.1 follow-up) - Single subject (multi-subject = union of chest envelopes) - Per-cog zone schema is deployment-time Coordination: ticks/tick-23.md, no PROGRESS.md edit. |
||
|
|
9b5e317f99 |
adr-107: cross-installation federation with secure aggregation — privacy chain closes (#725)
Closes the cross-installation federation work explicitly deferred from ADR-105 + ADR-106. Direct extension of both. Five-layer defence (extends ADR-106's three): 1-3 (ADR-106): Primitive isolation + grad clipping + DP noise 4 NEW: Secure Aggregation (Bonawitz 2016) -- aggregator sees only sum 5 NEW: Per-installation embedding-space rotation key -- cross-install re-ID prevented Counter-intuitive privacy win: cross-installation amplification IMPROVES privacy. With N=10 installations each at sigma_local=1.0: - Per-installation epsilon (50 rounds): 2.5 - Cross-installation effective sigma = sqrt(N) * sigma_local = 3.16 - Cross-installation epsilon (50 rounds): ~1.5 <-- STRONGER Cross-installation federation actually improves privacy through the amplification effect, as long as the crypto protocol is implemented correctly. Bandwidth: ~2 MB/install/round, monthly ~70-200 MB/install (within+cross). <0.1% of typical home broadband. Implementation budget: - ADR-105 baseline: 500 LOC - ADR-106 layers: +300 LOC - ADR-107 SA layer: +530 LOC - TOTAL ruview-fed: ~1,330 LOC, ~6 weeks The privacy chain closes: 1. R6/R6.1 physics forward model 2. R3 embedding-space re-ID 3. R14 ethical opt-in / on-device / override 4. R15 biometric primitive catalogue 5. ADR-105 within-installation federation 6. ADR-106 DP-SGD + primitive isolation 7. ADR-107 cross-installation + secure aggregation Every layer has a formal guarantee, implementation path, and honest scope. No remaining unspecified privacy gap. Cross-installation training can ship without violating any constraint surfaced by the research loop. Threat model: 8 threats, every row has a mitigation layer. - Compromised aggregator views deltas -> Layer 4 SA - Cross-installation re-ID -> Layer 5 rotation - Sybil -> Layer 4 dropout + Krum + N >= 5 - Quantum-resistant: out-of-scope ADR-108 (Kyber substitution) Honest scope: - Cross-org PKI = operational, not architectural - Krum+SA composition proof is non-trivial; reference implementations needed before production - sqrt(N) amplification assumes installation independence - Drop-out reconstruction has known attack surfaces (Bonawitz §4.3) - Per-cog suitability varies (cog-wildlife yes, cog-maritime-watch no) Composes: - R3+R15 enforcement now technical, not just policy - R7 mincut extends to cross-installation adversarial detection - R12 PABS works at any installation in local rotated embedding space - R10/R11 cogs benefit asymmetrically Coordination: ticks/tick-22.md, no PROGRESS.md edit. |
||
|
|
39d18d1c99 |
research(R6.2.1): 3D antenna placement — ceiling-only gives 0% coverage; mixed-height wins (#724)
Extends R6.2 from 2D ellipse to 3D ellipsoid + 3D target zones (bed at z=0.3-0.6, chair at z=0.5-1.2, standing at z=1.0-1.7 in a 5x5x2.5 m room). Counter-intuitive headline: | Strategy | Coverage | |-------------------------------------------|---------:| | Desk-height (0.8 m walls) | 22.2% | | Wall-mount (1.5 m walls) | 17.4% | | Ceiling-only (2.5 m grid) | 0.0% | <-- FAILS | Mixed walls + ceiling | 25.7% | <-- BEST Ceiling-only fails because both antennas at 2.5 m create a Fresnel ellipsoid sitting AT ceiling height (2.1-2.9 m vertically). Target zones at 0.3-1.7 m are below the envelope by 0.4-2.0 m. The 39 cm transverse radius is symmetric around LOS, so a flat horizontal link at any height misses targets at any OTHER height. This is the 3D version of R6.1's on-LOS-degeneracy finding. A horizontal link at any single height has its envelope concentrated at that height. Why mixed wins: best placement is Tx (5.0, 4.0, 0.8) + Rx (0.0, 4.0, 1.5). The diagonal-in-z link tilts the ellipsoid through multiple elevations. Covers chair AND standing AND bed simultaneously. Vertical link diversity is the 3D insight 2D analysis missed. Installation-guide updates: - Single pair: one low (0.8 m) + one high (1.5 m), opposite walls - 4-anchor: 2x low corners + 2x high opposite corners - 5-anchor knee: mix 0.8 / 1.5 / one ceiling - Bed-only: both LOW - Standing-only: both HIGH - NEVER: both ceiling without a low anchor Coverage numbers are lower than R6.2's 2D 51% because 3D volumetric coverage is inherently lower than 2D area coverage -- honest 3D physics. Composes: - R6.2 (2D) -- incomplete; height matters as much as horizontal - R6.2.2 (N-anchor) -- N=5 knee should distribute across heights - R6.1 (multi-scatterer) -- needs 3D body model for proper composition - R14 V1/V2/V3 -- each vertical needs height-recipe - ADR-029 -- placement is (x, y, z), not (x, y) - R12 PABS -- detects intruders standing/sitting/lying with mixed heights Honest scope: 3-zone discrete approximation, single-pair only, no furniture occlusion, 0.1 m resolution, greedy search. Coordination: ticks/tick-21.md, no PROGRESS.md edit. |
||
|
|
3d3d54d523 |
research(R3.1): physics-informed env prediction at raw-CSI level — NEGATIVE (architecture-error) (#723)
R3's 'next research lever' was: use R6.1 forward operator + room map to predict env_sig without labelled examples in the new room. R6.1 shipped (tick 18); this tick implements the prediction. Result: at raw-CSI level, all three approaches collapse to chance. | Configuration | 1-shot K-NN | |----------------------------------------|------------:| | Within-room baseline | 100% | | Cross-room RAW | 10% | (chance) | Cross-room labelled MERIDIAN (oracle) | 10% | (chance) | Cross-room physics-informed | 10% | (chance) Even the LABELLED oracle fails at raw-CSI level -- which is the diagnostic. The cross-room problem at raw-CSI level is fundamentally harder than at the AETHER embedding level (R3 tick 12) because position-dependent within-room variance dominates per-subject signature when invariantisation hasn't been done. Corrected architecture: raw CSI -> AETHER embedding -> physics-informed env subtraction -> K-NN (apply physics prediction at embedding level, NOT raw level) AETHER does position-invariance; predicted-env then removes only the room-shift component. THIS IS THE LOOP'S THIRD KIND OF NEGATIVE RESULT: 1. Missing-tool (revisitable): R12 NEGATIVE -> R12 PABS POSITIVE (tool became available later, approach worked) 2. Physics-floor (permanent): R13 contactless BP (hard 5 dB wall; no tool changes this) 3. Architecture-error (correctable): R3.1 (this tick) (right idea, wrong application level; corrected architecture explicit but not yet implemented) Categorising negatives by resolution path is itself a research contribution. Surfaces an architecture error BEFORE implementation. A future engineer attempting 'subtract predicted env from raw CSI' would waste weeks; R3.1 documents the failure path. Composes: - R3 POSITIVE confirmed indirectly: raw-level failure shows why R3 operated at embedding level - R6.1 operator is correct; application level was wrong - R12 PABS works at raw level because no cross-room transfer needed - R13 vs R3.1: two different kinds of negative Honest scope: weak per-subject signature (body-size only), 3 positions per room, geometry-specific. Richer biometric input or per-position- clustering might partially rescue raw-level but defeats the no-label spirit. Coordination: ticks/tick-20.md, no PROGRESS.md edit. |
||
|
|
9cd1b8ce2a |
research(R12 PABS): NEGATIVE -> POSITIVE — 1161x detection lift via R6.1 forward model (#722)
R12 (tick 5) was a NEGATIVE result: naive SVD-spectrum cosine distance detected structure changes at 0.69x the natural drift floor (= undetectable). R12 explicitly identified the revision: 'PABS over Fresnel basis'. R6.1 (tick 18) shipped the multi-scatterer Fresnel forward operator. This tick implements PABS on top of it. PABS = ||y_observed - y_predicted||^2 / ||y_observed||^2 Benchmark (5 m link, 2.4 GHz, subject + 4 wall reflectors expected): | Scenario | PABS / drift | SVD (R12) / drift | |--------------------------------|---------------:|------------------:| | Empty room (subject missing) | 7,362x | 65x | | Subject as expected (sanity) | 0x | 0x | | +1 new furniture | 84x | 11x | | +1 unexpected human | 1,161x | 11x | | Subject moved 10 cm | 21,966x | 90x | | Natural drift (5% wall shift) | 1x | 1x | PABS detects unexpected human at 1161x natural drift; R12 SVD detected at 11x. ~100x lift purely from physics-grounded prediction vs naive statistical eigenshift. R12 NEGATIVE -> POSITIVE. The meta-lesson: a research loop that catalogues NEGATIVE results creates a backlog of revisitable work that pays off when later tools become available. R12 -> R12 PABS is the worked example. R13 cannot be similarly revisited -- its 5 dB shortfall is a hard physics floor, not a missing model. The subject-moved-10cm caveat: PABS detects ANY mismatch between expected and observed scene. Real production PABS needs a pose-aware forward model that updates from pose_tracker.rs in real-time. The actual detection signal is PABS-after-pose-update. ~50-100 LOC Rust glue, catalogued as R12.1 follow-up. Composes: - R6.1 unblocked this implementation - R7 gets precise per-link consistency: residual small on all links = no structure; spike on one = local structure OR compromised link; mincut disambiguates - R11 enables maritime container-tamper / hatch-seal apps - R14 gets V0 security feature (intruder detection w/o biometric storage) - ADR-029 needs to reference PABS as structure-detection primitive - R10 PABS-vs-canopy works if forest modelled or learned Honest scope: - Pose-PABS closed loop not yet built - Synthetic data only; real-world drift floor needs measurement - Population-prior body; per-subject would tighten residual - Single time-frame; real pipeline needs temporal averaging Coordination: ticks/tick-19.md, no PROGRESS.md edit. |
||
|
|
bac6962689 |
research(R6.1): multi-scatterer Fresnel — discovers 4.7 dB penalty matching R13's 5-dB shortfall (#721)
Extends R6's point-scatterer to distributed-body model (6 scatterers: head + chest + 2 arms + 2 legs). Combined CSI = coherent sum of per-body-part contributions. Headline finding: 5 m link, 2.4 GHz, subject 25 cm off LOS, breathing at 0.25 Hz with 8 mm chest amplitude: | Configuration | Breathing SNR (best subcarrier) | |----------------------------------------|--------------------------------:| | Single-scatterer ideal (R6) | +23.7 dB | | Multi-scatterer realistic (R6.1) | +19.0 dB | | MULTI-SCATTERER PENALTY | +4.7 dB | This 4.7 dB penalty matches R13's 5-dB-shortfall finding to within 0.3 dB. R13 NEGATIVE concluded that pulse-contour recovery needs +25 dB SNR, only +20 dB is available. R6.1 says the 5-dB gap has a physical origin: static body parts add coherent-sum confusion that doesn't exist in the idealised single-scatterer model. The three threads now form a coherent physics story: - R6 = bound (idealised single-scatterer = +23.7 dB) - R6.1 = floor (realistic 6-scatterer = +19.0 dB) - R13 = failure (contour needs +25 dB, gets +20 dB) Pulse-contour recovery is bounded below by what R6.1 leaves achievable, which is 4.7 dB worse than R6's idealised limit, enough to make R13's contour recovery infeasible. Per-body-part contribution: chest = 27.6% of CSI energy (5x per-limb reflectivity). The chest IS the breathing signal; limbs are confound. Architectural implications: - Chest-centric placement targeting (R6.2.3 motivated) - Mask limbs in vital_signs pipeline (use pose pipeline ADR-079/101) - R14 V3 rescope to rate-only (no contour-shape recovery) - R12 PABS revision unblocked: R6.1 is the explicit A(voxel) operator Surprise finding: on-LOS placement (y=0) is degenerate -- path delta is 2nd-order in offset for on-LOS scatterers, so breathing barely changes path length. Real installations need subject OFF the LOS line. The R6.2 placement search should respect this. Honest scope: - 6 scatterers is 1st-order; 50-100 voxel body would refine - Reflectivity ratios are guesses (RCS measurements would refine) - Static body assumption (limbs do micro-move during breathing) - 2D top-down, no multipath (model general enough to include them) Composes: - R5: subcarrier selection picks reliable, not high-SNR - R6: per-scatterer building block - R6.2.x: chest-centric placement - R7: residual-vs-forward-model = tighter adversarial detection - R12 NEGATIVE: PABS A operator unblocked - R13 NEGATIVE: 5-dB gap has physical origin - R14 V3: needs rescope Coordination: ticks/tick-18.md, no PROGRESS.md edit. |
||
|
|
065521dc9e |
research(R6.2.2): N-anchor multistatic placement saturation — practical knee at N=5 (#720)
Extends R6.2 from single-pair to N-anchor placement search via union of all C(N,2) pairwise Fresnel ellipses. Greedy + K=8 random restarts. Saturation curve on 5x5 m bedroom (3 target zones: bed + chair + desk, 40 wall-candidates, 434 grid points, 2.4 GHz): | N | Pairs | Coverage | Marginal | |---|------:|---------:|---------:| | 2 | 1 | 35.7% | +35.7 pp | | 3 | 3 | 63.4% | +27.6 pp | | 4 | 6 | 86.2% | +22.8 pp | | 5 | 10 | 96.8% | +10.6 pp | <- knee | 6 | 15 | 100.0% | +3.2 pp | | 7 | 21 | 100.0% | +0.0 pp | Practical knee at N=5. Past this, diminishing returns. Three regimes: - Single-feature (presence): 2-3 anchors (36-63%) - Multi-feature (pose+vitals+count): 4-5 anchors (86-97%) - Mission-critical (medical): 6 anchors (100%) - Beyond 6: wasted Cost-optimisation: Cognitum Seed BOM is 9-15 USD. The 4->5 anchor jump buys +10.6 pp coverage; the 5->6 jump buys only +3.2 pp for the same cost. Consumer recommendation: 5 anchors. Commercial / medical: 6. Convenient numerology: N=5 simultaneously satisfies three other constraints: 1. R7 multi-link mincut: needs N >= 4 for single-anchor-compromise detection 2. ADR-105 federation Krum: f=1 byzantine tolerance requires K >= 5 3. R6.2.2 coverage knee: 5 hits practical saturation These all bound by similar inverse-square-of-geometry scaling, so the alignment is not coincidental. ADR-029 (multistatic) didn't specify anchor counts; R6.2.2 fills that gap with a benchmark-backed number. Honest scope: single 5x5m geometry tested, 2D still (R6.2.1 = 3D not yet built), free-space (multipath adds +5-15% beyond Fresnel), greedy with 8 restarts approximates global optimum to 1-2 pp. Composes with: - R6/R6.2 (direct generalisation) - R7 (mincut needs N>=4) - R1 (placement x precision = full geometry budget) - ADR-029 (architectural recommendation now has a number) - ADR-105 (Krum bound matches) - R10, R11, R14 (other geometries / use cases) Coordination: ticks/tick-17.md, no PROGRESS.md edit. |
||
|
|
719875ea1d |
research(R6.2): Fresnel-aware antenna placement — 93x sensing-coverage lift from physics alone (#719)
First deferred follow-up from R6. Productises R6's Fresnel forward model into a 2D placement-search CLI: given a room + target occupancy zones, recommend Tx/Rx positions that maximise first-Fresnel coverage. Benchmark on 5x5 m bedroom (bed 3 m^2 + chair 0.64 m^2, 2900 pairs evaluated at 2.4 GHz): - OPTIMAL: 51.1% coverage (Tx 1.25,0; Rx 4.75,5; diagonal 6.10 m link) - MEDIAN: 0.5% coverage - WORST: 0.0% coverage - 93x improvement, median to optimal Counter-intuitive insight: longer links cover MORE space. Fresnel envelope width = sqrt(d * lambda) / 2 grows with link length, so the 6.10 m diagonal beats wall-parallel 5.00 m links. Up to the R10 link-budget gate. Per-cog deployment recommendations: - cog-person-count: diagonal across longest axis - cog-pose: zone inside ~50% midpoint envelope - AETHER re-ID: Tx near doorway, Rx diagonal - cog-maritime-watch: vertical diagonal through cabin - cog-wildlife (future): Tx/Rx opposite trees, threading clearing midline Improvements come from physics, not algorithms - no model retraining needed. Existing customers can re-mount seeds today for 10-100x better sensing. Honest scope: 2D approximation, free-space, rectangular zones, single-pair only, perimeter-only candidates, no link-budget gate. CLI shape ready for productisation as 'wifi-densepose plan-antennas'. Also surfaces as a deferred MCP tool 'ruview_placement_recommend'. Composes with: - R6 (direct 2D extension) - R1 (placement x precision = full geometry budget) - R10 (sets the link-budget gate this ignores) - R11 (same recipe in steel cabins) - R14 (determines whether V1/V2/V3 see the right occupant) - ADR-105 (better placement = faster epsilon convergence) Next R6.2 follow-ups catalogued: R6.2.1 (3D), R6.2.2 (N-anchor union), R6.2.3 (pose-trajectory target zones). Coordination: ticks/tick-16.md, no PROGRESS.md edit. |
||
|
|
28d97e8f6a |
adr-106: differential privacy + biometric primitive isolation for federation (#718)
Direct extension of ADR-105. Closes both items deferred from ADR-105:
(1) member-inference defence, (2) biometric primitive isolation
enforcement.
Three-layer defence:
1. PRIMITIVE ISOLATION (R15 binding) -- API-level tagging of on-device-
only tensors. Compile-time error when ✅ tagged tensors are passed
to submit_delta().
2. GRADIENT CLIPPING (Abadi 2016) -- per-sample L2 norm <= C (default
C=1.0) before delta computation.
3. GAUSSIAN NOISE (DP-SGD) -- N(0, sigma^2*C^2*I) added to aggregated
LoRA delta before transmission.
Privacy budget via Moments Accountant (delta=1e-5):
- Conservative (medical-grade): sigma=1.5, 50 rounds, epsilon=2.0
- Standard (typical RuView): sigma=1.0, 100 rounds, epsilon=5.0
- Lenient: sigma=0.5, 100 rounds, epsilon=8.0
On-device-only primitive list (R15-binding):
- Raw CSI window
- Gait stride frequency
- Breathing rate (per-subject)
- HRV rate signature
- RCS frequency response curve
- Limb timing vector
- Per-subject embedding centroid
Implementation budget: +300 LOC on top of ADR-105's 500 LOC = total
~800 LOC ruview-fed crate. 3-week effort estimate.
Composes:
- R3: Layer 1 blocks per-subject embedding centroid transmission
- R7: mincut compatible with DP-noised deltas (operates on noised graph)
- R12/R13 negative results: informed the noise-vs-structure-detection
design choice (treat adversarial deltas as outliers from noisy
distribution, not structural-detection problem)
- R14: privacy framework now has formal (epsilon, delta) backing
- R15: requirements basis = on-device-only primitive list made executable
- ADR-105: DP-SGD slots into step 4 of federation protocol
Closes the privacy story: R3 + R14 + R15 + ADR-105 + ADR-106 = complete
chain from physics (R6) -> embeddings (R3) -> personalised features (R14)
-> trained how (ADR-105) -> defended how (R7) -> privacy-bounded how
(ADR-106).
Honest scope:
- sigma values are recommendations, not measurements (per-cog tuning needed)
- (epsilon, delta)-DP is worst-case bound; auxiliary info changes practical leakage
- Moments Accountant is conservative
- Subject-level DP not formalised (household of 4 = K=4 subjects)
- Side-channel timing leaks out of scope (future ADR)
Explicitly deferred:
- ADR-107: cross-installation federation w/ secure aggregation
Coordination: ticks/tick-15.md, no PROGRESS.md edit.
|
||
|
|
50029d6eb2 |
research(R15): RF biometric primitives — 5 environment-invariant features with quantified discriminability (#717)
Catalogues 5 biometric primitives in CSI that survive cross-environment transfer by physical construction (not just statistical learning), with quantified discriminability: | Primitive | Bits | Invariance | |------------------------------------|-----:|------------| | Gait stride frequency | 5 | HIGH | | Breathing rate + envelope | 5 | HIGH | | HRV (rate-level only) | 4 | HIGH at rate, LOW at contour | | Body-size RCS frequency response | 4 | MEDIUM (needs calibration target) | | Walking dynamics (limb timing) | 7 | HIGH (if pose works cross-room) | Composite biometric strength: ~12-15 bits realistic vs 25-bit independence upper bound. Enough for household + building-scale ID; insufficient for forensic / city-scale. R15 strengthens the R14/R3/ADR-105 privacy framework: RF biometric is PHYSICAL not learned, so the same primitive that enables empathic appliances is a surveillance primitive that's harder to opt out of than visual ID. There is no behavioural countermeasure short of jamming (illegal) or physical alteration (impossible). Surfaces required amendment to ADR-105 federation protocol: 'The federation aggregator MUST NOT receive any raw per-subject biometric primitive. It MAY receive aggregated, MERIDIAN-normalised model deltas. Per-subject primitives stay on-device.' This becomes the requirements basis for ADR-106 (deferred DP-SGD ADR). R15 closes the last unaddressed PROGRESS.md research thread. After R15: - Closed: 'what RF biometrics exist and how do they invariantise' = answered - Open: ADR-106, R6.1 multi-scatterer, R3 physics-informed env prediction, R6.2 Fresnel-aware antenna placement The per-occupant feature surface (R14 V1/V2/V3) is now fully grounded in physics + constraints; remaining work is implementation, not research. Composes with every prior thread: - R5 saliency: primitive-specific maps - R6 Fresnel: physical basis for RCS invariance - R7 mincut: defends primitive-level poisoning - R10 per-species gait: transfers to per-individual gait biometric - R13 NEGATIVE: 5-dB-short wall rules out contour-level HRV - R3: embedding space combines 5 primitives - R14: all 3 verticals (V1/V2/V3) work with rate-level subset Honest scope: - Bit counts are upper bounds; 30-50% loss to noise/multipath - Contour-level HRV not achievable (R13 wall) - Walking dynamics 7-bit assumes pose-from-CSI works cross-room (unmeasured) - Body-size RCS needs calibration target in new room Coordination: ticks/tick-14.md, no PROGRESS.md edit. |
||
|
|
09fe73eb87 |
research(R4) + adr-105: federated CSI training with MERIDIAN+Krum+mincut (#716)
Federated learning is the unique design that satisfies the three constraints from this loop's earlier work: - R14 (data stays on-device) - R3 (no cross-installation linkage) - R7 (multi-node adversarial defence) ADR-105 proposes MERIDIAN-FedAvg with Byzantine-robust (Krum) aggregation and R7-style Stoer-Wagner mincut on inter-node update similarity. Per-round bandwidth at typical 4-seed installation: ~12 MB; weekly cadence x monthly = 50-180 MB/month (0.06% of home broadband cap). Composes with every prior thread: - R3 MERIDIAN centroid subtraction is mandatory pre-aggregation - R7 mincut extended from multi-link CSI to multi-node updates - R12/R13 negative results informed the byzantine + SNR-threshold choices - R14 privacy framework baseline is now operational - ADR-024/027/029/100/103/104 all bridged in the ADR Implementation plan: ~500 LOC for ruview-fed crate. Krum aggregator (80 LOC), LoRA+int8 delta codec (120 LOC, reuse ruvllm-microlora), MERIDIAN centroid hook (50 LOC, extend AgentDB), inter-seed mincut (100 LOC, reuse ruvector-mincut), CLI surface (80 LOC). Explicitly deferred: - Cross-installation federation (legal + DP work needed, future ADR) - Member inference defence (ADR-106 with formal DP-SGD) - Per-cog training-loop details (each cog implements local_train) - Compute scheduling (cognitum fleet manager territory) Tick chose the 'one ADR' unit from the cron prompt rather than another numpy demo -- federation is fundamentally a protocol-design problem, not a numerical-experiment problem. Coordination: ticks/tick-13.md, no PROGRESS.md edit. |
||
|
|
db64b4c671 |
research(R3): cross-room re-ID — MERIDIAN closes the env-shift gap + 4 privacy constraints (#715)
Synthesis of AETHER (ADR-024) + MERIDIAN (ADR-027) + privacy framing + identified next research lever (physics-informed env prediction). Simulation results (10 subjects, 3 rooms, 128-dim embeddings, env/person scale ratio 4.7x): | Configuration | 1-shot acc | |------------------------------------------|-----------:| | Within-room (matches AETHER ~95% target) | 100% | | Cross-room, raw cosine K-NN | 70% | | Cross-room, MERIDIAN 100% env removal | 100% | | Cross-room, MERIDIAN 70% env removal | 100% | | Chance | 10% | The 30 pp gap from within-room to raw cross-room is the angular contribution of env-shift that cosine similarity can't normalise away. MERIDIAN per-room centroid subtraction recovers it -- robust even at 70% effectiveness (realistic for limited labelled examples). Privacy framing: R14 baseline + 4 new constraints specific to biometric-class re-ID data: 1. No cross-installation linkage 2. Embedding storage requires explicit opt-in (biometric consent class) 3. Cryptographically verifiable forgetting 4. No re-ID across legal entities These rule out cross-building tracking, mass surveillance, long-term unlabelled storage, third-party sharing. They allow per-installation personalisation, household anomaly detection, multi-person pose association in the same room. R3 closes the loop on R14's empathic-appliance vision: re-ID is THE primitive that makes per-occupant features possible. Without R3, R14's verticals can't ship. Identifies next research lever: physics-informed env_sig prediction from R6's forward operator + room map = zero-shot cross-room transfer without labelled examples in the new room. Composes: - R5/R6: person+env decomposition in embedding space - R7: mincut = defence against re-ID spoofing - R9: RSSI K-NN showed env-locality dominance for the K-NN primitive - R14: 4 new constraints extend R14's framework to biometric class Honest scope: additive decomposition is first-order; real CSI env effects are multiplicative in subcarrier domain. Adversarial scenarios not simulated. Coordination: ticks/tick-12.md, no PROGRESS.md edit. |
||
|
|
bcfdf0a4d0 |
research(R13): NEGATIVE — contactless BP from CSI is physically inferior to a cuff (#713)
Critical-physics scrutiny of published 'contactless BP from WiFi CSI' claims (Yang 2022, Liu 2021, others). Four physics floors quantified; all four make CSI-based BP provably worse than a 20 dollar arm cuff. 1. PTT temporal resolution: need 0.5 ms for 1 mmHg precision; ESP32-S3 maxes at 1 ms (1000 Hz CSI) and typical deployment is 10 ms (100 Hz) = 20 mmHg precision floor. Achievable but requires sacrificing every other sensing pipeline. 2. Spatial separation: carotid-femoral distance 55 cm, Fresnel envelope at 5 m link is 40 cm. Single-link CSI cannot resolve the two sites independently. Multistatic with 4-6 anchors is severely ill-posed (same regime that defeated R12). 3. Pulse-contour SNR: pulse motion at chest is 0.3 mm; breathing is 8 mm (27x larger). After 4th-order bandpass we get +20 dB HR-band SNR; literature (Mukkamala 2015) says +25 dB minimum for waveform- shape recovery. **5 dB short.** 4. Vs 0 arm cuff: best published CSI BP is +/-10 mmHg with per-subject calibration; arm cuff is +/-2 mmHg uncalibrated. CSI is 5x worse AND requires calibration the user doesn't otherwise need. Verdict: do not ship BP as a primary RuView feature. The breathing/HR features we already ship work because their motion amplitudes are 30-100x larger than the pulse waveform. Adding BP would force 1 kHz CSI rate (degrading every other pipeline), require per-subject calibration (defeating no-setup story), and ship a feature that's worse than a 20 dollar device the user can buy. Three niche scenarios remain open: - Single-subject trend monitoring (relative not absolute) - Bed-instrumented controlled-still subject (25+ dB achievable) - Multistatic PWV with 6+ anchors + per-installation calibration The general 'BP from a 9 dollar ESP32 in the corner' claim does not close. Composes: - R1 (CRLB) confirms temporal-resolution floor for PTT - R6 (Fresnel) provides the spatial floor that defeats two-site PTT - R5 (saliency) explains why whole-chest observable but 0.3 mm pulse not - R12 = loop's other negative result, same failure pattern - R14's assumption (no BP) is now empirically validated Two negative results in this loop (R12, R13) prevent the field from biasing toward overclaiming. This is the most valuable kind of tick because it marks BP-from-CSI as off-roadmap with explicit numbers, so future contributors don't waste cycles attempting it. Coordination: ticks/tick-11.md, no PROGRESS.md edit. |
||
|
|
4072455d1e |
research(R11): maritime sensing — through-bulkhead impossible, through-seam works (#712)
Physics scrutiny of WiFi-band maritime sensing scenarios. Steel skin depth is 3.25 um at 2.4 GHz, making bulkheads utterly opaque. Saltwater attenuation is 853 dB/m. The 'through-bulkhead WiFi radar' framing common in conservation/maritime is wrong; the actual feasible category is 'through-seam' sensing exploiting slot diffraction through gaskets, hatch seals, and vent grilles. Composite link budget for 7 maritime scenarios (ESP32-S3 121 dB budget, 10 dB SNR margin): FEASIBLE: - Man-overboard surface @ 200 m: +25 dB - Cabin door, 2 mm seam: +31 dB - Cabin door, 5 mm seam: +39 dB - Container, 30 mm vent slot: +45 dB IMPOSSIBLE: - Closed 10 mm steel door: -938 dB - Submarine pressure hull: -929 dB - Head 30 cm underwater: -231 dB Five feasible verticals catalogued: man-overboard surface, through-seam crew vitals, container tamper detection, hatch-seal predictive maintenance, engine-room thermal anomaly via condensation. Composes with prior threads: - R6 Fresnel envelope + slot diffraction = narrower composite envelope - R10 link-budget primitives reused unmodified for air-side maritime - R7 multi-link consistency essential against superstructure jammers - R14 privacy framework transfers directly to crew-cabin monitoring Honest scope: best-case ignores vessel vibration (5-30 Hz, in-band with R10 gait frequencies), engine ignition noise, salt-spray, steel-surface multipath. Maritime gait-classification is harder than land. The romantic 'through-hull radar' is now explicitly debunked. The actual product roadmap is gasket-leakage sensing, surface detection, and predictive-maintenance audits. Coordination: ticks/tick-10.md, no PROGRESS.md edit. |