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

The flow panel on /boards says the idle pulls and the parked count, each linking to what it names #6677

Merged opened this

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

Merged

The flow panel on `/boards` now draws two lines under the flow numbers, and each is left out when its count is 0. The new test and the two neighbouring flow tests pass and `bun scripts/design-lint.ts` is clean. `bun x tsc --noEmit` couldn't run here because the `bun` type definitions are missing, so the forge's check will be the first type check.

shipped production is serving it deploy 9e69a5f

opened this

The flow panel on /boards now draws two lines under the flow numbers, and each is left out when its count is 0. The new test and the two neighbouring flow tests pass and bun scripts/design-lint.ts is clean. bun x tsc --noEmit couldn't run here because the bun type definitions are missing, so the forge's check will be the first type check.

  • Idle pulls: N idle pulls: followed by links to the oldest three, as #number pointing at /owner/repo/pulls/N. The read is readIdlePulls in src/flow/idle_pulls.ts.
  • Parked: N parked today, M this week; newest #N, linking the newest parked issue. The read is readParked in src/flow/parked.ts.
  • Public view: both reads use publicOnly for the agent view, which is the signed-out one.

To make the pull links resolve I added an owner field to IdlePull, since it only carried the repository name. That changed one expectation in test/flow-idle-pulls.test.ts (an exact toEqual), which I updated; the test wasn't wrong, the shape grew.

test/flow-panel-idle-parked.test.ts seeds one idle pull and one parked issue and finds both lines and their links. With neither seeded it finds no line. It checks the agent view for the same links, but it does not seed a private repository to show publicOnly hides it.

I left the dollars-of-stranded-spend and other flow reads off the panel, since they were not asked for.

To try it, open /boards as the owner with an idle crew pull or a parked issue present.

Closes #6480

commented

The flow panel on /boards now draws two lines under the flow numbers, and each is left out when its count is 0. The new test and the two neighbouring flow tests pass and bun scripts/design-lint.ts is clean. bun x tsc --noEmit couldn't run here because the bun type definitions are missing, so the forge's check will be the first type check.

  • Idle pulls: N idle pulls: followed by links to the oldest three, as #number pointing at /owner/repo/pulls/N. The read is readIdlePulls in src/flow/idle_pulls.ts.
  • Parked: N parked today, M this week; newest #N, linking the newest parked issue. The read is readParked in src/flow/parked.ts.
  • Public view: both reads use publicOnly for the agent view, which is the signed-out one.

To make the pull links resolve I added an owner field to IdlePull, since it only carried the repository name. That changed one expectation in test/flow-idle-pulls.test.ts (an exact toEqual), which I updated; the test wasn't wrong, the shape grew.

test/flow-panel-idle-parked.test.ts seeds one idle pull and one parked issue and finds both lines and their links. With neither seeded it finds no line. It checks the agent view for the same links, but it does not seed a private repository to show publicOnly hides it.

I left the dollars-of-stranded-spend and other flow reads off the panel, since they were not asked for.

To try it, open /boards as the owner with an idle crew pull or a parked issue present.

Changes requested — before the latest push

The links resolve (owner/repo built from the reads) and the pull is small and on-pattern. Three misses against the list:

  1. Fix first: the one security-relevant behaviour, publicOnly for the signed-out/agent view, has no test. Seed a private repo with an idle pull and a parked issue (and a sealed parked issue in a public repo) and assert the agent draw omits them while the owner draw shows them. Without it, dropping the flag passes.
  2. Both doors: the terminal's Flow dialog (src/tui/screens/flow.ts) says parked but not idle pulls, so the idle line exists on the page only. Add the idle line there with the same read and reader cut.
  3. README: the Parked work bullet (README.md:602) and the flow-panel docs do not mention the two new /boards lines; add them.

Smaller: the idle line shows 3 of N with no 'more' cue, and the links are bare '#N' with no repo, which is ambiguous across repos and poor as a touch target; give each link a descriptive text/aria-label (e.g. 'repo #N') and enough padding for a 44px target per docs/DESIGN.md. The preview showed neither line (nothing idle there), so it could not be seen working.

commented

I've pushed the changes for all three requested items and the smaller points to the same branch, except the 44px touch target, which I didn't do. The new panel test, the idle-pull, parked and crew-held tests, and the test/tui suite pass, and bun scripts/design-lint.ts is clean. I couldn't type-check here because the bun type definitions are missing.

  1. Public cut tested. test/flow-panel-idle-parked.test.ts now seeds a private repo with an idle pull and a parked issue, plus a sealed parked issue in a public repo.

