Sovereign compute for precision agriculture, irrigation science, and environmental systems. Date: March 24, 2026 Version: 0.10.0 License: AGPL-3.0-or-later
airSpring is the ecological sciences validation study in the ecoPrimals ecosystem. Where hotSpring validates nuclear physics (clean math, f64) and wetSpring validates points in a system (microbiome, mass spectra, PFAS), airSpring validates systems themselves — agricultural fields, soil-plant-atmosphere continua, irrigation networks, and land-water-energy interactions.
Paper benchmarks → Python/R baselines → Real open data → Rust (BarraCuda CPU)
→ GPU (ToadStool shaders, Titan V live) → metalForge (mixed hardware)
→ biomeOS (NUCLEUS atomics, deployment graphs) → Penny Irrigation
| Phase | Status | Key Metric |
|---|---|---|
| Phase 0: Paper baselines (Python) | 1,284/1,284 PASS | 60 papers: FAO-56, soil, IoT, WB, dual Kc, Richards, biochar, yield, CW2D, 8 ET₀ methods, GDD, pedotransfer, ensemble, bias correction, parity, dispatch, Anderson coupling, SCS-CN + Green-Ampt (coupled), VG inverse, full-season WB, MC ET₀ uncertainty, bootstrap/jackknife CI, SPI drought index |
| Phase 0+: Real data pipeline | 15,300 station-days | ET₀ R²=0.97 vs Open-Meteo (100 Michigan stations) |
| Phase 1: Rust validation | 986 lib + 316 integration (1,302 barracuda) + 62 forge = 1,364 total | 91 binaries + 146/146 + 32/32 provenance cross-spring benchmarks (NVK zero-output detection: CPU fallback) |
| Phase 1.5: CPU Benchmark | 13,000× atlas-scale | Rust vs Python: 10M ET₀/s, 6.8M field-days/s (34/34 parity) |
| Phase 2: Cross-validation | 75/75 MATCH | Python↔Rust identical (tol=1e-5), Richards + isotherm included |
| Phase 2.5: Tier B→A GPU | 4 ops GPU-first | Hargreaves (op=6), Kc climate (op=7), dual Kc (op=8), sensor cal (op=5) — ToadStool S70+ absorbed |
| Phase 2.6: Seasonal pipeline | GPU Stages 1-3 | ET₀ + Kc + WB GPU dispatch, multi-field gpu_step(), streaming |
| Phase 2.7: GPU streaming multi-field | 57/57 PASS | M fields × N days, Stage 3 GPU per-day, 6.8M field-days/s (Exp 070) |
| Phase 3: GPU live dispatch | 78/78 PASS | Pure GPU workload validation (Exp 055), 0.04% seasonal parity |
| Phase 3.1: Pure GPU end-to-end | 46/46 PASS | All 4 stages on GPU, 19.7× dispatch reduction (Exp 072) |
| Phase 3.2: Cross-spring rewire | 68/68 PASS | BrentGpu VG inverse, RichardsGpu Picard, full provenance (Exp 073) |
| Phase 3.3: Paper chain validation | 79/79 PASS | Full CPU→GPU→metalForge chain for 28 domains (22 GPU, 6 CPU-only) (Exp 074) |
| Phase 3.4: Upstream GPU lean | 20 ops via BatchedElementwiseF64 |
Ops 0-19 all upstream, local_dispatch retired, PrecisionRoutingAdvice wired (Exp 075+078) |
| Phase 3.5: NPU edge | AKD1000 live | 3 experiments, 95/95 NPU checks, ~48µs inference |
| Phase 3.7: metalForge live | 5 substrates discovered | RTX 4070 + Titan V + AKD1000 + i9-12900K, 27 workloads route |
| Phase 3.8: Mixed-hardware pipeline | 66/66 PASS | 7-stage GPU→NPU PCIe bypass, NUCLEUS mesh routing (Exp 076: 60/60) |
| Phase 3.9: NUCLEUS primal | 45 capabilities | airSpring biomeOS primal, 45 capabilities (science + provenance + cross-spring), JSON-RPC |
| Phase 4.0: Cross-primal pipeline | 28/28 PASS | ecology domain, capability.call routing, cross-primal forwarding |
| Phase 4.1: Full dispatch experiment | 51/51 PASS | CPU vs GPU parity across all domains (Exp 064) |
| Phase 4.2: biomeOS graph experiment | 35/35 PASS | Offline ecology pipeline, deployment graph validated (Exp 065) |
| Phase 4.3: Paper 12 immunological Anderson | 4 experiments | Tissue diversity, CytokineBrain, barrier state, cross-species (Exp 066-069) |
| Phase 4.5: biomeOS composition | 4 graphs | Provenance trio, NestGate routing, niche deploy, cross-spring data exchange |
| Phase 4.6: neuralAPI integration | 3 enhancements | Structured metrics, operation dependencies, cost estimates — Pathway Learner ready |
| Phase 4.7: Penny Irrigation | Vision | Sovereign, consumer hardware |
| Phase 5.6: Deep debt resolution | All findings resolved | v0.8.4: cast lint evolution, eprintln→tracing, hardcoded primal names→constants, deny.toml wildcards=deny, Blaney-Criddle p→benchmark JSON, primal binary refactored (4 modules), Python provenance standardized (20 scripts), CI expanded (cross-compile, metalForge deny, 11 more validation binaries) |
| Phase 5.7: Cross-spring absorption | Zero C deps achieved | v0.8.5: ureq→Songbird IPC (Tower Atomic, zero C deps), IpcError+DispatchOutcome biomeOS alignment, #[expect(reason)] migration, zero-panic validation (top 9 binaries), named physical constants (FAO-56, SCS-CN, AMC), dual-format capability discovery, 58→58 warnings (0 new) |
| Phase 5.8: Deep execution | All 47 binaries zero-panic | v0.8.6: Zero-panic validation expanded from 9→47 binaries, typed compute_dispatch client (toadStool compute.dispatch.submit/result/capabilities), centralized extract_rpc_error(), Python tolerance mirror complete (60 constants), 866 lib tests |
| Phase 5.9: Ecosystem absorption | Zero hardcoded primals | v0.8.7: primal_names::BIOMEOS constant, swapped TOADSTOOL/BEARDOG docs, discovery.rs hardcoding eliminated, #[allow]→#[expect] migration complete, parse_capabilities 4-format support (S156+), collapsible-if (Edition 2024 let-chains), JSON-RPC proptest fuzz (7 properties), PRIMAL_REGISTRY v0.8.7, 880 lib + 22 property tests |
| Phase 5.10: Cross-ecosystem absorption | Health probes, circuit breaker | v0.8.8: health probes, circuit breaker, OrExit, thiserror, socket_env_var, structured tracing, IpcError::is_recoverable |
| Phase 5.11: Cross-ecosystem evolution | All absorbed | v0.8.9: Canonical PRIMAL_NAME/PRIMAL_DOMAIN, OnceLock GPU probe cache, cast module (safe numeric casts), DispatchOutcome<T> library type, coralReef/Squirrel discovery, mul_add() FMA (18 sites), smart refactors (4 monoliths → 19 modules: evapotranspiration, dual_kc, biomeos, validation), composition guidance |
| Phase 5.12: Audit execution | All findings resolved | v0.9.0: #![deny(cast_*)] library strict, 3 new cast helpers (u32_usize, u64_usize, u64_f64), soil_moisture refactored (672→4 submodules), petalTongue 3-tier discovery, primal_dispatch integration tests (14), benchmark JSON provenance for all hardcoded values, CI lint config via Cargo.toml only, hardcoded socket paths removed |
| Phase 5.13: Deep audit execution | All debt resolved | v0.10.0: Provenance registry 11→63 baselines, OrExit zero-panic across all 91 binaries, centralized tolerances (R², RMSE, IA, bio-diversity), #[allow]→#[expect] Rust 2024, smart refactors (data/provider→4 modules, evolution_gaps→resolved_issues), hardcoded primal names→primal_names::* constants, data accession IDs, cast helpers (f64_i32, usize_i32), determinism contract documented |
| Check | Status |
|---|---|
cargo test --lib (barracuda) |
986 passed, 0 failures |
cargo test --tests --all-features (barracuda) |
316 passed (integration + doc tests) |
cargo test --lib (metalForge) |
62 passed, 0 failures |
cargo llvm-cov --lib --fail-under-lines 90 |
90.56% line coverage |
cargo clippy (pedantic + nursery, -D warnings) |
0 warnings (both crates) |
cargo fmt --check |
Clean |
cargo doc --no-deps |
Clean (both crates) |
cargo-deny check |
Clean (AGPL-3.0-or-later, cargo-deny 0.19) |
bench_cross_spring_evolution |
146/146 PASS (release, S87 sync) |
validate_cross_spring_provenance |
32/32 PASS — CPU↔GPU benchmark, 5-spring shader provenance |
validate_dispatch_experiment |
51/51 PASS — CPU/GPU/batch/absorption/pipeline |
validate_biome_graph |
35/35 PASS — graph topology, capabilities, offline pipeline |
| Component | Specification | Status |
|---|---|---|
| CPU | Intel i9-12900K (16C/24T, AVX2) | Live — all CPU paths |
| GPU #1 | NVIDIA RTX 4070 (12 GB, Vulkan, f64) | Live — wgpu adapter 0 |
| GPU #2 | NVIDIA TITAN V (GV100, NVK/Mesa, f64) | Live — 24/24 PASS, BARRACUDA_GPU_ADAPTER=titan |
| NPU | BrainChip AKD1000 (/dev/akida0) |
Live — 95/95 NPU checks |
| RAM | 64 GB DDR5-4800 | |
| OS | Pop!_OS 22.04 (kernel 6.17.9) |
airSpring eco:: (CPU, validated against FAO-56 papers)
│
▼
airSpring gpu:: wrappers (domain-specific batched API)
│
▼
barracuda::ops/linalg/stats/pde/optimize (GPU dispatch + CPU fallback)
│
▼
BarraCuda WGSL shaders (f64 canonical, precision per silicon — 767 shaders)
│
▼
metalForge (mixed CPU + GPU + NPU)
│
▼
bingoCube/nautilus (evolutionary reservoir, drift detection, NPU export)
airSpring domain code (eco::) is validated against papers, then wrapped by GPU orchestrators (gpu::) that bridge to barracuda primitives. The primitives dispatch to ToadStool WGSL shaders for GPU or fall back to CPU. metalForge stages upstream absorption candidates following the "Write → Absorb → Lean" cycle. bingoCube/nautilus provides evolutionary reservoir computing for time-series prediction (ET₀ forecasting, drift detection) with AKD1000 NPU export.
BarraCuda contains 767+ WGSL shaders (pure math + precision per silicon). airSpring uses 6 shared shader families, contributed 3 upstream fixes, and had all local GPU ops absorbed upstream (Write→Absorb→Lean complete):
| Spring | Shaders | What airSpring Gets | What airSpring Gave Back |
|---|---|---|---|
| hotSpring | 56 | df64 core, pow/exp/log/trig f64, df64_transcendentals — VG, atmospheric | TS-001: pow_f64 fractional exponent fix |
| wetSpring | 25 | kriging_f64, fused_map_reduce, moving_window, ridge, diversity metrics | TS-004: reduce buffer N≥1024 fix |
| neuralSpring | 20 | nelder_mead, multi_start, ValidationHarness | TS-003: acos precision boundary fix |
| groundSpring | — | MC ET₀ uncertainty propagation shader | — |
| airSpring | — | Domain consumer + all 6 local ops absorbed upstream (ops 14-19) | Richards PDE (S40), stats metrics (S64), SCS-CN/Stewart/Makkink/Turc/Hamon/Blaney-Criddle (ops 14-19) |
50+ cross-spring absorptions. All metalForge and local GPU ops absorbed. DF64 transcendentals complete (15 functions).
PrecisionRoutingAdvice routes f64 dispatch per-hardware (F64Native, F64NativeNoSharedMem, Df64Only, F32Only).
Upstream provenance registry (barracuda::shaders::provenance) provides cross-spring evolution tracking.
See specs/CROSS_SPRING_EVOLUTION.md.
| airSpring Module | BarraCuda Primitive | Op/Shader | Status |
|---|---|---|---|
gpu::et0 |
batched_elementwise_f64 |
op=0 | GPU-FIRST |
gpu::water_balance |
batched_elementwise_f64 |
op=1 | GPU-STEP |
gpu::sensor_calibration |
batched_elementwise_f64 |
op=5 | Integrated |
gpu::hargreaves |
HargreavesBatchGpu |
dedicated | Integrated |
gpu::kc_climate |
batched_elementwise_f64 |
op=7 | Integrated |
gpu::dual_kc |
batched_elementwise_f64 |
op=8 | Integrated |
gpu::van_genuchten |
batched_elementwise_f64 |
op=9,10 | Integrated (S79) |
gpu::thornthwaite |
batched_elementwise_f64 |
op=11 | Integrated (S79) |
gpu::gdd |
batched_elementwise_f64 |
op=12 | Integrated (S79) |
gpu::pedotransfer |
batched_elementwise_f64 |
op=13 | Integrated (S79) |
gpu::kriging |
kriging_f64::KrigingF64 |
dedicated | Integrated |
gpu::reduce |
fused_map_reduce_f64 |
dedicated | GPU N≥1024 |
gpu::stream |
moving_window_stats |
dedicated | Integrated |
gpu::richards |
pde::richards::solve_richards |
dedicated | Integrated |
gpu::isotherm |
optimize::nelder_mead + multi_start |
dedicated | Integrated |
gpu::mc_et0 |
mc_et0_propagate_f64.wgsl |
dedicated | Integrated |
gpu::jackknife |
JackknifeMeanGpu |
dedicated | Integrated (S79) |
gpu::bootstrap |
BootstrapMeanGpu |
dedicated | Integrated (S79) |
gpu::diversity |
DiversityFusionGpu |
dedicated | Integrated (S79) |
gpu::stats |
linear_regression_f64 + matrix_correlation_f64 |
dedicated | Integrated |
gpu::runoff |
batched_elementwise_f64 |
op=17 | GPU-FIRST (v0.7.2, absorbed upstream) |
gpu::yield_response |
batched_elementwise_f64 |
op=18 | GPU-FIRST (v0.7.2, absorbed upstream) |
gpu::simple_et0 |
batched_elementwise_f64 |
ops 14-16, 19 | GPU-FIRST (v0.7.2, absorbed upstream) |
eco::correction::fit_ridge |
linalg::ridge::ridge_regression |
CPU | Integrated |
eco::richards::inverse_vg_h |
optimize::brent |
CPU | Integrated |
eco::diversity |
stats::diversity |
CPU | Leaning |
eco::drought_index |
special::gamma::ln_gamma |
CPU | New (v0.7.4) |
gpu::seasonal_pipeline |
Chains ops 0→7→1→yield | fused | CPU + GpuPipelined |
gpu::atlas_stream |
UnidirectionalPipeline |
streaming | CPU chained |
Also wired: validation::ValidationHarness (neuralSpring), stats::pearson, spearman, bootstrap_ci, stats::metrics re-exports (airSpring→upstream S64).
25 Tier A GPU modules (ops 0-19 all upstream via BatchedElementwiseF64) + jackknife/bootstrap/diversity uncertainty stack. local_dispatch retired (v0.7.2 Write→Absorb→Lean complete). PrecisionRoutingAdvice wired (v0.7.3). Upstream provenance registry integrated.
See barracuda/src/gpu/evolution_gaps.rs and barracuda/EVOLUTION_READINESS.md for the full roadmap.
Run cargo run --release --bin bench_cpu_vs_python. 24 algorithms, same f64
precision, same inputs, same outputs. 14.3× geometric mean includes the seasonal
pipeline (ET₀→Kc→WB→Yield chain) and Paper 12 immunological modules. Individual
algorithm speedups range from 5× to 124× for pure compute, with 21/21 CPU-GPU
parity modules validated via validate_cpu_gpu_comprehensive.
# Python baselines (Phase 0)
pip install -r control/requirements.txt
python scripts/download_open_meteo.py --all-stations --growing-season 2023
bash run_all_baselines.sh
# Rust validation (Phase 1)
cd barracuda && cargo test
cargo run --release --bin validate_et0
# Benchmarks
cargo run --release --bin bench_cpu_vs_python
cargo run --release --bin bench_airspring_gpuNo institutional access required. Zero synthetic data in the default pipeline.
| Layer | Source | Purpose | API Key |
|---|---|---|---|
| Benchmark | FAO-56 tables, Dong 2020/2024 | Ground truth (digitized) | None |
| Open Data | Open-Meteo archive | 80+ yr Michigan weather | None (free) |
| Open Data | OpenWeatherMap | Current + 5-day forecast | testing-secrets/ |
| Open Data | NOAA CDO (GHCND) | Historical daily | testing-secrets/ |
| Open Data | USDA Web Soil Survey | Soil properties | None |
| Fallback | Synthetic generation | Only if API unreachable | N/A |
Younsuk Dong, PhD — Assistant Professor & Irrigation Specialist, Biosystems and Agricultural Engineering, Michigan State University.
The Problem: Agricultural irrigation consumes ~70% of global freshwater withdrawals. Current precision irrigation relies on proprietary sensor systems ($500-$5000/field) and vendor-locked software.
Computational Methods: FAO-56 PM ET₀, Topp equation soil calibration, IoT field monitoring, FAO-56 Ch 8 water balance scheduling, FAO-56 Ch 7 dual Kc with cover crops and no-till mulch.
Richards equation (unsaturated flow — open-source alternative to HYDRUS), biochar adsorption isotherms (Langmuir/Freundlich), long-term water balance (60-year reconstruction via ERA5).
- Dong et al. (2020) "Soil moisture sensor evaluation in Michigan soils" Agriculture 10(12), 598
- Dong & Hansen (2023) "Affordable weighing lysimeter design" Smart Ag Tech 4, 100147
- Dong et al. (2024) "In-field IoT for precision irrigation" Frontiers in Water 6, 1353597
- Ali, Dong & Lavely (2024) "Irrigation scheduling vs yield" Ag Water Mgmt 306, 109148
- Dong et al. (2019) "Land-based wastewater modeling using HYDRUS CW2D" J. SWBE 5(4)
- Kumari, Dong & Safferman (2025) "Phosphorus adsorption using biochar" Applied Water Sci 15(7)
airSpring/
├── control/ # Phase 0: Python baselines (1284/1284, 47 scripts)
│ ├── fao56/ ... drought_index/ # 47 paper controls
│ ├── coupled_runoff_infiltration/ # Coupled SCS-CN + Green-Ampt (292/292)
│ ├── mc_et0/ # Monte Carlo ET₀ uncertainty propagation (47/47)
│ ├── bootstrap_jackknife/ # Bootstrap & Jackknife CI (20/20)
│ ├── drought_index/ # SPI drought index (20/20)
│ └── requirements.txt
├── barracuda/ # Phase 1+3: Rust validation + GPU dispatch (943 lib + 316 integration/doc = 1,259 tests, 91 binaries, barraCuda 0.3.7 / wgpu 28, Edition 2024)
│ ├── src/
│ │ ├── biomeos/ # biomeOS socket resolution + primal discovery (3 sub-modules)
│ │ ├── eco/ # Domain modules (22 validated, 8 ET₀ + runoff + infiltration + VG + Anderson + tissue + cytokine + drought_index)
│ │ ├── gpu/ # ToadStool/BarraCuda GPU bridge (25 Tier A, ops 0-19 upstream + BrentGpu + RichardsGpu)
│ │ ├── data/ # Data provider abstraction (HttpProvider, BiomeosProvider, NestGateProvider)
│ │ ├── ipc/ # Inter-primal communication (provenance trio integration)
│ │ ├── nautilus.rs # bingoCube/nautilus evolutionary reservoir (NautilusBrain v0.1.0)
│ │ ├── rpc/ # JSON-RPC 2.0 IPC (error.rs, transport.rs, mod.rs)
│ │ ├── npu.rs # BrainChip AKD1000 NPU (feature-gated)
│ │ ├── tolerances/ # Domain-specific validation tolerances (58 named, 4 submodules)
│ │ └── bin/ # validate_*, bench_*, airspring_primal (91 declared)
│ ├── tests/ # Integration + property tests (15 files + common/)
│ └── Cargo.toml # v0.10.0 (barraCuda 0.3.7, wgpu 28)
├── niches/ # BYOB niche definitions (airspring-ecology.yaml)
├── metalForge/ # Mixed hardware dispatch (CPU+GPU+NPU)
│ ├── deploy/ # biomeOS deployment graphs (airspring_deploy.toml)
│ └── forge/ # airspring-forge (62 tests, 6 binaries, live hardware probe)
├── specs/ # Specifications and requirements
│ ├── PAPER_REVIEW_QUEUE.md # Paper reproduction queue (87 experiments)
│ ├── BARRACUDA_REQUIREMENTS.md# GPU + NPU kernel requirements
│ └── CROSS_SPRING_EVOLUTION.md # Cross-spring shader provenance (S87)
├── whitePaper/ # Methodology and study documentation
│ └── baseCamp/ # Per-faculty research briefings + baseCamp extensions
├── experiments/ # Experiment protocols and results (87 experiments)
├── wateringHole/ # Spring-local handoffs to ToadStool/BarraCuda
│ └── handoffs/ # Versioned handoffs (V010 current)
├── graphs/ # biomeOS deployment graphs (eco pipeline, provenance pipeline, niche deploy, cross-primal)
├── CHANGELOG.md # Keep-a-Changelog versioned history
├── CONTROL_EXPERIMENT_STATUS.md # Detailed experiment log
└── LICENSE # AGPL-3.0-or-later
| hotSpring | wetSpring | airSpring | |
|---|---|---|---|
| Domain | Nuclear physics | Life/analytical science | Ecological systems |
| Scale | Nucleus (fm) | Cell/molecule | Field/watershed |
| Validation | Binding energies | Organism/PFAS ID | ET₀, yield, water balance |
| Baseline | Python/scipy | Galaxy/QIIME2/asari | FAO-56/Python/R |
| Data | AME2020 (IAEA) | GenBank, MassBank | Open-Meteo, NOAA, FAO |
| GPU layer | ToadStool (wgpu) | ToadStool | ToadStool |
| Success metric | chi² match | Same taxonomy/PFAS | Same ET₀/yield |
| Ultimate goal | Sovereign nuclear | Penny water monitoring | Penny irrigation |
| Document | Purpose |
|---|---|
CHANGELOG.md |
Versioned change history |
CONTROL_EXPERIMENT_STATUS.md |
Detailed experiment results (87 experiments) |
barracuda/EVOLUTION_READINESS.md |
Tier A/B/C GPU evolution, absorbed/stays-local |
metalForge/ABSORPTION_MANIFEST.md |
6/6 modules absorbed upstream (S64+S66), 27 workloads |
metalForge/forge/ |
Mixed hardware dispatch: live probe + capability routing |
specs/CROSS_SPRING_EVOLUTION.md |
Cross-spring shader provenance (S87) |
specs/PAPER_REVIEW_QUEUE.md |
Paper reproduction queue (87 experiments) |
whitePaper/baseCamp/README.md |
Faculty research briefings + baseCamp extensions |
wateringHole/handoffs/ |
ToadStool/BarraCuda handoffs (V010 current) |
AGPL-3.0-or-later
March 24, 2026 — v0.10.0. Deep audit execution complete. cargo-deny 0.19 evolved
(SPDX AGPL-3.0-or-later, CC0-1.0 allowance, blake3 cc wrapper, version-pinned
path deps). Coverage expanded: validation/json, ipc/provenance, ipc/compute_dispatch,
niche — 90.56% line coverage (fail-under-lines 90 passes). evolution_gaps.rs synced
to v0.10.0 / barraCuda 0.3.7. #[expect]→#[allow] for shared test infra
(tests/common/mod.rs). const assert for compile-time tolerance contract.
986 lib + 316 integration/doc = 1,302 barracuda tests; 62 forge; 1,364 total tests.
0 failures. Clippy pedantic+nursery zero warnings. Zero unsafe. Zero C deps.
Zero hardcoded primals. AGPL-3.0-or-later.