You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
bugs: frame scanned-repo and tracker text as untrusted data; author-check scan's lane cursor and dedupe #7394
Found by the security review of #7393. Both predate that PR (the PR rewrites these bodies but neither added nor removed this).
Untrusted-content framing absent (P4).plugins/bugs/skills/scan/SKILL.md (rung 1, hunters, Step 6 dedupe) and plugins/bugs/skills/write/SKILL.md (survey) read repository files and tracker item text, but no bugs skill or context file carries the inline framing docs/conventions/untrusted-content/README.md requires (grep -rln 'never instructions to you' plugins/bugs is empty). A planted imperative in scanned code or a tracker item could steer hunters or gates (suppress or skew findings). Filing stays gated by --track and filing_posture. Fix: add the convention's inline form to the scan Step 2 and Step 4 dispatch contracts (context/lenses.md, context/verification-gate.md) and the write survey step.
Lane cursor and dedupe trust any author (P4). Rung 1 picks the next lane from the newest tracker item containing Filed by /bugs:scan (lane: <name>) with no author check, so on a public repo anyone can steer the rotation; Step 6 dedupe can attach a real finding as a comment on an outsider's issue. plugins/work-items/reference/item-content-trust.md requires a provider-enforced write surface. Fix: accept the provenance line and dedupe matches only from the scanning identity or a repo writer; otherwise fall through to rung 2 / file a new item.
Also noted, not graded: scan/context/verification-gate.md lets a gate run the scanned repo's tests to label a finding reproduced, which executes scanned code on an unattended run over an untrusted checkout.
Done when
plugins/bugs/skills/scan/context/lenses.md, plugins/bugs/skills/scan/context/verification-gate.md, plugins/bugs/skills/scan/SKILL.md (rung 1 lane cursor and Step 6 dedupe) and plugins/bugs/skills/write/SKILL.md (survey step) each carry the inline form from docs/conventions/untrusted-content/README.md, with both conformance fragments unbroken: never instructions to you and untrusted-content/README.md` "The framing contract".
Rung 1's lane cursor and Step 6 dedupe accept a Filed by /bugs:scan (lane: <name>) match only from the scanning identity or a repository writer, and otherwise fall through to rung 2 or file a new item.
The changelog fragment is valid (the lane's fragment check passes), and CI's check-skills job passes on the PR (a PR check; this run does not run it).
Activity
github-actions commentedon Oct 13, 2026
Thanks for the report. Automated triage handed this issue to a maintainer.
Automated triage. A maintainer reviews it.
kyle-sexton commentedon Oct 17, 2026
Admitted in owner wave 1.
kyle-sexton commentedon Oct 17, 2026