Ruview/scripts
rUv e5bf0d4892
feat(forecast): add independent Rust multivariate training stack (#1766)
* feat(forecast): add independent Rust training stack

Signed-off-by: Codex <codex@openai.com>

* docs(forecast): record informal HPO exploration note (unaccepted)

Records an exploratory Darwin Mode numeric-genome hyperparameter search
against the tiny_ci synthetic accuracy protocol: WQL improved 0.257 -> 0.161
-> 0.153 over two search rounds, staying ahead of both baselines throughout.
Explicitly scoped as informal/exploratory (not a frozen leakage-free report,
not eligible for the evidence ledger, not validated for large_linux or any
real dataset) per this doc's own evidence-tagging discipline.

* feat(forecast-core): add per-horizon weighted quantile loss

weighted_quantile_loss collapses the whole horizon into one aggregate
number, hiding whether error grows with lead time. Add a sibling
function using the identical per-cell pinball formula and domain
checks, just reduced per horizon step instead of globally. A unit
test reconstructs the aggregate from the per-step numerators/
denominators to prove the two functions agree exactly, not just
approximately.

* feat(forecast-model): add evaluation-only local activation

Adds activate_for_evaluation and build_eval_input, gated behind the
cpu feature. activate_for_evaluation self-signs an unsigned candidate
with a fixed, publicly-known, non-secret Ed25519 key so a CLI operator
can run inference against their own just-trained candidate without a
real release signature -- explicitly never a production trust path,
documented as such in the module doc comment. The schema-digest check
in ArtifactActivationPolicy still applies in full; only signing is
relaxed. build_eval_input constructs a single-window ModelInput for
CPU inference from raw context-major values/mask arrays, matching the
training batch builders exact time-feature/descriptor encoding.

Six unit tests cover: malformed-candidate rejection, digest-mismatch
rejection (proving the schema check has teeth even on this relaxed
path), getting past the policy gate with a matching digest, and
eval-input shape validation.

* feat(forecast-train): add evaluate and prepare-synthetic-dataset CLI

Turns this sessions throwaway HPO scripts into real, tested CLI
surfaces, replacing two example binaries that bypassed the CLI/TOML
training path entirely.

prepare-synthetic-dataset generates a larger, configurable synthetic
training shard (default 24 windows) plus a matching train-local.toml
with the given OptimizerSpec hyperparameters baked in, and a separate
held-out test.jsonl -- the same synthetic-only, local-validation-only
posture as prepare-local-example, just bigger and configurable.

evaluate scores a trained (unsigned) candidate against held-out
windows and the LastValue/SeasonalNaive baselines: overall weighted
quantile loss, a per-horizon breakdown, 80% interval coverage, and
missingness, for the model and both baselines. Explicitly lists what
docs/benchmarks/ruforecast.mds full accuracy protocol additionally
asks for that this does not cover (abstention coverage, selective
risk, site/device slices, interference regime, RuVector-retrieval
ablation) rather than silently omitting them -- each needs
infrastructure a single-entity synthetic fixture does not have.

Together the three real commands (prepare-synthetic-dataset,
train-local, evaluate) reproduce the exact WQL numbers the old
library-bypassing example scripts produced for the same
hyperparameters, confirmed by re-running the harness/ruview HPO
dry-run end to end against the new CLI path.

New integration test trains a real candidate via smoke, evaluates it
against held-out synthetic windows, and asserts the full report shape
and an empty-input rejection.

* feat(forecast-train): add prepare-synthetic-dataset --seed + Autogenous bridge

--seed (default 0, backward compatible) makes prepare-synthetic-dataset's
generator deterministic per offset: same seed -> byte-identical corpus
across runs (needed to train two genomes on the SAME corpus for a fair
comparison); different seeds -> genuinely independent corpora (needed for
honest multi-seed/multi-judge evaluation upstream, both in
harness/ruview/flywheel/ruforecast/gate.mjs's fitness function and in the
new v2/crates/ruforecast-autogenous-bridge crate added here).

ruforecast-autogenous-bridge is a LOCAL-DEV-ONLY (excluded from the v2
workspace, publish = false) bridge from this crate's real evaluate CLI
into ruvnet/autogenous's new regression-candidate promotion path (separate,
unpushed branch feat/regression-candidate-kind): runs N independent
train+evaluate judges on genuinely distinct synthetic corpora, signs
receipts, and gets a real cryptographically-verified PROMOTE/REJECT
decision -- defense in depth on top of, not a replacement for, Darwin's own
promotion gate. Path-depends on a sibling autogenous checkout that does not
exist in CI; build/run directly via `cargo build --manifest-path
crates/ruforecast-autogenous-bridge/Cargo.toml`.

