docs: correct the container scan write-up and record the August findings - #124
Merged
Conversation
Three documents described the pipeline as it was rather than as it is, and the one claim that was outright false had survived two rounds of changes to the thing it describes. security-remediation.md said under M10 that "Trivy reports rather than blocks", with the reasoning that base-image CVEs move on Microsoft's schedule so failing the build would train everyone to ignore a red X. That stopped being true on 2026-08-02, when the gate was turned on precisely because `ignore-unfixed` makes the argument collapse: Trivy drops what has no patch, so what it still reports is fixable by definition. The M10 entry now records that, plus the two defects found on 2026-08-17 - the severity filter that never applied, and the upload that was skipped exactly when it had something to upload - and the fact that digest pins need refreshing as routine maintenance, which is how CVE-2026-62901 sat unpatched. SECURITY.md said the scan blocks without saying on what. It now states the CRITICAL/HIGH scope, that lower severities still reach the Security tab, and why that scope is trustworthy: gate-probes.yml parses the workflow and rejects a gate built on a SARIF-format scan, where trivy-action silently ignores the severity filter. lessons.md and dependency-audit.md gain the August material, written as a troubleshooting order rather than a narrative, because the first check would have saved most of the time: a required check red on the base branch blocks every open pull request behind it. Then the two Dependabot failures that no rebase can fix - one bump changing five packages.lock.json files, and codeql-action sub-actions that must move in one commit - the nanoid advisory on the SPA, and the two Dependabot behaviours that mislead: `@dependabot rebase` reporting "already up-to-date" when the branch does not contain your base commits, and check results belonging to a commit rather than a branch, which is how a pull request can look one tick from mergeable while its branch would revert a security fix. check-docs-drift.sh gains "reports rather than blocks" as a known-false claim, so this particular drift cannot return. Negative-tested: passes as written, fails when the retracted sentence is reintroduced, passes again once removed. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Documentation caught up with two rounds of changes to the container scan, plus the August dependency work written down as a troubleshooting order.
The one that was actually wrong
docs/development/security-remediation.mdsaid under M10:That stopped being true on 2026-08-02, when #60 turned the gate on — because
ignore-unfixed: truemakes the argument collapse. Trivy drops everything without a patch, so whatever it still reports is fixable by definition. The sentence survived that change and a second one on 2026-08-17, sitting in the place a reader hits first. Exactly the drift shapecheck-docs-drift.shwas written for, which it did not catch because it was not on the list.It is on the list now, negative-tested both ways:
What each document gained
docs/development/security-remediation.md— M10 now records that Trivy blocks and since when; thatseverity: CRITICAL,HIGHnever applied while the gate hung off aformat: sarifstep (trivy-actionlogsBuilding SARIF report with all severities); that failing the scan skippedupload-sarif, so the Security tab got results only on runs with nothing to report; and that digest pins need refreshing as routine maintenance, which is how CVE-2026-62901 (HIGH, .NET DoS) sat unpatched until the weekly scan went red and blocked 22 pull requests.SECURITY.md— said the scan blocks without saying on what. Now states the CRITICAL/HIGH scope, that lower severities still reach the Security tab, and why that scope is trustworthy:gate-probes.ymlparses the workflow and rejects a gate built on a SARIF-format scan.docs/lessons.md— two new subsections under security scanning, plus six entries in the quick index. Ordered by what would have saved the most time first: a required check red on the base branch blocks every open pull request behind it.docs/development/dependency-audit.md— §5, a worked example matching the existing Vite 8 / Vitest 4 one. TheNU1004lock-file problem, thecodeql-actionsub-action pairing, thenanoidadvisory, and the caveat thatnpm audit fixalso strippedlibcmetadata from six optional platform packages — unrelated churn inside a security fix.Two Dependabot behaviours worth having written down
@dependabot rebasecan be a silent no-op. It replies "already up-to-date" when its change still applies cleanly, which is not the same as containing your base commits. Both build(deps-dev): bump @testing-library/user-event from 14.6.1 to 14.6.4 #104 and build(deps-dev): bump vite from 8.2.0 to 8.2.1 #105 reported up-to-date while sitting 2 commits behind and still carrying the vulnerablenanoid3.3.16.@dependabot recreateis what actually rebuilds.Verification
./scripts/check-docs-drift.sh— 6 passed, 0 failed. Every path cited exists, no known-false claims, and all four promised controls are present in the code.🤖 Generated with Claude Code