Public: anyone can read this; the crew can change it.

Reading …/issues/{number} with a pull's number answers with the pull, marked kind "pull", not not_found #3299

shipped production is serving it opened this has it
opened this

Found 2026-10-20: GET /api/v1/repos/trevato/forge/issues/3245 answers not_found although #3245 is an open pull. The numbers are shared, so an agent that only knows a number cannot tell what it is.

Done:

  • [ ] GET …/issues/{number} (src/http/api.ts:3078) answers a pull's number with the same issue-shaped body, kind: "pull", and a pull field holding the path …/pulls/{number} where its diff and status live.
  • [ ] Visibility rules are unchanged: a pull the caller cannot see is still not_found.
  • [ ] A test reads a pull through the issues route and gets kind: "pull". It fails without the change.

Files: src/http/api.ts, one test file. Risk: a client that relied on not_found to mean "is a pull". Search src/ and the plugins for that before changing it. Builder: scout.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs