Skip to content

feat(m5.6): preferred_runner_id β€” pin tasks to a specific runner at creation#250

Draft
tildesrc wants to merge 1 commit into
panopticon/m5-start-runner-cmdfrom
panopticon/m5-runner-selection
Draft

feat(m5.6): preferred_runner_id β€” pin tasks to a specific runner at creation#250
tildesrc wants to merge 1 commit into
panopticon/m5-start-runner-cmdfrom
panopticon/m5-runner-selection

Conversation

@tildesrc

@tildesrc tildesrc commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Summary

  • Adds preferred_runner_id to Task: only the designated runner may claim the task. None and "local" are equivalent β€” both mean the local runner only; remote runners are never handed unaddressed tasks.
  • Enforced at two layers: service.claim() (authoritative gate) and Spawner.spawn_one() / spawnable_tasks() (pre-filter to avoid wasted claim attempts).
  • Dashboard action_new_task calls live_runners() after memo entry: 0 or 1 runners β†’ auto-select (no prompt); β‰₯2 runners β†’ ChoiceScreen with local first.
  • Adds an Alembic migration for the new nullable column.

See plan: panopticon://tasks/29c3030266244140945a64be9fb35158/artifacts/plan.md

πŸ€– Generated with Claude Code

…reation

Adds `preferred_runner_id` to `Task`: when set (or `None`), only the
matching runner may claim the task. `None` and `"local"` are equivalent
β€” both mean the local runner only. Remote runners are never implicitly
handed unaddressed tasks.

- `Task` + `TaskRow`: new nullable `preferred_runner_id` field; migration
- `service.claim()`: enforces the preference (`effective = pref or "local"`)
- `Spawner.spawn_one()` + `spawnable_tasks()`: pre-filter so runners skip
  tasks reserved for another runner without a wasted claim attempt
- `POST /tasks` + `TaskSummaryOut` + `TaskOut`: accept and expose the field
- `TaskServiceClient.create_task()`: passes `preferred_runner_id` through
- Dashboard `action_new_task`: calls `live_runners()` after memo entry;
  0 or 1 runners β†’ auto-select, no selector shown; β‰₯2 runners β†’ `ChoiceScreen`
  (local first) for the operator to pick

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@tildesrc
tildesrc force-pushed the panopticon/m5-runner-selection branch from 932e47a to bc29425 Compare July 8, 2026 23:06
@tildesrc
tildesrc changed the base branch from main to panopticon/m5-start-runner-cmd July 8, 2026 23:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant