Bug-hunt fixes: cve-watch 403, repro-check, hardening-drift guard, publish/prune #1
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "fix/bughunt-cve-watch-repro-config-publish"
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?
Fixes from an Opus 4.8 bug hunt (3 read-only Explore agents) across the CI workflows, build pipeline, and publish/repro tooling. Four self-contained clusters, one commit each. All changes pass the
validate.ymlgates (shellcheck, yamllint, py_compile, intent-matches-policy) plus targeted unit tests of the pure logic; end-to-end repro/prune runs need a Linux+docker host and are flagged as operator verification.Clusters
cve-watch (
37d4aa4) — theopen / update tracking issuestep was dying with an opaquecurl: (22) ... 403.curl -fsSwith a helper capturing HTTP status and body, printed on >=400 — the next failure is self-diagnosing.&q=issue search (needs the issue indexer + extra token scope); the existing client-sidejqtitle match suffices.X.Y.Z-hardenedNcore, fixing a false "new upstream" that fired every hour because local.Ppackaging tags never match upstream.ISSUE_TOKENscope docs towrite:issue+read:repository.reproducibility (
bdff799) —repro-check.shcould not pass for any release.strip-signatures.shnow decompresses.ko.xzbefore stripping (it was scanning compressed bytes -> no-op) and truncates at the correct offsetidx-12-sig_len. Verified: project-key and ephemeral-key signatures over the same module strip to identical bytes.gcc-<ver>-plugin-devto the rebuild deps (without it the fidelity assertion aborts onCONFIG_GCC_PLUGINS), addedsbsigntoolto the preflight, and turned the silent released-.debfetch skip into a loud, actionable warning.config integrity (
b583129)tools/check-hardening-drift.sh, run inbuild-kernel.yml, fails the build if an inherited hardening symbol (not covered by the fidelity assertion) regresses vs the most recent releasedfinal.config. Excludes intent-pinned symbols and "disable-is-hardened" families to avoid inverted false positives. Verified on the real 1.2->1.3 pair (passes) and a synthetic LSM drop (fails).final.config; scrubbed the three existing ones.bump-seed.sh's signer check (was an unanchored substring grep).publish/prune (
a24d4ba)Operator follow-ups
ISSUE_TOKENwithwrite:issue+read:repository— the code makes the failure diagnosable and drops the indexer dependency, but the scope is what actually clears the 403.1.3baseline; review and pin the symbol or setALLOW_HARDENING_REGRESSION=1once.Deferred (documented, not in this PR)
repro-check.yml'sworkflow_runtrigger may not fire on Forgejo; draft-release 409 fallback;intent-matches-policysubstring match;unshare -nsilent no-isolation fallback; tag regex accepting.0.🤖 Generated with Claude Code
The `open / update tracking issue` step died with an opaque `curl: (22) ... 403`. Three compounding problems: 1. `curl -fsS` discarded the response body, so the operator saw only exit 22 with no Forgejo error. Replace both API calls with an api_call helper that captures `%{http_code}` + body and prints the body to stderr on >=400 — the next failure is self-diagnosing. 2. The dedup search used a server-side `&q=` query, which depends on the issue indexer and requires the repository-read scope category. Drop it: the code already filters the open-issue list client-side by exact title (jq select), so `state=open&type=issues&limit=50` plus the existing jq match is sufficient and needs less scope surface. 3. ISSUE_TOKEN was documented as `write:issue` only, but listing issues needs `read:repository` too (Forgejo enforces token scopes even on anonymously-public endpoints). Reconcile the workflow comment and the three operator docs to `write:issue` + `read:repository`. (Re-minting the PAT is the operator action that actually clears the 403.) Separately, the upstream-vs-local comparison compared the newest local tag (which carries our `.P` packaging suffix, e.g. v7.0.10-hardened1.4) against an upstream value that can only ever be `...-hardenedN`, so `new=true` fired every hour and tried to refile. Normalize the local tag to its X.Y.Z-hardenedN core before comparing. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>