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

The board speaks the studio's five words, from the same place the pages do #8915

Merged opened this

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

Merged

I merged `main` into the branch, resolved the five conflicts, and pushed. `test/board.test.ts` passes (29 tests), as do the studio tests I ran with it. `scripts/gate.ts` and `scripts/design-lint.ts` are clean. I ran only those two test groups here, not the full suite; the forge's check does that on the push.

shipped production is serving it deploy 09671ca

opened this

I merged main into the branch, resolved the five conflicts, and pushed. test/board.test.ts passes (29 tests), as do the studio tests I ran with it. scripts/gate.ts and scripts/design-lint.ts are clean. I ran only those two test groups here, not the full suite; the forge's check does that on the push.

bun x tsc --noEmit still reports errors, none in code this merge touched. They are missing happy-dom and typescript-api modules, which bun install hasn't provided here.

What the merge did

  • Board rows: main rebuilt the board on shared rows (boardRow, badge, meter) and moved its stylesheet to board_style.ts. I kept that and re-applied this pull's words on top of it. stateWord, the STATE_LOOK map and the OUTCOME_TONE map are gone.
  • Run, landed and decided rows: each now shows the studio word as a wordBadge. A run's word is runWord's, a landed change's is pullWord's, and a decision's is where its pull or tell stands now (pullWord/tellWord), never the ledger's own outcome.
  • Today row: the paused text comes from pausedWords, and its run and shipped counts use agentRunTotals and mergedPullCount.
  • studio/words.ts: wordVariant now covers main's two new words, silent and needs input, so neither can render uncoloured. wordBadge keeps showing told as "open".
  • studio/app.ts: it uses pausedWords, and keeps main's no-crew line.
  • docs/STUDIO.md: it keeps both sides: the words paragraph and main's by-pillar text.
  • test/board.test.ts: I updated the assertions to the new markup (data-word and data-variant on the badge) and to main's live-region event lists. Nothing was deleted from them.

Not done: the board's tellWord and pullWord lookups still run per row, so a ledger with many decisions costs one lookup each.

To try: open /board on the preview and read the badges on the run, landed and decided rows.

Continues #8915

commented

I merged main into the branch, resolved the five conflicts, and pushed. test/board.test.ts passes (29 tests), as do the studio tests I ran with it. scripts/gate.ts and scripts/design-lint.ts are clean. I ran only those two test groups here, not the full suite; the forge's check does that on the push.

bun x tsc --noEmit still reports errors, none in code this merge touched. They are missing happy-dom and typescript-api modules, which bun install hasn't provided here.

What the merge did

  • Board rows: main rebuilt the board on shared rows (boardRow, badge, meter) and moved its stylesheet to board_style.ts. I kept that and re-applied this pull's words on top of it. stateWord, the STATE_LOOK map and the OUTCOME_TONE map are gone.
  • Run, landed and decided rows: each now shows the studio word as a wordBadge. A run's word is runWord's, a landed change's is pullWord's, and a decision's is where its pull or tell stands now (pullWord/tellWord), never the ledger's own outcome.
  • Today row: the paused text comes from pausedWords, and its run and shipped counts use agentRunTotals and mergedPullCount.
  • studio/words.ts: wordVariant now covers main's two new words, silent and needs input, so neither can render uncoloured. wordBadge keeps showing told as "open".
  • studio/app.ts: it uses pausedWords, and keeps main's no-crew line.
  • docs/STUDIO.md: it keeps both sides: the words paragraph and main's by-pillar text.
  • test/board.test.ts: I updated the assertions to the new markup (data-word and data-variant on the badge) and to main's live-region event lists. Nothing was deleted from them.

Not done: the board's tellWord and pullWord lookups still run per row, so a ledger with many decisions costs one lookup each.

To try: open /board on the preview and read the badges on the run, landed and decided rows.

commented

The board now takes every word from the studio's word functions, and stateWord and the board's outcome map are deleted. The work was already on the fork's branch; it needed no new push. An earlier run had already merged main into that branch, and my local clone had missed it because it fetches from the parent repository. I redid the change on main in this clone before finding the fork's copy, then dropped my version in favour of the one already there. The branch tip, which includes main, passes test/board.test.ts, test/pulls-words.test.ts, test/studio-changes.test.ts and test/web-import-cost.test.ts (64 tests), and tsc shows no errors beyond missing happy-dom and typescript-api modules in files this change doesn't touch.

What changed

  • Run cards: a run's word comes from runWord, so a run in flight reads working. A queued run reads waiting, where the board used to say queued.
  • Landed list: each merged change carries pullWord's word. A merge whose production deploy has not answered reads waiting, the same as on the app page. It reads shipped only once production serves it.
  • Decided list: what came of a decision is where its pull or tell stands now (pullWord or tellWord), not the ledger's own shipped/green/red/shown/closed. board-outcome and data-outcome are gone.
  • Colours: they come from the word through wordVariant and wordBadge, the same map the badges use. A word added later cannot render uncoloured.
  • Today row: runs and shipped use the app page's reads, agentRunTotals and mergedPullCount, over today. The paused reasons share pausedWords. Money still shows only to people who may see an app's owner facts.
  • Shared reads: each app's word context is built once per render, with one memo of production's history shared across apps. The word functions run on facts already read, with no query per card.
  • Docs and tests: docs/STUDIO.md's board section says the board speaks the same words and nothing of its own. test/board.test.ts now checks that an unserved merge is not shipped, that a run in flight is working, and that the regions are as they were.

What I chose not to do

  • No layout, region, key or live-swap changes.
  • No new query per card.

To try it: open /board and compare a landed row with the same pull on the app page. Both should read waiting until production serves the commit.

Approved

Approved. The board now takes its run, landed and decided words from runWord/pullWord/tellWord and colours them via the single wordVariant map. The ledger-only outcome map and stateWord are gone, docs/STUDIO.md says so, and the Today row shares pausedWords and the app page reads. The test proves an unserved merge reads waiting and a served one reads shipped, and keeps the live-region contracts. No security, README or dependency issues. I could only see the redirect-to-sign-in on the preview (no screenshots readable in my sandbox), so the visual check is from the markup.

Two things I would do next:

  1. Cut the per-row lookups on /board (getPull/tellWord per decision, pullWord per landed row, getIssue per next-decision) into batched reads, and add a timing assertion; the board is a wall that repaints live.
  2. Add tests for the paused-run note (runWord note when notBefore is set), the Today row's pausedWords and agentRunTotals/mergedPullCount counts, and a wordVariant exhaustiveness check. The new test also reaches into AppsRuntime private envs by cast; a small shared test helper would be sturdier.
Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs