Public: anyone can read this; the crew can change it.
Every repository and app page says who can see it in a sentence that names the people, and the API and MCP say the same #809
Parked by the crew: the check failed ("capacity: only a forge admin reads or changes it > an admin changes each one from the page, the API and MCP; a wrong value is refused; every change is kept") and the decider saw no point in another try (pull #977 closed). Planner: split this smaller, or rewrite what done looks like; a person can also say what to try.
State: split into #2566, #2567, #2568 and #2569. It reached its run cap because one run had to write a new module and change two pages, the API and the MCP. What the fresh ones do differently: #2566 is only the pure audienceOf function and its tests, and the head (#2567), the app page (#2568) and the API with MCP (#2569) each follow it as their own run, in parallel. My close was refused (403), so this waits on the three surfaces. A person can close it as split into them.
State: done, every piece landed: #2583 (363d3ce9, audienceOf), #2567 (91bb593c, the repository head), #2568 (56c080d1, the app page) and #2569 (bc8faa21, the API and MCP). Nothing is left. It reached its run cap only because builders were handed finished work. My token cannot close it, because it came as run-capped, not as a hand-over. A person can close it as split into [2583, 2567, 2568, 2569].
Steward (trevato): split into #2583, #2567, #2568, #2569, all closed as done (checked).
Pillar: P0 Trust (umbrella #586). One run, started fresh from today's
main.Intent. Every repository and app page says who can see it, in plain words that name the people: the Private/Public badge becomes a sentence.
Today.
src/web/chrome.ts(repo head, ~line 278) shows a barePrivate/Publicbadge. The only plain wording is in form hints: the new-repository form (src/web/pages/site.ts:928), app access (src/web/pages/apps.ts:341) and settings (src/web/pages/settings.ts:432). A person on the page itself cannot tell whether "private" means them alone, their organization, or also the crew.Acceptance.
audienceOf(facts) → { level, sentence }in a new modulesrc/core/audience.ts. It takes plain data (visibility, owner kind, writer and reader counts, whether the crew works here, app access) and returns a sentence. Examples: "Private: only you and the crew." / "Private: you, 3 people in acme, and the crew." / "Public: anyone on the internet can read this; 2 people can change it." Counts come from the same rules asREPO_VISIBLE/REPO_WRITABLEinsrc/core/visibility.ts, so the sentence cannot disagree with what is enforced.src/web/chrome.tskeeps its badge and shows the sentence beside it, as a link to the repository's settings for writers and as plain text for readers. It must not shift layout: one line, truncated with the full text intitle.src/web/studio/app.ts) says the same for the app, including the case from #620: a private app on a public repository reads "The code is public; the app answers only to …".GET /api/v1/repos/:owner/:namereturnsaudience: { level, sentence }, and the MCP tool that describes a repository returns the same field in the same words. One words source, no second copy.test/audience.test.ts): each sentence for private/personal, private/org, public, a private app on a public repo; and the count matches the access rule for a seeded org with a reader, a writer and an outsider.Done means reachable: the page (repo head and app page), the MCP (the repository tool's
audience), a test, and a look at a private and a public repository on phone and desk.Files I expect to change:
src/core/audience.ts(new),src/web/chrome.ts,src/web/studio/app.ts,src/http/api.ts,src/http/mcp.ts,test/audience.test.ts, anddocs/MCP.mdfor the new field.Risks. A wrong count is worse than none: it tells someone their work is safer than it is. Compute from the enforced rule, not from a parallel query. Counting must stay cheap on the repo head (one indexed query); the page should still answer in under 50 ms.
Suggested brief: a builder with the trust brief (sentinel to review).
Must not touch: the release workflow, the chart (
charts/), other repositories.