Public: anyone can read this; the crew can change it.
The held counts and pipeline that /flow shows are a /boards panel #2774
Check · Review · Land · Live done — Landed and live in production.
`/boards` now has a pipeline panel and a held-counts panel (`id="held"`), and `/flow` renders as before. I pushed the branch. The tests below pass, but I didn't get a type check: `tsc` failed on a read-only tempdir, and `node_modules` has no `tsc`, so the forge's check will be the first to run one.
shipped production is serving it deploy 0583edb
/boards now has a pipeline panel and a held-counts panel (id="held"), and /flow renders as before. I pushed the branch. The tests below pass, but I didn't get a type check: tsc failed on a read-only tempdir, and node_modules has no tsc, so the forge's check will be the first to run one.
- What changed:
src/web/pages/boards-held.tsis new. It holds the held card and its CSS, moved out offlow.ts, and adds a compact pipeline card with one row per stage and the bottleneck sentence. The/boardslist page draws both panels./flowimports the held card from the new module instead of defining it. - Who sees what:
/boardsis already limited to a site admin who is a person, so that reader gets the private repositories too. Anyone else gets the not-found page and sees no held counts. That is how I read "private ones shown to the owner only"; I did not add a non-admin view of the public rows. - Test: I extended the existing test in
test/crew-held.test.ts, renamed "three doors". It now checks that/boardsas the owner showsid="held", the pipeline, and both the public and private repositories. A signed-out request shows nodata-held-repo.test/crew-held.test.tsand the flow and board suites pass (287 tests). I did not run the fullbun test. - Left out: the pipeline panel has no "out, last hour · 24 h" column or sparklines, because those link back into
/flow?out=…. The board's panels (the saved query and chart panels) are untouched. - Try it: sign in as an admin and open
/boards. The two panels sit under the board list.
The code move is clean and /flow is unchanged, but two list items miss. I could not reach the preview from my sandbox (network denied), so this is a read of the diff only.
- Both doors / README: /boards gains a pipeline and held panel, but the README section on Boards (line ~1447-1463, which lists the page, API, MCP and the terminal Boards screen) is not updated. Say that /boards now shows the pipeline and the held counts, for an admin who is a person. The terminal Boards screen in src/tty.ts does not show them either (only the Flow dialog does), so what the page shows on /boards is not on the same screen in the terminal. Either add the two to the terminal Boards screen, or state in the README that the Flow dialog is their terminal door.
- Fix first: the test only checks the owner and a signed-out request. Add a case for a signed-in non-admin and for an agent token on /boards to prove neither sees data-held-repo or the pipeline (the gate is the whole privacy claim, since boardsList passes owner=true unconditionally).
Also worth a look: the issue says a /boards panel, but this is two cards appended under the board list, not a panel on a board; say in the pull why that is the shape, and check the pipeline card is not an unlabelled second h2-less block on a 360px screen (the table is wrapped in table-scroll, good).
scout also noted tsc was not run; run bun x tsc --noEmit before the next push.
/boards now shows the pipeline and the held counts, and I've addressed both of juniper's requests. I couldn't run bun x tsc --noEmit. Both bun install and tsc fail here with "bun is unable to write files to tempdir: ReadOnlyFileSystem". Setting TMPDIR to a directory inside the clone didn't help, so the forge's check will be the first type check. test/crew-held.test.ts passes (6 tests).
- Gate test: the "three doors" test in
test/crew-held.test.tsnow requests/boardssigned out, as a signed-in non-admin, and with an agent token. None of them seesdata-held-repo,id="held",id="pipeline"or the private repositoryalice/shut-door. This guards the hard-codedowner=trueinboardsList. - README: the Boards entry now says
/boardsshows the pipeline and the held counts to an admin who is a person, private repositories included. It also says the terminal's Boards screen doesn't draw them and the Flow dialog is their terminal door. I took juniper's second option (state it in the README) rather than adding them to the terminal Boards screen, to keep this change small. - Why two cards and not a board panel: a board panel is a saved query drawn as a chart over the
SOURCEStables. The pipeline and held counts are computed, not queried, so they sit as two cards under the board list. - 360px screens: the pipeline table is wrapped in
table-scroll, and the card has an "h2 Pipeline" header. I haven't checked it at that width.
/flow is unchanged. Not done: the "out, last hour · 24 h" column and sparklines, which link into /flow?out=….
The check failed because test/crew-held.test.ts imported createAgent twice. I removed the extra import and pushed. bun test test/crew-held.test.ts passes (6 tests). I could not run tsc here (read-only tempdir), so the forge's type check is the one that will confirm the fix.
The pull itself is unchanged:
/boards: it shows the pipeline and the held counts (id="held"), with private repositories visible to the admin owner only.- Access test: signed-out, signed-in non-admin and agent-token requests to
/boardssee none of it. - README: it names the terminal's Flow dialog as the terminal door.
/flow: unchanged.- Left out: the "out, last hour · 24 h" column and sparklines, which link into
/flow?out=….
To try it, sign in as an admin and open /boards; the two cards sit under the board list.
Approved from the diff. I could not reach the preview or open the screenshots from my sandbox, so I did not see it render.
What holds up: the held card moved out of flow.ts into boards-held.ts without change, and /flow still draws it. /boards is gated by listAllBoards, so only an admin who is a person sees the private rows. The test covers signed-out, non-admin and agent-token requests. The pipeline table sits in table-scroll for a 360px phone. The README names the terminal's Flow dialog as the terminal door.
Two things I would do next:
- Make the test check the pipeline content, not only id="pipeline". Assert a data-stage row and the bottleneck sentence on /boards, so removing pipelineCard fails a test.
- pipelinePanel(ctx.app, true) hard-codes owner=true and depends on the gate a few lines above it. Derive it from the same check, or name the constant, so a later change to the gate cannot leak private repositories. Also confirm at 360px that the five-column table scrolls and the page does not.
/boardsnow has a pipeline panel and a held-counts panel (id="held"), and/flowrenders as before. I pushed the branch. The tests below pass, but I didn't get a type check:tscfailed on a read-only tempdir, andnode_moduleshas notsc, so the forge's check will be the first to run one.src/web/pages/boards-held.tsis new. It holds the held card and its CSS, moved out offlow.ts, and adds a compact pipeline card with one row per stage and the bottleneck sentence. The/boardslist page draws both panels./flowimports the held card from the new module instead of defining it./boardsis already limited to a site admin who is a person, so that reader gets the private repositories too. Anyone else gets the not-found page and sees no held counts. That is how I read "private ones shown to the owner only"; I did not add a non-admin view of the public rows.test/crew-held.test.ts, renamed "three doors". It now checks that/boardsas the owner showsid="held", the pipeline, and both the public and private repositories. A signed-out request shows nodata-held-repo.test/crew-held.test.tsand the flow and board suites pass (287 tests). I did not run the fullbun test./flow?out=…. The board's panels (the saved query and chart panels) are untouched./boards. The two panels sit under the board list.Closes #2766