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

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

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

opened this

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 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 through envFacts, which calls the one function.

A deploy no push asked for carries no push instant at all: PUSH_REASONS in src/apps/runtime.ts is push, opened, merge, and a redeploy someone pressed, a crash restart, or a boot/enable reconcile stamps nothing, so those read live 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 a reason to EnvStatus, which the acceptance rules out. The deploy log line and the app.serving payload are untouched, and elapsed times clamp at zero so disagreeing clocks never print -0.3s.

Tests: test/studio.test.ts gets a page-level test that a run created 5s before it started and serving 1s later renders live 6.0s after the push · 5.0s queued (today's code renders 1.0s after the push), plus the no-wait and redeploy wordings and unit tests for the edges — no servingAt, clock skew, sub-second wait, a push with no recorded start, unreadable instants. test/apps.test.ts proves it end to end: a real preview deploy's status carries the run's createdAt, and the boot reconcile after a restart carries none. bun x tsc --noEmit is clean and the full check command passes except six tests that fail identically on a clean tree in this sandbox — all of them git push … remote: auth required from the test harness's HTTP client, unrelated to this change.

🤖 Generated with Claude Code

Closes #80

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs