docs: define auto-next obligation gate contract
This commit is contained in:
84
docs/runbooks/auto-next-obligation-gate.md
Normal file
84
docs/runbooks/auto-next-obligation-gate.md
Normal file
@@ -0,0 +1,84 @@
|
||||
# Auto-Next Obligation Gate
|
||||
|
||||
## Purpose
|
||||
|
||||
This runbook defines the approved-plan continuity rule that a workflow may not stop at a completed-task boundary when the next task in the same approved plan is already known and continuation is still allowed.
|
||||
|
||||
## When auto-next is obligatory
|
||||
|
||||
Auto-next is obligatory when all of the following are true:
|
||||
|
||||
- the current workflow is inside the same approved plan
|
||||
- the current task is complete
|
||||
- the next task is known
|
||||
- the system is attempting a task-boundary stop instead of continuing execution
|
||||
- reply closure state is not `waiting_user`
|
||||
- reply closure state is not `blocked`
|
||||
- reply closure state is not `pending_verification`
|
||||
- `highRiskStop` is not active
|
||||
|
||||
In this state, the system must auto-dispatch the next task and record a real dispatch receipt. A dry-run planner result or stated intent to continue is not enough.
|
||||
|
||||
## Legal non-auto-next closures
|
||||
|
||||
The following are legal non-auto-next closures even when a next task exists:
|
||||
|
||||
- `waiting_user`
|
||||
- `blocked`
|
||||
- `pending_verification`
|
||||
|
||||
These states are the only normal closure states that can stop without auto-next dispatch.
|
||||
|
||||
## Allowed non-closure exception
|
||||
|
||||
The following explicit exception may bypass auto-next obligation without using the normal legal terminal closure states:
|
||||
|
||||
- `highRiskStop`
|
||||
|
||||
`highRiskStop` means the workflow is intentionally stopping at an explicit high-risk stop point and therefore does not have to auto-dispatch the next task yet.
|
||||
|
||||
## Forbidden behavior
|
||||
|
||||
The following behavior is forbidden:
|
||||
|
||||
- completed task
|
||||
- next task known
|
||||
- same approved plan
|
||||
- normal closeout or handoff language
|
||||
- no real dispatch receipt for the next task
|
||||
- no legal closure state
|
||||
- no `highRiskStop`
|
||||
|
||||
A completed task in the same approved plan must not end with “I can continue with the next task” style closeout unless the next task has actually been dispatched.
|
||||
|
||||
## Canonical failure condition
|
||||
|
||||
If all of the following are true:
|
||||
|
||||
- task is complete
|
||||
- next task is known
|
||||
- next task belongs to the same approved plan
|
||||
- the system is stopping at a task boundary
|
||||
- no valid dispatch receipt exists
|
||||
- closure is not `waiting_user`, `blocked`, or `pending_verification`
|
||||
- `highRiskStop` is false
|
||||
|
||||
Then the continuity gate must fail and treat the stop as an auto-next obligation violation.
|
||||
|
||||
## Canonical failure table
|
||||
|
||||
| Task complete | Next task known | Same approved plan | Boundary stop | Receipt | Closure / exception | Expected |
|
||||
| --- | --- | --- | --- | --- | --- | --- |
|
||||
| yes | yes | yes | yes | no | completed closure | FAIL |
|
||||
| yes | yes | yes | yes | valid receipt | completed closure | PASS |
|
||||
| yes | yes | yes | yes | no | `waiting_user` | PASS |
|
||||
| yes | yes | yes | yes | no | `blocked` | PASS |
|
||||
| yes | yes | yes | yes | no | `pending_verification` | PASS |
|
||||
| yes | yes | yes | yes | no | `highRiskStop` | PASS |
|
||||
|
||||
## Notes for implementation
|
||||
|
||||
- The obligation applies only when the next task is known within the same approved plan.
|
||||
- A generic next action is not enough unless it proves the same approved plan task transition.
|
||||
- A real dispatch receipt remains the source of truth for whether auto-next actually happened.
|
||||
- This rule is intentionally minimal so it can later move into the continuity plugin without changing the behavior contract.
|
||||
Reference in New Issue
Block a user