Files
ruvnet--RuView/v2/crates/wifi-densepose-train/Cargo.toml
T
ruv 99fea9df9b fix(adr-185): drop dead wifi-densepose-nn dep from train to slim [meridian] wheel
Root cause (investigated, same rigor as the MAT fix): `wifi-densepose-train`
declared `wifi-densepose-nn` as a dependency but NEVER imported it anywhere
in src/ or bin/ — a dead dependency. (The tch-backend model path uses the
`tch` crate directly, not wifi-densepose-nn; `grep -r wifi_densepose_nn
src/` returns nothing.) That dead dep pulled `ort` (ONNX Runtime) +
reqwest/hyper into every downstream consumer, including the ADR-185
`[meridian]` wheel, which binds only train's pure-compute geometry /
rapid_adapt / eval modules + signal::hardware_norm.

`cargo tree -i wifi-densepose-nn` confirmed train was the SOLE path pulling
nn into the wheel; after removal, the package is absent from the graph.

Fix: remove the dead dep line from train's Cargo.toml (no code change, no
feature-gating needed — nothing referenced it). Not a hoist: the coupling
turned out to be nonexistent, not deep.

Measured (maturin build --release --features meridian --strip):
  BEFORE: 1.8 MB   AFTER: 1.7 MB   (both already within the ADR-117 §5.4
  <=5 MB budget). Honest note: unlike MAT — which instantiates OnnxSession
  and thus bundles the ort native runtime (8.4 MB) — train never references
  ort, so the native lib was dead-stripped and the wheel was already under
  budget. The real win is removing ort/reqwest/hyper from train's dependency
  graph and compile for ALL consumers, not a dramatic wheel shrink.

Verified:
  cargo build -p wifi-densepose-train                       (default=[]) OK
  cargo tree -i wifi-densepose-nn  -> no longer in the graph
  cargo test --features meridian --test meridian_parity     2/2 pass
  maturin develop --features meridian + pytest test_meridian 13/13 pass
2026-07-21 17:30:33 -07:00

110 lines
3.3 KiB
TOML

[package]
name = "wifi-densepose-train"
version = "0.3.2"
edition = "2021"
authors = ["rUv <ruv@ruv.net>", "WiFi-DensePose Contributors"]
license = "MIT OR Apache-2.0"
description = "Training pipeline for WiFi-DensePose pose estimation"
repository = "https://github.com/ruvnet/wifi-densepose"
documentation = "https://docs.rs/wifi-densepose-train"
keywords = ["wifi", "training", "pose-estimation", "deep-learning"]
categories = ["science", "computer-vision"]
readme = "README.md"
[[bin]]
name = "train"
path = "src/bin/train.rs"
[[bin]]
name = "verify-training"
path = "src/bin/verify_training.rs"
required-features = ["tch-backend"]
# AetherArena (ADR-149) deterministic score runner — the CI harness-gate entry
# point. Pure ruview_metrics (ndarray + sha2), no torch, so it builds and runs
# under --no-default-features for a fast, GPU-free PR gate.
[[bin]]
name = "aa_score_runner"
path = "src/bin/aa_score_runner.rs"
[features]
default = []
tch-backend = ["tch"]
cuda = ["tch-backend"]
[dependencies]
# Internal crates
wifi-densepose-signal = { version = "0.3.0", path = "../wifi-densepose-signal", default-features = false }
# NOTE: `wifi-densepose-nn` was declared here but never imported anywhere in
# this crate's src/ or bin/ (the tch-backend model path uses `tch` directly,
# not this crate). It was a dead dependency that pulled `ort` (ONNX Runtime) +
# reqwest/hyper into every downstream consumer — including the ADR-185
# `[meridian]` wheel. Removed to slim the dependency graph. Inference at
# serving time is done via `wifi-densepose-nn` by the binaries that actually
# load models, which depend on it directly.
# Core
thiserror.workspace = true
anyhow.workspace = true
serde = { workspace = true, features = ["derive"] }
serde_json.workspace = true
# Tensor / math
ndarray.workspace = true
num-complex.workspace = true
num-traits.workspace = true
# PyTorch bindings (optional — only enabled by `tch-backend` feature)
tch = { workspace = true, optional = true }
# Graph algorithms (min-cut for optimal keypoint assignment)
petgraph.workspace = true
# ruvector integration (subpolynomial min-cut, sparse solvers, temporal compression, attention)
ruvector-mincut = { workspace = true }
ruvector-attn-mincut = { workspace = true }
ruvector-temporal-tensor = { workspace = true }
ruvector-solver = { workspace = true }
ruvector-attention = { workspace = true }
# Data loading
ndarray-npy.workspace = true
memmap2 = "0.9"
walkdir.workspace = true
# Serialization
csv.workspace = true
toml = "0.8"
# Logging / progress
tracing.workspace = true
tracing-subscriber.workspace = true
indicatif.workspace = true
# Async (subset of features needed by training pipeline)
tokio = { workspace = true, features = ["rt", "rt-multi-thread", "macros", "fs"] }
# Crypto (for proof hash)
sha2.workspace = true
# CLI
clap.workspace = true
# Time
chrono = { version = "0.4", features = ["serde"] }
[dev-dependencies]
criterion.workspace = true
proptest.workspace = true
tempfile = "3.10"
approx = "0.5"
# Used by tests/test_real_loader.rs to write .npy fixtures that exercise the
# real MmFiDataset disk-loading path (the deterministic proof uses the
# in-memory SyntheticCsiDataset, which bypasses .npy parsing).
ndarray.workspace = true
ndarray-npy.workspace = true
[[bench]]
name = "training_bench"
harness = false