fix: 修正 M3 durable green 运行态判定

This commit is contained in:
Code Queue Review
2026-05-24 02:43:55 +00:00
parent 0abded12f6
commit 7bf9f41e3e
4 changed files with 156 additions and 24 deletions
@@ -199,6 +199,42 @@ test("live mode records M3 true/false durable green evidence", async () => {
assert.equal(report.blockers.length, 0);
});
test("live mode accepts 4 DEV-LIVE persisted green operations even when legacy summary says source_contract_failed", async () => {
const m3 = m3GreenReport();
m3.summary.status = "blocked";
m3.summary.classification = "source_contract_failed";
m3.summary.trustedGreen = false;
m3.summary.result = "legacy source/static contract failed";
const report = await buildDevRuntimePostflightReport(
parseArgs(["--live", "--confirm-dev", "--confirmed-non-production"]),
{
httpGetJson: async () => ({ ok: true, status: 200, json: apiPayload({ ready: true }) }),
m3Runner: async () => m3,
now: () => "2026-05-23T00:00:00.000Z"
}
);
assert.equal(report.conclusion.status, "pass");
assert.equal(report.m3.persisted, true);
assert.equal(report.m3.persistenceContract.ready, true);
assert.equal(report.m3.operationCount, 4);
assert.deepEqual(report.m3.persistenceContract.sequence.map((item) => [
item.id,
item.observedValue,
item.evidenceGreen,
item.persisted
]), [
["write-do1-true", true, true, true],
["read-di1-true", true, true, true],
["write-do1-false", false, true, true],
["read-di1-false", false, true, true]
]);
assert.equal(report.blockers.some((blocker) =>
blocker.scope === "m3-durable-postflight" &&
blocker.evidence?.classification === "source_contract_failed"
), false);
});
test("live mode blocks when M3 operation evidence is not durable green", async () => {
const m3 = m3GreenReport();
m3.liveOperations[1].evidenceState.durable = false;