feat(kanban): allow scheduled initial tasks - #67577
feat(kanban): allow scheduled initial tasks#67577adrianabezerrabessa-source wants to merge 2 commits into
Conversation
teknium1
left a comment
There was a problem hiding this comment.
Thanks for the focused lifecycle extension. The current-main premise is valid: hermes_cli/kanban_db.py:103 excludes scheduled from initial statuses, while recompute_ready() only scans todo/blocked (hermes_cli/kanban_db.py:3428-3431) and unblock_task() already releases scheduled tasks (hermes_cli/kanban_db.py:5162-5225).
Problems
tests/tools/test_kanban_tools.py:1031asserts the entire schema enum. This is a change-detector snapshot;AGENTS.md:80-83requires behavior/invariant coverage rather than frozen enumeration lists.- The public Kanban command references do not mention
--initial-status:website/docs/reference/cli-commands.md:588andwebsite/docs/user-guide/features/kanban.md:659-668list thecreatesurface.
Suggested changes
- Assert that
scheduledis included in the schema enum, while keeping the end-to-end parked-task behavior test. - Add
--initial-status running|blocked|scheduledto the existing CLI references, including thatscheduledrequires explicit unblock/release.
Automated hermes-sweeper review.
|
|
||
|
|
||
| def test_create_schema_exposes_scheduled_initial_status(): | ||
| from tools.kanban_tools import KANBAN_CREATE_SCHEMA |
There was a problem hiding this comment.
Please avoid freezing the whole enum here. AGENTS.md prohibits change-detector enumeration snapshots; assert that scheduled is exposed instead, while the handler behavior test proves the actual contract.
|
Addressed the review feedback:
Revalidated the affected suite: 572 passed; |
Summary
create_task(..., initial_status="scheduled")to atomically park a task outside the dispatcher queuescheduledthroughhermes kanban create --initial-statusand thekanban_createtool schemarecompute_ready()and are released only through the existingunblock_task()pathWhy
Pre-dispatch routers need a stable state while they persist routing and audit metadata.
triageis not a fail-closed lock when auto-decomposition is enabled, and a rawblockedrow without a sticky block event may be recovered byrecompute_ready().scheduledalready has the desired lifecycle semantics in the Kanban core:recompute_ready()ignores it;unblock_task()explicitly transitions it totodoorreadywhile preserving parent gating.Allowing it at creation time removes the create-then-park race without adding a new status or dispatcher branch.
This complements #67518, which adds the
model_overridewrite surface. This PR intentionally does not duplicate those changes.Compatibility
running)blockedandtriagebehavior is unchangedVerification