fix(kanban): keep initial blocked holds sticky - #41497
Conversation
Verification: blocked hold sticky behaviorLGTM — the fix is clean and well-scoped. Creating an explicit
This prevents a real race condition where a dispatch dry-run could leak a |
|
Thanks for the focused regression fix. The premise remains valid on current main: The PR's event insertion aligns exactly with the established sticky-block contract, while its two tests cover direct recomputation and the dispatcher dry-run path. No correctness or completeness issue was identified in the changed lines. Automated hermes-sweeper review. |
Summary
initial_status="blocked"as operator-controlled sticky holds by emitting ablockedevent at creation time.Why
dispatch_once(..., dry_run=True)runs the same promotion sweep used by the live dispatcher. A task created directly inblockedhad noblockedevent, so the sticky-block guard treated it like a recoverable transient block and promoted it toready. For controlled Kanban pilots, that made dry-run preflight able to mutate a blocked hold into spawnable work before explicit unblock.Validation
scripts/run_tests.sh tests/hermes_cli/test_kanban_blocked_sticky.py tests/hermes_cli/test_kanban_db.py tests/hermes_cli/test_kanban_default_assignee.py tests/hermes_cli/test_kanban_per_profile_cap.pyblockedblocked0[]created,blockedgit diff --checkRisk
Low. The change only adds an event for explicit initial blocked task creation. Existing worker/operator block semantics already use this event shape, and existing circuit-breaker recovery tests still pass.