What happened
Opening a merged PR that I never had checked out locally surfaces a manifest fetch failure. The diff surface fails to load the file list / rows.
Frontend log:
2026-06-05T19:42:04.935262Z ERROR frontend: [WebSocket] Server error: Failed to get diff document manifest: not found: diff_pins_read: no pin or snapshot for merged-PR-active workspace 3c53167b-5d2b-43a0-a5c7-bcdef31f7768
Where the error comes from
Backend src-tauri/src/diff_document/service.rs line 610-612 — the "merged-PR-active" branch of the diff_pins_read resolver:
} else {
return Err(DiffDocumentError::NotFound(format!(
"diff_pins_read: no pin or snapshot for merged-PR-active workspace {workspace_id}"
)));
}
The path expects either:
- A
MergedPr pin in the diff pins table, OR
- A fallback snapshot recorded for the workspace.
When opening a PR whose merge happened entirely server-side (never fetched locally / never had a working tree associated with it), neither artifact exists yet, so the manifest request returns NotFound and the diff surface cannot paint anything.
Repro
- Find a PR that has already merged in a repo you have a project for.
- Make sure you have not had a local checkout / workspace for that PR previously (so no snapshot / pin was ever recorded).
- Open the PR from the inbox or via Cmd-K / paste-URL.
- Watch the diff surface fail to load with the manifest error above in the WebSocket log.
Workspace details
- Workspace ID:
3c53167b-5d2b-43a0-a5c7-bcdef31f7768
- Type: merged-PR-active (server-merged, no local working tree)
diff_pins_read experiment: appears to be on for the affected user
Expected behavior
A merged PR opened cold should still resolve a manifest. Likely options for the fix path:
- Synthesize a snapshot on first open of a merged-PR-active workspace by fetching the merge commit + parents and writing the snapshot row, then continuing through the existing snapshot path; OR
- Fall back to the live-git path (the
else branch starting around line 620) when neither a pin nor snapshot exists for a merged-PR-active workspace, instead of returning NotFound; OR
- Gate the empty merged-PR-active branch behind a "needs ingest" intent and have the FE auto-fire ingest before retrying the manifest.
The archived-workspace branch right above (line 615-617) might want the same treatment if it has the same shape.
Related code
src-tauri/src/diff_document/service.rs:550-617 — the pins-read resolver, including the regression tests around line 3207 (merged-PR-active with MergedPr pin) and line 3271-3328 (safety net: merged-PR-active without a pin should fall back to snapshot).
- The line 3328 test name (
"merged-PR-active workspace without a pin should fall back to snapshot") suggests the design intent is to fall back to a snapshot — so this looks like a missing snapshot rather than a missing fallback branch. Worth confirming whether ingest is supposed to write a snapshot for cold-opened merged PRs and isn't, vs. the resolver path being incomplete.
Out of scope / context
Found while manually validating PR github/github-app#6457 (Phase 6 of PR Shell Scaling). Not caused by that PR — the failure is on the backend manifest resolver, well upstream of the FE consumer changes Phase 6 touches. Filing here so the diff-service owners can pick it up independently.
Generated via Copilot (Claude Opus 4.7) on behalf of @tclem
What happened
Opening a merged PR that I never had checked out locally surfaces a manifest fetch failure. The diff surface fails to load the file list / rows.
Frontend log:
Where the error comes from
Backend
src-tauri/src/diff_document/service.rsline 610-612 — the "merged-PR-active" branch of thediff_pins_readresolver:The path expects either:
MergedPrpin in the diff pins table, ORWhen opening a PR whose merge happened entirely server-side (never fetched locally / never had a working tree associated with it), neither artifact exists yet, so the manifest request returns
NotFoundand the diff surface cannot paint anything.Repro
Workspace details
3c53167b-5d2b-43a0-a5c7-bcdef31f7768diff_pins_readexperiment: appears to be on for the affected userExpected behavior
A merged PR opened cold should still resolve a manifest. Likely options for the fix path:
elsebranch starting around line 620) when neither a pin nor snapshot exists for a merged-PR-active workspace, instead of returningNotFound; ORThe archived-workspace branch right above (line 615-617) might want the same treatment if it has the same shape.
Related code
src-tauri/src/diff_document/service.rs:550-617— the pins-read resolver, including the regression tests around line 3207 (merged-PR-active withMergedPrpin) and line 3271-3328 (safety net: merged-PR-active without a pin should fall back to snapshot)."merged-PR-active workspace without a pin should fall back to snapshot") suggests the design intent is to fall back to a snapshot — so this looks like a missing snapshot rather than a missing fallback branch. Worth confirming whether ingest is supposed to write a snapshot for cold-opened merged PRs and isn't, vs. the resolver path being incomplete.Out of scope / context
Found while manually validating PR github/github-app#6457 (Phase 6 of PR Shell Scaling). Not caused by that PR — the failure is on the backend manifest resolver, well upstream of the FE consumer changes Phase 6 touches. Filing here so the diff-service owners can pick it up independently.