cargo test -p ruview-forecast-train --no-default-features --features
cpu,cli: all green (unaffected existing tests + this backward-compatible
addition).

* docs(forecast): retract round-2 HPO result, record honest multi-seed finding

The earlier "Informal HPO exploration note" claimed a real improvement
(WQL 0.257 -> 0.153) from a 3-round hyperparameter search. That search
evaluated every candidate against one fixed synthetic corpus (seed 0) for
every round -- textbook overfitting. Independent verification against two
fresh corpora (via the new ruforecast-autogenous-bridge crate) showed the
"winner" losing to the baseline on both.

Fixed the root cause in harness/ruview/flywheel/ruforecast/gate.mjs:
candidates are now scored against three independent corpora, worst-case
across them, not one fixed corpus.

Re-ran the search under the fix. It found a new winner that genuinely beat
baseline on all three of its own search seeds -- and that winner ALSO lost
independent verification on fresh seeds. Two independent search rounds,
pre- and post-fix, both produced an illusory "winner." The honest reading:
at this dataset scale (24 synthetic windows) held-out WQL varies enormously
by which corpus is drawn, regardless of hyperparameters -- confirmed
directly by the baseline genome's own primary swinging from 0.83 to a full
regression across the three fixed search seeds with unchanged
hyperparameters. No RuForecast hyperparameter configuration has been shown
to reliably beat the trivial baselines out-of-sample at this scale.

Also fixes a real design inconsistency surfaced by this exploration: the
Autogenous regression-candidate promotion verifier
(envelope::regression::verify_regression_promotion, separate unpushed
ruvnet/autogenous branch feat/regression-candidate-kind) required all
judges to share one corpus_id, which conflicts with this kind's
intentional cross-corpus judge design. Corrected there (commit bfa4c48);
did not change either REJECT verdict, which were already driven by the
real NotBetterThanParent signal on their own.

Append-only: the original round-2 row is kept, read together with this
new amendment section, per this doc's own evidence-ledger discipline.

* refactor(forecast): extract RuForecast to ruvnet/RuForecast submodule

Mirrors the v2/crates/worldgraph pattern: RuForecast becomes its own
independent public repo/workspace (ruforecast-core/model/train), mounted
at v2/crates/ruforecast as a git submodule, with v2/Cargo.toml path-depping
into its sub-crates and excluding the submodule from the v2 workspace.

Full v2 --workspace check passes; the ruforecast CLI builds and runs
correctly from its new location. Real git history for the extracted
crates (7 commits) was preserved via git-filter-repo, not squashed.

* feat(autogenous-bridge): real-data independent verification tool

real_data_verify.rs: signs two real, temporally-independent judge
measurements (different train/test split boundaries on the same real
household vitals corpus, not synthetic seeds) through the real
Autogenous regression-candidate promotion path, and gets a genuine
cryptographically-checked PROMOTE/REJECT verdict.

Result recorded (see docs/benchmarks/ruforecast.md): REJECT. One judge
nominally beat the trivial baseline but by less than the 0.01
non-inferiority margin; the other judge lost outright. Consistent with
every synthetic-data search this session -- no configuration has yet
been shown to reliably beat trivial baselines out-of-sample, now
including a real 6390-sample household corpus.

Bumps the ruforecast submodule to pick up the evaluate real-gap fix.

* docs(forecast): record real-household-data result (REJECT, signed)

6390 real vital-signs samples, two independent temporal splits,
independently verified via the real Autogenous regression-candidate
promotion path. Signed verdict: REJECT -- neither split cleared the
non-inferiority margin. Same conclusion as every synthetic search this
session, now confirmed with real data too: more real data is the
credible next lever, not further search on this scale of fixture.

* chore(forecast): point ruforecast submodule at published main (post gap-tolerance fix)

* ci(forecast): fix ruforecast-ci.yml for the new v2/crates/ruforecast submodule layout

