wip: 891 round 14 — scope the disarm advice, drop a rottable duplicate
Build ErsatzTV Image / CI toolchain image resolves (pull_request) Successful in 7s
Build ErsatzTV Image / Delimiter ban (release path) (pull_request) Successful in 27s
Review verdict / Set review-verdict status (pull_request_target) Successful in 26s
Build ErsatzTV Image / Build & test (.NET) (pull_request) Successful in 9m17s
Build ErsatzTV Image / EF migration integrity (SQLite + MySql) (pull_request) Successful in 6m16s
Build ErsatzTV Image / Build & push image (amd64) (pull_request) Skipped
Build ErsatzTV Image / Functional E2E (curl + UI contracts) (pull_request) Successful in 5m55s
Build ErsatzTV Image / API docs in sync (OpenAPI + endpoint index) (pull_request) Successful in 7s
Build ErsatzTV Image / Formatting (changed .cs conform to .editorconfig) (pull_request) Successful in 5s
PR Gates / CI image pin matches docker/ci (pull_request) Successful in 12s
PR Gates / Docs update reminder (pull_request) Successful in 19s
PR Gates / decisions lifecycle (pull_request) Successful in 17s
PR Gates / Fix proofs (Proves trailers) (pull_request) Successful in 14s
PR Gates / Script lint and tests (ruff + pytest) (pull_request) Successful in 19m13s
review-verdict/h10 Review-verdict: MERGEABLE @ b1b478f (base: main)

This commit is contained in:
2026-08-30 22:15:16 +02:00
parent 61dabe1b7c
commit b1b478f293
2 changed files with 5 additions and 4 deletions
+1 -1
View File
@@ -462,7 +462,7 @@ Read the artifacts instead. The row's `Proof ref` and `scripts/tests/mutation_ma
against each other and EXECUTED by `test_mutation_harness.py`, so a stale ref there is a red rather
than a reading error. The arms are explained in `scripts/tests/test_hook_fire_log.py` itself, in the
comments through `instrumentation_faults`; the list partway down that function enumerates the arms
byte-identity does NOT subsume, and every one of those is pinned by its own test.
byte-identity does NOT subsume.
One thing no artifact records, so it is written here: **the `Blocks` column is not machine-checked at
all.** `inventory_rows()` parses that cell into a discard variable and nothing else reads it, so a
+4 -3
View File
@@ -177,9 +177,10 @@ def instrumentation_faults(text: str, name: str) -> list[str]:
# believed: PRESENCE and the no-mode-token arm were unsubsumed AND unpinned, because
# `…_LOSES_its_instrumentation_…` looks like their proof and is not (it asserts only that the
# fault list is NON-EMPTY, and a stripped hook trips four arms, so removing one leaves three
# answering). Disarm an arm here with `pass`, never `if False:` — several fall through to a
# `.group(1)` on None and red with an AttributeError, a red for the wrong reason that reads like
# a proof and cost this branch two review rounds. A
# answering). Disarm an arm here with `pass`. `if False:` is safe on an arm with no `elif` after
# it — `mutation_manifest.py` disarms byte-identity that way every run — but on the two begin-call
# arms below it falls through to a `.group(1)` on None and reds with an AttributeError: a red for
# the wrong reason that reads like a proof, and cost this branch two review rounds. A
# hook carrying both canonical lines plus `ETV_HOOK_FIRE_DISABLE=1` trips exactly one fault, and
# it is not byte-identity's, so a reader who sorts those into "already covered" deletes a live
# detector.