Skip to content

fix(kanban): preserve initial blocked approval gates - #46274

Closed
Veritas-7 wants to merge 1 commit into
NousResearch:mainfrom
Veritas-7:veritas/kanban-initial-blocked-sticky-20260615
Closed

fix(kanban): preserve initial blocked approval gates#46274
Veritas-7 wants to merge 1 commit into
NousResearch:mainfrom
Veritas-7:veritas/kanban-initial-blocked-sticky-20260615

Conversation

@Veritas-7

Copy link
Copy Markdown
Contributor

Summary

  • emit a sticky blocked event when a Kanban task is created with initial_status="blocked"
  • prevent recompute_ready() / dispatcher ticks from auto-promoting approval-gated blocked tasks before an explicit unblock
  • add regressions for both parentless and parent-done initial blocked tasks

Fixes #39609.

Why

create_task(initial_status="blocked") wrote tasks.status='blocked' but did not emit a blocked event. The sticky-block guard only checks blocked / unblocked events, so a newly created blocked task could be treated like a transient recoverable block and promoted to ready on the next recompute/dispatcher pass.

--initial-status blocked is documented as a human/operator gate. It should stay inert until an explicit unblock.

Testing

  • python -m pytest tests/hermes_cli/test_kanban_blocked_sticky.py tests/hermes_cli/test_kanban_cli.py tests/hermes_cli/test_kanban_db.py tests/tools/test_kanban_tools.py -q -o 'addopts=' → 353 passed, 1 warning
  • manual isolated smoke: initial blocked child with completed parent stayed blocked, recompute_ready() returned 0, events were ['created', 'blocked']
  • gitleaks git --log-opts='origin/main..HEAD' --no-banner --redact → no leaks found

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

comp/cron Cron scheduler and job management P3 Low — cosmetic, nice to have type/bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Bug]: Tasks created with --initial-status blocked auto-promote to ready ~1s later with no actor — human approval gate bypassed

2 participants