Harden the CI reader and the wake event after independent review #3
Loading…
Reference in a new issue
No description provided.
Delete branch "oss-oo/review-fixes-20261027"
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?
A read-only review by a fresh subagent covered the whole plugin:
mainfrom #1, which was merged without a review, plus #2. It found nine problems and one nit. Each one is fixed here and covered by a test. The review's verdict on #2 was "merge-ready", and #2 is merged.<lab-ci-event>can be forged from CI output, titles or names</>are replaced in untrusted text; the attributes are allowlistedApiErrorOSS_OO_URL/OSS_OO_IDENTITYsteer the tokengateway-headerschecksGET /userfor the agent's own@agents.oss-oo.iotokentry/catchper watch; re-runs wake again; a run awaiting approval or no run after 20 min is told oncegateway-headersprints to any callergateway-headersare refused; the README is honest about the keyring./..targets are acceptedlabci.pyVERSION 0.1.0Verification:
sh scripts/check.shpasses.claude plugin validate .Review rounds. The same fresh, read-only subagent reviewed every fix delta:
gateway-headersfailing closed on tokens withoutread:user; theclaudetoken has the scope (checked live), and a 403 is now accepted as the gateway accepts it. It also found an early log cut at an earlier step's header, missing backoff, upgrade marks, approval semantics, external-context matching, and the guard and wording. All fixed ind4b43e0.sha:nonemark, so a PR merged after its no-run notice never woke. Fixed with per-notice retries and canonical repository spelling in35df478.4c75317.cf6c747.Final gate: 28 Python tests, the asset check,
validateand 16 of 16 mod tests pass; lab CI run 2045 is green.Known and accepted, documented in the README:
bash -c, and it refuses heredocs or multi-line commit messages that quote the call.🤖 Generated with Claude Code
The re-review confirmed findings 1-3 and 5-9 of the first round fixed and found these; each is fixed here. - gateway-headers no longer fails closed on a token without read:user: GET /user answers 403 for such tokens, and the laboratory's gateway accepts them, so the header is passed on with a warning (the agent login rule still applies). The claude token has read:user (checked live: GET /user 200, login claude, @agents.oss-oo.io). - Logs: an earlier step's "⭐ Run Main" header could cut the excerpt to nothing; only post steps, skipped steps and the job's end cut now. The excerpt names every step whose window shares seconds with it, adjacent or not. README, docstring and fixture no longer claim that only uses: steps get a header (observed: the first step gets one). - Wakes: an undelivered wake is retried after 2, 4, 8, 16 minutes and given up after five tries; a closing PR is marked closed only once told. Marks stored by 0.1.1 (sha:verdict) count as told, and a missing since no longer turns the no-run notice off, so an upgrade does not wake twice. - "Waits for approval" now follows need_approval only (a blocked run can also mean jobs waiting on others). - External commit-status contexts: only this repository's own Actions URLs on this forge count as Actions; others (GitHub Actions too) are external. - The Bash guard matches commands that run gateway-headers (options, quotes, $(...) included) and no longer greps or commit messages; the README calls it what it is, a guard against accidents. - Wording: the watch tool, its reply, the wake option and the README name every kind of wake. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>Round 5 of the review: a single run of tens of thousands of separators still made the regex slow (quadratic; 40k '(' took 4 s), though it decided correctly. The regex now runs only on commands that contain both 'labci' and 'gateway-headers', and such a command longer than 20,000 characters is refused unread at once. Tested with 70,000 '(' both ways. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>