fix(triage): correct the four verification leftovers in the corrected report #24
Loading…
Reference in a new issue
No description provided.
Delete branch "fm/dse-security-reports-verification-refinements"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
The independent verification of the corrected triage report (
dse-security-reports-verify-2026-10-28) confirmed all four corrections and found four smaller errors, three of them inside the correction's own new text.This change fixes those four leftovers, each traceable to its source, with no derivation-lane change at all (
just py-crosscheckgreen on an untouched derive).The four items
The figures now render from the derivation (
scanClassesover both exports): trivy-confirms (24 eindeutige Fundstellen, 40 Zeilen), defender-only (12 eindeutige Fundstellen, 16 Zeilen), trivy-silent (1 Zeile — the QMS-pyjwt-Store-Fundstelle), so no typed number can drift against the payload again.Scoped to the truth, first-hand: a read-only store census on 2026-10-28 (same roots and bounds as the collector's probe) shows three of the five QMS contents carry pyjwt (Test-Content, QMS Dashboard, QMS Dashboard - Staging), the other two — including "Quality Monitoring" — do not; the census is recorded in the backfill bridge so the figures stay traceable to committed data.
The 2026-10-27 caches predate the per-unit reason capture, so a read-only live probe (the collector's own invocation, batch SSH, stdin /dev/null) captured each unit's verbatim abort message on 2026-10-28: WIREGUARD fails with "repomd.xml GPG signature verification error: Bad GPG signature", the other four error units with "Signing key not found" on the same repo and mechanism.
Each string is recorded through the same labelled bridge discipline as before (verbatim, attributed, dated) in
scripts/backfill_verified_evidence.py, the section prose names the per-unit split, and the table renders each unit's own reason.The collector's reason extraction was also fixed: it previously would have recorded the interactive "Importing GPG key 0x…" banner line as the reason in future rounds; it now strips the prompt and keeps the aborting error line (validated against all five captured live outputs, byte-identical to the bridge strings).
What changed
reports/defender-triage.typ— derived scanner-agreement figures in the Grundlagen Trivy bullet (newscanClasses/scanRowsOf/scanUniqOf/countWordhelpers); pyjwt bullet scoped to the five-content census; nine stale evidence/dnf dates corrected from the caches; the security-check section prose states the per-unit abort texts instead of one generalized string.scripts/backfill_verified_evidence.py—SEC_CHECK_FAILUREbecomes per-unit verbatim reasons (live probe 2026-10-28, prompt prefix stripped exactly as the collector does); the QMS live-store content map becomes the full five-content census (the backup store keeps its own three-name map, no census claim); the docstring now labels each block's provenance instead of claiming everything came verbatim from the archived verification report.scripts/ssh_evidence.sh— the security-check reason extraction keeps the aborting error line per unit instead of the first line matching "GPG" (the key-import banner).Justfile— thebackfill-verifiedcomment names the per-unit reasons and the content census.AGENTS.md— the restore recipe gains the round'scve-cache-*/nginx-cache-*dirs and the sidecar ordering trap (fixture lanes overwritetriage.csv;just ingestdoes not restore it).Behaviour change
The triage PDF's Grundlagen bullet, pyjwt bullet, security-check section and nine prose dates now match the evidence caches and the live estate; WIREGUARD's security-check reason cell prints its own "Bad GPG signature" abort instead of the el10 string.
The findings PDF is byte-identical to the published one (it does not render the reason strings).
Future evidence rounds record each unit's own abort text natively.
Validation
just all,just repro(byte-identical PDFs),just test(39 passed),just lint,just py-crosscheck(stdlib == polars, no derive change) — all green on the fixture lane, which stays offline.Real round re-rendered from the published caches: the findings PDF reproduces byte-identically, the corrected triage PDF republished to the artifacts dir with the previous one moved to
superseded/.Observed but deliberately not touched: the CVE-Link-Cache prose dates (Grundlagen "vom 26.10.2026" and Reproduzierbarkeit "CVE-Link-Cache 26.10.2026") — the cache snapshot in use is 2026-10-27 (
fetched-on.txt, derivedcveLinksSnapshot), but the claim was not among the verification's four items and is authored wording; flagged for the captain.The P15/P4 kernel prose is untouched except for the two dnf dates the spec explicitly listed (lines 1594/1607); every kernel claim is verbatim unchanged.
Instructions-PR: none