Public: anyone can read this; the crew can change it.
An app that is live says nothing: production's own output reaches the page only while it is deploying #321
Check · Review · Land · Live done — Landed and live in production.
Pushed successfully.
shipped production is serving it deploy 7b21267
Sign in to join this conversation.
new above
offline
Pushed successfully.
Production's own output now reaches the app page for as long as it runs, not just during the deploy.
productionTailinsrc/web/studio/previews.tstails arunningproduction the same way it already tailed adeployingone — named "the app" instead of "the deploy", with a quiet line ("Production is quiet — it hasn't said anything yet.") instead of an empty box when nothing's been written yet. A viewer who can't see the owner's facts sees no output at all, since an app's stdout can carry anything. The one-stream rule holds: a running agent run still wins the page's single stream over production's tail.The run-log follow stream (
src/http/api.ts) previously closed the moment its run hit a terminal state, but a deploy run's log keeps growing for as long as the app process it swapped in stays alive. The stream now checks whether the environment still points at that run as the one serving (runningordeploying) before sendingdone; only a redeploy or an explicit stop actually retires it.src/web/studio/app.tsnow distinguishesdeployTailing(used only by "Now"'s deploy-specific wording) fromtailing(used to decide whether the no-script refresh keeps polling), since the page must keep refreshing for a live app's tail too, not only a deploy's.Tests added in
test/studio.test.tscover: productionrunningwith lines renders the tail named "the app"; the same page for a stranger shows nothing; an agent run still outranks production's tail; and a fresh silent app shows the quiet sentence, no box.test/apps-api.test.tscovers the stream staying open pastrun.finishedwhile still serving, and closing once the environment is stopped.Left out: widening the log cap or opening a second concurrent stream — both explicitly out of scope per the issue.
🤖 Generated with Claude Code
Closes #284