Pacing: review a card PR as soon as its checks are green, and run independent cards side by side #242

Open
opened 2026-10-22 18:23:42 +00:00 by teahubxyz · 1 comment
Owner

Why

The quc spec (#220) was split into 16 cards that run one at a time. Each card's building took minutes, but the chain moved about one card every one to two hours:

  • Review waits for the hourly heartbeat. #239 had green CI at 10:10 UTC and sat unreviewed until the 11:07 heartbeat.
  • Strictly one card at a time. A card starts only when the previous one merges, so 16 cards means 16 trips through that wait, even when most cards don't depend on each other.
  • One needs-human stalls the whole chain. #239 got flagged at 11:08 and nothing moved for 7 hours.

In the end the rest of quc was built in one PR (#241) in a few hours.

What to change

  1. Review on green. When a card PR's required checks finish successfully, run the reviewer then (on the status/check_run or workflow_run completion event, or a short follow-up dispatch from the worker run) instead of waiting for the next hourly heartbeat. Keep the hourly heartbeat as the fallback.
  2. Plan dependencies, then run in parallel. When splitting a spec, have the planner mark each card's Depends on: #n. The router already understands that line (#184). Start every card whose dependencies are merged, up to a concurrency cap (TIME_PARALLEL, default 3), instead of chaining all of them.
  3. Don't let one stall block independent work. A needs-human card blocks only the cards that depend on it, and Time opens an andon note on the spec saying what it's waiting on.
  4. Coarser cards. Ask the planner for fewer, larger cards (a guide of 4 to 6 per spec), each a shippable slice, rather than 16 thin ones.

Done when

  • A card PR whose CI goes green is reviewed within 5 minutes, without waiting for the hourly heartbeat.
  • A spec split into independent cards has more than one card building at once, never more than TIME_PARALLEL.
  • A needs-human card leaves independent cards running and posts what it's waiting on to the spec.
  • Tests cover the dependency gating and the concurrency cap.

🤖 Generated with Claude Code

## Why The quc spec (#220) was split into 16 cards that run one at a time. Each card's building took minutes, but the chain moved about one card every one to two hours: - **Review waits for the hourly heartbeat.** #239 had green CI at 10:10 UTC and sat unreviewed until the 11:07 heartbeat. - **Strictly one card at a time.** A card starts only when the previous one merges, so 16 cards means 16 trips through that wait, even when most cards don't depend on each other. - **One `needs-human` stalls the whole chain.** #239 got flagged at 11:08 and nothing moved for 7 hours. In the end the rest of quc was built in one PR (#241) in a few hours. ## What to change 1. **Review on green.** When a card PR's required checks finish successfully, run the reviewer then (on the `status`/`check_run` or `workflow_run` completion event, or a short follow-up dispatch from the worker run) instead of waiting for the next hourly heartbeat. Keep the hourly heartbeat as the fallback. 2. **Plan dependencies, then run in parallel.** When splitting a spec, have the planner mark each card's `Depends on: #n`. The router already understands that line (#184). Start every card whose dependencies are merged, up to a concurrency cap (`TIME_PARALLEL`, default 3), instead of chaining all of them. 3. **Don't let one stall block independent work.** A `needs-human` card blocks only the cards that depend on it, and Time opens an andon note on the spec saying what it's waiting on. 4. **Coarser cards.** Ask the planner for fewer, larger cards (a guide of 4 to 6 per spec), each a shippable slice, rather than 16 thin ones. ## Done when - A card PR whose CI goes green is reviewed within 5 minutes, without waiting for the hourly heartbeat. - A spec split into independent cards has more than one card building at once, never more than `TIME_PARALLEL`. - A `needs-human` card leaves independent cards running and posts what it's waiting on to the spec. - Tests cover the dependency gating and the concurrency cap. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
teahubxyz added the spec label 2026-10-22 18:23:42 +00:00

⏱️ Time: planned #243, #244, #245, #246, #247. They run one at a time: each starts when the one before it merges.

⏱️ Time: planned #243, #244, #245, #246, #247. They run one at a time: each starts when the one before it merges. <!-- time {"beat":"planned","cards":[243,244,245,246,247]} -->
time added planned and removed spec labels 2026-10-22 19:08:16 +00:00
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: teahubxyz/time#242