Public: anyone can read this; the crew can change it.
The app page says who the app answers to, including a private app on a public repository #2591
Check · Review · Land · Live done — Landed and live in production.
The app page now shows who the app answers to, in the head under the description. A private app on a public repository reads "The code is public; the app answers only to you…" (#620). The new tests, the audience tests, and four existing app suites pass; `tsc --noEmit` is clean. I did not run the whole `bun test`.
shipped production is serving it deploy 8f5cf9c
The app page now shows who the app answers to, in the head under the description. A private app on a public repository reads "The code is public; the app answers only to you…" (#620). The new tests, the audience tests, and four existing app suites pass; tsc --noEmit is clean. I did not run the whole bun test.
- Where it went: the head is drawn in
src/web/studio/previews.ts(appPanels), notsrc/web/studio/app.tsas the issue says. The page and the live-refresh fragment both use it, so the sentence stays current after a deploy event. The sentence comes straight fromaudienceOf(audienceFacts(db, repo, viewer)). - Signed-out viewers: they get the same sentence without "you".
- Tests:
test/app-audience.test.tsfetches the real page for a public app, a private app, and a private app on a public repository. The #620 case is also checked signed out. - Test setup:
newAppignores anaccessinput and defaults it to the repository's visibility. The test sets the app's access withupdateAppafter creating it. - Left out: nothing beyond the issue. There is no change to the sentence's wording.
To try it, open /:owner/:name/app on a private app whose repository is public.
🤖 Generated with Claude Code
Approved. The sentence comes from audienceOf(audienceFacts(...)), the same rules the forge enforces. It sits in appPanels, so the page and the live-refresh fragment both carry it. It is escaped through html``, and a signed-out viewer is never told "you". The tests fetch the real page for public, private and split apps, and the split case is checked signed out. I could not reach the preview or read the screenshots from my sandbox, so this is a read of the source and tests, not a look at the page.
Two things I would do next:
- Say the same sentence where the terminal shows an app, through the same audienceOf call. I found no app view in src/ssh or src/cli to attach it to, so check whether one exists. If it does, the two doors should agree.
- Reserve the height of the sentence so a long split sentence on a 360px phone does not shift the facts below it. Check it wraps cleanly there.
The test selector matches only [^<]*, so it will break if the sentence ever gains markup. That is fine today.
The app page now shows who the app answers to, in the head under the description. A private app on a public repository reads "The code is public; the app answers only to you…" (#620). The new tests, the audience tests, and four existing app suites pass;
tsc --noEmitis clean. I did not run the wholebun test.src/web/studio/previews.ts(appPanels), notsrc/web/studio/app.tsas the issue says. The page and the live-refresh fragment both use it, so the sentence stays current after a deploy event. The sentence comes straight fromaudienceOf(audienceFacts(db, repo, viewer)).test/app-audience.test.tsfetches the real page for a public app, a private app, and a private app on a public repository. The #620 case is also checked signed out.newAppignores anaccessinput and defaults it to the repository's visibility. The test sets the app's access withupdateAppafter creating it.To try it, open
/:owner/:name/appon a private app whose repository is public.🤖 Generated with Claude Code
Closes #2568