Lower checked shared edges into the portable graph model

This commit is contained in:
Timothy J. Aveni
2026-09-25 12:34:13 -07:00
parent c482a99aca
commit 58a75da83f
6 changed files with 105 additions and 42 deletions
+32
View File
@@ -76,3 +76,35 @@ test("key contracts cannot silently bind to unkeyed storage or the inverse proje
assert.match(JSON.stringify(result.diagnostics), /key type|keyed projection|signature/i);
}
});
test("checked shared edges lower without granting conformance initialization ownership", () => {
const edge = declarations.match(/ private edge Entries[\s\S]*?\n }/)![0];
const shared = declarations
.replace(edge, "")
.replace(" conform Node as", edge.replace("private edge", "shared edge") + "\n conform Node as");
const result = compile(shared);
assert.ok(result.ok, JSON.stringify(result.diagnostics));
const program = compileKernelProgram(compileExecutionPlan(result.workspace)) as {
model: { edges: { id: string; owner: string | null }[] };
};
assert.deepEqual(
program.model.edges.map((edge) => ({ id: edge.id, owner: edge.owner })),
[{ id: "entries", owner: null }],
);
const seeded = compile(
shared.replace(
" bind entries.resolve",
" initialize { initial to edge Entries.entries; };\n bind entries.resolve",
),
);
assert.ok(!seeded.ok);
assert.ok(seeded.diagnostics.some((issue) => issue.code === "invalid-initialization"));
const scalar = compile(
shared.replace(
' atom Node id "node";',
' atom Node id "node"; shared state Shared id "shared" on Node : string policy register default "";',
),
);
assert.ok(scalar.ok, JSON.stringify(scalar.diagnostics));
assert.throws(() => compileKernelProgram(compileExecutionPlan(scalar.workspace)), /UNSUPPORTED_SHARED_STORAGE/);
});