From 2cd094a0fe20d4a2b9844db53377f3055afe2d67 Mon Sep 17 00:00:00 2001 From: admin Date: Sat, 5 Sep 2026 14:52:30 +0200 Subject: [PATCH] SAFETY-38: record the CI-06 false red, and where each mutation lands All ten mutations of `site_standing` are red in test_watchdog.py and in nothing else - the other 19 files are green under every one of them, which is the measurement of how unpinned the line was. One exception, recorded rather than dropped: in the batch run M10 (`sorted(standing.values())[-1]`) also reported FAIL test_peakguard.py. Re-run in isolation three times and once more through tools/mutation_run.sh - four clean passes. The batch script had discarded the failure detail so the check cannot be named; what can be said is that it did not reproduce in four attempts and that no claim in this card rests on it. That is CI-06's file behaving the way CI-06 records. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01BwRLw7eKYj2byVdwB6kbjU --- goodwe_controller/CHANGELOG.md | 7 +++++-- .../DECISIONS/SAFETY-38-site-standing-pin.md | 15 +++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/goodwe_controller/CHANGELOG.md b/goodwe_controller/CHANGELOG.md index 086efbb..cd82615 100644 --- a/goodwe_controller/CHANGELOG.md +++ b/goodwe_controller/CHANGELOG.md @@ -91,8 +91,11 @@ shipped `sum` is correct and must not be "fixed".** 300 W gate. Closed by part 9a's device-clamped counterfactual. * **10 mutations of that one line, each on a fresh full-repo copy mounted `:ro`, bytecode purged by `tools/mutation_run.sh`, the edit re-read from disk and the - byte delta printed. All 10 red.** Ledger and the honest gaps in - `DECISIONS/SAFETY-38-site-standing-pin.md`. + byte delta printed. All 10 red — every one of them in `test_watchdog.py` and + in nothing else.** ⚠️ One **false red** from `test_peakguard.py` on M10 did + not reproduce in four subsequent runs; it is CI-06's known flakiness, no claim + here rests on it, and it is recorded rather than quietly dropped. Ledger and + the honest gaps in `DECISIONS/SAFETY-38-site-standing-pin.md`. **Inverter B gets its own MQTT device, and inverter A keeps the one it has (TEL-07).** MQTT discovery announced **one** device, and every entity hung off diff --git a/goodwe_controller/DECISIONS/SAFETY-38-site-standing-pin.md b/goodwe_controller/DECISIONS/SAFETY-38-site-standing-pin.md index 443277a..289c789 100644 --- a/goodwe_controller/DECISIONS/SAFETY-38-site-standing-pin.md +++ b/goodwe_controller/DECISIONS/SAFETY-38-site-standing-pin.md @@ -189,6 +189,21 @@ fingerprint, and verifies no cache appears during the run). The mutated line was | M9 | `sum(standing.values()) * 2.0` | +6 | **RED** | | M10 | `sorted(standing.values())[-1]` — largest signed | +7 | **RED** | +**Every one of the ten is red in `test_watchdog.py` and in nothing else** — the +other 19 files are green under all ten, which is the measurement of how +unpinned this line was: before part 9 existed, three of these left the whole +suite green and the remaining seven were caught by SAFETY-32's structural pin or +by SAFETY-30's own N≥2 checks, none of which grade the *quantity*. + +⚠️ **ONE FALSE RED, AND IT IS [[CI-06]]'s.** In the batch run M10 also reported +`FAIL test_peakguard.py`. Re-run in isolation **three times** and once more +through `tools/mutation_run.sh` — **four clean passes, zero failures**. The +batch script had discarded the failure detail, so the failing check cannot be +named here; what can be said is that the red did not reproduce in four attempts +and that **no claim in this card rests on it**. `test_peakguard.py` is the file +CI-06 records as flaky, and this is the behaviour it records. Believe no red +from it without three isolated re-runs. + M3 is listed for completeness only. SAFETY-32 already closes it **structurally** and this card does not claim it; that the behavioural fixture also catches it is a free consequence of the same discriminating numbers, not a second pin.