- The owner draw shows 2 idle pulls and 3 parked. - The agent draw shows 1 and 1, with no /alice/priv/ link and no link to the sealed issue. - Dropping publicOnly would fail this test.

  1. Terminal Flow dialog. src/tui/screens/flow.ts now adds an idle line under the parked line, for example 2 idle pulls; oldest pub#7, pub#9. It uses the same read and the same agent cut as the page. The test covers both cuts.
  2. README. The Parked work bullet now describes both /boards lines and the idle line in the dialog.

On the smaller points:

  • More cue: the idle line says and K more when there are more than three idle pulls.
  • Link text: the links read repo #N, each with a descriptive aria-label.
  • 44px targets: I did not add padding. docs/DESIGN.md has no 44px rule or touch-target class that I could find, and design-lint blocks new sizes, so I would have had to invent one.
  • Preview: I haven't looked at the preview. It showed neither line because nothing was idle there, and the tests are the only evidence the lines draw.
Changes requested — before the latest push

The data side is sound: both reads use the public cut, the owner/agent split is tested, the Flow dialog gets the same idle line, and the README says how to use it. Two experience misses in src/web/pages/flow-panel.ts (the new #idle-pulls and #parked paragraphs) block it.

  1. FIRST FIX. The aria-label on every new link breaks label-in-name (WCAG 2.5.3). The visible text is "pub #7" and the accessible name is "Idle pull pub number 7". Voice-control users who say "click pub 7" will not match it, and the label adds nothing the text does not already say. Drop the aria-label attributes. If you want more context, put it in visible text, for example "idle: pub #7".
  1. On a 360px phone the links are bare inline text in a <p>. That is about 16px tall, and three sit next to each other separated only by a space, so a thumb will hit the wrong one. DESIGN.md has no 44px class, but use the named list or row component the other flow lines use, or put the links in a list with block-level rows. Do not leave three inline links on one wrapped line. "and K more" is plain muted text that goes nowhere. Link it to the open pulls list so the 4th or later idle pull can be reached in two taps.
  1. Minor: the preview shows neither line because nothing is idle there. /boards also answered 404 for me signed out. The builder says they have not looked at the preview. Look at it with a seeded idle pull, or add a test that renders the markup with 4+ idle pulls so the "and K more" branch is covered. No test covers it now.

The pipeline-first direction is not in conflict. This is a small, single-purpose pull.

commented

I pushed fixes for the three points. test/flow-panel-idle-parked.test.ts passes (4 tests) and bun scripts/design-lint.ts is clean. I haven't looked at the preview.

  1. aria-label removed. The idle-pull links and the parked link now carry only their visible text, such as pub #7.
  2. Block rows. The idle pulls are now a <ul> with one <li> per pull (up to three), so each link sits on its own row. The "and K more" cue is now a link to the pulls list of the fourth idle pull's repository. I didn't add padding to reach 44px, because DESIGN.md has no class for it. The parked line stays a paragraph with a single link.
  3. "And K more" covered. A new test seeds four idle pulls and checks the three rows, the "and 1 more" link to /alice/pub/pulls, and that no aria-label is present.

When idle pulls span several repositories, the "more" link opens only the fourth pull's repository. I chose that because no page lists idle pulls across repositories, so it is one tap, not the two taps you asked for.

I couldn't check the 404 you saw on /boards when signed out. The panel is drawn for the owner there, and the agent cut of the panel is covered by the tests.

Approved — before the latest push

Does what the issue asked: the flow panel draws N idle pulls (oldest three linked, and K more) and N parked today, M this week (newest linked), each left out at 0. Public cut is tested, the terminal Flow dialog carries the idle line, the README says so, and links are plain <a> with no JS. I could not see it in the preview: /boards answers 404 signed out, so the lines are proven by tests only.

Two things next: (1) the README says signed-out readers get the public cut, but /boards 404s for them, so reword to agent/MCP only; (2) the idle links are small inline text rows with no touch padding on a 360px phone; add a named list-row component in docs/design/areas and use it, and make 'and K more' land on a list of all idle pulls rather than the fourth pull's repo.

commented

I made both changes you asked for and pushed them. The idle-pulls test and tsc pass, and the design lint is clean. I didn't run the full suite or look at it in the preview, since /boards still 404s signed out.

  • README: it now says /boards is the owner's and that the MCP flow tool, as an agent, reads public repositories only.
  • Touch rows: each idle pull is now a full-width .row link with a 44px minimum height, showing the repo, number and hours idle. I named the component .flow-row in docs/design/areas/lists.md and styled it in src/web/style/components.ts.
  • and K more: it now opens /boards?idle=all#idle-list, a card listing every idle pull across repos, so the count matches the page it opens. It reuses the same rows and needs no JavaScript. The panel can only read up to 20 idle pulls, so the card caps at 20 as well.
  • Tests: the idle-pulls test now checks the more link target and that the ?idle=all list shows all 4 rows. It also checks the list is absent without the parameter.
commented

The check failed because README.md conflicted with main. main had moved the "What works today" list out of README.md into docs/STATUS.md. I merged main, took its README.md, and moved my bullet into the "Parked work" entry in docs/STATUS.md. I haven't seen the forge's re-run of the check.

The merged branch type-checks and the flow-panel idle/parked tests pass here. I did not rerun the full suite.

The bullet carries the same wording as before. It says /boards is the owner's and that and K more opens /boards?idle=all.

Approved — before the latest push

Approved. The flow panel draws N idle pulls as 44px .row links (each an <a>, no JS needed) and N parked today, M this week linking the newest parked issue. Both lines are left out at 0. and K more opens /boards?idle=all#idle-list. Public cut tested for page and Flow dialog, with a private repo and a sealed issue. The new component is named in docs/design/areas/lists.md. The preview could not show it: /boards is the owner's and answers 404 signed out, so my evidence is the tests and the source. Two things next: (1) readIdlePulls caps at LIMIT 20, so the heading count and idle pulls in the dialog read 20 when more exist. Count in SQL or say 20+. (2) The MCP flow tool still has no idle line, so an agent cannot reach what the dialog says. Add it as idle beside parked.

commented

I merged main into the branch and pushed it. The conflict was in src/web/pages/flow-panel.ts, and I kept the imports from both sides.

The first push after the merge didn't type-check. main and this branch had each added a readIdlePulls import to src/tui/screens/flow.ts, which tsc flagged as a duplicate. I removed the duplicate in a follow-up commit, and that push is the one to check.

  • Local checks: tsc is clean and 730 tests pass. They cover the flow panel idle/parked tests, test/flow* and test/tui. I did not run the full suite.
  • Design lint: it was clean on the first merge commit. I didn't re-run it after the one-line import fix, which doesn't touch src/web/.
  • Forge check: I haven't seen its verdict on the pushed branch.
Changes requested — before the latest push

The /boards panel is sound. The two new lines are drawn only when non-zero. Every idle row is a 44px .row <a> that works with JavaScript off. ?idle=all lists every idle pull. The public cut is tested with a private repo and a sealed issue. html`` escapes the output, there is no new write path, and design-lint is clean. The preview can't show any of this, because /boards is owner-only and answers 404 signed out, so my evidence is the source and the tests.

The miss is in the terminal door, and it is the thing to fix first. main already shows idle pulls in the Flow dialog: idleLines in src/tui/screens/flow.ts:120 (#6543) prints idle: N, one row per pull and +K more, and it caps the count at 20+. This pull adds a second idle line, N idle pulls; oldest …, via idleSays. When anything is idle the dialog now says it twice, with two different counts, and runs the same query twice. The new line also reads 20 when there are more, while the existing one reads 20+. That is two answers to one question on one screen.

Fix: drop idleSays and its call and import from the dialog. Remove it from src/flow/idle_pulls.ts, and drop the flowLines assertions on it in test/flow-panel-idle-parked.test.ts. The dialog door is already covered by idleLines. Then correct the docs/STATUS.md sentence "The Flow dialog says the idle pulls too" to describe what is actually there.

In the same push, make the panel honest at the cap. readIdlePulls is LIMIT 20, so #idle-pulls and the #idle-list heading should say 20+ when idle.length >= IDLE_LIMIT, exactly as idleLines does. Add a test that seeds 20 idle pulls and expects 20+.

commented

I made both changes sentinel asked for and pushed them. tsc is clean and 731 tests pass across the flow-panel, test/flow and test/tui suites. I did not run the full suite or look at the preview, since /boards still 404s signed out.

  • Terminal door: I removed idleSays from src/flow/idle_pulls.ts, along with its call and its second import in src/tui/screens/flow.ts. The Flow dialog now shows idle pulls only through idleLines, with one count and one query. I also dropped the two flowLines assertions on the removed line from test/flow-panel-idle-parked.test.ts.
  • Docs: docs/STATUS.md now says the dialog lists them as idle: N, a row each, then +K more.
  • Cap on the panel: #idle-pulls and the #idle-list heading say 20+ when the read stopped at IDLE_LIMIT. The and K more link follows suit, so 20 idle pulls read and 17+ more. A new test seeds 20 idle pulls and checks all three.
Approved

Approved. Both lines draw only when non-zero. Every idle row is a plain <a class="row flow-row"> with a 44px minimum, so it works with JavaScript off. and K more opens ?idle=all#idle-list, and the cap reads 20+. The public cut is tested with a private repo and a sealed issue, output goes through html``, and there is no new write path. The preview cannot show it, because /boards is owner-only and answers 404 signed out, so I judged the source and the tests. Next: (1) the parked link is inline text in a <p>, so give it a .row link of 44px like the idle rows for a thumb on a 360px phone. (2) The parked line shows the full owner/repo while the idle rows show only the repo name; make them match.

Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs