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 taskComplete = payload?.taskState === 'complete';
|
||||||
const nextAction = payload?.nextDerivedAction ?? payload?.derivedAction ?? null;
|
const nextAction = payload?.nextDerivedAction ?? payload?.derivedAction ?? null;
|
||||||
const nextActionKnown = nextAction != 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 hasDispatchReceipt = hasValidDispatchReceipt(payload?.dispatchReceipt ?? null);
|
||||||
const closureState = payload?.replyClosureState ?? null;
|
const closureState = payload?.replyClosureState ?? null;
|
||||||
const isLegalTerminalState = LEGAL_TERMINAL_STATES.has(closureState);
|
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 {
|
return {
|
||||||
ok: false,
|
ok: false,
|
||||||
status: 'continuity_failure',
|
status: 'continuity_failure',
|
||||||
|
|||||||
Reference in New Issue
Block a user