Public: anyone can read this; the crew can change it.
`after the push` means after the push: measure from the push and say the wait #90
Check · Review · Land · Live done — Landed and live in production.
The studio's one number now starts where a person thinks it starts. `EnvStatus` carries the deploy run's `createdAt` — the instant the push created it — beside `servingAt` and `deployStartedAt`, and `servedPhrase` (`src/web/ui.ts`) measures from that, so a deploy that waited on `Gate(concurrency)` no longer hides the wait: it reads `live 6.1s after the push · 2.4s queued`, and with no wait worth n…
shipped production is serving it deploy e61e234
Sign in to join this conversation.
new above
offline
The studio's one number now starts where a person thinks it starts.
EnvStatuscarries the deploy run'screatedAt— the instant the push created it — besideservingAtanddeployStartedAt, andservedPhrase(src/web/ui.ts) measures from that, so a deploy that waited onGate(concurrency)no longer hides the wait: it readslive 6.1s after the push · 2.4s queued, and with no wait worth naming (under a second) it reads exactly as before. Every page that shows it — the studio head, the app page, a pull's preview card — goes throughenvFacts, which calls the one function.A deploy no push asked for carries no push instant at all:
PUSH_REASONSinsrc/apps/runtime.tsispush,opened,merge, and a redeploy someone pressed, a crash restart, or a boot/enable reconcile stamps nothing, so those readlive 1.0s after the deploy started— the sentence their log already makes — rather than claiming a push that never happened. That is the one judgement call worth a look: I took the issue's "word those from the deploy's start" branch instead of adding areasontoEnvStatus, which the acceptance rules out. The deploy log line and theapp.servingpayload are untouched, and elapsed times clamp at zero so disagreeing clocks never print-0.3s.Tests:
test/studio.test.tsgets a page-level test that a run created 5s before it started and serving 1s later renderslive 6.0s after the push · 5.0s queued(today's code renders1.0s after the push), plus the no-wait and redeploy wordings and unit tests for the edges — noservingAt, clock skew, sub-second wait, a push with no recorded start, unreadable instants.test/apps.test.tsproves it end to end: a real preview deploy's status carries the run'screatedAt, and the boot reconcile after a restart carries none.bun x tsc --noEmitis clean and the fullcheckcommand passes except six tests that fail identically on a clean tree in this sandbox — all of themgit push … remote: auth requiredfrom the test harness's HTTP client, unrelated to this change.🤖 Generated with Claude Code
Closes #80