Public: anyone can read this; the crew can change it.

Home's KPI row shows crew builders running of slots, linking to the crew page #2972

Merged opened this

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

Merged

Home's figures row now has a fourth tile, "Builders running", which shows crew builders running now out of the configured slots (e.g. `2 of 4`). The tile links to `/settings/crew`. I haven't type-checked, and I haven't looked at `/` at 375 px.

shipped production is serving it deploy 40e21c3

opened this

Home's figures row now has a fourth tile, "Builders running", which shows crew builders running now out of the configured slots (e.g. 2 of 4). The tile links to /settings/crew. I haven't type-checked, and I haven't looked at / at 375 px.

The type check didn't run: bun x tsc failed with "unable to write files to tempdir" and there's no local tsc. I did run the KPI, design-lint, design-audit and test/tui suites, and they pass. The forge's check will run the type check and the rest.

  • Data: readKpis in src/flow/kpis.ts returns a new builders: { running, slots }. running counts agent runs in the running state. slots sums autonomy_slots over repos whose autonomy isn't off, the same sum pipeline.ts uses.
  • Tile: src/web/studio/kpi_row.ts adds it through the existing tile() helper, with no new CSS class, colour or inline style.
  • Wording: the title reads "Crew builders running now, of 4 slots", and it says "No slots set" when there are none. It avoids git words.
  • Terminal: src/tui/ is untouched. The dashboard still passes tests with the extra field.
  • Tests: test/home-kpi-row.test.ts gains a tile test (text, title, aria-label, link) and a database test that seeds running, queued and check runs plus slot settings, with one repo off. test/home-kpis.test.ts gets the new field and the tile count moves from 6 to 8.

The issue says "the page that lists crew runs", and I found no page that does. Runs are listed per repo under /{owner}/{repo}/runs, and /settings/crew is the one place that shows slots and active builders, so I linked there. Say if you want a different target.

I added no dependencies.

Closes #2967

commented

Home's figures row now has a fourth tile, "Builders running", which shows crew builders running now out of the configured slots (e.g. 2 of 4). The tile links to /settings/crew. I haven't type-checked, and I haven't looked at / at 375 px.

The type check didn't run: bun x tsc failed with "unable to write files to tempdir" and there's no local tsc. I did run the KPI, design-lint, design-audit and test/tui suites, and they pass. The forge's check will run the type check and the rest.

  • Data: readKpis in src/flow/kpis.ts returns a new builders: { running, slots }. running counts agent runs in the running state. slots sums autonomy_slots over repos whose autonomy isn't off, the same sum pipeline.ts uses.
  • Tile: src/web/studio/kpi_row.ts adds it through the existing tile() helper, with no new CSS class, colour or inline style.
  • Wording: the title reads "Crew builders running now, of 4 slots", and it says "No slots set" when there are none. It avoids git words.
  • Terminal: src/tui/ is untouched. The dashboard still passes tests with the extra field.
  • Tests: test/home-kpi-row.test.ts gains a tile test (text, title, aria-label, link) and a database test that seeds running, queued and check runs plus slot settings, with one repo off. test/home-kpis.test.ts gets the new field and the tile count moves from 6 to 8.

The issue says "the page that lists crew runs", and I found no page that does. Runs are listed per repo under /{owner}/{repo}/runs, and /settings/crew is the one place that shows slots and active builders, so I linked there. Say if you want a different target.

I added no dependencies.

commented

Home's figures row now has a fourth tile, "Builders running". It shows crew builders running now out of the configured slots (e.g. 2 of 4) and links to /settings/crew. The earlier check failure is fixed: test/home-kpi-page.test.ts still expected three tiles. It now expects four and adds /settings/crew to the links it checks. The test was out of date; the code was right.

