fix(dispatcher): avoid head-of-line blocking of independent authorized work #373

Merged
karsten merged 2 commits from fix/dispatcher-ready-step-scheduling into main 2026-11-12 18:20:34 +00:00
Owner

Root cause

The independent step assessor correctly confirms a real hold on one live-verification step, but strict sequential ordering makes separately authorized later publication unreachable. Parent decisions are present (not ignored), yet read-only reassessment cannot change the work selection. This produces endless blocker notifications despite independently possible work. No business-specific repair or second writer is needed.

Fix

After an independently confirmed blocked/waiting result, the selected validator may admit ONE exact existing later step, only if original mandate, real dependencies, approvals/CI, parent decisions and settled evidence support its independent execution. Persist original stable step identities and the held assessment/correction/session/route; reorder only the existing uncompleted suffix. The original step stays OPEN. Overall completion still requires every original step. No unknown/settled effects replay. Parent clarification invalidates an unstarted readiness permit; manual stop/pause/expiry fences remain. Dedicated validator selection is honored, no legacy fallback.

Verification

  • Failing-before reproduction: blocked live verification strands authorized publication (1 worker instead of 2).
  • 12 focused regression cases including same-role input identity, both crash boundaries, new restrictions after durable admission, manual pause/cancel/expiry, malformed/self-selection, reload and dedicated provider selection.
  • Full suite: 2035 passed, 1 existing skip, 0 failures. Typecheck and build pass; diff check clean.
  • Real configured Shikamaru validator homelab-chat/homelab/claude-haiku-5-5 evaluated the actual retained original execution read-only: chooses exact source step 4; separate missing-required-approval control remains blocked. Zero tools/effects during this check.

Preserves dirty primary Core/Plugins worktrees; isolated worktree only. After normal merge, activate using the configured external native update owner and verify original writer progress. No ledger editing, cancellation, force merges or duplicate publisher.

## Root cause The independent step assessor correctly confirms a real hold on one live-verification step, but strict sequential ordering makes separately authorized later publication unreachable. Parent decisions are present (not ignored), yet read-only reassessment cannot change the work selection. This produces endless blocker notifications despite independently possible work. No business-specific repair or second writer is needed. ## Fix After an independently confirmed blocked/waiting result, the selected validator may admit ONE exact existing later step, only if original mandate, real dependencies, approvals/CI, parent decisions and settled evidence support its independent execution. Persist original stable step identities and the held assessment/correction/session/route; reorder only the existing uncompleted suffix. The original step stays OPEN. Overall completion still requires every original step. No unknown/settled effects replay. Parent clarification invalidates an unstarted readiness permit; manual stop/pause/expiry fences remain. Dedicated validator selection is honored, no legacy fallback. ## Verification - Failing-before reproduction: blocked live verification strands authorized publication (1 worker instead of 2). - 12 focused regression cases including same-role input identity, both crash boundaries, new restrictions after durable admission, manual pause/cancel/expiry, malformed/self-selection, reload and dedicated provider selection. - Full suite: **2035 passed, 1 existing skip, 0 failures**. Typecheck and build pass; diff check clean. - Real configured Shikamaru validator homelab-chat/homelab/claude-haiku-5-5 evaluated the actual retained original execution read-only: chooses exact source step 4; separate missing-required-approval control remains blocked. Zero tools/effects during this check. Preserves dirty primary Core/Plugins worktrees; isolated worktree only. After normal merge, activate using the configured external native update owner and verify original writer progress. No ledger editing, cancellation, force merges or duplicate publisher.
fix(dispatcher): admit independent ready steps without losing held evidence
All checks were successful
decision-interface-ci / full-validation (pull_request) Successful in 2m18s
992c1db7f0
Merge remote-tracking branch 'origin/main' into fix/dispatcher-ready-step-scheduling
All checks were successful
decision-interface-ci / full-validation (pull_request) Successful in 2m16s
282fe6efdb
Author
Owner

Integrated concurrent main #371/#372 normally before final validation. Final exact head 282fe6efdb: local full suite 2048 passed / 1 existing skip / zero failures; typecheck/build/diff-check pass. Exact-head Forgejo decision-interface-ci full-validation succeeded in 2m16s. 12 new focused cases. Live configured-validator read-only proof selects original source step 4 and preserves a real missing-approval gate. Proceeding with normal merge and native-owner activation; no force/bypass.

Integrated concurrent main #371/#372 normally before final validation. Final exact head 282fe6efdb3e6c85583fbda650bcf2d98b5d636e: local full suite 2048 passed / 1 existing skip / zero failures; typecheck/build/diff-check pass. Exact-head Forgejo decision-interface-ci full-validation succeeded in 2m16s. 12 new focused cases. Live configured-validator read-only proof selects original source step 4 and preserves a real missing-approval gate. Proceeding with normal merge and native-owner activation; no force/bypass.
Author
Owner

LIVE VERIFIED: Both Shikamaru and Akira selected AND running Core 42c14cc577 via supported native owner. Authenticated API identity and software provenance checked; installed scheduling code and process paths verified. No config/ledger edits, SIGKILL, cancelled mandates or maintenance-created business writer.

Actual existing blocked execution 559dbf4d resumed under #373: persisted order [0,1,3,2], original blocked live-verification report retained, original stable publication intent step:559dbf4d-4a7b-4860-ac94-178c3c97734f:3:medium. Existing original worker ran real tools and published previously stranded test commit 938ae8e9ebdf2b84d645ab1f4a6cba8f3951e643 to the existing PR; remote head independently verified. This is not a claim that the genuine live dependency has been resolved or that the business PR is already merged. A newer parent timing decision woke its old retry while #374 was being prepared; the once-only migration is additionally covered by six old-hour-backoff recovery regressions, not falsely claimed as the cause of that particular wake.

Final #374 full suite 2054 passed / 1 existing skip / zero failures; typecheck/build pass. #373 and #374 exact-head Forgejo full-validation green before normal non-force merge. Real configured validator evaluated actual retained task read-only: independently selects source step 4 while refusing a required-approval bypass control. Evidence ~/.cache/hayate-maintenance/dispatcher-ready-step-scheduling/summary.json and original-writer-progress.json.

LIVE VERIFIED: Both Shikamaru and Akira selected AND running Core 42c14cc577bfe191ae971ff5f8b8836a5ef3bab9 via supported native owner. Authenticated API identity and software provenance checked; installed scheduling code and process paths verified. No config/ledger edits, SIGKILL, cancelled mandates or maintenance-created business writer. Actual existing blocked execution 559dbf4d resumed under #373: persisted order [0,1,3,2], original blocked live-verification report retained, original stable publication intent step:559dbf4d-4a7b-4860-ac94-178c3c97734f:3:medium. Existing original worker ran real tools and published previously stranded test commit 938ae8e9ebdf2b84d645ab1f4a6cba8f3951e643 to the existing PR; remote head independently verified. This is not a claim that the genuine live dependency has been resolved or that the business PR is already merged. A newer parent timing decision woke its old retry while #374 was being prepared; the once-only migration is additionally covered by six old-hour-backoff recovery regressions, not falsely claimed as the cause of that particular wake. Final #374 full suite 2054 passed / 1 existing skip / zero failures; typecheck/build pass. #373 and #374 exact-head Forgejo full-validation green before normal non-force merge. Real configured validator evaluated actual retained task read-only: independently selects source step 4 while refusing a required-approval bypass control. Evidence ~/.cache/hayate-maintenance/dispatcher-ready-step-scheduling/summary.json and original-writer-progress.json.
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
harness/core!373
No description provided.