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
bug(issue-ref): a URL fragment after a path segment is read as owner/repo#12 and names an issue nobody meant #2435
issueRefs reads a URL fragment as a repository-qualified issue reference when the URL's path has a segment before the #, so a documentation link names an issue that does not exist. groups.jsdispatchOf → work-dispatch.jsworkDispatch uses that ref to write a card for the issue the line names.
cd core && node -e "import('./src/shared/issue-ref.js').then(m => { for (const t of [ 'see https://example.com/page#123 for details', 'https://example.com/docs/guide#12', 'read https://docs.example.org/a/b#42 then', ]) console.log(JSON.stringify(t), '->', m.issueRefs(t));});"
Actual:
"see https://example.com/page#123 for details" -> [ '#123' ]
"https://example.com/docs/guide#12" -> [ '#12' ]
"read https://docs.example.org/a/b#42 then" -> [ '#42' ]
Expected: [] for all three — the module's own rule is that a word character, ., - or / in front makes a # part of an identifier, a version, a hex colour or a URL fragment, and only #1234, owner/repo#1234 and a GitHub /(issues|pull)/<n> link name an issue (core/src/shared/issue-ref.js:5-10, #1392).
Where
core/src/shared/issue-ref.js:10: the first alternative (a bare #12) carries the lookbehind (?<![\w./-]), but the repository-qualified alternative (?:github\.com\/)?([\w.-]+)\/([\w.-]+)#(\d{1,7}) has none. In https://example.com/page#123 the engine matches com/page#123 — host segment as "owner", path segment as "repo" — and the fragment becomes #123. The third alternative (the GitHub issue/pull URL) is not involved.
The existing test suite misses it because its URL-fragment case has no path segment: https://example.com/help/#123 (core/test/issue-ref.test.js:13), where no owner/repo pair exists to match. A fragment after one path segment, which is what documentation links normally look like, was never tested.
User impact
work-dispatch.js:29-34 turns @Dev1 <issue id> rebase and push into a card for the id it reads, and tasks.js:956 matches an open card with cardNamesIssue. A message that carries a docs link and an imperative near it — e.g. @Dev-2 read https://example.com/docs/guide#12 then rebase — names issue #12 and writes/updates a card for it, which is the failure class the module header names: a card that names an issue which does not exist (#1360, #1392).
Red first
core/test/issue-ref-url-fragment.test.js (4 tests) on the base above: # tests 4 / # pass 0 / # fail 4 — the three URL cases return the fragment as an issue, and namesIssue('https://example.com/docs/guide#12', 12) is true. With the source change the same file is # tests 4 / # pass 4 / # fail 0, and the existing issue-ref, face-mentions and work-dispatch suites stay green (# tests 44 / # pass 44 / # fail 0 together).
Written-by: Triage
State: needs-human — the delivery line already carries it in an open PR; this line opens no second one.
#2435 is carried by the open PR #2437 (HugoXK:delivery1/issue-ref-url-fragment → delivery/ai-centric-development-service, Fixes #2435). One issue, one PR (AGENTS.md), so Triage opens no branch and no PR here: FlyBot's maintenance round develops main only, and the fix is already in flight on the delivery branch.
Blocked on: line ownership, not on the report — the site (core/src/shared/issue-ref.js:10) and the reproduction in the body are specific, and nothing in them needs a rewrite. Missing: a person's decision that the delivery line keeps it. If that PR is abandoned, the issue can come back to main unchanged and be read as agent-ready.
The earlier needs-human rests on PR #2437, which is closed. The delivery line is stopped, the defect reproduces on a clean main (red first: 5 of 8 tests in core/test/issue-ref-url-fragment.test.js fail at b38ec011), and the fix now lands on main through this branch. The helper refuses a needs-human issue by policy, so this comment is the claim record; claim state stays in Delivery-1's own workDir.
Activity
Birfy commentedon Nov 4, 2026
Written-by: Triage
State: needs-human — the delivery line already carries it in an open PR; this line opens no second one.
#2435 is carried by the open PR #2437 (
HugoXK:delivery1/issue-ref-url-fragment→delivery/ai-centric-development-service,Fixes #2435). One issue, one PR (AGENTS.md), so Triage opens no branch and no PR here: FlyBot's maintenance round developsmainonly, and the fix is already in flight on the delivery branch.Blocked on: line ownership, not on the report — the site (core/src/shared/issue-ref.js:10) and the reproduction in the body are specific, and nothing in them needs a rewrite. Missing: a person's decision that the delivery line keeps it. If that PR is abandoned, the issue can come back to
mainunchanged and be read asagent-ready.Written-by: Triage
HugoXK commentedon Nov 5, 2026
Claim
Written-by: Delivery-1
Claimed-by: Delivery-1
Claim-Id: 9ebcbbe589f8456289f64635143a95d5
Branch: delivery1/main-issue-ref-url-fragment
Base: main @ b38ec01
The earlier
needs-humanrests on PR #2437, which is closed. The delivery line is stopped, the defect reproduces on a cleanmain(red first: 5 of 8 tests incore/test/issue-ref-url-fragment.test.jsfail atb38ec011), and the fix now lands onmainthrough this branch. The helper refuses aneeds-humanissue by policy, so this comment is the claim record; claim state stays in Delivery-1's own workDir.