feat: enforce auto-next obligation at approved plan task boundaries
This commit is contained in:
@@ -76,11 +76,39 @@ function evaluateContinuity(payload) {
|
||||
const taskComplete = payload?.taskState === 'complete';
|
||||
const nextAction = payload?.nextDerivedAction ?? payload?.derivedAction ?? null;
|
||||
const nextActionKnown = nextAction != null;
|
||||
const explicitNextTaskKnown = payload?.nextTaskKnown === true;
|
||||
const sameApprovedPlan = payload?.sameApprovedPlan === true;
|
||||
const taskBoundaryStop = payload?.taskBoundaryStop === true;
|
||||
const highRiskStop = payload?.highRiskStop === true;
|
||||
const hasDispatchReceipt = hasValidDispatchReceipt(payload?.dispatchReceipt ?? null);
|
||||
const closureState = payload?.replyClosureState ?? null;
|
||||
const isLegalTerminalState = LEGAL_TERMINAL_STATES.has(closureState);
|
||||
const autoNextObligatory = taskComplete
|
||||
&& explicitNextTaskKnown
|
||||
&& sameApprovedPlan
|
||||
&& taskBoundaryStop
|
||||
&& !isLegalTerminalState
|
||||
&& !highRiskStop;
|
||||
|
||||
if (taskComplete && nextActionKnown && !hasDispatchReceipt && !isLegalTerminalState) {
|
||||
if (autoNextObligatory && !hasDispatchReceipt) {
|
||||
return {
|
||||
ok: false,
|
||||
status: 'continuity_failure',
|
||||
verdict: 'continuity_failure',
|
||||
reason: 'missing_auto_next_dispatch',
|
||||
};
|
||||
}
|
||||
|
||||
if (taskComplete && nextActionKnown && !hasDispatchReceipt && !isLegalTerminalState && !highRiskStop && !('sameApprovedPlan' in (payload ?? {}))) {
|
||||
return {
|
||||
ok: false,
|
||||
status: 'continuity_failure',
|
||||
verdict: 'continuity_failure',
|
||||
reason: 'missing_dispatch_receipt',
|
||||
};
|
||||
}
|
||||
|
||||
if (taskComplete && nextActionKnown && !hasDispatchReceipt && !isLegalTerminalState && !highRiskStop && sameApprovedPlan && !taskBoundaryStop && !explicitNextTaskKnown) {
|
||||
return {
|
||||
ok: false,
|
||||
status: 'continuity_failure',
|
||||
|
||||
Reference in New Issue
Block a user