fix(dispatcher): host supervision owns children paused by internal runtime failure #276

Merged
akira merged 2 commits from akira/hayate-agent-core:fix/dispatcher-pause-continuation into main 2026-11-05 15:41:20 +00:00
Collaborator

Fixes the pause-without-continuation gap behind live dispatcher execution d2494ffb.

Cause (from executions.json/state.json/service.error.log and the session transcript): a sequential step whose worker reported STEP-STATUS complete three times while the independent validator answered continue hit STEP_CONTINUATIONS; settleIntent cleared the intent, the failure was recorded as generic runtime-failure and the execution became paused. Host supervision (reconcileBlockedDependency, hasPendingDependency) only considered blocked children, so the bound waiting parent had no owner.

Fix (src/harness.ts only): supervisable() admits a paused child only when diagnosticCode is runtime-failure, with no intent, no open question and no parentStopped. It reuses the existing bounded independent assessment and recoveryRetry budget. Manual pause, questions, unsafe intents, operator stop and exhausted budgets stay binding.

Regression: test/paused-child-supervision.test.ts (fails on the previous main, passes now).
Review ledger: root /private/tmp/core-pause-gap, base 699967e481, fingerprint cdcd048af1833690c4c682b041c8ca53d766196df35f94466e62c60ade2f0865, passed, 0 blockers.
CI: npm run typecheck clean; npm test 1512 tests, 1509 pass, 0 fail, 3 skipped.

Fixes the pause-without-continuation gap behind live dispatcher execution d2494ffb. Cause (from executions.json/state.json/service.error.log and the session transcript): a sequential step whose worker reported STEP-STATUS complete three times while the independent validator answered continue hit STEP_CONTINUATIONS; settleIntent cleared the intent, the failure was recorded as generic runtime-failure and the execution became paused. Host supervision (reconcileBlockedDependency, hasPendingDependency) only considered blocked children, so the bound waiting parent had no owner. Fix (src/harness.ts only): supervisable() admits a paused child only when diagnosticCode is runtime-failure, with no intent, no open question and no parentStopped. It reuses the existing bounded independent assessment and recoveryRetry budget. Manual pause, questions, unsafe intents, operator stop and exhausted budgets stay binding. Regression: test/paused-child-supervision.test.ts (fails on the previous main, passes now). Review ledger: root /private/tmp/core-pause-gap, base 699967e481550d2eb1983caeaca27802cd75cdf6, fingerprint cdcd048af1833690c4c682b041c8ca53d766196df35f94466e62c60ade2f0865, passed, 0 blockers. CI: npm run typecheck clean; npm test 1512 tests, 1509 pass, 0 fail, 3 skipped.
akira merged commit 979b62507a into main 2026-11-05 15:41:20 +00:00
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!276
No description provided.