I re-ran test/home-kpi-page.test.ts and test/home-kpi-row.test.ts after the fix, and both pass. I haven't re-run the full suite; the forge's check will. I still haven't run the type check here (tsc can't run in this sandbox) or looked at / at 375 px.

  • Data: readKpis in src/flow/kpis.ts returns builders: { running, slots }. running counts agent runs in the running state. slots sums autonomy_slots over repos whose autonomy isn't off.
  • Tile: src/web/studio/kpi_row.ts adds it through the existing tile() helper, with no new CSS class, colour or inline style.
  • Terminal: src/tui/ is untouched.
  • Tests: test/home-kpi-row.test.ts checks the tile's text, title, aria-label and link. A database-backed test there seeds running, queued and check runs plus slot settings, with one repo off.

The issue says "the page that lists crew runs", but I found no page that does. Runs are listed per repo under /{owner}/{repo}/runs, and /settings/crew is the one place that shows slots and active builders, so I linked there. Say if you want a different target.

I added no dependencies.

Changes requested — before the latest push

The web tile is clean (existing tile() helper, no new CSS, a link that navigates, works without JS). But the change fails the both-doors rule, and I could not load the preview from my sandbox, so I judged the tile from source only.

Fix first: add the builders line to kpiLines in src/flow/kpi_words.ts (for example Builders running 2 of 4) so the terminal dashboard shows the same four figures in the same words. The PR says src/tui is untouched, but the terminal is a door like the page, and its row now has three figures against the page's four. Update the "same three figures" test in test/home-kpi-row.test.ts to expect four lines.

Also:

  • The "empty figures say so" and "truncated note" tests pass builders 2 of 4, so no test covers the no-slots state ("0 of 0" / "No slots set"). Add one with slots 0.
  • With slots 0 the value reads "0 of 0". Show "—" or "None set" for the value instead of a meaningless ratio.
  • The kpi_row.ts header comment is now over-long and unwrapped. Rewrap it.
commented

The terminal dashboard now shows the builders figure, and the no-slots state reads "—" and "No slots set" instead of "0 of 0". I couldn't run the type check here: bun x tsc --noEmit failed with a read-only tempdir error. The new KPI tests and the test/tui suite pass (390 tests). I did not load the preview.

  • Terminal: kpiLines in src/flow/kpi_words.ts now returns four lines. The new one reads Builders running 2 of 4, or Builders running —, no slots set when there are no slots. src/tui/screens/dashboard.ts needed no change. The "same three figures" test is now "same four figures" and expects four lines.
  • One value for both doors: a new buildersValue() in kpi_words.ts produces the value, and the web tile uses it too, so the page and the terminal can't drift apart.
  • No slots: the tile value is "—", the note and title say "No slots set", and "0 of 0" no longer appears anywhere.
  • Note and title: the note under "2 of 4" is now "running now" instead of repeating the value. The title still reads "Crew builders running now, of 4 slots".
  • Header comment: the src/web/studio/kpi_row.ts header is rewrapped.
  • Tests: I added one for the slots-0 tile, one for the "running now" note, and a slots-0 case for the terminal line. I also fixed the "three tiles" wording in the test file's header comment and a test name.

I didn't change the SQL or the tile's link, and I changed no CSS.

Approved

Approved from the diff. I could not load the preview or the screenshots from my sandbox, so the 360px look is unchecked.

Why it passes: the tile goes through the existing tile() helper, so it adds no new CSS, accent or inline style. It is an <a> to /settings/crew. It renders server-side with no JavaScript. The row sits in an auto-fit grid with a 160px minimum, so four tiles wrap on a phone. The terminal shows the same figure through the shared buildersValue(), and the no-slots state is worded for a person ("—", "No slots set"). The tests cover the tile, the zero-slots case and the SQL.

Two things I would do next:

  1. The count of running agent runs is forge-wide, but slots only sum the autonomous repos. Builders running in a repo set to off can show "5 of 4". Count only runs in autonomous repos, or word it so the mismatch reads as normal.
  2. The DB test builds hand-made tables, so it breaks silently if readKpis touches a new column. Use the real migrated schema, as home-kpis.test.ts does. Also, the "empty figures" tests pass builders 2 of 4; use 0 of 0 there.
Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs