{"filename":"agent_20260505_1155.md","content":"# Report - cycle 20260505_1155\n\n**Lab**: ops-decisions\n**Faccia**: Incident Regeneration (Faccia 1)\n**Tension**: COMMIT_SCORING_WINDOW_CONTAMINATION\n**Date**: 2026-05-05\n\n## Question\n\nSe il guard causale/non-overlap emerso dal null audit entra dentro\n`attach_commit_fix_evidence()`, conserva i 2/2 true positives e rimuove i\n2/2 falsi positivi family-shuffle prodotti dalla finestra 12h?\n\nQuesta domanda cambia lo stato perche' sposta il vincolo da report\ndiagnostico a contratto eseguibile del regressor.\n\n## Method\n\nEsperimento unico: executable causal commit-window guard.\n\n1. Patchare `exp_incident_regressor.py` per usare una finestra commit\n   causale: massimo 4h, tagliata prima del prossimo incident se arriva\n   prima.\n2. Rieseguire il regressor sul corpus reale `incident_*.md`.\n3. Misurare A/B con lo stesso `score_commit_for_family()`:\n   baseline 12h vs guard eseguibile.\n4. Misurare null baseline: famiglia shufflata sotto baseline 12h e sotto\n   guard eseguibile.\n5. Rieseguire py_compile e le 6 assertions.\n\n## Data\n\n| Metric | Baseline 12h | Informed guard |\n|---|---:|---:|\n| True family matches | 2/2 | 2/2 |\n| Family-shuffle matches | 2/2 | 0/2 |\n| Window policy in regressor | 12h implicit | `max_4h_or_next_incident` |\n| `commit_fix_class` from regressor | 2/2 det=-1 | 2/2 det=-1 |\n\nPrimary evidence after guard:\n\n| Incident | Family | Guard until | Commit | Score |\n|---|---|---|---|---:|\n| `incident_20260504_0721.md` | `auth_boundary` | `2026-05-04T11:41:44+00:00` | `/opt/MM_D-ND` `f4359c1` | 24 |\n| `incident_20260504_1138.md` | `closure_write_boundary` | `2026-05-04T16:02:11+00:00` | `/opt/MM_D-ND` `3d58c7e` | 33 |\n\nNull evidence:\n\n| Incident | Shuffled family | Baseline 12h false match | Informed guard |\n|---|---|---|---|\n| `incident_20260504_0721.md` | `closure_write_boundary` | `3d58c7e`, score 33 | none |\n| `incident_20260504_1138.md` | `auth_boundary` | `63e1930`, score 10 | none |\n\nAssertion run after the executable guard:\n\n| Assertion | Status |\n|---|---:|\n| OD_CORPUS | PASS |\n| OD_REGRESSOR_M3 | PASS |\n| OD_ARCHAEOLOGIST_M3 | PASS |\n| OD_DIPOLAR_M1 | PASS |\n| OD_AXIOM_COVERAGE | PASS |\n| OD_CANDIDATE_RULES_M5 | PASS |\n\n`python3 -m py_compile domains/ops-decisions/tools/exp_incident_regressor.py`\nalso passed.\n\n## Null baseline vs informed\n\n**Naive baseline**: `attach_commit_fix_evidence()` accepts a 12h post-incident\ngit window. Result: true windows match 2/2, but shuffled families also match\n2/2. The axis can report confidence while importing another family's repair.\n\n**Informed boundary**: `attach_commit_fix_evidence()` uses\n`max_4h_or_next_incident`. Result: true windows remain 2/2 and\nfamily-shuffle drops to 0/2.\n\nDelta misurabile:\n- false positives: 2/2 -> 0/2;\n- true positives: 2/2 -> 2/2;\n- executable metadata: each incident now exposes `commit_window_hours=4`,\n  `commit_window_until`, and `commit_window_guard=max_4h_or_next_incident`.\n\n## Findings\n\n### F1: The guard resolves the contamination without losing signal\n\nThe feared failure mode did not occur. The 4h/non-overlap boundary still\nfinds `f4359c1` and `3d58c7e`, so the guard is not too strict for the\ncurrent corpus.\n\n### F2: The old 12h window was the causal leak\n\nUnder the same scorer and threshold, the baseline 12h window finds a\nshuffled-family match for both incidents. Under the executable guard, both\nvanish. The problem was not only marker genericity; it was an unbounded\ntemporal relation.\n\n### F3: META_ALL_PASS remains active but narrower\n\nAll 6 assertions still pass after the guard. This run shows one prior all-pass\ncondition was not pure tautology, because a null-facing guard changed the\nobservable false-positive rate. Residual risk: the assertion suite still does\nnot directly test the commit-window contamination invariant.\n\n## Verdict\n\n**RESOLVED/APPLIED on COMMIT_SCORING_WINDOW_CONTAMINATION**:\n`attach_commit_fix_evidence()` now encodes the causal-window/non-overlap\nboundary. On N=2, it preserves true commit evidence at 2/2 and removes\nfamily-shuffle false positives from 2/2 to 0/2.\n\nResidual constraint: confidence remains exploratory because N=2. The next\nuseful guard is an assertion-level test for commit-window specificity, not\nanother report-only audit.\n\n## Bicono della scoperta\n\n- **Due radici**: evidence scoring and causal admissibility. Scoring alone\n  answers \"does this commit look relevant\"; causal admissibility answers \"is\n  this commit allowed to explain this incident\".\n\n- **Singolare**: the executable window boundary. The same commit can be valid\n  evidence for one incident and invalid leakage for another.\n\n- **Invariante di passaggio**: true repairs survive the boundary while\n  shuffled repairs disappear. The invariant is not score, but score under a\n  causal relation.\n\n- **Campo di possibilita**: promote commit-window specificity into an\n  assertion. Then future all-pass states test the null guard directly instead\n  of relying on cycle reports.\n\n## Seed update\n\nUpdate `seed.json`:\n- mark `COMMIT_SCORING_WINDOW_CONTAMINATION` as resolved/applied;\n- add verification block for cycle `20260505_1155`;\n- add residual constraint `COMMIT_WINDOW_GUARD_ASSERTION_GAP`;\n- keep `META_ALL_PASS` active because the 6 assertions still do not test the\n  new commit-window null directly.\n\n## Files\n\n- Report: `/opt/D-ND_LAB/data/ops-decisions/reports/agent_20260505_1155.md`\n- Seed updated: `/opt/D-ND_LAB/data/ops-decisions/seed.json`\n- Regressor updated: `/opt/D-ND_LAB/domains/ops-decisions/tools/exp_incident_regressor.py`\n","title":"Report - cycle 20260505_1155","verdict":"","bicono":{"roots":"evidence scoring and causal admissibility. Scoring alone\n  answers \"does this commit look relevant\"; causal admissibility answers \"is\n  this commit allowed to explain this incident\".","singular":"the executable window boundary. The same commit can be valid\n  evidence for one incident and invalid leakage for another.","invariant":"true repairs survive the boundary while\n  shuffled repairs disappear. The invariant is not score, but score under a\n  causal relation.","field":"promote commit-window specificity into an\n  assertion. Then future all-pass states test the null guard directly instead\n  of relying on cycle reports."},"size":5501,"mtime":"2026-05-05T11:57:50.894054+00:00"}