You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Keep explicitly blocked Kanban tasks sticky through readiness recomputation, while preserving manual promotion and later circuit-breaker recovery.
Changes
atomically record an initial blocked event at task creation
emit unblocked before promoted_manual
add regressions for construction-barrier TOCTOU, event ordering, transaction rollback, manual promotion, and transient recovery
Why
Without durable initial-block provenance, recompute_ready() can promote a child while its graph is still being constructed if every currently attached parent is done.
Verification
400 relevant Kanban CLI/database/tool tests passed on current upstream main
exact implementation/test bytes match the independently reviewed deployed-base patch
Related sticky-block implementations: this patch shares the create-time blocked-event mechanism but also changes manual-promotion event ordering, so it is competing work rather than a pure duplicate.
Thanks for the focused Kanban regression coverage. Current main has the exact gap: create_task accepts initial_status="blocked" at hermes_cli/kanban_db.py:2585, but persists only the created event at hermes_cli/kanban_db.py:2670; recompute_ready relies on _has_sticky_block() at hermes_cli/kanban_db.py:3355 and otherwise promotes the blocked card at hermes_cli/kanban_db.py:3447.
The PR's create-time blocked event and manual-promotion unblocked event match that existing event-based contract. Its added tests cover the previously untested initial-status path, transaction rollback, ordering, and recovery behavior. No blocking issue was identified from the diff.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
comp/cronCron scheduler and job managementneeds-decisionAwaiting maintainer decision before any implementationP3Low — cosmetic, nice to havesweeper:blast-moderateSweeper blast radius: moderate — a subsystem or single platformsweeper:risk-compatibilitySweeper risk: may break existing users, config, migrations, defaults, or upgradessweeper:risk-session-stateSweeper risk: may lose/corrupt/mis-associate session or context statetype/bugSomething isn't working
3 participants
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Keep explicitly blocked Kanban tasks sticky through readiness recomputation, while preserving manual promotion and later circuit-breaker recovery.
Changes
blockedevent at task creationunblockedbeforepromoted_manualWhy
Without durable initial-block provenance,
recompute_ready()can promote a child while its graph is still being constructed if every currently attached parent is done.Verification
maingit diff --check: passed