Add canonical canvas edits, identity migration and idempotent resource/AI operations #19

Merged
Zayden-Jung merged 49 commits from codex/headless-canvas-v1 into main 2026-11-11 14:53:34 +00:00
Showing only changes of commit 2d4aefbdc0 - Show all commits
@@ -508,6 +508,14 @@ func TestCanonicalAIAdmissionAndLifecycle(t *testing.T) {
model.Tombstones[node] = 2
model.TombstoneOwners[node] = child
delete(model.Elements, node)
for id, element := range model.Elements {
if element["structure"] == "connection" && (element["source"].(map[string]any)["elementId"] == node || element["target"].(map[string]any)["elementId"] == node) {
model.DeadRecords[id] = element
model.Tombstones[id] = modelInt(element["incarnation"])
model.TombstoneOwners[id] = modelString(element["ownerCanvasId"])
delete(model.Elements, id)
}
}
})
execute(doomed["run_id"].(string))
if result := call("GET", base(child)+"/ai/runs/"+doomed["run_id"].(string), nil, 200, 0, ""); result["status"] != "cancelled" {