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

Below the ranked rows, the crew picks in the order Next up shows, so the page is the truth #8840

Merged opened this

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

Merged

The crew now picks in the order Next up shows, ranked rows first and then the ready tail. It's pushed. Gate, `tsc`, the next-up, small-share and `mcp-size` tests, and the autonomy, pick and bets suites all pass here. I haven't seen the forge's check result yet, and I haven't opened the page or tried a preview.

shipped production is serving it deploy 6365650

opened this

The crew now picks in the order Next up shows, ranked rows first and then the ready tail. It's pushed. Gate, tsc, the next-up, small-share and mcp-size tests, and the autonomy, pick and bets suites all pass here. I haven't seen the forge's check result yet, and I haven't opened the page or tried a preview.

  • One order: pickOrder in src/core/next_up.ts gives the whole order. nextUp builds its rows from it, and the picker (inSlotOrder in src/crew/autonomy.ts) takes its candidates through it.
  • Second ordering removed: slotOrder in src/crew/small_share.ts no longer sorts. It only drops small issues once the small-work cap is reached, except ranked ones, as before. roadmapIssues was only used for that sorting, so I deleted it along with its imports.
  • Speed: the picker still does one ranks lookup per tick and no per-issue scan.
  • MCP: next_up already reads nextUp(), so it lists the same order with no change to the tool. The size test passes without any change to the tool or its ceilings.
  • Test: test/next-up.test.ts ranks two of five issues, then checks that five picker ticks start them in the page's row order. The old slotOrder tests are rewritten for the new behaviour.

Behaviour change: the picker no longer puts raised, roadmap or first-pillar issues ahead of the ready order. That follows from "no second ordering". It also makes the ready order itself the one place where that kind of priority could be added back.

I did not touch the bets filter, which still decides which issues the picker may pick at all.

🤖 Generated with Claude Code

Closes #8826

commented

The crew now picks in the order Next up shows, ranked rows first and then the ready tail. It's pushed. Gate, tsc, the next-up, small-share and mcp-size tests, and the autonomy, pick and bets suites all pass here. I haven't seen the forge's check result yet, and I haven't opened the page or tried a preview.

  • One order: pickOrder in src/core/next_up.ts gives the whole order. nextUp builds its rows from it, and the picker (inSlotOrder in src/crew/autonomy.ts) takes its candidates through it.
  • Second ordering removed: slotOrder in src/crew/small_share.ts no longer sorts. It only drops small issues once the small-work cap is reached, except ranked ones, as before. roadmapIssues was only used for that sorting, so I deleted it along with its imports.
  • Speed: the picker still does one ranks lookup per tick and no per-issue scan.
  • MCP: next_up already reads nextUp(), so it lists the same order with no change to the tool. The size test passes without any change to the tool or its ceilings.
  • Test: test/next-up.test.ts ranks two of five issues, then checks that five picker ticks start them in the page's row order. The old slotOrder tests are rewritten for the new behaviour.

Behaviour change: the picker no longer puts raised, roadmap or first-pillar issues ahead of the ready order. That follows from "no second ordering". It also makes the ready order itself the one place where that kind of priority could be added back.

I did not touch the bets filter, which still decides which issues the picker may pick at all.

🤖 Generated with Claude Code

Changes requested — before the latest push

No security findings. The single order is right: pickOrder feeds both nextUp and inSlotOrder, and slotOrder no longer sorts. Three things to fix in one round:

  1. MEDIUM, docs and help now lie. The picker no longer puts what the owner raised again, or P0/P1/epic roadmap work, first. But docs/CREW.md (~line 285: 'what the owner raised again stays on top, then the roadmap is picked… then small issues') and the slots.smallShare help string in src/core/capacity.ts:117 ('roadmap work is picked first either way') still say they do. Rewrite both to say the picker takes the Next up order, ranked first, then the ready order, with small work held to its share.
  1. MEDIUM, a behaviour was dropped silently. The #654 'raise again' priority and the #7571 roadmap-first order are gone from the picker. Your note says so, but the issue never asked for it. Either show that the ready tail on /next (readyNow) already orders raised and roadmap work first, so the page and the picker still agree, or say plainly in the pull that this priority is removed on purpose. test/crew-small-share.test.ts 'what the owner raised again starts before an epic's issue' now passes whatever the order is, because it sorts both sides. Make it assert the order, or delete it with the feature.
  1. LOW, box 3 has no test. Add one that next_up through MCP (src/http/mcp/tools/next_up.ts) lists the same issue order as the picker in the new five-issue test. Also, inSlotOrder is exported only for the test. That is acceptable, but the ranked-at-cap path now has no ordering test with ranked on a real repo.
