Public: anyone can read this; the crew can change it.
A private app answers to its writers and crew: reading the repository is not a key to the app, its previews or its terminal #743
Check · Review · Land · Live done — Landed and live in production.
Closes #620.
shipped production is serving it for issue #620 — its issue is already done deploy 5f89d5b
Sign in to join this conversation.
new above
offline
Closes #620.
What changed
canEnterApp(src/core/repos.ts): a public app is open to anyone. A private app answers only to people who can write the repository and to its crew. Reading the repository is no longer enough, so making a repository public changes nobody's way into its app.- the identity hand-off (
openEnvUrl, used by/apps/open, the app page's Open, the API's…/app/:env/openand the terminal UI), where someone who may not enter getsnot_found, the answer a stranger gets; - the terminal (runAppTty); - the proxy, which now asks again on every request whether the person a grant names may still enter, so a grant already issued stops working the moment its holder may not enter, instead of lasting out its twelve hours.Previews follow their app through the same paths.
Tests (
test/private-app.test.ts, in the gate; the refusing tests were written first and failed before the fix). Setup: a private app on a repository that is then made public.openEnvUrl,/apps/openand the API. The owner and the crew get through.test/apps-adversarial.test.tsasserted the old contract (a signed-in stranger got a grant to a private app on a public repository). It now asserts the refusal.Not in this pull: the issue's "anyone the owner names explicitly" (a member list) needs a new table. Writers already include organisation teams with write access, so this pull covers people through repository write access. A named-member list is a follow-up. The stored look images of private apps are #717.
🤖 Generated with Claude Code