All notable changes to ludoSpring are documented in this file.
Format follows Keep a Changelog. This project does not use SemVer — versions are session-sequential (V1–V53).
- Method constants centralized: Expanded
ipc/methods.rswithactivation,math,noise,compute,storage,dag,braid,ai,spine,tensormodules. All raw string literals in production IPC code replaced with constants. Compile-time consistency test verifies key capabilities matchniche::CAPABILITIES. - IpcError source chaining: Added
From<serde_json::Error>andFrom<std::io::Error>forIpcError, eliminating.to_string()error conversion across IPC modules. - RpcClient extracted: New
ipc/rpc_client.rsprovides a sharedRpcClientstruct for Unix socket JSON-RPC 2.0 operations. Refactoredneural_bridge.rs,push_client.rs,discovery/mod.rs, andbtsp.rsto delegate transport toRpcClient, removing ~120 lines of duplication. - Capability-first niche:
NicheDependencystruct evolved:namereplaced byhint_name: Option<&'static str>,capabilityreordered as primary key. Discovery resolves by capability first, falling back tohint_namefor socket filename matching. - Typed library errors:
VoxelError,BaselineError,ComparisonError(thiserrorenums) replaceResult<_, String>ingame/voxel.rs,validation/mod.rs,composition_targets.rs. - Typed binary errors:
CliError(thiserror) replacesResult<_, String>acrossludospringcommands,validate_all(RunnerError), andvalidate_primal_proof(now usesIpcErrorviaRpcClient). - File refactors:
envelope.rsinline tests extracted toenvelope_tests.rs(824 → 409 lines).ludospring_guidestone.rs(812 lines) split intoguidestone/module directory:main.rs,constants.rs,tier1.rs,tier2.rs,tier3.rs(all under 220 lines). - Zero regressions: 656/656 non-environment-dependent tests pass.
Clippy clean with
-D warningsacross all features.
- Upstream composition tooling absorbed:
nucleus_composition_lib.sh(reusable NUCLEUS wiring: discovery, DAG, ledger, braids, petalTongue, sensor stream),composition_nucleus.sh(parameterized launcher replacing ad-hoc startup). Sourced from primalSpring's TTT reference implementation. ludo_composition.sh: Domain-specific interactive game science composition. Three modes: Fitts law pointing task (randomized targets, barraCuda ID computation), reaction time / Hick's law (go/no-go with variable delay), free explore DAG sandbox (undo, branches, merkle). All modes wire DAG → ledger → braid provenance.- Exploration lane: Interaction fidelity and real-time feedback — multi-player input routing, continuous vs event-driven rendering, DAG branching for game state time-travel, braid replay integrity, petalTongue stress testing.
- New PGs noted: PG-45 (rhizoCrypt UDS no JSON-RPC response), PG-46 (toadStool slow on short timeouts), PG-47 (barraCuda missing stats.entropy), PG-48 (petalTongue plasmidBin musl + winit threading), PG-39 (graph schema mismatch).
- Live composition tested (FAMILY_ID=nucleus01): 5/7 capabilities discovered (visualization, security, compute, tensor, attribution). DAG and ledger offline (PG-45, GAP-07). Fitts ID sweep (W=20..100, Shannon variant confirmed), Hick bits sweep (n=2..16, log₂(n) confirmed). sweetGrass braids with full JSON-LD provenance. Scene push/dismiss, interaction subscribe/poll verified.
- Findings: petalTongue v1.6.6 missing
proprioception.get,motor.continuous;capability.listdoesn't enumerate viz/interaction methods.uds_rpc.pycreated as socat fallback (python3 UDS transport).
- Cell graph v2.0: Synced from primalSpring v0.9.17 (commit 8bb90fb).
biomeOS-compatible
[[nodes]]format withby_capabilityrouting. - cell_launcher.sh: Portable cell deployment from plasmidBin — starts all 12 primals in dependency order, auto-generates BTSP seed, health checks.
- nucleus_launcher.sh: Fixed BearDog
NODE_ID, Songbird--beardog-socket, petalTongueservermode (no--socketflag). - GAP-07 RESOLVED: loamSpine startup panic fixed upstream (PG-33, d34100f).
- GAP-11 RESOLVED: barraCuda Fitts/Hick convention is intentional (PG-38).
Default is Shannon/log₂(n); pass
variant: "fitts"orinclude_no_choice: truefor textbook formulas. - Live composition verified: 18/20 capabilities through NUCLEUS, 5 primals with sockets via nucleus_launcher, game.tick loop in 0.6ms (200x headroom).
- downstream_manifest.toml: ludospring entry now
guidestone_validation = "composition",composition_model = "pure", withvisualization.render.sceneinteraction.pollin validation capabilities.
Springs are NOT primals — they produce primals and define compositions.
The ludospring binary in plasmidBin was an oversight from the Rust
validation round. V53 corrects this: game science capabilities are now
served by composing existing primals via the NUCLEUS cell graph, not by
deploying a spring binary.
- plasmidBin entry transformed: Removed
ludospringbinary fromplasmidBin/ludospring/. Metadata transformed from binary primal description to composition manifest with[composition]section, capability routing table, and primal dependency list. - Cell graph evolved:
ludospring_cell.tomlno longer has aludospringnode. Game science capabilities route to barraCuda (math.*,activation.*,stats.*,noise.*), petalTongue (visualization.*,interaction.*), Squirrel (ai.*), and the provenance trio. 12 primal nodes (was 14 — removed ludospring node and biomeOS infra node). - Gaming niche graph evolved:
ludospring_gaming_niche.tomlreplacesgerminate_ludospringwithgerminate_barracudafor game math. Validation checks barraCuda health instead of ludospring. - manifest.lock updated: ludospring moved from
[springs.*]to[compositions.ludospring_game]— a composition entry with cell graph reference and 11-primal dependency list. - GAP-10 resolved: The
game.*primal identity gap is resolved by the pure composition model. Game science methods map to barraCuda capabilities (activation.fitts,math.sigmoid, etc.) — no standalonegamedomain primal needed. - Spring binary unchanged: The
ludospringbinary in the source tree (target/release/ludospring) continues as the Rust validation target (tier 2 of the 3-tier ladder: Python → Rust → Composition). 817 workspace tests continue to validate the Rust tier.
Wires the full desktop game loop: push scene → poll interactions → record action → compute metrics → respond. Three new handlers complete the composition pattern for live desktop-style gameplay through petalTongue.
game.tickcomposite handler: One RPC call performs a full game loop tick — pushes scene to petalTongue, polls interaction events, records player action in the provenance DAG, computes engagement metrics, and returns combined game state. Usesis_skip_errorfor graceful degradation when petalTongue is absent.game.subscribe_interactionhandler: Subscribes to petalTongue input events withis_skip_errordegradation.game.poll_interactionhandler: Polls petalTongue for pending input events withis_skip_errordegradation.handle_push_sceneevolved: Now classifies errors semantically viais_skip_error()— reportsdegraded: truewhen petalTongue is absent instead of opaque error strings.- 30 capabilities (was 27): New methods registered in niche, capability domains, operation dependencies, and cost estimates.
ludospring_cell.toml: New cell graph defines the full NUCLEUS deployment for desktop gameplay — 14 nodes (Tower, Node, Nest, Springs, AI, Store) with all interaction loop methods.- Deploy graphs updated:
ludospring_gaming_niche.tomlandgame_loop_continuous.tomlnow includeinteraction.pollnode and all new capability mappings. - 9 new tests:
GameTickParams,SubscribeInteractionParams,PollInteractionParamsdeserialization, handler dispatch for all new methods, push_scene degraded field. - 817 tests, zero clippy warnings.
Absorbed upstream primalSpring v0.9.17 composition patterns (commits
0844c5c, 49c0eab) — method constants, skip-error semantics, and
visualization method routing.
ipc::methodsmodule: New module mirrorsprimalspring::ipc::methodsfor the visualization, interaction, health, lifecycle, and capability domains. All constants are&strcompile-time constants usable in match arms. Replaces ~30 hardcoded string literals across dispatch and push paths — eliminates the class of typo-induced silent routing failures.- Handler dispatch evolved:
dispatch_lifecycleanddispatch_infrastructureinhandlers/mod.rsnow match onmethods::visualization::*,methods::interaction::*, etc. instead of string literals. All sixneural.rsdispatch functions (render, management, degraded, no-peer) similarly evolved. VisualizationPushClientevolved: All 8 RPC method strings inpush_client.rs(push_render,push_stream,push_scene,push_dashboard,export,subscribe_interaction,poll_interaction,validate,probe_with_capability) replaced withipc::methodsconstants.IpcError::is_skip_error(): New query method mirrors upstreamprimalspring::composition::is_skip_error. Returnstruefor connection errors and protocol errors — enables thecall_or_skipgraceful degradation pattern when petalTongue is absent.- 2 new tests:
methods::tests::all_constants_are_dottedvalidates all 19 method constants,is_skip_error_for_connection_and_protocolvalidates the skip-error classification. - 810 tests, zero clippy warnings.
Absorbed the upstream IpcError pattern from primalSpring v0.9.17 (commit
0844c5c). The last Result<_, String> debt in ludoSpring's IPC layer is gone.
- IPC client modules: All 43 public functions across
loamspine,sweetgrass,rhizocrypt,provenance/mod,nestgate,squirrel,toadstool,coralreef, andcompositionnow returnResult<_, IpcError>instead ofResult<_, String>. classify_io_error: New helper mirrors upstream — classifiesio::Errorinto semanticIpcErrorvariants (Connect,Timeout,Io).- Query methods aligned with upstream: Added
is_connection_error(),is_timeout_likely(),is_protocol_error()to localIpcError, matching primalSpring's query API. JsonRpcError::internal(): Widened from&strtoimpl Display, enabling callers to passIpcErrordirectly without.to_string().cmd_server: Evolved fromResult<(), String>toResult<(), IpcError>, usingclassify_io_errorfor I/O paths.- Zero
Result<_, String>in IPC layer: The entirebarracuda/src/ipc/directory has zeroResult<_, String>function signatures remaining. - 9 new tests covering
classify_io_error, query methods, andinternal()withIpcErrordisplay.
Systematic audit and evolution of remaining deep debt across the codebase.
- Handler test extraction: Extracted 650+ lines of inline tests from
ipc/handlers/mod.rs(818L → 169L) toipc/handlers/tests.rs. Production dispatch module is now concise and readable. - Capability-based discovery:
validate_primal_proof.rsnow discovers barraCuda bycompute/tensorcapability fromniche::DEPENDENCIESinstead of hardcoded socket names.validate_composition.rsderives fallback socket names fromniche::NICHE_NAME/NICHE_DOMAINconstants. - MCP surface complete:
tools.callandmcp_tools_descriptorsnow expose all 15game.*methods (addedgame.record_action,game.voice_check). Previously only 13 were wired. base64external dep removed: Replaced with 20-line inlinebase64_encode(standard alphabet, padding). One fewer transitive dependency. RFC 4648 test vectors validate correctness.- Typed errors in BTSP: All
Result<_, String>inipc/btsp.rsevolved toResult<_, IpcError>—beardog_call,write_json_line,write_error_frame,classify_first_line,perform_handshakenow use the typed error hierarchy (Connect,Io,Serialization,RpcError,NotFound,NoResult). - Named constants:
ACCEPT_POLL_MSreplaces magic50in server accept loop.DEFAULT_FAMILY_IDreplaces inline"default"string inniche.rs. - Tests: 798 → 799 (+1:
base64_encode_known_vectors). - Clippy: zero warnings (workspace-wide).
Absorbs primalSpring v0.9.17 Phase 45c downstream audit. Implements the three highest-priority debt items identified in the cell graph composition review.
- BTSP relay pattern: Full 4-step BearDog handshake in
ipc/btsp.rsperSOURDOUGH_BTSP_RELAY_PATTERN.md. Auto-detects BTSP ClientHello vs. plain JSON-RPC on first line. Gates onFAMILY_IDviabtsp_required(). The ludoSpring IPC server (ludospring-barracuda) now speaks BTSP when deployed in a NUCLEUS cell graph withsecurity_model = "btsp". interaction.pollwired: Newpoll_interaction()method onVisualizationPushClientcalls petalTongue'sinteraction.pollJSON-RPC. Dispatched through infrastructure tier (viz_management_dispatch). Degraded fallback returns empty events when no viz primal is discovered. This is the missing return path for the live interaction loop:game.push_scene → petalTongue → player → interaction.poll → game.record_action.- Honest
push_scene:handle_push_scenenow reports actual push status (pushed: true/false) and propagates error details instead of silently swallowing failures. Wire contract is honest telemetry. - plasmidBin→genomeBin in ludospring.rs: CLI help and log strings updated.
- Tests: 791 → 798 (+7: BTSP relay, interaction.poll, honest push_scene).
- Clippy: zero warnings (workspace-wide).
- Cell graph ready:
primalSpring/graphs/cells/ludospring_cell.tomldeclares 14 nodes, allsecurity_model = "btsp",ludospring-barracudaat order 12.
First live NUCLEUS validation of ludospring_guidestone: deployed 12 primals
from genomeBin, ran the guideStone externally — 54/54 checks passed (2 skipped),
exit 0. All three tiers validated against real primal IPC.
- Live NUCLEUS deployment: 12 primals from genomeBin (barraCuda built from source, 11 from plasmidBin x86_64 binaries). BearDog, NestGate, barraCuda, sweetGrass, toadStool alive on UDS.
- 54/54 checks passed (2 expected skips: toadStool protocol mismatch,
compute.capabilities connection reset).
- Tier 1: 31/31 bare (20 structural + 11 BLAKE3).
- Tier 2: 13/13 pass + 2 skip — Fitts, Hick, sigmoid, log2, mean, variance, std_dev, Perlin, rng, tensor.create, tensor.matmul (ID-based), health.
- Tier 3: 8/8 cross-atomic — BearDog
crypto.hash(base64 payload→base64 BLAKE3), NestGate storage roundtrip, cross-atomic pipeline (hash→store→retrieve→verify).
- Upstream absorption: local
call_or_skip()andis_skip_error()removed; now imported fromprimalspring::composition. - v1.2.0 tolerance ordering: full 7-constant invariant validated.
guidestone_propertiesmanifest field: All 5 properties = true.- IPC formulation divergence (GAP-11): barraCuda uses different Shannon formulations for Fitts/Hick and sample variance (ddof=1). IPC checks now use barraCuda-expected values. Bare checks retain Python golden values. Both are deterministic and documented.
- tensor.matmul: Now uses multi-step create→matmul flow with tensor IDs
(barraCuda API requires
lhs_id/rhs_id, not inline matrices). - BearDog crypto.hash: Payload sent as base64; hash received as base64 (44 chars, not 64-char hex). Length check updated.
extract_any_scalar: Handles{"result": [value]}array-wrapped scalars (barraCuda's response format for math.sigmoid, math.log2).- genomeBin v5.1: All deployment references updated.
- NUCLEUS deployment env vars documented:
BEARDOG_FAMILY_SEED,BEARDOG_NODE_ID,SONGBIRD_SECURITY_PROVIDER,NESTGATE_JWT_SECRET. - GAP-11: barraCuda formulation divergence documented.
- Tests: 791 total (unchanged).
Evolved ludospring_guidestone from readiness 3 (bare works) to readiness 4
(NUCLEUS validated) following primalSpring v0.9.16 three-tier pattern.
- Three-tier architecture:
- Tier 1 — LOCAL_CAPABILITIES (20 bare checks): 5 certified properties
including BLAKE3 checksum manifest verification (Property 3, guideStone
standard v1.1.0 via
primalspring::checksums::verify_manifest). - Tier 2 — IPC-WIRED (15 checks): domain science via composition IPC
to barraCuda. Protocol tolerance: Songbird/petalTongue HTTP-on-UDS
classified as SKIP via
is_protocol_error() || is_transport_mismatch(). - Tier 3 — FULL NUCLEUS (8 checks): cross-atomic validation —
BearDog
crypto.hash(BLAKE3 64-char hex), NestGatestorage.store/storage.retrieveroundtrip, cross-atomic pipeline (hash → store → retrieve → verify).
- Tier 1 — LOCAL_CAPABILITIES (20 bare checks): 5 certified properties
including BLAKE3 checksum manifest verification (Property 3, guideStone
standard v1.1.0 via
- Protocol tolerance:
is_skip_error()helper classifies connection, protocol, and transport mismatch errors as SKIP (not FAIL). - BLAKE3 Property 3:
checksums::verify_manifest(v, "validation/CHECKSUMS")per guideStone standard v1.1.0. - Check naming:
bare:*(Tier 1),ipc:*(Tier 2),nucleus:*(Tier 3). validation/CHECKSUMS: BLAKE3 manifest (11 files) for Property 3 self-verification — guideStone source, Python baselines, composition targets. Tier 1 bare check count grows to 31 when manifest is present (20 structural + 11 file integrity viap3:checksum:*).- exp054 fix: Edition 2024 implicit-borrow pattern in
coordination.rs. #[expect]migration:python_parity.rs#[allow(clippy::cast_precision_loss)]→#[expect(..., reason = "...")].- Tests: 791 total (up from 790+).
- Quality table: Updated to 791 tests, 60+
#[expect]sites documented.
ludoSpring now has a proper guideStone binary (ludospring_guidestone)
that uses the primalSpring composition API rather than raw IPC socket
calls. The guideStone carries five certified properties validated in
bare mode (no primals needed), discovers NUCLEUS primals via capability-
based routing, and validates domain science against Python golden values.
ludospring_guidestonebinary: Level 5 guideStone. Three layers:- Layer 0 (Bare): 15 checks across 5 certified properties — determinism (recompute Fitts, Hick, sigmoid, log2, mean, variance from formulas), traceability (7 golden values sourced to papers), self-verification (tamper detection via tolerance guard), environment-agnostic (pure Rust), tolerance ordering (DETERMINISTIC < IPC_ROUND_TRIP ≤ WGSL_SHADER).
- Layer 1 (Discovery):
validate_livenessfortensor+compute. - Layer 2 (Domain Science): 15 composition IPC checks — Fitts, Hick,
sigmoid, log2, stats.mean, stats.variance, stats.std_dev, Perlin,
rng.uniform, tensor.create, tensor.matmul (identity parity),
compute.capabilities, health.readiness.
Exit 0/1/2 (certified/failed/bare-only). Requires
guidestonefeature.
- Bare mode achieves readiness Level 3: guideStone passes all structural checks without any live primals, producing exit 2 with zero failures.
primalspringdependency: Optional path dep gated behindguidestonefeature.validate_allupdated: Includesludospring_guidestonewith exit-2 skip.- CI updated:
cargo build --features guidestonestep. validate_primal_proofretained: Raw IPC validator for comparison/fallback.
The primal proof is operational: validate_primal_proof calls barraCuda
over JSON-RPC UDS (not library imports) and compares results against
Python golden values. This is the first binary that proves ludoSpring's
domain math works through the sovereign primal compute stack.
validate_primal_proofbinary: Level 5 validator. Discovers barraCuda socket (env overrideBARRACUDA_SOCKor XDG scan), calls 10 IPC methods (activation.fitts,activation.hick,math.sigmoid,math.log2,stats.mean,stats.std_dev,noise.perlin2d,rng.uniform,tensor.create,health.liveness), compares scalar results against Python baseline golden values usingANALYTICAL_TOL. Exit 0/1/2 (pass/fail/skip). Requiresipcfeature.validate_allupdated: Includesvalidate_primal_proofwith exit-2 skip handling.- GAP-02 updated: Status
PARTIAL— 10 barraCuda methods validated via IPC; domain-level methods (math.flow.evaluate,math.engagement.composite) remain gaps for upstream absorption. - Validation ladder status: Level 1 (Python) ✓, Level 2 (Rust) ✓, Level 3 (IPC composition) ✓, Level 5 (primal proof) ✓ (core math), Level 6 (clean-machine) pending.
The full validation lifecycle is now wired end-to-end: Python baselines
validate Rust library code (Layer 1), Rust library produces golden
composition_targets.json (Layer 2), and IPC calls validate primal
composition against those golden targets (Layer 3).
validate_compositionbinary: Layer 3 IPC validator. Loads golden targets fromcomposition_targets.json, discovers ludoSpring socket, callsgame.*methods over JSON-RPC, compares to golden values. Validateslifecycle.compositionreport and health probes. Exit 0/1/2 (pass/fail/skip). Requiresipcfeature.composition_parity.rs(Layer 2.5): 6 integration tests validating every method group incomposition_targets.jsonagainst direct library calls — catches drift before IPC testing.check_composition_driftexample: Analogous tocheck_drift.pyfor Python baselines. Recomputes all targets, compares to stored JSON. Runs in CI.composition_targets.jsonexpanded: Addedgame.wfc_step(WFC entropy collapse), expanded_provenancewithmethodsarray andpending_regenerationflag. 7 method groups with named tolerances.validate_allupdated: Runsvalidate_compositionwith exit-2 skip handling (server not running = honest skip, not failure).- IPC Fitts dispatch expanded:
handle_fitts_costnow branches onhick_reaction_timeandsteering_timemethods, matching golden targets. TensorSessionsigmoid wired:game::engine::tensor_opsimplements sigmoid batch via barraCudaTensorSession(GPU feature gate). UpstreamSessionOp::Sigmoidadded to barraCuda.- plasmidBin harvest: v0.10.0, sha256-verified,
manifest.locksynced. NUCLEUS_SPRING_ALIGNMENT.md: Updated to 790+ tests, three-layer validation in detail.NICHE_STARTER_PATTERNS.md: Added ludoSpring game science composition example.#[allow]in test modules: Reverted#[expect]on test modules to#[allow]—#[expect]requires the lint to fire in every module, which is not guaranteed forunwrap_used/expect_usedin test code. Production code retains#[expect]where appropriate.- Clippy clean:
cargo clippy --all-targets --features ipc -- -D warningspasses with zero warnings. - Tests: 781 → 790+ (+6 composition parity, +3 examples).
Python validated Rust. Now Rust and Python are validation targets for ecoPrimal NUCLEUS composition patterns. This release completes the evolution from validation spring to composition spring.
lifecycle.compositionhandler: Wired as a dispatched JSON-RPC method inhandlers/lifecycle.rs.CompositionReportis now externally callable — biomeOS and peers can probe ludoSpring's proto-nucleate composition at runtime.- Capability-first discovery:
probe_dependency()inipc/composition.rsnow resolves viadiscover_by_capability(dep.capability)first, falling back to name-baseddiscover_primal_tiered(). Aligns withSPRING_COMPOSITION_PATTERNS§3. nest_atomicin fragments: Declared inFRAGMENTS,capability_registry.toml, andPRIMAL_GAPS.md. Trio primals remainrequired: false(aspirational until GAP-06/GAP-07 resolve). GAP-09 updated to RESOLVED.- Provenance unified: All
BaselineProvenancecommits, test headers, and doc comments aligned to19e402c0(matchescombined_baselines.json). Eliminated three conflicting commit references (4b683e3e,74cf9488). Dates aligned to2026-04-10. - ecoBin banned-crate enforcement:
deny.toml[bans].denylist added for 8 C dependencies per ecoBin v3.0 (openssl-sys, ring, aws-lc-sys, native-tls, zstd-sys, lz4-sys, libsqlite3-sys, cryptoki-sys).cargo deny checkpasses. - fog_of_war.wgsl README: Reconciled with shader body — documents distance-based radial mask (not Bresenham occlusion, which is a planned Tier C promotion).
- exp045 doc link: Fixed broken
OrExitintra-doc link (rustdoc warning eliminated). - Tests: 780 → 781 (+1
lifecycle_composition_returns_report). Zero clippy warnings. Zero fmt diffs. Zero regressions.
Absorbs 9 hardened composition patterns from primalSpring, plasmidBin, and
SPRING_COMPOSITION_PATTERNS.md. Completes the evolution from validation
spring to composition spring.
IpcErrorPhase+PhasedIpcError: Annotates IPC errors with communication phase (connect, send, receive, parse, timeout) for smart retry logic.is_retriable(),is_recoverable(),is_method_not_found()classification methods.- Method normalization:
normalize_method()stripsludospring.,barracuda.,biomeos.,game.ludospring.prefixes before dispatch. Handles double-prefixed calls from biomeOS routing. - Three-tier dispatch:
dispatch_lifecycle()→dispatch_infrastructure()→dispatch_science()replaces flat 40-arm match. Clean separation of concerns. - Tiered discovery:
DiscoveryTierenum (6 tiers: ExplicitEnv → XdgFamily → XdgPlain → TempFallback → DirectoryScan → NeuralApiSweep).DiscoveryResultreturnsFound { endpoint, tier }orNotFound { target, searched }. NicheDependencytable: 11 typed proto-nucleate entries inniche.rswith name, role, required flag, and capability domain.- Typed inference wire types:
InferenceCompleteRequest,InferenceEmbedRequest/Response,InferenceModelsRequest,ModelInfoinipc/squirrel.rs. CompositionReport: Newipc/composition.rsmodule probes all 11 niche dependencies at runtime, reports live/absent counts and composition completeness.--portCLI flag:ludospring server --port 8080for plasmidBin/orchestrator binding.- Tests: 733 → 779 (+46 composition pattern tests). Zero clippy warnings. Zero regressions.
- PRIMAL_GAPS.md: Updated with absorbed patterns table and GAP-09 nest_atomic decision (aspirational stubs).
- plasmidBin metadata: Session version bumped to V41.
- Handoff: V38/V39/V40 archived; V41 handoff to
infra/wateringHole/handoffs/.
Documentation and tooling aligned with the April 2026 code review:
- Clippy: Workspace-wide
cargo clippy --all-features -- -D warnings— 207 → 0 warnings across crates (including experiments exp030–exp100). cargo fmt: Clean — no formatting diffs on touched surfaces.cargo deny/deny.toml: Policy file migrated for currentcargo-denyand workspace layout; supply-chain gate passes in CI.ipc/handlers/neural.rs: Refactored from a single ~228 LOC module into three submodules under 100 LOC each (dispatch, delegation, helpers).- Baseline loader:
validation::load_baseline_f64exercised by unit tests inbarracuda/src/validation/mod.rs; provenance blocks re-verified against current baselines. - Primal gaps: 10 gaps documented as GAP-01–GAP-10 in
docs/PRIMAL_GAPS.md— including GAP-09 (nest_atomicvs Nest-side IPC stubs) and GAP-10 (game.*primal identity — ludoSpring not a graph node). - Test counts (authoritative): 605 barracuda
libtests + 102 barracuda--testsintegration targets + 26 metalForge forge tests = 733 total workspace#[test]functions (see README Quality table).
Python validated Rust (Layer 1). Rust validated IPC (Layer 2, V38). Now both Python and Rust validate primal composition patterns (Layer 3):
- exp100 — NUCLEUS Composition Parity — 27-check three-layer validator:
niche self-knowledge integrity (7 checks), health probes (2), capability
discovery (4), science parity through IPC (8), and golden chain
Python→Rust→IPC round-trip (6). Exit code 2 for skip when primals not
running. Uses
tolerances::RPC_TIMEOUT_SECSfor IPC calls. config/capability_registry.toml— machine-readable capability SSOT matchingniche.rs, following the neuralSpring registry pattern. Includes identity, fragments, capabilities by category, semantic mappings, external dependencies, and proto-nucleate references.barracuda/src/bin/commands/hud_fixtures.rs— shared HUD element fixtures for FPS, RTS, sandbox, RPG, puzzle genres. Eliminates duplication betweendashboard.rsandtufte_dashboard.rs.tolerances::game::D6_SUCCESS_THRESHOLD(4) andtolerances::game::DIALOGUE_EMA_ALPHA(0.3) — centralized from inline literals indialogue.rswith calibration citations.
- Coverage in CI: Added
cargo-llvm-cov --fail-under-lines 90step to.github/workflows/ci.yml— coverage floor now enforced in CI, not just locally viamake coverage. - Makefile test parity:
make testnow includesludospring-forgetests, matching CI's test scope. - Forge workload naming:
fraud_batch()→anti_cheat_batch()— correct game-science domain vocabulary. - Dashboard deduplication:
dashboard.rsandtufte_dashboard.rsnow sharehud_fixtures.rsinstead of maintaining identical element builders.
python_parity.rsprovenance commit updated from4b683e3eto19e402c0to match currentcombined_baselines.jsonartifact.specs/BARRACUDA_REQUIREMENTS.mdpath corrected from../../barraCuda/to../../../primals/barraCuda/matching actualCargo.toml.
Three-layer validation chain proving Python → Rust → IPC → NUCLEUS parity:
baselines/rust/composition_targets.json— golden reference values from direct Rust library calls for all 8 science methods (flow, Fitts, engagement, noise, DDA, accessibility, WFC, analyze_ui)baselines/rust/generate_composition_targets.rs— registered as cargo example; generates targets with provenance metadata- 7 composition parity tests in
ipc_integration.rs— each starts IpcTestServer, calls a science method via JSON-RPC, and asserts the response matches the direct Rust library call withinANALYTICAL_TOL(1e-10) - exp099 — Composition Validation experiment — standalone 13-check experiment validating all science methods via IPC against Rust library, with dry-mode when no server running
game.gpu.batch_raycastIPC handler — DDA batch line-of-sight via toadStool GPU delegation with CPU fallbackcoralReefIPC client (ipc/coralreef.rs) — typed client for shader compilation services via NeuralBridge with graceful degradationcondition_map.rs— extracted fromtransition.rsfor single-responsibility condition mapping between RPGPT planes- 5 external primal degradation tests — verify graceful behavior when Squirrel, NestGate, Provenance trio, GPU dispatch, and health probes are unavailable
docs/PRIMAL_GAPS.md— centralized documentation for 8 identified primal composition gaps (GAP-01 to GAP-08)
- ecoBin built and harvested to
infra/plasmidBin/ludospring/— 3.1M PIE ELF x86-64, sha256-verified metadata.tomlupdated to v0.8.0 with 30 capabilities (was 5), checksum, expanded provenancemanifest.lockupdated — ludospring v0.8.0, timestamp refreshed- Discovery method ordering —
capability.listtried beforecapabilities.list(canonical naming) - Health probe ordering —
health.liveness→lifecycle.status→health.check - Circuit breaker configurable —
LUDOSPRING_CIRCUIT_COOLDOWN_MS,LUDOSPRING_CIRCUIT_MAX_RETRIES,LUDOSPRING_CIRCUIT_RETRY_DELAY_MSenv vars - Coverage gate raised —
cargo llvm-covfloor 85% → 90% baselines/python/tolerances.py— expanded to 30+ constants matching Rustgpu.rs,validation.rs,game.rs
- Baseline provenance hash aligned to current commit in
tests/validation.rs CONTEXT.mdcorrected "ludoSpring does not ship a binary" → documents UniBin subcommandscombined_baselines.jsonregenerated, no drift
- barracuda lib: 696 (was 592)
- barracuda ipc integration: 23 (was 16)
- metalForge/forge: 26
- Total: 745 (was 732)
- Experiments: 99 (was 98)
First full run of all 15 composition experiments (exp084-098) against live
primals started from infra/plasmidBin/. Score: 95/141 (67.4%).
5 experiments fully PASS: exp086 (tensor), exp090 (gameflow), exp092 (pipeline), exp093 (continuous session), exp097 (population dynamics).
- exp094/095/098: BearDog
crypto.blake3_hashnow sends base64 data (not raw strings) - exp094/095: BearDog
crypto.sign_ed25519now uses{"message": ...}(not{"data": ...}) - exp094/098: NestGate
storage.store/retrievenow includes requiredfamily_idparameter - exp093: Removed unused
has_resultfunction (dead code warning)
10 primal gaps documented and handed off via
wateringHole/handoffs/LUDOSPRING_V371_PLASMIDBINLIVE_GAP_MATRIX_HANDOFF_MAR31_2026.md:
| Gap | Owner | Severity | Impact |
|---|---|---|---|
| TCP-only transport (no UDS) | rhizoCrypt | CRITICAL | blocks 4 experiments |
| Startup panic (runtime nesting) | loamSpine | CRITICAL | blocks 1 experiment |
| Fitts/Hick formula mismatch | barraCuda | HIGH | -4 checks |
| Perlin3D lattice invariant | barraCuda | MEDIUM | -1 check |
| No capability registration | biomeOS Neural API | HIGH | -14 checks |
| No binary in plasmidBin | barraCuda | HIGH | deployment gap |
| Inter-primal discovery | toadStool↔coralReef | MEDIUM | -1 check |
Projected: all fixes → 130/141 (92.2%).
Five new experiments that validate ALL game engine patterns via full NUCLEUS composition — session/provenance, RPGPT dialogue, Lysogeny mechanics, content ownership — and structure everything as abstractable patterns for esotericWebb:
- exp094 — Session lifecycle via Nest Atomic: BearDog hash/sign + rhizoCrypt DAG + NestGate store/retrieve (8 checks)
- exp095 — Content ownership via Provenance Trio: loamSpine mint + rhizoCrypt trade + sweetGrass attribution + BearDog sign (8 checks)
- exp096 — NPC dialogue via NUCLEUS: Squirrel ai.query + barraCuda math.sigmoid/stats.weighted_mean + rhizoCrypt DAG + petalTongue scene (10 checks)
- exp097 — Population dynamics (Lysogeny) via tensor: replicator dynamics, Markov transitions, Wright-Fisher fixation, all via tensor.create/scale/reduce/matmul (10 checks)
- exp098 — NUCLEUS Complete game session: 10-tick loop composing barraCuda science + Squirrel AI + petalTongue viz + trio provenance + BearDog crypto + NestGate storage (6 checks)
Two new deploy graphs:
graphs/composition/nucleus_game_session.toml— full 60Hz NUCLEUS game session (esotericWebb reference)graphs/composition/session_provenance.toml— session lifecycle: hash → DAG → cert → attribution → storage
Migrated 2 existing deploy graphs from [[nodes]]+[nodes.primal]+[nodes.operation] to
[[graph.node]] format with v2.80 conventions:
rpgpt_dialogue_engine.toml— 7 phases (Tower → ludoSpring → petalTongue → Squirrel → toadStool → Trio → Validation)ludospring_deploy.toml— 5 phases (Tower → toadStool → ludoSpring → Validation → Provenance)
Both now use by_capability, health_method, spawn, order, capabilities list, required per primalSpring convention.
After V37, every game.* capability in niche.rs (27 total) has a demonstrated
primal composition equivalent:
| Capability domain | Primal | Experiments |
|---|---|---|
| Science (flow, DDA, Fitts, engagement, noise, WFC) | barraCuda | exp089-093 |
| Session lifecycle | rhizoCrypt + BearDog + NestGate | exp094 |
| Content ownership | loamSpine + sweetGrass + BearDog | exp095 |
| NPC dialogue + voices | Squirrel + barraCuda | exp096 |
| Game mechanics (population dynamics) | barraCuda tensor/stats | exp097 |
| Full NUCLEUS game tick | All primals | exp098 |
esotericWebb can replace its local science/ module with these exact
capability.call chains.
Five new experiments that validate each HCI model's math purely through barraCuda IPC composition, comparing results to the same Python baselines:
- exp089 — Fitts + Hick + Steering via
activation.fitts/activation.hick/math.log2(8 checks) - exp090 — Flow + Engagement + DDA via
math.sigmoid/stats.weighted_mean/tensor.*(10 checks) - exp091 — Perlin + WFC via
noise.perlin2d/noise.perlin3d/tensor.*(8 checks) - exp092 — GOMS KLM + Four Keys via
stats.mean/stats.weighted_mean/tensor.*(8 checks) - exp093 — Full game session (10 tick simulation) via Continuous composition (6 checks)
New deploy graph: graphs/composition/science_validation.toml composes all
barraCuda capability domains (math, activation, tensor, noise, stats, rng)
needed to validate all 13 HCI models without any ludoSpring binary.
Migrated all 4 existing graphs/composition/*.toml from [[nodes]] to
[[graph.node]] format with biomeOS v2.80 specific capability domains:
math_pipeline.toml—"compute"→"tensor"/"stats", removed stale gap commentsengagement_pipeline.toml—"compute"→"stats", documented resolved IPC gapsshader_dispatch_chain.toml— added"shader"/"compute"/"math"domains + health_methodgame_loop_continuous.toml— capability per node ("math"/"activation"/"ai"/"visualization"/"dag"/"security")
All graphs now include: health_method, order, spawn = false, capabilities list,
depends_on per primalSpring convention.
- exp084-088: Updated doc headers to reference primalSpring graphs and V36 science experiments
- exp085: Documented barraCuda Sprint 24
barracuda-naga-execCPU shader backend - exp086: Noted as infrastructure foundation for exp090/exp092
- exp087: Updated to reference Pipeline coordination pattern and primalSpring validation graphs
- exp088: Added primalSpring
gaming_mesh_chimera.tomlreference
Pulled and reviewed ALL primals, springs, and infra. Key findings:
biomeOS v2.80 resolves 3 of our 4 V35.2 genuine gaps:
- Bootstrap graph now has
register_barracudanode with all 30 method translations - Bootstrap graph bundled via
include_str!()— no filesystem dependency graph.saveaccepts{"toml": "..."}format (was returning parse errors)- Auto-discovery improved but needs live revalidation
barraCuda Sprint 24:
- 15-tier precision continuum, docs alignment
- Regression:
for_precision_tiermissing#[cfg(feature = "gpu")](fixed locally)
primalSpring Phase 23d:
gen4_storytelling_minimal.tomlhas ludoSpring as optionalludospring_validate.tomlstill V32-era — needs V35 update
- exp087 + exp088:
graph.savekey"graph_toml"→"toml"(biomeOS v2.80 schema) - exp087: Added
capability_call_mathcheck (math → barraCuda routing via new domain) - exp087 + exp088: Capability domain routing
"compute"→"tensor"/"math"(biomeOS now has explicit barraCuda domain instead of routing all through toadStool) - barraCuda:
#[cfg(feature = "gpu")]onfor_precision_tier(Sprint 24 regression)
| Experiment | V35.2 | Expected V35.3 | Change |
|---|---|---|---|
| exp084 | 12/15 | 12-15/15 | No code change — barraCuda already passes |
| exp085 | 7/8 | 7-8/8 | No code change — readback is hardware gap |
| exp086 | 10/10 | 10/10 | Already perfect — barraCuda tensor API confirmed |
| exp087 | 3/7 | 5-8/8 | graph.save + capability routing fixes + new math check |
| exp088 | 2/10 | 4-8/10 | graph.save + tensor/math domain routing fixes |
Deep audit revealed most V35.1 "gaps" were LOCAL mistakes in ludoSpring experiments:
- Wrong JSON-RPC method names (e.g.
math.activation.sigmoid→math.sigmoid) - Wrong param keys (e.g.
values→data,d→distance) - Placeholder tensor IDs instead of real ones from
tensor.create tensor.reduce_sum→tensor.reduce(correct name)capability.callusingargsinstead ofparams- Graphs not deployed via
graph.saveAPI
All 5 experiments rewritten with correct barraCuda v0.3.11 API schemas. Better error reporting distinguishes -32601 (method_not_found) from -32602 (invalid_params).
| Experiment | V35 | V35.1 | V35.2 | Key change |
|---|---|---|---|---|
| exp084 | 0/12 | 4/15 | 12/15 | All 8 math methods PASS; only Neural API routing + 2 domain methods remain |
| exp085 | 2/8 | 7/8 | 7/8 | Compile+dispatch work; readback needs sovereign GPU driver |
| exp086 | 0/10 | 5/10 | 10/10 | ALL tensor ops PASS — add, scale, clamp, reduce, sigmoid all work |
| exp087 | 1/7 | 3/7 | 3/7 | graph.save returns parse error; biomeOS bootstrap has no barraCuda domain |
| exp088 | 2/10 | 2/10 | 2/10 | Same — biomeOS capability registry has no primal domains |
Total: 21/50 → 34/50 (68%)
- biomeOS: No barraCuda domain in capability registry (compute→toadStool only)
- biomeOS: Auto-discovery finds 0 primals despite sockets existing
- biomeOS:
graph.savereturns "Failed to parse graph" for our composition TOMLs - biomeOS: Bootstrap mode (no tower_atomic_bootstrap.toml in CWD) — only 5 capabilities
- toadStool: Sovereign dispatch needs coralReef driver for actual GPU readback
- barraCuda:
math.flow.evaluateandmath.engagement.compositedon't exist (domain-level)
Pulled and rebuilt evolved primals (barraCuda v0.3.11 local, biomeOS v2.79 local, coralReef Iter70 plasmidBin, toadStool S168 plasmidBin). Reran all 5 composition experiments. Total: 5/47 → 21/50 (42%).
- P0: barraCuda binary exists with 30 JSON-RPC methods
- P1: coralReef speaks raw newline-delimited JSON-RPC on UDS
- P2: biomeOS continuous executor wired with capability routing
- P2: biomeOS graph.save + nucleus/runtime tier separation
- P3: biomeOS health.liveness implemented
- 5 new composition experiments (exp084–exp088): probe whether ludoSpring's validated game science can be replicated using ONLY primal composition (no ludoSpring binary in the loop)
- 4 deploy graphs (
graphs/composition/*.toml): math pipeline, shader dispatch chain, engagement pipeline, 60Hz continuous game loop — biomeOS- compatible[graph]header with[[nodes]]andby_capabilityrouting - exp084 (barraCuda math IPC): 12 math methods probed over JSON-RPC
- exp085 (shader dispatch chain): coralReef compile → toadStool dispatch E2E
- exp086 (tensor composition): engagement scoring via tensor element-wise ops
- exp087 (Neural API pipeline): graph.execute, pipeline, continuous orchestration
- exp088 (60Hz game loop): full storytelling loop at continuous tick rate
- Fixed barraCuda path dependency in
barracuda/Cargo.toml,metalForge/forge/Cargo.toml,exp030_cpu_gpu_parity/Cargo.toml(incorrect relative paths) - Fixed provenance trio path dependencies in 7 experiments (exp052–054, exp061–064):
phase2/→primals/for rhizoCrypt, loamSpine, sweetGrass - Graph TOMLs use
[graph]header (not[metadata]) for biomeOS compatibility #![expect(missing_docs)]→#![allow(missing_docs)]in binary crates
Ran all 5 experiments against live primals from plasmidBin (v2026.03.25):
| Experiment | Result | Key finding |
|---|---|---|
| exp084 | 0/12 | barraCuda not in plasmidBin release |
| exp085 | 2/8 | coralReef HTTP-wrapped JSON-RPC vs raw UDS |
| exp086 | 0/10 | barraCuda missing — tensor API unreachable |
| exp087 | 1/7 | Neural API discovered; primals not registered |
| exp088 | 2/10 | Sub-ms capability.call latency confirmed |
- P0: barraCuda not in plasmidBin (blocks all math composition)
- P0: Running primals not auto-registered with Neural API
- P1: coralReef HTTP vs raw JSON-RPC on UDS
- P1: barraCuda math/stats/noise methods not on JSON-RPC
- P2: biomeOS continuous executor stub + nucleus graph bundling
- Central:
LUDOSPRING_V35_PRIMAL_COMPOSITION_GAP_DISCOVERY_HANDOFF_MAR30_2026.md(wateringHole) — full gap analysis with per-team actions
- exp083_neural_api_e2e v2: Evolved from 10 to 13 checks — full Nest Atomic validation:
- BearDog: Blake3, SHA3-256, ChaCha20-Poly1305 roundtrip, Ed25519 sign
- Songbird:
discovery.peersvia Neural API - ToadStool:
compute.dispatch.capabilitiesvia Neural API (RTX 4060) - NestGate:
storage.store/storage.retrieveroundtrip via Neural API - Squirrel:
ai.list_providers+tool.list(25 tools) via Neural API - Cross-domain provenance chain: hash(BearDog) → sign(BearDog) → store(NestGate) → verify
- Capability registry completeness (5 domains verified)
- barracuda discovery refactor: Split
discovery.rs(652 lines) into module:discovery/mod.rs: registry, probing, scanning (~280 lines)discovery/capabilities.rs: 6-format parser, semantic aliases, base injection (~230 lines)
- IPC timeouts now env-configurable:
LUDOSPRING_RPC_TIMEOUT_SECS,LUDOSPRING_PROBE_TIMEOUT_MS,LUDOSPRING_CONNECT_PROBE_TIMEOUT_MS - Stale test fix:
gpu_fog_of_war_degrades_without_toadstoolassertion aligned to evolved message
- BearDog v0.9.0 (crypto): Blake3, SHA3-256, ChaCha20-Poly1305, Ed25519
- Songbird v0.2.1 (discovery): peer listing via Neural API
- ToadStool (compute): GPU dispatch capabilities (Vulkan/CUDA on RTX 4060)
- NestGate v2.1.0 (storage): store/retrieve/list via Unix socket JSON-RPC
- Squirrel v0.1.0 (AI/MCP): 25 tools, AI provider routing (abstract socket bridged)
- biomeOS neural-api: Coordinated Mode, 60+ capabilities across 5 primals
- Cross-domain provenance: hash → sign → store → retrieve verified end-to-end
- barracuda lib: 424 (discovery 24 incl. capabilities submodule)
- metalForge/forge: 26
- esotericWebb: 341
- Experiments: 83 (82 structural + exp083 live 13/13)
- Total workspace (excl exp032 pre-existing): 734
- exp083_neural_api_e2e: 10-check validation of full biomeOS Neural API pipeline
- Blake3 + SHA3-256 hashing via
capability.call→ BearDog - ChaCha20-Poly1305 encrypt/decrypt roundtrip through Neural API routing
- Songbird network primal reachability via Neural API
- Capability listing verification (crypto, network domains)
- Sub-200ms latency assertion for routed crypto calls
- Blake3 + SHA3-256 hashing via
- barracuda discovery evolution: multi-probe fallback (
lifecycle.status→health.check+capabilities.list)- Format E: BearDog
provided_capabilities(type + methods objects) - Format F: Songbird flat capability arrays
- Semantic alias generation (
crypto→crypto.hash,crypto.encrypt,crypto.sign) - Auto-injection of
system.ping,health.check,health.livenessfor responsive primals - 4 new unit tests for new formats (discovery tests 15→19)
- Format E: BearDog
- esotericWebb Neural API wiring:
PrimalBridge.neural_apifield,neural_api_call()method,resilient_call()fallback tocapability.callwhen direct domain client absentresolve_neural_api_socket()in niche.rs now consumed by bridgediscover()- 322 esotericWebb tests pass with zero regressions
- BearDog v0.9.0 server on Unix socket (real Blake3, SHA3-256, ChaCha20-Poly1305, Ed25519)
- Songbird v0.2.1 server on Unix socket (network discovery, federation)
- biomeOS neural-api with 16 registered capabilities routing to live primals
- ToadStool compute dispatch through Neural API (RTX 4060 detected, DRM mode)
- exp042 9/9 against live BearDog + Songbird (first real-primal run)
- exp083 10/10 full Neural API pipeline validation
- barracuda lib: 343 (discovery 19)
- metalForge/forge: 26
- esotericWebb: 322
- Experiments: 83 (82 structural + exp083 live)
- Game shader CPU–GPU parity in exp030 — fog-of-war, tile lighting, pathfind wavefront (checks 24→32)
GPU_LIGHTING_ABS_TOLtolerance constantSubstrate::Npu,recommend_substrate_full(),GameWorkload::QuantizedInferenceBandTarget::NpuCompute,BandTarget::NpuToGpuTransferpipeline bandsHardwareProfile::mixed_gpu_npu(),npu_to_gpu_transfer_ms()- NPU/GPU budget fields on
BudgetEstimate - Seven new metalForge tests — NPU routing, mixed pipeline, PCIe bypass, budget (forge 19→26)
- Three new Forge integration checks in exp032 (20→23)
- Eight new checks in exp033 — NUCLEUS mixed pipeline + biomeOS NPU graph (19→27)
- V32.2 handoff:
wateringHole/handoffs/LUDOSPRING_V32_2_COMPUTE_EVOLUTION_HANDOFF_MAR29_2026.md
- Validation matrix: all 82 experiments validated (81 green + 1 live-IPC)
- exp003 — RTS HUD bounds + Tufte assertion direction
- exp004 — engagement session params for composite threshold
- exp052 —
Arc<str>API drift in sweetGrass braid metadata - exp062 — mislabel fraud detection (
inject_collect_event_for_testnow recordssample_type) - Seven trio experiments —
#![allow(missing_docs)]for workspace lint inheritance
specs/BARRACUDA_REQUIREMENTS.md— consumed/unused modules, shader promotion tiers, upstream evolution requests- 5 new Python parity tests:
fun_keys_zero_scores,fun_keys_max_scores,fbm_3d_lattice_zero,lsystem_turtle_ff_end,lsystem_turtle_square_dist - CI baseline drift check job in
.github/workflows/ci.yml(baselinesjob withcheck_drift.py) - CI workspace-wide
cargo checkand full workspacecargo clippy STRICT_ANALYTICAL_TOL,NUMERICAL_FLOOR,DDA_ADJUSTMENT_EPSILON,SPAN_FLOORtotolerances::validationTRUST_EQUALITY_TOLtotolerances::gameniche::ECOSYSTEM_SOCKET_DIRconstant replacing hardcoded"biomeos"socket path
- All 77 experiment provenance blocks aligned to current baselines commit (
4b683e3e) - 34 analytical experiments populated with commit hashes and dates (was
"N/A") - exp030 rewritten from legacy
ValidationResulttoValidationHarnesswith GPU-skip viaEXIT_SKIPPED(525-line rewrite) - 27 experiment files migrated from manual
eprintln!("FATAL:..."); exit(1)to.or_exit("context")— zero manual FATAL patterns remain - All test
1e-10literals replaced withANALYTICAL_TOLacross 6 library modules (23 instances) 1e-6inflow.rsandscience.rshandlers replaced with named constants (SPAN_FLOOR,DDA_ADJUSTMENT_EPSILON)f64::EPSILONintransition.rsreplaced withTRUST_EQUALITY_TOL- GPU degradation messages made primal-agnostic (no primal name in
DEGRADE_REASON) - MCP tool descriptions reference capabilities not primal names
deny.toml:unmaintained = "warn"(invalid for cargo-deny 0.19) →"workspace"deploy/ludospring.toml: addedgame.gpu.batch_raycast, capability count 26→27- Makefile coverage floor: 80%→85% (aligns with CONTEXT.md)
- IPC integration test: hardcoded
/tmp/ludospring-register.sock→ dynamic tempdir push_client.rs: hardcoded"biomeos"→niche::ECOSYSTEM_SOCKET_DIRTensorSessiondocumented as future-only with shader promotion roadmap reference- Deprecated binaries removed:
ludospring_dashboard,ludospring_live_session,ludospring_tufte_dashboard(consolidated in UniBin V30)
- 3 deprecated binary stubs (
ludospring_dashboard.rs,ludospring_live_session.rs,ludospring_tufte_dashboard.rs) and theirCargo.tomlentries — superseded byludospring dashboard|live-session|tufte-dashboardsince V30
V31 changelog is in the README.md (inlined for historical reasons). See git log for details.
thiserror2.x for all error types —IpcErrorand all handler errors now#[derive(thiserror::Error)]- MCP
tools.listandtools.callJSON-RPC methods — 8 science tool descriptors with JSON Schema input specs tarpc-ipcoptional feature withLudoSpringServicetyped RPC trait mirroring JSON-RPC surface- CI pipeline:
.github/workflows/ci.ymlwith fmt, clippy, test, doc, cargo deny gates CONTEXT.mdperPUBLIC_SURFACE_STANDARDdeploy/ludospring.toml— primalSpring deploy graph fragment (26 capabilities, optional trio + viz deps)LICENSE-ORCandLICENSE-CC-BY-SA— scyBorg triple license files- Mock IPC test harness
IpcTestServer— spawns realIpcServerfor integration tests - Neural handler methods:
lifecycle.register,capability.deregister,capability.discover,capability.call - 273 new tests across IPC handlers, provenance trio, external clients, chaos/fault injection
- Handler refactor:
ipc/handlers.rs(1208 LOC) →ipc/handlers/directory with 5 submodules (lifecycle,science,delegation,mcp,neural) — all under 300 LOC - UniBin consolidation: dashboard, live-session, tufte-dashboard merged as
ludospringsubcommands (7 total); old binaries deprecated - Coverage: 80.2% → 91.27% line coverage (85% floor enforced, was 80%)
- Tests: 402 → 675 barracuda tests (587 unit + 42 integration + 3 doctests + 19 proptest + extras)
- Clippy strictness: added
cast_possible_truncation = "deny",cast_sign_loss = "deny",cast_precision_loss = "warn" health.livenessreturns{"status": "alive"}per SEMANTIC_METHOD_NAMING_STANDARD v2.1- All 14 broken rustdoc intra-doc links fixed
- Provenance trio coverage: ~40% → ~84% (param builders, response mappers, serde round-trips)
- External client coverage: squirrel 49% → 84%, toadstool 47% → 90%, nestgate 52% → 81%
- Handler test coverage: 70% → 95%
- Makefile:
CARGO_TARGET_DIR+CARGO_HOMEoverrides fornoexecmount environments
GpuContextmodule (game::engine::gpu_context) — sharedWgpuDevicelifecycle withTensorSessionaccess, behind#[cfg(feature = "gpu")]- Shader absorption handoff for barraCuda:
LUDOSPRING_V29_PERLIN_DDA_SHADER_ABSORPTION_HANDOFF_MAR23_2026.md cargo-llvm-covgating:make coverageat 80% floor,cargo coverage/cargo coverage-htmlaliases in.cargo/config.tomlmake coverage-reporttarget for summary-only output- 7 new experiments: exp076 (Pong), exp077 (Spacewar), exp078 (Tetris), exp079 (Civilization), exp080 (Diablo Loot), exp081 (Procedural Generation), exp082 (Symphony Pipeline)
PERLIN_SAFE_BOUNDandBSP_AREA_CONSERVATION_TOLintolerances::validation- Python parity tests expanded from 25 to 42 (fun_keys, Doom Fitts, Hick sweep, flow, engagement, GOMS extended, BSP offset)
- barraCuda dependency:
default-features = false(upstream feature-gating bug fixed —plasma_dispersionandspectral::statsnow properly gated behindgpu) barcuda_mathre-exports expanded from 8 to 22 CPU primitivesmetalForge/forgerefactored from monolithiclib.rs(911 LOC) into 4 domain modules:substrate,workload,routing,pipeline(19 tests)baselines/python/run_all_baselines.pyrelaxed Python requirement from 3.12 to 3.10+ (matches existing provenance)- All Python baseline scripts: provenance headers updated to "CPython 3.10+"
combined_baselines.jsonregenerated withcontent_sha256field- Hardcoded test socket paths replaced with
temp_dir()+ process-unique slugs inipc/neural_bridge.rsandipc/discovery.rs - Coverage target: 80% floor enforced (80.2% actual, bins excluded)
- Experiments provenance: exp061, exp067–exp075 now include
BaselineProvenancewith specs/ references
- Evolved exp042 (Tower Atomic) from hardcoded primal names (
"beardog","songbird") to capability-based discovery viadiscovery::discover_primals()— discovers bycrypto.hashandsystem.pingcapabilities at runtime - Parameterized
coordination::viz_register()in exp054 to acceptprimal_idargument, removing hardcoded"petaltongue"name - Evolved 3 dashboard binaries from hardcoded
sandbox/paths toLUDOSPRING_OUTPUT_DIRenvironment variable with fallback default - Fixed
prop_assert!format string conflict withmatches!struct patterns inipc/envelope.rsproptest - Fixed IPC integration test isolation — unique socket paths per test via atomic counter (was shared PID-based path causing connection resets)
missing_errors_docwarnings onDispatchOutcome::into_resultandextract_rpc_resultinipc/envelope.rs- IPC integration test
evaluate_flow— expected"flow_state"/"Flow", actual serialized field is"state"/"flow" - IPC integration test
capability_list— expected"capabilities"array, actual response uses"total_capabilities"+"domains"
- V28 handoff: toadStool/barraCuda deep evolution handoff with capability-based discovery patterns
ipcfeature dependency on exp042Cargo.tomlfor runtime primal discovery
- Migrated all 9
#[allow()]instances to#[expect(reason = "...")]across 5 experiment files (exp034, exp050, exp051, exp055, exp061) - Migrated 4
.expect()calls toOrExitpattern in exp045, exp052, exp053, exp054 (vertex id computation, skill lookup) - Migrated exp058 (conjugant) from hand-rolled validation to
ValidationHarness+BaselineProvenance - Centralized lint configuration: 16 experiment
Cargo.tomlfiles migrated from local[lints.clippy]to[lints] workspace = true - Added
must_use_candidateandreturn_self_not_must_useto workspace lint overrides - Refactored
exp062_field_sample_provenance/src/sample.rs: extracted monolithicdetect_sample_fraud(180 lines,too_many_linessuppression) into 6 focused per-rule functions - Replaced brittle string-parsing fraud detection (MislabeledSpecimen) with structural
collect_sample_typestracking onSampleSystem - Documented exp030 validation exemption (legacy
ValidationResult, pending harness per-section skip support)
CHANGELOG.md(this file) per SPRING_PRIMAL_PRESENTATION_STANDARDNOISE_MEAN_TOLtobaselines/python/tolerances.py(was missing from Python mirror)SampleSystem::collected_sample_type()accessor for structural fraud detection
- V26 handoff claim "zero legacy ValidationResult usage" — now accurately documented as one exemption (exp030)
- Migrated 71/75 experiments to
ValidationHarness+BaselineProvenance - Centralized 14 GPU tolerances in
tolerances::gpumodule - Tightened
missing_errors_docandmissing_panics_doclints to warn - Deduplicated
perlin_2d.wgslanddda_raycast.wgslintobarracuda/shaders/game/validated/ - Unified shader audit: 7 upstream absorption candidates, 2 domain-specific retained
ValidationSinktrait (pluggable output:StderrSink,BufferSink)check_abs_or_relmethod onValidationHarness- V26 handoffs: full harness migration + toadStool/barraCuda absorption
- Leverage guide handoff for ecosystem coordination
- Cross-ecosystem deep debt resolution
- toadStool/barraCuda absorption coordination
- Ecosystem absorption: aligned with wetSpring V119+ patterns
- Deep debt evolution for barraCuda/toadStool integration
- Workspace lint consolidation (
expect_used = "deny",unwrap_used = "deny")
- Deep primal integration: barraCuda/toadStool wiring
- barraCuda/toadStool deep debt resolution
- Niche self-knowledge:
niche.rswith 26 capabilities, socket resolution - Neural Bridge IPC client
- biomeOS domain registration/deregistration
- barraCuda/toadStool niche absorption
- Deep evolution: barraCuda/toadStool coordination patterns
- Niche deployment:
ludospring_deploy.toml,ludospring-game.yaml - UniBin architecture:
ludospring server,--help,--version
- barraCuda/toadStool absorption
- GPU dispatch buildout: exp030 CPU-vs-GPU parity validation
- 11 WGSL shaders for game-domain compute
GpuOpcatalog (FogOfWar, TileLighting, PathfindStep, PerlinTerrain, BatchRaycast)
- Deep audit: barraCuda/toadStool integration review
- Cross-spring provenance: rhizoCrypt, loamSpine, sweetGrass integration
- Provenance trio IPC clients