The queue: parking, the operator's order, blocked items (M2.2) #101

Merged
dongar merged 1 commits from loop-queue into main 2026-10-04 15:21:47 +00:00
Collaborator

M2.2 of the Development Plan: several work items on the new loop (L1, D4).

What changes

  • Parking and resuming. When the scheduler switches items, the item on the workspace is parked: its work is committed and its branch pushed, so nothing of a parked item lives only on the build VM. Resuming checks the item's branch back out. A fresh workspace (D3) no longer sets aside branches of open items.
  • Order. The operator's "do #N next" (or "work on #N first/now") goes first, the latest order first; otherwise the oldest ready item runs. It doesn't unblock.
  • Blocked items. Open Gitea dependencies (GET /issues/{n}/dependencies) block an issue at intake. Ready and blocked items are rechecked each round, so an item becomes ready once its dependencies close and is blocked if it gains one before it starts. A message to a blocked item gets a "blocked by …" reply.
  • Acknowledgement and status. The acknowledgement says how many items are ahead and what blocks the item; status shows blocked items and each ready item's place in line.

Tests

  • test_loop_queue.py covers parking with half-done work and resuming it, blocked items getting unblocked, an item that gains a dependency, the operator's order, and status.

  • The property walk now runs over several issues, some depending on others, with "do #N next" and half-finished work interrupted by questions. Two new properties:

    • blocked_never_runs;
    • parked_work_safe: every file an open item wrote is on the workspace or in the forge.

    With parking disabled, the walk fails 3 of 32 seeds.

  • The e2e suite gained a test with two issues, B depending on A: B stays blocked while A runs, then starts from A's merged work. scripts/e2e.sh passed all 3 tests: the new test after fixing a false positive in its diff check, and the other two on the first run.

Deferred

  • The grace period before switching away from a waiting item (Development Plan §6, L1, 10 minutes). For now the scheduler switches as soon as the item waits.
  • Priority labels, and letting the driver choose the next item.

🤖 Generated with Claude Code

https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE

M2.2 of the Development Plan: several work items on the new loop (L1, D4). ## What changes - **Parking and resuming.** When the scheduler switches items, the item on the workspace is parked: its work is committed and its branch pushed, so nothing of a parked item lives only on the build VM. Resuming checks the item's branch back out. A fresh workspace (D3) no longer sets aside branches of open items. - **Order.** The operator's "do #N next" (or "work on #N first/now") goes first, the latest order first; otherwise the oldest ready item runs. It doesn't unblock. - **Blocked items.** Open Gitea dependencies (`GET /issues/{n}/dependencies`) block an issue at intake. Ready and blocked items are rechecked each round, so an item becomes ready once its dependencies close and is blocked if it gains one before it starts. A message to a blocked item gets a "blocked by …" reply. - **Acknowledgement and status.** The acknowledgement says how many items are ahead and what blocks the item; `status` shows blocked items and each ready item's place in line. ## Tests - `test_loop_queue.py` covers parking with half-done work and resuming it, blocked items getting unblocked, an item that gains a dependency, the operator's order, and status. - The property walk now runs over several issues, some depending on others, with "do #N next" and half-finished work interrupted by questions. Two new properties: - `blocked_never_runs`; - `parked_work_safe`: every file an open item wrote is on the workspace or in the forge. With parking disabled, the walk fails 3 of 32 seeds. - The e2e suite gained a test with two issues, B depending on A: B stays blocked while A runs, then starts from A's merged work. `scripts/e2e.sh` passed all 3 tests: the new test after fixing a false positive in its diff check, and the other two on the first run. ## Deferred - The grace period before switching away from a waiting item (Development Plan §6, L1, 10 minutes). For now the scheduler switches as soon as the item waits. - Priority labels, and letting the driver choose the next item. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE
dev-agent added 1 commit 2026-10-04 13:34:19 +00:00
The queue: parking, the operator's order, blocked items (M2.2)
CI / checks (push) Skipped
CI / checks (pull_request) Successful in 3m26s
cceb30c729
Several work items on the new loop (L1, D4):
- Switching parks the item on the workspace: its work is committed and its
  branch pushed; resuming checks the item's branch back out. Branches of
  open items are never set aside by a fresh workspace.
- Next item: the operator's "do #N next" first, otherwise the oldest.
- Issues with open Gitea dependencies are blocked until they close, checked
  at intake and on every round; status shows blocked items and the line.

Tests: queue unit tests, the property walk over several issues with
dependencies and a new parked_work_safe property (it catches parking
disabled), and an end-to-end test with two issues where B depends on A.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01PPQ14L3LikyefCMFBqEbKE
dongar approved these changes 2026-10-04 15:21:43 +00:00
dongar merged commit a504526da2 into main 2026-10-04 15:21:47 +00:00
dongar deleted branch loop-queue 2026-10-04 15:21:47 +00:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: dev/nisse#101