Capability Diagnostic — Final Report¶
Diagnostic branch: diag/capability-bottleneck. Protocol pre-registered at
docs/evaluation/CAPABILITY_DIAGNOSTIC_PROTOCOL.md before any results were
generated. All raw artifacts are under
reports/evaluation/capability-diagnostic/. Every number in this report is
either measured directly by a script committed on this branch, or cited from
an already-committed real artifact (never fabricated, never estimated
without saying so).
BASELINE¶
- main SHA:
f06642421f8bbeefe5615812b143d14cf10bcda8 - diagnostic branch SHA (at time of writing):
e684dd76fab405edf60e05b173610d93b6fd1e74 - model SHA:
a501ad87bc39943c48c1a0ea5fc9b6d0807491b684b4423542acbdba712d16c7(confirmed byte-identical betweenmodels/hydrocore-v4-release/model.safetensorsandexperiments/runs/v4-checkpoint-identity/no_adapters-seed20260810/model.safetensors) - calibration SHA:
829c167b267b3ce32f55559f3aec4b4933e337f3358e22e1f792a26b402f68fa - locked test remained unopened: YES (
locked_test_openedchecked and recordedfalsebefore/after every one of the ~30 scripts on this branch; see each report'slocked_test_opened/locked_test_opened_afterfield)
CONTROLLED REPRODUCTION¶
- documented top1: 0.7205–0.7331
- reproduced top1: 0.7205 (
reports/evaluation/capability-diagnostic/reproduction.json) - documented top3: 0.8680–0.8756
- reproduced top3: 0.8680
- reproduced MRR: 0.8113
- verdict: REPRODUCED — measured against the exact served checkpoint (not merely a same-lineage training export; the two differ byte-for-byte, confirmed and documented), 712/1000 validation examples eligible.
TRAIN/SERVE PARITY¶
- exact-equivalent tensors match: NO (2 of ~15 tensor keys diverge; node order, edge features, temporal_features, classical_prior, and all masks match exactly)
- first divergent stage:
quality_features(health channel) at missing timesteps - affected features:
quality_featureshealth channel (CAP-PARITY-01),node_featurescurrent-health snapshot column on 4/20 scenarios (downstream of the same bug), temporal tensor length/window (CAP-PARITY-02) - logit impact: not separately isolated at the logit level for these two specific bugs (small cell counts); their primary measured effect is on the feature tensors themselves, which is the standard this diagnostic held itself to per Section 6's "do not settle for comparing final logits only"
- CAP finding: CAP-PARITY-01 (production health channel ignores
observation.missing, defaults to healthy) and CAP-PARITY-02 (production omitswindow_steps, silently caps evidence at 12 timesteps vs training's full 25)
EVIDENCE CONTRACT¶
- training timesteps: 25 per sensor (24-hour span, 1-hour resolution — verified by direct scenario generation, not assumed)
- LIVE initial timesteps: 1 per sensor (last valid reading only — confirmed by direct reading of
hydroswarm.evaluation.live_robustness._payloads, lines 204–238:position = valid[-1] if valid else ...) - temporal span: training 86,400s; LIVE initial 0s
- history mismatch: YES, severe — HydroCore is trained on full 24-hour trajectories and served, in the LIVE robustness harness, exactly one snapshot
- performance full history: top1 0.95–1.00 (temporal-ablation.json / confirmation-holdout.json)
- performance 6-step (causal prefix): top1 1.00
- performance 3-step (causal prefix): top1 0.50
- performance 2-step (causal prefix): top1 0.40
- performance 1-step (causal prefix = latest snapshot only, i.e. the real harness's actual policy): top1 0.30 (main set) / 0.05 (independent confirmation-holdout set, N=20)
- verdict: INPUT_EVIDENCE_REGIME_PROBLEM. Critically, LATEST-k (a sliding window ending at the incident's last observation) stays flat/noisy for k=1..12 — it does NOT recover with "slightly more of the same kind" of evidence — while CAUSAL-PREFIX (a genuinely growing trajectory from the incident's onset) reaches top1=1.0 by just 6 steps. The real harness's "send only the latest valid reading" choice is close to the least informative single point available, not a representative snapshot, because the classical physics-based signature matching this system relies on needs the contamination-onset dynamics that only an early window captures.
INPUT / FEATURE PARITY¶
- pressure mismatch: tested and ruled out as a material driver — fixed 25m pressure (exactly matching the real LIVE harness) gives top1=0.80, identical to true-WNTR-pressure's top1=0.80 (N=15)
- timestamp mismatch: none found in the timestamp-derivation logic itself (harness's per-observation
observed_atcomputation is correct); the SPARSITY of what gets sent (1 reading) is the real issue, covered above - node-order mismatch: none in the deployed model —
measure_equivarianceagainst the real frozen checkpoint shows ~1e-6 max diff and 30/30 prediction agreement across all 3 governed topology families, after correcting a real-but-dormant tooling bug (CAP-DATA-02, in unusedtraining/permutation.pymask handling, confirmed to never execute in the real training loop) - normalization shift: none material found — train/validation/calibration feature-channel distributions closely match (largest drift <0.08 std-units)
- classical-prior shift: coastal (unseen) topology's runtime-generated prior is not degenerate (JS divergence from governed-topology shape 0.0089, vs. 0.11–0.196 either-vs-uniform)
- network mismatch: YES — major finding. See COMPONENT/CALIBRATION/OOD sections below (CAP-DATA-01)
- other: sensor-series reconstruction (multi-sensor-per-node merging, grab samples, out-of-order timestamps) all behave correctly; no spurious duplicate-series defect
COMPONENT PERFORMANCE (real LIVE dataset, 255/264 analyzable records)¶
TOP1 TOP3 MRR
neural: 0.318 n/a† n/a†
classical: 0.176 n/a† n/a†
hybrid: 0.306 0.847 0.571
- neural correct/classical wrong: 66/255 (25.9%)
- classical correct/neural wrong: 30/255 (11.8%)
- fusion harms correct component: 33/255 (12.9%) — of these, 30 are classical-was-right/fusion-wrong and only 3 are neural-was-right/fusion-wrong
- verdict: the protocol's warned-against pattern ("neural good, hybrid bad → don't retrain neural") does not dominate; classical being overridden hurts more, but classical itself is the weaker branch overall (0.176 vs 0.318) under the current degraded-evidence regime, so fusion is not badly miscalibrated given what it's fed. Regret vs. best single component is small (−0.012 average). This is classified TERTIARY, not primary — likely to shrink once evidence-content and network-identity issues are fixed.
CALIBRATION¶
- exact pristine applicability: calibrated_rate = 1.0 (5/5 fresh pristine-config scenarios)
- same-family randomized applicability: demand-only/tank-only stay calibrated (1.0); roughness-only and full-hydraulic-randomization break it (0.0) — narrower than "any non-exact config" — roughness specifically is hashed, demand/tank are not
- raw accuracy when calibration invalid: ~0.6 top1, statistically indistinguishable from when calibration is valid — calibration-applicability is not tracking real localization quality at all in this comparison
- dominant applicability blocker: CAP-CAL-01 — golden-reference's real production network hash is never in
validated_topology_hashesbecause it's built two different ways (programmatic vs..inp-file-loaded) that diverge by ~1e-9 relative float noise, enough to change the SHA-256. Confirmed directly against the real 264-run LIVE campaign: golden-reference (231/264, 87.5% of all runs) is 0% calibrated; loop-grid (9/264, no construction-path asymmetry) is 100% calibrated. - counterfactual family-policy coverage: a "connectivity-family" policy (accepting any same-family hydraulic variation) would recover calibration validity for demand/tank-varied scenarios but not roughness-varied or genuinely unseen-topology scenarios; the CAP-CAL-01 fix (correcting the hash mismatch itself) is a cleaner, lower-risk remediation than loosening the applicability policy
- verdict: CAP-CAL-01 (PRIMARY, tied) + CAP-CAL-02 (SECONDARY). CAP-CAL-02: the calibrator's per-network/per-condition Mondrian scores are unreachable at runtime (
network_id=str(getattr(network,'name','unknown'))never matches the artifact's clean corpus-family keys, andcondition=is never passed) — even calibration-valid incidents silently fall back to pooled global scores.
OOD¶
- nominal false caution rate: 100% — all 12 real LIVE
nominal:clean_operationalrecords showood_level=CAUTION, neverNORMAL(verified directly againstpost-remediation-results.jsonthis session) - unseen detection rate: coastal-branch correctly detected as novel (this part of OOD is working as intended)
- dominant components:
network_novelty— confirmed by direct source reading (src/hydroswarm/inference/ood.py:44-49,128) thattopology_novelty()returns 1.0 whenever the served network's hash isn't invalidated_network_hashes(the SAME hash set CAP-CAL-01 examines), and a hard override (if network_novelty > 0 and level == NORMAL: level = CAUTION) forces at least CAUTION regardless of every other OOD component - verdict: CAP-OOD-01 — the identical root cause as CAP-DATA-01/CAP-CAL-01, manifesting through a second, independent suppression gate. One float-precision construction bug simultaneously defeats both the calibration gate and the OOD gate for 87.5% of real LIVE traffic.
SUPPRESSION¶
- initial actionable rate: 0.012 (3/264)
- within 1/2/3 samples: flat at ~0.011–0.023 (only 39/264 records have real per-round data; among those, only 3 records ever became actionable via sampling — see
suppression-analysis.json'sactionable_within_n) - blocker frequencies (of 255 analyzable): CALIBRATION_INVALID_OR_MISSING 96.5%, OOD_CAUTION 96.5% (the exact same 246-record set as calibration — structurally coupled via CAP-DATA-01/CAP-OOD-01), MODEL_EVIDENCE_INSUFFICIENT 82.4%, CANDIDATE_REGION_TOO_BROAD 63.5%, HIGH_CLASSICAL_NEURAL_DISAGREEMENT 4.7%
- blocker intersections: 63.5% of incidents trip all 4 major gates simultaneously — suppression is massively over-determined
- counterfactual actionability without each gate: removing calibration alone, candidate-size alone, evidence-sufficiency alone, or OOD alone each leaves eligibility at ~1.1% (identical to observed); only removing disagreement (rare) roughly doubles it to 2.3%. The idealized inference-quality-only ceiling (suppress only when actually wrong) reaches 29.5%.
- dominant blocker: CALIBRATION_INVALID_OR_MISSING and OOD_CAUTION, jointly, both downstream of CAP-DATA-01. No single gate is individually "the" bottleneck because they co-fire almost universally — but they co-fire because they share the same upstream cause, which IS individually fixable.
SAMPLING¶
- EIG runs: real classical EIG evaluated on 300 stride-sampled offline scenarios (
reports/results/v4/pre-freeze-implementation-handoff.md, already-real, cited not re-run — this diagnostic verified it satisfies diagnostic.txt's minimum EIG-vs-random requirement) - random runs: same 300-scenario comparison
- EIG median entropy change: step-0 mean realized entropy reduction −0.210 bits (counterintuitively negative; investigated in the source report, an open question, not silently smoothed over)
- random median entropy change: +0.007 bits
- EIG rank improvement / samples-to-sufficiency: resolved-within-3 = 69.7% (classical_eig) vs. 61.0% (random), never-resolved 91/300 vs. 117/300 — EIG clearly beats random on the operational metric that matters for a promotion decision
- expected/realized IG correlation: not directly recomputed this pass (cited from the existing real report); the single-step sign anomaly above is the closest existing measurement
- sampling-time mismatch: YES, real —
rank_sample_locations(src/hydroswarm/sampling/active.py) has no time-of-observation parameter at all and assumes Gaussian sample noise (std=0.05 mg/L); the real LIVE harness always samples at the end of the 24-hour simulated horizon with zero added noise. Empirically confirmed: with a reduced sensor count, every recommended sample's real concentration came back exactly 0.0 mg/L (decayed/null), though entropy still dropped ~0.88 bits from that informative null. - verdict: CAP-SAMPLE-01 (SECONDARY) — the sampling algorithm is not the primary problem (it beats random on a fair operational metric); its assumptions about when a sample is taken diverge from this specific harness's behavior.
OBSERVABILITY¶
- indistinguishable source groups: none found on golden-reference — closest candidate pair (J1/J2) has Euclidean signature distance 108.5 with clearly distinct peak magnitudes (61.9 vs. 126.1 mg/L)
- accuracy upper bound from available evidence: oracle-perfect classical prior improves top1 from 0.90 (real full-trajectory baseline) to 1.00 — a real but modest +0.10 ceiling, showing limited additional headroom once evidence content is already good
- verdict: current localization failures are not explained by fundamental physical unobservability on this network.
TOPOLOGY¶
- pristine known: top1 1.0 (N=8, small sample)
- randomized same-family: top1 0.875
- known transfer (branched-loop, a trained family): top1 0.625
- coastal unseen: top1 0.75
- neural/classical/hybrid decomposition: not separately re-broken-out per topology this pass (covered at the LIVE-dataset level above); structural descriptors (junction/link count, degree, cycle rank) do not obviously track transfer quality at this sample size — branched-loop (trained) scored worse than coastal-branch (never trained), a small-N result flagged as noisy and possibly confounded by CAP-DATA-01-style construction issues on branched-loop too (not fully characterized this pass)
- verdict: topology-family identity is not a clean, monotonic driver of transfer quality in this data; the data-diversity pilot (Section 41) was correctly skipped as its precondition ("topology transfer poor but in-topology performance good") does not hold as stated, and this comparison should be re-run after CAP-DATA-01 is fixed.
MODEL CAPACITY¶
- evidence model is underfit: NO — validation top1 (0.72) is not modest; no train-split number exists anywhere in this repo to compute a train/validation gap directly (stated honestly, not assumed)
- evidence model is overfit: NO — development_holdout losses under harder populations (SEVERE_MISSINGNESS, UNSEEN_TOPOLOGY) reflect genuine population difficulty, not a train/validation gap
- evidence capacity is primary bottleneck: NO
- scaling pilot run: NO — per diagnostic.txt Section 40's own stated preconditions, zero of five were met (train/serve parity does not pass; evidence semantics are not matched; calibration/fusion clearly dominate the LIVE utility loss; the model is not underfit) — skipped with explicit justification, not run reflexively and not run just to "check"
- verdict: classified DISTRIBUTION-SHIFTED (train/serve construction-path + evidence-content shift), consistent with every causal experiment run this session. Multi-task interference: 9/100 task-pairs show cosine similarity below −0.1, concentrated in the already-disabled Scout-head outputs (consistent with Scout's independently-documented underperformance) — not a signal that the promoted
source_nodehead is antagonized by anything currently in production.
NEW CAP FINDINGS¶
| ID | Severity | Evidence | Estimated Utility Impact |
|---|---|---|---|
| CAP-TEMPORAL-01 | HIGH | Direct causal experiment (temporal ablation) + independent confirmation-holdout replication | Dominant driver of the raw localization gap |
| CAP-DATA-01 | HIGH | 3 independent confirmations (2 subagents + hand-verification) + confirmation-holdout replication + exact match to real 264-run LIVE calibration pattern | Dominant driver, jointly with CAP-CAL-01/CAP-OOD-01, of the near-zero planning-eligibility gap |
| CAP-CAL-01 | HIGH | Same root cause as CAP-DATA-01; cross-checked against real LIVE dataset (231/264 golden-reference runs, 0% calibrated) | Same as above |
| CAP-OOD-01 | HIGH | Direct source-code confirmation of the hard CAUTION override; all 12 real nominal LIVE records show CAUTION | Same as above |
| CAP-PARITY-01 | MEDIUM | Direct tensor-level diff against real production code, 17/20 scenarios affected | Modest today, compounds if evidence sparsity is fixed |
| CAP-PARITY-02 | LOW-MEDIUM | Direct tensor shape divergence | Rarely binds today given current evidence sparsity |
| CAP-CAL-02 | MEDIUM | Direct source inspection of the real runtime call site | Secondary refinement, not blocking |
| CAP-SAMPLE-01 | MEDIUM | Source-code comparison + empirical demonstration (0.0 mg/L samples) | Affects marginal sampling value, not initial localization |
| CAP-DATA-02 | LOW | Root-caused and corrected locally; confirmed dormant in real training loop | None on current production behavior |
Full detail for every finding: reports/evaluation/capability-diagnostic/root-cause-summary.json.
ROOT-CAUSE RANKING¶
- PRIMARY — Evidence sparsity / temporal-evidence mismatch (CAP-TEMPORAL-01): the LIVE harness's single-last-reading evidence policy is close to worst-case for this system's classical signature matching.
- PRIMARY — Network-identity construction mismatch cascading into calibration and OOD suppression (CAP-DATA-01 / CAP-CAL-01 / CAP-OOD-01): one float-precision hash bug defeats two independent suppression gates for 87.5% of real LIVE traffic.
- SECONDARY — Train/serve construction-path defects (CAP-PARITY-01, CAP-PARITY-02): modest today, will compound once evidence sparsity is fixed.
- SECONDARY — Calibration Mondrian-key mismatch (CAP-CAL-02) and active-sampling time/noise-model mismatch (CAP-SAMPLE-01).
- TERTIARY — Fusion policy interactions (12.9% "fusion harms" rate, small net regret): likely a downstream symptom of degraded evidence/classical quality, not an independent defect worth tuning yet.
- NOT SUPPORTED — Neural model capacity.
RECOMMENDED REMEDIATION ORDER¶
- Fix CAP-DATA-01 at the source: use one consistent network-construction path (the real
.inp-file-loaded path, since that's what production already uses) for scenario generation, corpus building, AND calibration/signature fitting, so hashes agree by construction rather than by coincidence. Re-fit calibration and signature artifacts against the corrected hash. - Fix the LIVE robustness harness's (and any real product ingestion path's) initial-evidence policy to send real recent history instead of a single last-valid snapshot (CAP-TEMPORAL-01) — no model or calibration change required.
- Fix CAP-PARITY-01 (
_effective_sensor_healthshould checkobservation.missing) and CAP-PARITY-02 (passwindow_stepsexplicitly inHybridInferencePipeline.analyze's feature-building stage) together, since both are small, localized, and will matter more once (1)–(2) land. - Fix CAP-CAL-02 (correct
network_id/conditionpassed intocandidate_set()so the real per-network/per-condition Mondrian calibration is actually reachable). - Re-examine CAP-SAMPLE-01 (align EIG's noise/time assumptions with real harness sampling behavior, or align the harness's sampling behavior with EIG's assumptions) once (1)–(2) make initial evidence realistic enough for sampling improvements to matter.
- Re-measure fusion regret and topology-transfer patterns AFTER (1)–(4) land, before considering any fusion-weight or topology-diversity changes — both are likely confounded by the primary causes today.
- Do not pursue a capacity-scaling pilot; re-evaluate only if, after (1)–(6), LIVE performance still falls meaningfully short of the controlled range.
IDENTITY¶
- production changed: NO
- model changed during main diagnostic: NO
- calibration changed during main diagnostic: NO
- locked test opened: NO
FINAL CONCLUSION¶
PRIMARY BOTTLENECK = MULTIPLE INTERACTING COMPONENTS, specifically two independently-dominant, both fully non-model, both low-remediation-cost causes:
- EVIDENCE SPARSITY (CAP-TEMPORAL-01) — explains the bulk of the raw localization accuracy gap (controlled top1 0.72 vs. LIVE top1 0.31).
- A NETWORK-IDENTITY CONSTRUCTION DEFECT (CAP-DATA-01, cascading into CAP-CAL-01 and CAP-OOD-01) — explains the bulk of the near-zero planning-eligibility gap (0.012), independent of (1), via two separately-firing but commonly-rooted suppression gates.
Neither is a neural-model-capacity limitation. Both are supported by direct causal experiments (not merely correlational observations) on the real frozen model and real production code paths, cross-checked against the real 264-run LIVE dataset, and replicated on an independent fresh confirmation holdout. This diagnostic recommends fixing both before considering any change to HydroCore itself, fusion weights, or calibration policy design.