Review execution semantic-major changes without storage migration planning

This commit is contained in:
Timothy J. Aveni
2026-09-21 01:38:15 -07:00
parent 01a3ec5ae2
commit 70344ca06a
3 changed files with 111 additions and 17 deletions
+37
View File
@@ -4,6 +4,7 @@ import { capabilityId as id, valueType, validateWorkspaceRevision } from "../src
import {
contentDigest,
planEvolution,
reviewSemanticMajors,
runtimeContracts,
storageContracts,
storageChangeRequiresMigration,
@@ -126,6 +127,42 @@ test("semantic review receipts cover exact consumer/provider contracts", () => {
assert.equal(planEvolution(before, after, { allowLegacy: true, reviews: [receipt] }).reviews[0]!.accepted, false);
});
test("execution semantic review is independent of storage migration and process action planning", () => {
const before = makeValidCapabilityWorkspace();
before.conformances[0]!.id = id.conformance("conformance:project:named");
const after = structuredClone(before);
after.conformances[0]!.semanticMajor = 2;
const report = reviewSemanticMajors(before, after);
assert.equal(report.checkerVersion, "quixos-semantic-review-v1");
assert.equal(report.reviews.length, 1);
assert.equal(report.reviews[0]!.accepted, false);
assert.equal("migrationRequired" in report, false);
assert.equal("runtimeActions" in report, false);
assert.equal(report.blockers.length, 1);
const receipt = {
requirementDigest: report.reviews[0]!.requirementDigest,
decision: "accepted-unchanged" as const,
rationale: "The consumer only displays this provider's unchanged label contract",
agentId: "fixture-agent",
};
assert.deepEqual(reviewSemanticMajors(before, after, [receipt]).blockers, []);
const oldReceipt = {
...receipt,
requirementDigest: planEvolution(before, after, { allowLegacy: true }).reviews[0]!.requirementDigest,
};
assert.equal(reviewSemanticMajors(before, after, [oldReceipt]).reviews[0]!.accepted, false);
after.packageImports[0]!.source.commit = "f".repeat(40);
assert.equal(reviewSemanticMajors(before, after, [receipt]).reviews[0]!.accepted, false);
assert.deepEqual(reviewSemanticMajors(null, after).blockers, []);
assert.throws(
() => reviewSemanticMajors(before, { ...after, workspaceId: id.workspace("different") }),
/different workspace/,
);
const earlier = structuredClone(after);
earlier.conformances[0]!.semanticMajor = 1;
assert.ok(reviewSemanticMajors(after, earlier).blockers.some((message) => message.includes("decreases")));
});
test("evolution enrollment is explicit and never erases legacy ownership", () => {
const workspace = makeValidCapabilityWorkspace();
const report = planEvolution(workspace, workspace);