Repository navigation
perf(security-issue-sync): load stage-specific rules only when they apply - #1997
Merged
Merged
Conversation
…pply Most Step 2b bullets about release-manager comments and post-advisory records apply at one lifecycle stage, yet every sync loaded them. Move them byte-for-byte to sibling files, behind pointers that name their triggers, and trim the Step 5b prose that push-decision already decides. A routine sync reads about 5.3k fewer tokens. Comparing that prose with the code found two gaps, fixed here so the cut changes nothing: - a state fetch that fails after the push fired the fill-fields comment; it now posts nothing about the hand-off and retries on the next sync - version noise such as "in Apache Foo 2.1.0" passed the title gate; the shared strip cascade now removes it, for security-cve-allocate as well Add a pointer-routing eval step that shows the agent the lookup without the sibling text, so a pointer that stops working fails a case. Generated-by: Claude Opus 5
potiuk
enabled auto-merge (squash)
November 5, 2026 00:33
potiuk
disabled auto-merge
November 5, 2026 00:39
This was referenced Nov 5, 2026
potiuk
added a commit
that referenced
this pull request
Nov 5, 2026
…1997 (#2004) * fix(security-issue-sync): read the hand-off rules when a gate blocks the label The pointer to release-manager-comments.md fired only when a pass proposed a transition. With a shipped release and a record still DRAFT the label cannot flip, so with no marker comment the agent never read the fill-fields rule. Trigger on the tracker's state instead: any open tracker labelled `pr merged` or `fix released`. Also strip a version suffix after a short project name in a title, such as "in Foo 2.1.0", which the earlier fix missed. A bare short name stays, since it may be a real word in the title. Generated-by: Claude Opus 5 * fix(adversarial-review): review a PR's head, not an empty directory The pre-PR block and security-issue-import-from-pr told agents to pass an empty temporary directory as --repo-dir for a PR with no local checkout. Reviewers there can read only the diff, so no findings is not a clean review. Give an export recipe that uses a throwaway repository, because that skill runs in the private tracker checkout, and warn in the report when --repo-dir is empty. Generated-by: Claude Opus 5
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.
Summary
security-issue-syncout ofsignals-to-actions.mdinto siblings, behind pointers that name their triggers, and trims the Step 5b prose thatpush-decisionalready decides.pointer-routingeval step for the new pointers.announcedtrackerMoved byte for byte:
release-manager-comments.md: the fill-fields, release-manager hand-off and publication-ready comments.post-advisory-records.md: the advisory-records update and the security-pages reminder.Code fixes:
unknownfell through to "fire the fill-fields comment". The skill says to post nothing on the hand-off front and retry on the next sync;push-decisionnow does that, with a recap blocker.Wrong label in the UI in Apache Foo 2.1.0andWrong label in the UI (Foo 2.1.0)passed the title gate, although the gate promises no version-noise suffix.Type of change
.claude/skills/<name>/) — eval fixtures updated belowtools/*/withpyproject.toml)Test plan
prek run --all-files --skip workspace-pytestpasses, includinglycheeworkspace-pytestpasses for the changed filessurface_hashchangedsecurity-issue-syncevals: 45/45 before, 53/53 after, no original case regressedpointer-routingstep: 8/8 on the real skill; with both pointers deleted, all 6 cases that need a file fail and the 2 that need none passThe output spec names no file, so the agent has to get each name from the skill text.
case-5covers an existing marker comment with no label transition, the easiest trigger to miss.RFC-AI-0004 compliance
check-placeholdershook passesNo new mutation, host access, outbound message or LLM routing.
Linked issues
None.
Notes for reviewers
security-cve-allocatechanges too. The version-noise fix is in the sharedstrip(), so that skill now removes these suffixes as well. This matches its own rule (no redundant version suffix), but it is a behaviour change in a second skill.push-decision'sreasonthe way it followed the deleted prose, and those strings are terser, for example the expired-session reminder.allocatedrecords. The removed prose said "when the pushed JSON carriedreview-ready", under the heading of theallocated→review-readygate. The code's narrower reading is unchanged.pointer-routingrecords a stated decision. The agent says which files it would open; it does not run with file tools.prekandworkspace-pytestran after it.tools/spec-loop/.last-syncis not bumped. The lifecycle spec is updated by hand here.🤖 Generated with Claude Code