Repository navigation
Conversation
…riments Record ADRs 421 to 423, actual dependency integration, bounded input and evidence authority, duration evaluation, security regressions and measured receipts. Preserve negative predictive and caching results; no model promotion.
This branch has not been deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Activity inference does not establish continuous occupancy or justify confident decisions after evidence expires. This increment adds a bounded evidence lifecycle and experiments for learned measurement selection and predictive CSI before hardware integration.
Implementation
ADRs 421 to 423 define actual pinned RuField/WorldGraph replay, actual @ruvector/kge 0.2.0 proposals, and a masked latent EMA teacher experiment. Added room clustered duration evaluation with recall and truth stratified unknown coverage gates, safe artifact readers, provenance and expiry checks, and CI for the KGE to Rust boundary. Rankings cannot change observations, actuate devices or promote models.
Validation
41 Python, 14 Rust and 5 KGE tests pass. Integrated replay confirms empty, occupied, unknown, occupied, unknown and identical evidence under different rankings. Independent source review found no remaining blocker after file race, accepted clock, artifact binding and abstention fixes. Scoped KGE npm audit reports zero advisories, not a full dependency audit.
Rust release benchmark across three paired rounds: p50 0.0771 to 0.0853 ms and p95 0.1187 to 0.1377 ms. KGE synthetic held out target links: Hits@1 6/6 versus 2/6 for both controls. Neither establishes field accuracy.
Negative experiments preserved: KGE caching fails the repeated p95 gate and stays disabled. Five fixed predictive epochs on 280 original training recordings, evaluated on 139 reused inner development recordings, yield latent MSE 0.9740 versus constant 0.9413 and a collapse warning. No encoder promotion and no original validation/final test decoding.
Scope and rollback
Stacked on #2253 to isolate this research increment. Exact tested source tree 5c802fc561d32524f7430a1a469d60330cd9d836. Reproducers, security limits and aggregate receipts are in docs/active-evidence-experiment.md and docs/validation/active*.json. Existing production paths and published models are unchanged. Remove the experiment and CI additions to roll back.
The replay uses authored logical source fixtures, not physical radar/door drivers. Deployment requires independent sensor enrollment, durable authenticated replay protection and fresh room/session data. Field target: at least 20% less false occupied duration at equal sensing budget, confidence interval supporting reduction, recall noninferiority within one percentage point and unknown coverage noninferiority within one percentage point. No hardware actions, paid compute or production deployment.
CI confirmation: all three triggered workflows succeeded for acddd77: CSI encoder training harness run38331631824 (Python, Rust, KGE integration and native sanitizers), CSI data policy run38331631553 and Fix-Marker Regression Guard run38331631640. This is a software CI pass, not physical sensing qualification.
Frozen transfer followup (ADR 424)
Added two matched training arms, recording variance/covariance penalties, fixed training only linear probes, strict versioned artifacts, and 9 new tests. All 50 CSI training tests pass on ruOS. Exact prior baseline reproduction and source/manifest hashes bind the single public campaign.
Candidate effective rank improves 1.40553 to 4.01552. Macro F1 improves 0.03502 to 0.05163 but loses to untrained 0.07121 and raw statistics 0.19939. Accuracy 0.15108 loses to statistics 0.25180. All paired p95 regression checks pass. Overall gate FAIL: retain experiment and negative evidence, reject model promotion. Reused development groups are exploratory; no occupancy, field accuracy, or SOTA claim.
See docs/adr/ADR-424-predictive-transfer-gate.md, docs/predictive-transfer-experiment.md, and docs/benchmarks/predictive-transfer-20261013.json. Current commit 5a97ebe has all three workflows green: training harness 38332577134 (Python, native sanitizers, KGE and field/graph integration), data policy 38332577131, and regression guard 38332577077.
Independent confirmation preflight (ADR 425)
Commit 721a094 adds a standard library metadata checker, explicit exposure ledger, pinned known ESP-Fi exposure, exact schema and bounded safe file intake. It rejects room/person/session leakage, device leakage under that claim, duplicate signal digests and IDs, missing classes, inadequate confirmation coverage, and previously exposed confirmation sources. Metadata pass never authenticates captures or promotes models; current training entrypoints are unchanged.
Eight new adversarial tests; all 58 CSI training tests pass on ruOS in 9.681 seconds. Synthetic84record1000iteration p50/p95 0.368936/0.455557ms excludes file IO. No accuracy improvement claimed. ADR425 and benchmark receipt included. Commit 721a094 has terminal green CI: training harness 38333557495, data policy 38333557548, regression guard 38333557489.
Capture intake descriptor repair
Commit 606de9f fixes reproduced inspection/open races in scripts/csi_training/data.py. Final component symlink and FIFO substitutions are rejected using the same checked descriptor that is read. The actual aggregate byte count is enforced during parsing; manifest size changes are rejected. Seven regressions added; all 65 training tests pass on ruOS. Exact valid partition parity against pinned baseline. Local synthetic paired p95 .218539→.241545ms; Python traced peak15118→16670bytes. This is security overhead outside inference, not a sensing improvement. Independent final review NO BLOCK. Details and reproducer in docs/csi-intake-descriptor-fix.md. No model changes, merging or deployment. Terminal CI all green at606de9f: training38334225525, data policy38334225505, regression38334225518.
Selective public CSI intake (ADR 426), 2026-10-13
Decision ACCEPT for draft research intake review. Commit 47589e0, tree d8a1c7de4b25ced3d07b5853b65bc0af3cec5e63, in #2256. Baseline 606de9f lacked this source intake; SciPy rejected the actual MATLAB v7.3 format. Added bounded source-specific HTTP Range ZIP intake plus optional native HDF diagnostic, separate from training.
Actual six-member intake: 5,670,108 bytes, 22 requests, 16.844 seconds from a 16.1 GB archive. Three first-32-frame windows decode at native 4 antenna / 256 subcarrier axes, all finite. Zero amplitude fractions 0.071686 / 0.093506 / 0.086975 are diagnostics, not class separation or accuracy. Seven offline adversarial tests pass on ruOS in 0.124 seconds. Scoped independent source review found no high/critical blocker; outer time/memory limits required for native parsing. Local h5py unavailable, so tests ran in isolated ruOS dependency target with verified executor completion. Dependency advisory audit not claimed.
Zenodo 18924941 version 2 published 2026-06-25, recordings from 2025. Catalog CC-BY-4.0 versus README CC-BY-SA-4.0 unresolved; both notices retained, raw samples private. No ETag, snapshot or full archive digest verification. All selected samples and source revision now exposed exploratory data, not confirmation. Stable physical room/person/device aliases unverified. No training, model promotion, merging, deployment or paid provisioning; existing CPU infrastructure cost unmetered.
Reproducer/security limits: docs/zenodo-csi-intake.md. Sanitized measured receipt: docs/validation/zenodo-intake-20261013.json. Rollback removes added modules/tests/requirements and CI install line. Next: resolve source licensing and physical provenance before scientific splitting or training. Main risk: treating correlated exposed office recordings as independent confirmation. Acceptance: PYTHONPATH=scripts python -m unittest discover -s scripts/tests -p test_csi_training_zenodo.py -v.
Terminal CI passes at this exact commit: training/integration 38335254772 (Python tests, native sanitizers, Rust field/graph, KGE authority boundary), data policy 38335254875, regression guard 38335254716. Software validation only; no sensing qualification.
Whole-recording CSI quality diagnostic, 2026-10-13
Decision ACCEPT for draft research review. Commit 34eb522, exact tree3646eb238e732767ad8baa3ad8205cd2e9cefe7b, in #2256. Baseline47589e00 only inspected the first32frames. The optional candidate scans all native CSI frames in fixed <=32-frame slices and reports finite/zero-amplitude coverage. It always emits training_eligible=false, promotionAuthorized=false and occupancy_inferred=false; all_csi_frames_decoded with validation_scope=csi_dataset_values_only does not validate provenance, labels or sensing accuracy.
Frozen actual scan reproduced every prior first-window aggregate. All1,832,960 complex values across596/597/597frames are finite, no all-zero frame. Whole-recording zero fractions empty/sitting/walking .077581/.093155/.084006. Minimum per-frame nonzero coverage .251953/.879883/.851562. The empty sample's sharp coverage drop is an actionable capture-quality warning, not an occupancy result or tuned threshold. Three scans plus baseline reproduction took.221seconds; peak RSS56,528KiB under30second/1GiB outer limits on existing ruOS CPU. One run, no inference speed claim or paid cost; infrastructure cost unmetered.
Eight focused adversarial tests pass in.151seconds, including tail corruption beyond the old boundary. Exact-commit CI passes: training/integration38339374147, data policy38339374160, regression guard38339374165. Independent static review found no source blocker after evidence-scope/docs fixes; h5py unavailable in reviewer environment. Native HDF5 and up-to100k-frame hostile inputs require documented outer resource limits. No training, label read, model promotion, merge or deployment. Raw samples/private receipt remain untracked; sanitized receipt docs/validation/zenodo-full-quality-20261013.json.
Rollback restores previous zenodo_mat.py/tests/docs and removes the full-quality receipt. Next inspect the low-coverage frame using acquisition metadata, then resolve license discrepancy and stable room/person/device aliases before any scientific split. Biggest risk remains mistaking correlated exposed office samples for independent evidence. Acceptance: PYTHONPATH=scripts python -m unittest discover -s scripts/tests -p test_csi_training_zenodo.py -v.