mirror of
https://github.com/ruvnet/RuView.git
synced 2026-10-21 22:22:33 -05:00
* 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>
309 lines
15 KiB
TOML
309 lines
15 KiB
TOML
[workspace]
|
|
resolver = "2"
|
|
members = [
|
|
"crates/wifi-densepose-core",
|
|
"crates/wifi-densepose-physics", # ADR-323 bounded pose assessment/correction
|
|
"crates/wifi-densepose-signal",
|
|
"crates/wifi-densepose-nn",
|
|
# wifi-densepose-api / -db / -config: removed in #578.
|
|
# The crate names were reserved early for an envisioned REST/database/config
|
|
# split, but no implementation followed and no code referenced them. The
|
|
# functionality they would provide is covered today by:
|
|
# - REST/WS: `wifi-densepose-sensing-server` (Axum)
|
|
# - Config: per-crate config + CLI args in `wifi-densepose-sensing-server`
|
|
# and `wifi-densepose-desktop`
|
|
# - DB: no persistent state; system is real-time
|
|
# If we ever need any of these as a published surface, they can be
|
|
# reintroduced with a real implementation.
|
|
"crates/wifi-densepose-hardware",
|
|
"crates/wifi-densepose-wasm",
|
|
"crates/wifi-densepose-cli",
|
|
"crates/wifi-densepose-mat",
|
|
"crates/wifi-densepose-train",
|
|
"crates/wifi-densepose-sensing-server",
|
|
"crates/wifi-densepose-aether", # ADR-185 §13 — AETHER pure-compute leaf (std-only)
|
|
"crates/wifi-densepose-privshield", # ADR-291 — VEIL privacy shield (compliant-waveform anti-sensing; std-only leaf)
|
|
"crates/wifi-densepose-wifiscan",
|
|
"crates/wifi-densepose-vitals",
|
|
"crates/wifi-densepose-ruvector",
|
|
"crates/wifi-densepose-desktop",
|
|
"crates/wifi-densepose-pointcloud",
|
|
# geo + worldgraph extracted to ruvnet/worldgraph submodule (see crates/worldgraph)
|
|
"crates/wifi-densepose-engine", # ADR-135..146 integration/composition layer
|
|
"crates/wifi-densepose-calibration", # ADR-151 — per-room calibration & specialist training
|
|
# ADR-271 — Cognitum OAuth access-token verification. RuView as an OAuth
|
|
# RESOURCE SERVER: offline ES256/JWKS verification of tokens issued by
|
|
# auth.cognitum.one, so a user signs in to their own sensing server with
|
|
# their Cognitum identity instead of a shared static bearer. No login flow
|
|
# and no outbound Cognitum API calls live here — verification only.
|
|
"crates/ruview-auth",
|
|
"crates/ruview-cognitum-spaces", # ADR-325 Cognitum Spaces read client
|
|
"crates/nvsim",
|
|
"crates/nvsim-server",
|
|
"crates/homecore", # ADR-127 — HOMECORE state machine
|
|
"crates/homecore-plugins", # ADR-128 — HOMECORE-PLUGINS WASM runtime (P1 scaffold)
|
|
"crates/homecore-api", # ADR-130 — HOMECORE REST + WS API
|
|
"crates/homecore-automation", # ADR-129 — HOMECORE automation engine
|
|
"crates/homecore-recorder", # ADR-132 — HOMECORE state recorder
|
|
"crates/homecore-migrate", # ADR-134 — HOMECORE migration from Python HA
|
|
# ADR-100/ADR-101: Cognitum Cog packaging — first Cog from this repo.
|
|
# Ships the wifi-densepose pose-estimation model as a signed binary +
|
|
# JSONL manifest installable by the Cognitum V0 appliance (cognitum-v0,
|
|
# cognitum-cluster-*, ruvultra). The companion appliance-side crate
|
|
# lives in cognitum-one/v0-appliance as `cognitum-pose-estimation`.
|
|
"crates/cog-pose-estimation",
|
|
# ADR-103: Learned multi-person counter (SOTA path) — replaces the
|
|
# PR #491 slot heuristic with a Candle network + Stoer-Wagner fusion.
|
|
# Motivated by #499 ghost-skeleton reports.
|
|
"crates/cog-person-count",
|
|
# ADR-116: Home Assistant + Matter Cognitum Seed cog. Wraps the
|
|
# ADR-115 MQTT publisher as a Seed-installable artifact with
|
|
# mDNS, embedded broker, RuVector thresholds, Ed25519 witness.
|
|
"crates/cog-ha-matter",
|
|
# ADR-118: BFLD — Beamforming Feedback Layer for Detection. The
|
|
# privacy/safety layer that measures and gates identity leakage from
|
|
# WiFi BFI captures. Sub-ADRs: 119 (frame), 120 (privacy class),
|
|
# 121 (identity risk), 122 (HA/Matter), 123 (capture path).
|
|
"crates/wifi-densepose-bfld",
|
|
# ADR-147: OccWorld thin-client bridge — WorldGraph PersonTrack history →
|
|
# OccWorld Python subprocess → TrajectoryPrior injection into pose tracker.
|
|
# worldmodel extracted to ruvnet/worldgraph submodule (consumed via path dep)
|
|
# ADR-147 (Phase 5): OccWorld TransVQVAE ported to Candle — native Rust
|
|
# inference without Python/IPC overhead. Loaded alongside the Python bridge
|
|
# as a faster alternative once Phase-5 weights are available.
|
|
"crates/wifi-densepose-occworld-candle",
|
|
# rvCSI — edge RF sensing runtime (ADR-095 platform, ADR-096 FFI/crate layout):
|
|
# lives in its own repo (https://github.com/ruvnet/rvcsi), vendored here as
|
|
# `vendor/rvcsi` and published to crates.io as `rvcsi-*` 0.3.x. Depend on the
|
|
# published crates (or the submodule's `crates/rvcsi-*` paths) — not as v2
|
|
# workspace members, since `vendor/rvcsi/Cargo.toml` is its own workspace.
|
|
"crates/homecore-hap", # ADR-125 — Apple Home HomeKit Accessory Protocol bridge
|
|
"crates/homecore-assist", # ADR-133 — HOMECORE voice assistant + ruflo bridge
|
|
"crates/homecore-server", # iter-9 — HOMECORE integration binary (all 8 crates wired together)
|
|
"crates/ruview-swarm", # ADR-148 — drone swarm control system
|
|
# ADR-273..277 — unified RF spatial world model: canonical RF tensor +
|
|
# hardware adapters, universal foundation encoder (masked-reconstruction
|
|
# pretraining, ≤1% task adapters), RF-aware Gaussian spatial memory,
|
|
# physics-guided synthetic RF worlds, edge sensing control plane.
|
|
"crates/ruview-unified",
|
|
# ADR-262 P1 — anti-corruption bridge converting RuView WiFi-CSI sensing
|
|
# output into signed RuField FieldEvents. Path-deps the `vendor/rufield`
|
|
# submodule crates (rufield-core/-provenance/-privacy/-fusion); single
|
|
# coupling point between RuView and the standalone RuField MFS spec.
|
|
"crates/wifi-densepose-rufield",
|
|
# ADR-287 — coherent wideband RF tomography research crate: synthetic
|
|
# stepped-frequency multi-position measurement simulation + delay-and-sum
|
|
# backprojection reconstruction. Standalone leaf (nvsim pattern), zero
|
|
# hardware coupling, every number SYNTHETIC/L0 until real wideband RF
|
|
# hardware exists.
|
|
"crates/wifi-densepose-sar",
|
|
# ADR-300 phase 1 — perception substrate spine (new first-party crates):
|
|
"crates/ruview-ontology", # ADR-306 canonical spatial ontology (Site..Event)
|
|
"crates/ruview-attest", # ADR-305 authenticated sensor identity / RF chain of custody
|
|
"crates/ruview-evidence", # ADR-304 evidence engine (per-room/device/subject ledger)
|
|
# ADR-300 phase 1 — dependent wave (build on the spine roots above):
|
|
"crates/ruview-ood", # ADR-302 OOD KNOWN/DEGRADED/UNKNOWN gating
|
|
"crates/ruview-witness", # ADR-319 witness chain (staged signed provenance)
|
|
"crates/ruview-certify", # ADR-318 capability certificate
|
|
"crates/ruview-scorecard", # ADR-317 multi-domain benchmark scorecard
|
|
"crates/ruview-policy", # ADR-321 decision policy / action authorization
|
|
# ADR-300 phase 2 — unified world-model core:
|
|
"crates/ruview-hal", # ADR-320 sensor HAL (any modality -> Observation)
|
|
"crates/ruview-groundtruth",# ADR-303 ground-truth synchronization / validation plane
|
|
"crates/ruview-track", # ADR-307 persistent privacy-preserving tracking
|
|
"crates/ruview-fusion", # ADR-311 uncertainty-aware fusion -> one world state
|
|
# ADR-300 phase 3 — higher-ceiling primitives (on the fused world state):
|
|
"crates/ruview-twin", # ADR-315 digital RF twin (per-deployment model)
|
|
"crates/ruview-placement", # ADR-308 sensor placement optimizer
|
|
"crates/ruview-memory", # ADR-312 long-term spatial memory / anomaly
|
|
"crates/ruview-spatial-memory",# ADR-326 tenant-scoped Cognitum Spaces history
|
|
"crates/ruview-counterfactual",# ADR-313 counterfactual spatial inference
|
|
"crates/ruview-infogain", # ADR-314 information-gain scheduler
|
|
"crates/ruview-active", # ADR-309 active sensing control
|
|
# ADR-324 — clean-room Kooima off-axis (head-coupled perspective) projection.
|
|
# Dependency-free native core; wasm-bindgen surface only on wasm32.
|
|
"crates/ruview-offaxis",
|
|
# ADR-348 — RuForecast extracted to the ruvnet/RuForecast submodule
|
|
# (see crates/ruforecast in the exclude list below); path-deps only.
|
|
]
|
|
# ADR-040: WASM edge crate targets wasm32-unknown-unknown (no_std),
|
|
# excluded from workspace to avoid breaking `cargo test --workspace`.
|
|
# Build separately: cargo build -p wifi-densepose-wasm-edge --target wasm32-unknown-unknown --release
|
|
#
|
|
# ADR-128 P2: example WASM plugin — also wasm32-only (no_std, cdylib),
|
|
# excluded for the same reason. Build separately:
|
|
# cargo build --target wasm32-unknown-unknown --release -p homecore-plugin-example
|
|
exclude = [
|
|
"crates/wifi-densepose-wasm-edge",
|
|
"crates/homecore-plugin-example",
|
|
"crates/worldgraph", # ruvnet/worldgraph submodule — its own workspace (geo/worldgraph/worldmodel)
|
|
"crates/ruforecast", # ruvnet/RuForecast submodule — its own workspace (ruforecast-core/model/train)
|
|
# LOCAL-DEV-ONLY: path-depends on an absolute, unpublished ruvnet/autogenous
|
|
# checkout that does not exist in CI. Build directly with
|
|
# `cargo build --manifest-path crates/ruforecast-autogenous-bridge/Cargo.toml`
|
|
# on a host with that checkout present. See its Cargo.toml/README.
|
|
"crates/ruforecast-autogenous-bridge",
|
|
]
|
|
|
|
[workspace.package]
|
|
version = "0.3.1"
|
|
edition = "2021"
|
|
authors = ["rUv <ruv@ruv.net>", "WiFi-DensePose Contributors"]
|
|
license = "MIT OR Apache-2.0"
|
|
repository = "https://github.com/ruvnet/wifi-densepose"
|
|
documentation = "https://docs.rs/wifi-densepose"
|
|
keywords = ["wifi", "densepose", "csi", "pose-estimation", "rust"]
|
|
categories = ["science", "computer-vision", "wasm"]
|
|
|
|
[workspace.dependencies]
|
|
# Core utilities
|
|
thiserror = "2.0"
|
|
# WiFi Veil — compliant-waveform countermeasure against unauthorized WiFi
|
|
# sensing (ADR-294). Dependency-free, deterministic, SYNTHETIC-only leaf;
|
|
# pinned to an exact rev because the crate is consumed pre-crates.io-release.
|
|
wifi-veil = { git = "https://github.com/ruvnet/wifi-veil", rev = "018468b5d2bf41f35c552910f35659830af0eb91" }
|
|
anyhow = "1.0"
|
|
serde = { version = "1.0", features = ["derive"] }
|
|
serde_json = "1.0"
|
|
serde_yaml = "0.9"
|
|
tokio = { version = "1.35", features = ["full"] }
|
|
tracing = "0.1"
|
|
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
|
|
nalgebra = "0.34"
|
|
smallvec = "1.15"
|
|
bitflags = "2.9"
|
|
rapier3d = { version = "0.33", default-features = false, features = ["std", "dim3", "f32"] }
|
|
burn-core = { version = "0.21", default-features = false, features = ["std"] }
|
|
burn-nn = { version = "0.21", default-features = false }
|
|
burn-ndarray = { version = "0.21", default-features = false, features = ["std"] }
|
|
burn-train = { version = "0.21", default-features = false }
|
|
burn-wgpu = { version = "0.21", default-features = false, features = ["std"] }
|
|
burn-cuda = { version = "0.21", default-features = false, features = ["std"] }
|
|
|
|
# Signal processing
|
|
ndarray = { version = "0.17", features = ["serde"] }
|
|
ndarray-linalg = { version = "0.18", features = ["openblas-static"] }
|
|
rustfft = "6.1"
|
|
num-complex = "0.4"
|
|
num-traits = "0.2"
|
|
|
|
# Neural network
|
|
tch = "0.24"
|
|
ort = { version = "2.0.0-rc.11" }
|
|
candle-core = "0.4"
|
|
candle-nn = "0.4"
|
|
|
|
# Web framework
|
|
axum = { version = "0.7", features = ["ws", "macros"] }
|
|
tower = { version = "0.4", features = ["full"] }
|
|
tower-http = { version = "0.6", features = ["cors", "trace", "compression-gzip"] }
|
|
hyper = { version = "1.1", features = ["full"] }
|
|
|
|
# Database
|
|
sqlx = { version = "0.7", features = ["runtime-tokio", "postgres", "sqlite", "uuid", "chrono", "json"] }
|
|
redis = { version = "0.24", features = ["tokio-comp", "connection-manager"] }
|
|
|
|
# Configuration
|
|
config = "0.14"
|
|
dotenvy = "0.15"
|
|
envy = "0.4"
|
|
|
|
# WASM
|
|
wasm-bindgen = "0.2"
|
|
wasm-bindgen-futures = "0.4"
|
|
js-sys = "0.3"
|
|
web-sys = { version = "0.3", features = ["console", "Window", "WebSocket"] }
|
|
getrandom = { version = "0.2", features = ["js"] }
|
|
|
|
# Hardware
|
|
serialport = "4.3"
|
|
pcap = "1.1"
|
|
|
|
# Graph algorithms (for min-cut assignment in metrics)
|
|
petgraph = "0.6"
|
|
|
|
# Data loading
|
|
ndarray-npy = "0.10"
|
|
walkdir = "2.4"
|
|
|
|
# Hashing (for proof)
|
|
sha2 = "0.10"
|
|
ed25519-dalek = "2.1"
|
|
|
|
# CSV logging
|
|
csv = "1.3"
|
|
|
|
# Progress bars
|
|
indicatif = "0.17"
|
|
|
|
# CLI
|
|
clap = { version = "4.4", features = ["derive", "env"] }
|
|
|
|
# rvCSI: napi-rs (Rust -> Node bindings) + napi-c (C-shim build glue)
|
|
napi = { version = "2.16", default-features = false, features = ["napi8"] }
|
|
napi-derive = "2.16"
|
|
napi-build = "2.1"
|
|
cc = "1.0"
|
|
libc = "0.2"
|
|
|
|
# Testing
|
|
criterion = { version = "0.5", features = ["html_reports"] }
|
|
proptest = "1.4"
|
|
mockall = "0.12"
|
|
wiremock = "0.5"
|
|
|
|
# midstreamer integration (published on crates.io)
|
|
# 0.1.0 was yanked; upgrade to latest 0.3/0.2 releases which pull in
|
|
# quinn-proto >=0.11.14 (fixes RUSTSEC-2026-0037) and
|
|
# rustls-webpki >=0.103.13 (fixes RUSTSEC-2026-0049/0098/0099/0104).
|
|
midstreamer-quic = "0.3"
|
|
midstreamer-scheduler = "0.2"
|
|
midstreamer-temporal-compare = "0.2"
|
|
midstreamer-attractor = "0.2"
|
|
|
|
# ruvector integration (published on crates.io)
|
|
# Vendored at origin/main (a083bd77f) in vendor/ruvector; using crates.io versions
|
|
# until published. Bumps per ADR-152 §2.6 (2026-06-10 vendor sync survey).
|
|
ruvector-core = "2.3.0"
|
|
ruvector-mincut = "2.0.6"
|
|
ruvector-attn-mincut = "2.0.4"
|
|
ruvector-temporal-tensor = "2.0.6"
|
|
ruvector-solver = "2.0.6"
|
|
ruvector-attention = "2.1.0"
|
|
ruvector-crv = "0.1.1"
|
|
ruvector-gnn = { version = "2.2.0", default-features = false }
|
|
|
|
|
|
# Internal crates
|
|
wifi-densepose-core = { version = "0.3.0", path = "crates/wifi-densepose-core" }
|
|
wifi-densepose-physics = { version = "0.1.0", path = "crates/wifi-densepose-physics" }
|
|
wifi-densepose-signal = { version = "0.3.0", path = "crates/wifi-densepose-signal" }
|
|
wifi-densepose-nn = { version = "0.3.0", path = "crates/wifi-densepose-nn" }
|
|
wifi-densepose-api = { version = "0.3.0", path = "crates/wifi-densepose-api" }
|
|
wifi-densepose-db = { version = "0.3.0", path = "crates/wifi-densepose-db" }
|
|
wifi-densepose-config = { version = "0.3.0", path = "crates/wifi-densepose-config" }
|
|
wifi-densepose-hardware = { version = "0.3.0", path = "crates/wifi-densepose-hardware" }
|
|
wifi-densepose-wasm = { version = "0.3.0", path = "crates/wifi-densepose-wasm" }
|
|
wifi-densepose-mat = { version = "0.3.0", path = "crates/wifi-densepose-mat" }
|
|
wifi-densepose-ruvector = { version = "0.3.0", path = "crates/wifi-densepose-ruvector" }
|
|
wifi-densepose-worldmodel = { version = "0.3.0", path = "crates/worldgraph/wifi-densepose-worldmodel" }
|
|
ruforecast-core = { version = "0.1.0", path = "crates/ruforecast/crates/ruforecast-core" }
|
|
ruforecast-model = { version = "0.1.0", path = "crates/ruforecast/crates/ruforecast-model" }
|
|
ruforecast-train = { version = "0.1.0", path = "crates/ruforecast/crates/ruforecast-train" }
|
|
|
|
[profile.release]
|
|
lto = true
|
|
codegen-units = 1
|
|
panic = "abort"
|
|
strip = true
|
|
opt-level = 3
|
|
|
|
[profile.release-with-debug]
|
|
inherits = "release"
|
|
debug = true
|
|
strip = false
|
|
|
|
[profile.bench]
|
|
inherits = "release"
|
|
debug = true
|