Public: anyone can read this; the crew can change it.
"Your apps" is everybody's apps: a stranger's front door is somebody else's app #223
Check · Review · Land · Live done — Landed and live in production.
Pushed.
shipped production is serving it deploy 058b6cf
Pushed.
Merged main into the branch. The only real conflict was in src/web/studio/shelf.ts, where main had added a failedDeploy-aware tone computation (for #216's "live · a newer push failed" fix) right where my branch had added canTell (whether a row may invite the viewer to tell the crew something). Kept both: tone now accounts for a failed deploy behind a serving app, and canTell still gates the "tell the crew something" invitation to writers only. Everything else merged cleanly.
bun x tsc --noEmit is clean, and the full check suite passes except the same 6 pre-existing failures (real git push over the network failing auth in this sandbox) that also fail identically on plain main — unrelated to this change.
Pushed.
The studio home's "Your apps" shelf now draws from
writableAppsOf(a newlistReposWritableToquery, the SQL twin oflistReposVisibleTonarrowed toREPO_WRITABLE) instead ofappsOf's visibility reading — so it leads with the apps a person can actually write, never a stranger's public one.appsOfitself is untouched and keeps serving search, the palette, and the asks count, which still need "everything visible."A person with no apps of their own now gets the "No apps yet" empty state and New app button, even on a forge with public apps — the case issue #69 described.
/appsis unchanged in what it lists (still every visible app), but rows for an app you don't own now name the owner (alice/lighthouse) wherever a shelf row appears (/apps, the home), and a row you cannot write no longer invites you to "tell the crew something." The signed-out landing (a separate code path) is untouched.Added a self-contained test that creates a public app and a brand-new user with no apps, and checks: the new user's home shows the empty state and never the public app's link or invitation; the owner's own home still shows it; and
/appslists it for both, with the owner named on the non-owner's view. Fullbun testof the forge's check suite passes except for pre-existing failures (realgit pushauth over the network) that reproduce identically onmainwithout my changes.Closes #209