The RuForecast crates were extracted into a standalone submodule (v2/crates/ruforecast, mirroring the existing v2/crates/worldgraph pattern) and are no longer members of the v2 workspace. The CI workflow still referenced the old in-tree package names/paths (ruview-forecast-core/model/train under v2/), which broke every forecast job with "cannot specify features for packages outside of workspace".

Fixed every job to target the submodule: working-directory -> v2/crates/ruforecast, -p ruview-forecast-* -> -p ruforecast-*, all hardcoded Cargo.toml/source paths in the Python assertion and clean-room-scan blocks, the Swatinem/rust-cache workspaces input, the artifact-tree output paths, and the two levels of relative path (../ -> ../../) in the informational-benchmark steps whose working directory moved one level deeper.

Also collapsed the paths: trigger filters internal-crate globs (v2/crates/ruview-forecast-*/**) down to the single v2/crates/ruforecast path, since GitHub Actions path filters only ever see a submodule gitlink change as one entry in the parent tree, never its internal file paths -- the old globs could never have matched anything.

Includes a real cargo fmt fix (submodule commit d9902f9) for formatting drift left over from the earlier real-data gap-tolerance fix, which the contract job's fmt --check step would otherwise have failed on.

All four forecast CI jobs' real commands verified locally before push: cargo test/check for CPU, CUDA/WGPU compile-check, the contract job's Python assertion block, the hosted-boundaries clean-room scan, and cargo fmt --check.

* docs(forecast): record real BIDMC cross-entity holdout result (REJECT)

Two independent real-patient partitions (34/16 and 24/26 splits, 53 total
ICU patients from PhysioNet BIDMC, Open Data Commons Attribution License
v1.0) both show the model losing to trivial baselines by a decisive margin
(+69% and +601% worse WQL). First genuine cross-entity real-data test this
project has run; same conclusion as every prior synthetic and single-household
test. Full Autogenous signed verification was not run for this entry -
flagged explicitly in the note.

* chore(forecast): point ruforecast submodule at published main (example feature-gate fix)

* chore(forecast): point ruforecast submodule at published main (clippy fix)

---------

Signed-off-by: Codex <codex@openai.com>
2026-09-01 23:35:42 -04:00
..
gcp feat(swarm): add ruview-swarm crate — drone swarm control system (ADR-148) (#862) 2026-05-30 16:00:59 -04:00
macos-shortcuts ADR-125 APPLE-FABRIC: RuView <-> Apple Home native HAP bridge (e2e on real C6) (#797) 2026-05-25 17:36:40 -04:00
pose-physics feat: add physics-constrained pose refinement 2026-08-15 14:29:07 -04:00
swarm_presets feat: QEMU ESP32-S3 testing platform + swarm configurator (ADR-061/062) (#260) 2026-03-14 13:39:51 -04:00
tests ADR-152: WiFi-Pose SOTA 2026 intake — WiFlow-STD benchmark, Rust integrations, ADR-153 802.11bf layer, efficiency frontier (#1008) 2026-06-11 17:02:23 -04:00
align-ground-truth.js fix(paired-data): 4 bugs corrupting/blocking camera-supervised training data (#1007) 2026-06-17 10:17:12 -04:00
apnea-detector.js feat: ADR-077 — 6 novel RF sensing applications 2026-04-03 08:50:48 -04:00
benchmark-model.py feat: GCloud GPU training pipeline + data collection + benchmarking 2026-04-02 22:04:57 -04:00
benchmark-rf-scan.js feat: ADR-073 multi-frequency mesh RF scanning 2026-04-03 00:18:29 -04:00
benchmark-ruvllm.js fix: ruvllm pipeline — 7 critical fixes, all metrics improved 2026-04-02 22:40:48 -04:00
benchmark-wiflow.js feat: ADR-072 WiFlow SOTA architecture — TCN + axial attention + pose decoder 2026-04-02 23:40:23 -04:00
c6-presence-watcher.py ADR-125 APPLE-FABRIC: RuView <-> Apple Home native HAP bridge (e2e on real C6) (#797) 2026-05-25 17:36:40 -04:00
calibrate-camera-room.py ADR-152: WiFi-Pose SOTA 2026 intake — WiFlow-STD benchmark, Rust integrations, ADR-153 802.11bf layer, efficiency frontier (#1008) 2026-06-11 17:02:23 -04:00
calibration_lib.py ADR-152: WiFi-Pose SOTA 2026 intake — WiFlow-STD benchmark, Rust integrations, ADR-153 802.11bf layer, efficiency frontier (#1008) 2026-06-11 17:02:23 -04:00
check_fix_markers.py ci: fix-marker regression guard (witness-style) 2026-05-11 10:48:14 -04:00
check_health.py feat: QEMU ESP32-S3 testing platform + swarm configurator (ADR-061/062) (#260) 2026-03-14 13:39:51 -04:00
collect-ground-truth.py ADR-152: WiFi-Pose SOTA 2026 intake — WiFlow-STD benchmark, Rust integrations, ADR-153 802.11bf layer, efficiency frontier (#1008) 2026-06-11 17:02:23 -04:00
collect-training-data.py feat: GCloud GPU training pipeline + data collection + benchmarking 2026-04-02 22:04:57 -04:00
csi-data-policy-check.sh Merge remote-tracking branch 'origin/main' into resolve-1579-conflict 2026-08-11 13:04:00 -04:00
csi-data-policy.allow Merge remote-tracking branch 'origin/main' into resolve-1579-conflict 2026-08-11 13:04:00 -04:00
csi-graph-visualizer.js feat: ADR-075 min-cut person separation — fixes #348 2026-04-03 00:34:57 -04:00
csi-spectrogram.js feat: ADR-076 CNN spectrogram embeddings + graph transformer fusion 2026-04-03 00:36:38 -04:00
csi-udp-relay.py feat: per-room calibration system (ADR-151) + cognitum-v0 appliance integration spec (#989) 2026-06-10 15:21:09 -04:00
deep-scan.js feat: deep-scan.js — comprehensive RF intelligence report 2026-04-03 13:03:18 -04:00
device-fingerprint.js feat: ADR-078 — 5 multi-frequency mesh applications 2026-04-03 08:52:50 -04:00
esp32_jsonl_to_rvcsi.py fix(rvcsi): scale-relative baseline-drift thresholds + ESP32 end-to-end validation 2026-05-12 22:19:15 -04:00
esp32_wasm_test.py feat: add ADR-042 CHCI protocol, 24 new edge modules, README restructure 2026-03-03 11:35:57 -05:00
eval-wiflow.js feat: camera ground-truth training pipeline (ADR-079, #362) 2026-04-06 14:07:25 -04:00
export-onnx.py feat(cog-pose-estimation): scaffold first Cog from this repo (ADR-100 + ADR-101) (#642) 2026-05-19 17:03:09 -04:00
firmware-release-guard.sh chore(firmware): add release guard against stale-sdkconfig partition mismatch (#1194) 2026-06-27 13:21:05 -04:00
fix-markers.json ci(python): gate python/ package in main CI + add fix-marker guards for filename-collision and wheel-budget regressions 2026-07-21 22:03:59 -07:00
gait-analyzer.js feat: ADR-077 — 6 novel RF sensing applications 2026-04-03 08:50:48 -04:00
gcloud-train.sh chore(repo): rename rust-port/wifi-densepose-rs → v2/ (flatten to one level) (#427) 2026-04-25 21:28:13 -04:00
generate-witness-bundle.sh feat(signal): ADR-134 CSI→CIR via ISTA + NeumannSolver warm-start (#837) 2026-05-28 16:24:37 -04:00
generate_nvs_matrix.py security: repair scanning and close stale alert sources 2026-08-02 15:22:13 -04:00
hap-test-sensor.py ADR-125 APPLE-FABRIC: RuView <-> Apple Home native HAP bridge (e2e on real C6) (#797) 2026-05-25 17:36:40 -04:00
homecore-seed.sh feat(homecore-ui): Dashboard page + seed script — UI is no longer empty 2026-05-26 12:26:02 -04:00
inject_fault.py feat: QEMU ESP32-S3 testing platform + swarm configurator (ADR-061/062) (#260) 2026-03-14 13:39:51 -04:00
install-qemu.sh feat: QEMU ESP32-S3 testing platform + swarm configurator (ADR-061/062) (#260) 2026-03-14 13:39:51 -04:00
mac-mini-train.sh fix: remove hardcoded Tailscale IPs and usernames from public files 2026-04-06 14:39:21 -04:00
material-classifier.js feat: ADR-078 — 5 multi-frequency mesh applications 2026-04-03 08:52:50 -04:00
material-detector.js feat: ADR-077 — 6 novel RF sensing applications 2026-04-03 08:50:48 -04:00
mesh-graph-transformer.js feat: ADR-076 CNN spectrogram embeddings + graph transformer fusion 2026-04-03 00:36:38 -04:00
mincut-person-counter.js feat: ADR-075 min-cut person separation — fixes #348 2026-04-03 00:34:57 -04:00
mmwave_fusion_bridge.py feat: ADR-063/064 mmWave sensor fusion + multimodal ambient intelligence (#269) 2026-03-15 16:10:10 -04:00
occworld_retrain.py security: repair scanning and close stale alert sources 2026-08-02 15:22:13 -04:00
occworld_server.py security: repair scanning and close stale alert sources 2026-08-02 15:22:13 -04:00
overnight-empty-capture.py ADR-152: WiFi-Pose SOTA 2026 intake — WiFlow-STD benchmark, Rust integrations, ADR-153 802.11bf layer, efficiency frontier (#1008) 2026-06-11 17:02:23 -04:00
passive-radar.js feat: ADR-078 — 5 multi-frequency mesh applications 2026-04-03 08:52:50 -04:00
probe-fft-platform.py fix(verify): cross-platform deterministic proof — 6-decimal quantize + thread-pinning (closes #560) (#609) 2026-05-17 19:50:55 -04:00
prove.sh docs(ADR-163): edge-latency RESULTS + PROOF/prove.sh wiring (T3) 2026-06-12 08:02:07 -04:00
provision.py security: repair scanning and close stale alert sources 2026-08-02 15:22:13 -04:00
publish-huggingface.py feat: HuggingFace model publishing pipeline + model card 2026-04-02 22:04:16 -04:00
publish-huggingface.sh feat: HuggingFace model publishing pipeline + model card 2026-04-02 22:04:16 -04:00
qemu-chaos-test.sh feat: QEMU ESP32-S3 testing platform + swarm configurator (ADR-061/062) (#260) 2026-03-14 13:39:51 -04:00
qemu-cli.sh feat: QEMU ESP32-S3 testing platform + swarm configurator (ADR-061/062) (#260) 2026-03-14 13:39:51 -04:00
qemu-esp32s3-test.sh feat: QEMU ESP32-S3 testing platform + swarm configurator (ADR-061/062) (#260) 2026-03-14 13:39:51 -04:00
qemu-mesh-test.sh chore(repo): rename rust-port/wifi-densepose-rs → v2/ (flatten to one level) (#427) 2026-04-25 21:28:13 -04:00
qemu-snapshot-test.sh feat: QEMU ESP32-S3 testing platform + swarm configurator (ADR-061/062) (#260) 2026-03-14 13:39:51 -04:00
qemu_swarm.py fix: bug triage for #559, #561, #588 + CI fixes for fuzz/swarm tests (#590) 2026-05-17 17:00:37 -04:00
record-csi-udp.py fix(paired-data): 4 bugs corrupting/blocking camera-supervised training data (#1007) 2026-06-17 10:17:12 -04:00
redact-secrets.py ADR-110: ESP32-C6 firmware extension (#764) 2026-05-23 15:34:48 -04:00
release-v0.5.4.sh feat: ADR-069 ESP32 CSI → Cognitum Seed RVF pipeline (v0.5.4-esp32) 2026-04-02 19:32:18 -04:00
replay-pose-physics-golden.sh feat: add physics-constrained pose refinement 2026-08-15 14:29:07 -04:00
rf-scan-multifreq.js feat: ADR-073 multi-frequency mesh RF scanning 2026-04-03 00:18:29 -04:00
rf-scan.js fix: add --bind flag for Windows firewall compatibility 2026-04-03 09:09:53 -04:00
rf-tomography.js feat: ADR-078 — 5 multi-frequency mesh applications 2026-04-03 08:52:50 -04:00
room-fingerprint.js feat: ADR-077 — 6 novel RF sensing applications 2026-04-03 08:50:48 -04:00
rotate-npm-token.sh chore(security): allow .env reads + add rotate-npm-token.sh 2026-05-25 10:32:46 -04:00
run-ruforecast-benchmarks.sh feat(forecast): add independent Rust multivariate training stack (#1766) 2026-09-01 23:35:42 -04:00
ruview-hap-bridge.py ADR-125 APPLE-FABRIC: RuView <-> Apple Home native HAP bridge (e2e on real C6) (#797) 2026-05-25 17:36:40 -04:00
ruview-sensing-server.py ADR-125 APPLE-FABRIC: RuView <-> Apple Home native HAP bridge (e2e on real C6) (#797) 2026-05-25 17:36:40 -04:00
ruview_occ_dataset.py feat(worldmodel): ADR-147 Phase 3+5 — RuViewOccDataset domain adapter + retraining pipeline 2026-05-29 18:46:56 -04:00
rvagent-mcp-consumer.py ADR-125 APPLE-FABRIC: RuView <-> Apple Home native HAP bridge (e2e on real C6) (#797) 2026-05-25 17:36:40 -04:00
seed_csi_bridge.py fix: add --bind flag for Windows firewall compatibility 2026-04-03 09:09:53 -04:00
sleep-monitor.js feat: ADR-077 — 6 novel RF sensing applications 2026-04-03 08:50:48 -04:00
snn-csi-processor.js feat: ADR-074 spiking neural network for real-time CSI sensing 2026-04-03 00:34:31 -04:00
stress-monitor.js feat: ADR-077 — 6 novel RF sensing applications 2026-04-03 08:50:48 -04:00
swarm_health.py feat: QEMU ESP32-S3 testing platform + swarm configurator (ADR-061/062) (#260) 2026-03-14 13:39:51 -04:00
synth-csi-udp.py feat(signal): ADR-135 — empty-room baseline calibration 2026-05-28 18:57:08 -04:00
through-wall-detector.js feat: ADR-078 — 5 multi-frequency mesh applications 2026-04-03 08:52:50 -04:00
train-camera-free.js feat: camera-free 17-keypoint pose training (10 sensor signals) 2026-04-02 23:05:07 -04:00
train-count.py feat(cog-person-count): v0.0.2 — K-fold + label-smoothing + temperature-calibrated (#699) 2026-05-21 19:47:04 -04:00
train-ruvllm.js fix: skip triplet JSON export for large datasets (>100K) 2026-04-03 09:37:08 -04:00
train-wiflow-supervised.js feat: scalable WiFlow model with 4 size presets (#362) 2026-04-06 14:55:35 -04:00
train-wiflow.js feat: ADR-072 WiFlow SOTA architecture — TCN + axial attention + pose decoder 2026-04-02 23:40:23 -04:00
training-config-sweep.json feat: GCloud GPU training pipeline + data collection + benchmarking 2026-04-02 22:04:57 -04:00
udp-relay.py fix(docker): UDP relay for multi-source ESP32 on Docker Desktop Windows (#502) 2026-05-17 18:01:44 -04:00
validate-esp32-mqtt.sh ADR-115: Home Assistant + Matter integration (#778) 2026-05-23 16:13:28 -04:00
validate-ha-blueprints.py ADR-115: Home Assistant + Matter integration (#778) 2026-05-23 16:13:28 -04:00
validate_mesh_test.py feat: QEMU ESP32-S3 testing platform + swarm configurator (ADR-061/062) (#260) 2026-03-14 13:39:51 -04:00
validate_qemu_output.py ADR-081: Implement 5-layer adaptive CSI mesh firmware kernel (#404) 2026-04-20 10:38:23 -04:00
verify-calibration-proof.sh feat(signal): ADR-135 — empty-room baseline calibration 2026-05-28 18:57:08 -04:00
verify-cir-proof.sh feat(signal): ADR-134 CSI→CIR via ISTA + NeumannSolver warm-start (#837) 2026-05-28 16:24:37 -04:00
verify-pose-physics-splits.sh feat: add physics-constrained pose refinement 2026-08-15 14:29:07 -04:00
wiflow-model.js feat: ADR-072 WiFlow SOTA architecture — TCN + axial attention + pose decoder 2026-04-02 23:40:23 -04:00
witness-adr-115.sh ADR-115: Home Assistant + Matter integration (#778) 2026-05-23 16:13:28 -04:00