reporting-governance: enforce preflight fail-closed gate

This commit is contained in:
Eve
2026-05-08 09:51:29 +08:00
parent 01bbef57ef
commit 47a2c4c727
5 changed files with 203 additions and 140 deletions

View File

@@ -94,10 +94,13 @@ test('capability descriptor -> policy evaluation -> decision planning yields ada
context: {
signals: ['checkpoint_overdue'],
operator_context: { report_anchor_present: true }
}
},
profile: strictProfile,
packageVersion: '0.1.0-mainline'
});
assert.equal(result.evaluation.decision.decision, 'force_checkpoint');
assert.equal(result.preflight.status, 'pass');
assert.equal(result.planning.receipt.delivery_state, 'pending_external_send');
assert.deepEqual(result.contract.adapter_actions, ['notify_operator']);
assert.deepEqual(result.contract.package_actions, ['emit_event']);
@@ -139,10 +142,13 @@ test('contract truthfully degrades when notify path can queue but cannot directl
policyPacks: [noSilencePack],
context: {
signals: ['checkpoint_overdue']
}
},
profile: strictProfile,
packageVersion: '0.1.0-mainline'
});
assert.equal(result.evaluation.decision.decision, 'force_checkpoint');
assert.equal(result.preflight.status, 'degraded');
assert.deepEqual(result.contract.adapter_actions, ['notify_operator']);
assert.deepEqual(result.contract.blocked_actions, []);
assert.equal(result.contract.receipt_status, 'planned');
@@ -181,10 +187,18 @@ test('contract fails closed when capability descriptor cannot satisfy mandatory
policyPacks: [noSilencePack],
context: {
signals: ['checkpoint_overdue']
}
},
profile: strictProfile,
packageVersion: '0.1.0-mainline'
});
assert.equal(result.evaluation.decision.decision, 'force_checkpoint');
assert.deepEqual(result.contract.adapter_actions, ['notify_operator']);
assert.equal(result.contract.receipt_status, 'planned');
assert.equal(result.preflight.status, 'fail_closed');
assert.deepEqual(result.planning.enforcement_intent.planned_actions, []);
assert.deepEqual(result.contract.adapter_actions, []);
assert.deepEqual(result.contract.package_actions, []);
assert.deepEqual(result.contract.blocked_actions, []);
assert.equal(result.contract.delivery_state, 'blocked');
assert.equal(result.contract.receipt_status, 'failed');
assert.ok(result.planning.receipt.notes.some((note) => note.includes('failed closed')));
});