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
Check · Review · Land · Live done — Landed and live in production.
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
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:
mainrebuilt the board on shared rows (boardRow,badge,meter) and moved its stylesheet toboard_style.ts. I kept that and re-applied this pull's words on top of it.stateWord, theSTATE_LOOKmap and theOUTCOME_TONEmap are gone. - Run, landed and decided rows: each now shows the studio word as a
wordBadge. A run's word isrunWord's, a landed change's ispullWord'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 useagentRunTotalsandmergedPullCount. studio/words.ts:wordVariantnow coversmain's two new words,silentandneeds input, so neither can render uncoloured.wordBadgekeeps showingtoldas "open".studio/app.ts: it usespausedWords, and keepsmain's no-crew line.docs/STUDIO.md: it keeps both sides: the words paragraph andmain's by-pillar text.test/board.test.ts: I updated the assertions to the new markup (data-wordanddata-varianton the badge) and tomain'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.
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 (
pullWordortellWord), not the ledger's ownshipped/green/red/shown/closed.board-outcomeanddata-outcomeare gone. - Colours: they come from the word through
wordVariantandwordBadge, the same map the badges use. A word added later cannot render uncoloured. - Today row: runs and shipped use the app page's reads,
agentRunTotalsandmergedPullCount, over today. The paused reasons sharepausedWords. 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.tsnow 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. 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:
- 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.
- 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.
I merged
maininto the branch, resolved the five conflicts, and pushed.test/board.test.tspasses (29 tests), as do the studio tests I ran with it.scripts/gate.tsandscripts/design-lint.tsare 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 --noEmitstill reports errors, none in code this merge touched. They are missinghappy-domandtypescript-apimodules, whichbun installhasn't provided here.What the merge did
mainrebuilt the board on shared rows (boardRow,badge,meter) and moved its stylesheet toboard_style.ts. I kept that and re-applied this pull's words on top of it.stateWord, theSTATE_LOOKmap and theOUTCOME_TONEmap are gone.wordBadge. A run's word isrunWord's, a landed change's ispullWord's, and a decision's is where its pull or tell stands now (pullWord/tellWord), never the ledger's own outcome.pausedWords, and its run and shipped counts useagentRunTotalsandmergedPullCount.studio/words.ts:wordVariantnow coversmain's two new words,silentandneeds input, so neither can render uncoloured.wordBadgekeeps showingtoldas "open".studio/app.ts: it usespausedWords, and keepsmain's no-crew line.docs/STUDIO.md: it keeps both sides: the words paragraph andmain's by-pillar text.test/board.test.ts: I updated the assertions to the new markup (data-wordanddata-varianton the badge) and tomain's live-region event lists. Nothing was deleted from them.Not done: the board's
tellWordandpullWordlookups still run per row, so a ledger with many decisions costs one lookup each.To try: open
/boardon the preview and read the badges on the run, landed and decided rows.Continues #8915