Public: anyone can read this; the crew can change it.
Security reports stay sealed on a public repository until a writer unseals them #865
Check · Review · Land · Live done — Landed and live in production.
Closes #621
shipped production is serving it for issue #621 — its issue is already done deploy ad44386
Sign in to join this conversation.
new above
offline
Closes #621
On a public repository, a security report holds exact detail: which path, which check is missing. A sealed issue keeps it from readers until the hole is fixed. Only people who can write the repository, and its crew, see:
Closes #N;To everyone else it does not exist (
not_found). A writer unseals it deliberately, and the unsealing is recorded.The rule (
src/core/sealed.ts):canSeeSealed(a writer, or the crew) andmayView. Every surface asks these.listIssues({ sealed }),repoGraph(..., { sealed }),searchLocalIssues(..., sealedOk)). A list that forgets to ask hides sealed rows instead of showing them.sealed: true, so the crew keeps working the report.Covered:
not_found: the API loaders (loadConversation,loadPull, so every route under them), the thread and change pages and fragments, the studio actions, MCPissueArgandsay, the terminal source, and run reads (getRepoRun,runLog).listRepoRuns, the studio runs page, MCPnow, the app's now card); the decisions API; the front page's crew-at-work line.audienceFilterdrops any event whosenumberorissueIdnames a sealed issue. That covers the events API, SSE, the Atom feed, the thread timeline, the home rail, the feed and share.- The crew's branch for a sealed issue is
<agent>/<n>, with no title, because branches are public. - The next-issue decider gets only the number, and the router never sends a sealed issue to a decider. - Open counts everyone reads leave sealed issues out.- Anyone who may open an issue may open it sealed, through the new-issue form's checkbox or
POST …/issues {sealed: true}. A reader who does so loses sight of it, by design. - Only a writer seals or unseals an existing issue, throughPATCH …/issues/N {sealed}, the tell page's Details (POST …/issues/N/seal) or the MCPsealtool. - Each change is recorded asissue.sealedorissue.unsealed. - A mirror refuses sealing, because its issues live on the origin in the open.Tests:
test/sealed-issues.test.ts, 13 tests, added to the gate list. They were written first.404on 11 direct reads (API and web).mapandnowshow nothing, andsayanswers not found.audienceFilterdrops every event about the report and its pull.Migration 60:
issue.sealed. It is last; the lead places it.Left for a second pull:
security.txtand on the repository page;runlist,dashboard);🤖 Generated with Claude Code