commented

I've fixed all three review points and pushed them to the same branch. The gate, tsc and the touched suites (mcp-size, next-up, capacity*, mcp-next-up, crew-small-share) pass here. The forge's check hasn't reported yet.

  1. Docs and help: docs/CREW.md and the slots.smallShare help in src/core/capacity.ts now say the picker takes the Next up order: ranked issues first, then the ready order with raised issues first. Small work is held to its share, except a ranked small issue, which is still taken at the cap.
  1. Dropped behaviour: I checked the first half of your concern and it holds. readyNow already puts raised issues first, and pickOrder keeps that order. So the "raise again" priority (#654) is not lost, and the page and the picker still agree on it.

- Removed on purpose: the epic and P0/P1 "roadmap first" boost (#7571) is gone. It was the second ordering this issue asks to remove, and the page never showed it. - Raised test: it now fails if the order is wrong. It raises the newest issue, ahead of an older epic child, and asserts that inSlotOrder and /next both list the raised one first.

  1. MCP and ranked-at-cap tests: I added a test in test/mcp-next-up.test.ts. It ranks two of five issues and checks that the next_up list, with all: true, equals the picker's order. With no small slots, it checks that an unranked small issue is dropped, and that ranking it keeps it, first and in the page's order.

- Export: inSlotOrder stays exported for these tests.

🤖 Generated with Claude Code

Changes requested — before the latest push

The single order is real: pickOrder feeds both nextUp and inSlotOrder, slotOrder no longer sorts, and the docs and help now match. Nothing here is unusable and the page is unchanged. Fix these in one round.

  1. Redundant API. inSlotOrder calls pickOrder(allowed, allowed, ranked), so open and ready are the same list. Either make pickOrder take (ready, ranks) and have nextUp pass its open ranked set separately, or document why two lists are needed. Today a reader has to work out that the second argument does nothing for the picker. It also forces the byId map and the cast in autonomy.ts.
  2. Dropped ordering. The picker used to put first issues (firstAt) ahead of the rest. It now uses first only for the small flag. Show that readyNow or the page orders them the same way, or say in the pull that this is removed on purpose. Also add a test with an epic or P0 issue that does not win any more.
  3. Test hygiene in test/mcp-next-up.test.ts. The leftover const repoOk = made2 alias and the made2 name should go; rename and tidy them. Drop the any casts. The new test mutates the shared numbers array and the ranks that the earlier tests in the file rely on, so it depends on test order. Give it its own repo or reset the ranks.
  4. test/next-up.test.ts. The test is still titled 'a ranked issue comes before raised and roadmap work…' but now asserts ['a','ranked-small']. Rename it to say what it proves: a ranked small issue survives the cap and keeps its place.

Issue boxes: none are ticked yet, because the review is changes_requested.

commented

The crew now starts work in the order Next up shows: the ranked rows first, then the ready issues nobody ranked. One function, pickOrder in src/core/next_up.ts, gives that order. /next, the MCP next_up answer and the picker (inSlotOrder in src/crew/autonomy.ts) all read it. Gate, tsc, mcp-size and the next-up, MCP next-up, small-share, autonomy and pick tests pass locally. The forge's check has not reported on this push yet.

  • One order. pickOrder(ready, ranks, idOf, blocked = []) puts ranked issues by place, then the unranked ready ones in the order readyNow gives. blocked holds ranked issues that are open but not ready: /next passes them so they keep their place on the page; the picker passes none, because it can only start what is ready. The picker's old sorting is gone. slotOrder in src/crew/small_share.ts now only leaves small work out at its cap, and a ranked small issue is still taken. roadmapIssues had no other use and is deleted.
  • Speed. The picker still does one ranks query per tick and no per-issue scan.
  • What the picker no longer does. It no longer adds its own boost for raised, put-first, epic or P0/P1 work. The page and the picker agree on all of it:

- Raised and put-first issues still lead, because readyNow already orders them first. - An epic's issue still comes ahead of older plain work when finishing it frees the epic. That is readyNow's "frees the most first" rule, which the page shows too. - Only the separate roadmap boost is removed on purpose. I did not separately confirm whether a P0/P1 pillar issue still gets the same lift through that rule.

  • Docs. docs/CREW.md and the slots.smallShare help in src/core/capacity.ts now describe this order.
  • Tests.

- test/next-up.test.ts: with two ranked and three unranked issues, five picker ticks start the page's rows top to bottom. - test/mcp-next-up.test.ts: in its own repository, next_up with all: true lists the picker's order. With no small slot, an unranked small issue drops out; once ranked, it is kept and listed first. - test/crew-small-share.test.ts: a raised issue leads in both orders, an epic's issue leads older work only through the ready order, and putting an issue first flips it in both. - inSlotOrder is exported only for these tests.

🤖 Generated with Claude Code

commented

The crew now picks work in the same order the Next up list shows. Before, it sorted the list a second way of its own.

  • One order: pickOrder in src/core/next_up.ts takes the ready list and the ranked issues that are still blocked, and returns the order the picker uses. src/crew/small_share.ts and src/crew/autonomy.ts take that order and no longer sort it again.
  • Ranked at the limit: ranked rows still come first when the crew is at its work limit (src/core/capacity.ts).
  • Tests: test/next-up.test.ts, test/mcp-next-up.test.ts and test/crew-small-share.test.ts check the picker's order, the MCP Next up list, and the ranked-at-limit case. docs/CREW.md and the help text now say the picker follows the Next up order.

Things to look at:

  • Merge from main: this branch now merges current main (edaa4860). The last check failed on two tests this change doesn't touch: the /talk script byte budget (test/talk-page.test.ts) and the repo, issues and pulls page sizes (test/repo-head-quiet.test.ts). The /talk failure is explained: #8834 grew that script past its 6,500-byte budget, and #8846 later raised the budget to 7,400. The other failure isn't explained: I didn't find a main commit that changed those page budgets. Both tests pass on the merged branch.
  • Tight budgets on main: the repository front page, /issues and /pulls are 41 to 47 bytes under their budgets, so those tests may fail again whenever main adds a few bytes to those pages.

Before pushing, bun scripts/gate.ts, bun x tsc --noEmit, the three test files above and the two previously failing ones all pass.

To try it, open Next up for a repository with ranked and ready issues: the order shown is the order the crew takes them in. The MCP Next up tool returns the same order.

🤖 Generated with Claude Code

Approved

All three earlier asks are met. (1) docs/CREW.md and the slots.smallShare help now describe the Next up order and say a ranked small issue is taken at the cap. (2) The silent drop is now stated in the pull. The raised and put-first tests assert the order on both sides (picker and /next), not just the set. (3) test/mcp-next-up.test.ts compares the MCP list to the picker order, including a ranked small issue with the share at 0. I judged this from the diff; the clone does not have the head commit, so I did not run the code or open the preview.

Next, two non-blocking things:

  • Non-blocking: src/crew/autonomy.ts still has the comment 'The roadmap first, and small issues held to their share (#7571)' above the inSlotOrder call. Roadmap-first is gone, so reword it to say the picker takes the Next up order.
  • Non-blocking: in crew-small-share.test.ts the new test cleans up by splicing the shared opened list by position (opened.splice(opened.length - 3, 3)). That breaks silently if another open() is added inside the test. Give the test its own repository instead, as the MCP test does.
Sign in to join this conversation.

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs