niceeval 0.14.4-canary.67 → 0.15.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/INDEX.md +2 -2
- package/dist/adapter.cjs +162 -14
- package/dist/adapter.cjs.map +1 -1
- package/dist/adapter.d.cts +82 -17
- package/dist/adapter.d.mts +82 -17
- package/dist/adapter.d.ts +82 -17
- package/dist/agents/index.cjs.map +1 -1
- package/dist/agents/index.d.cts +2 -1
- package/dist/agents/index.d.mts +2 -1
- package/dist/agents/index.d.ts +2 -1
- package/dist/assertions/api.cjs.map +1 -1
- package/dist/assertions/api.d.cts +32 -12
- package/dist/assertions/api.d.mts +32 -12
- package/dist/assertions/api.d.ts +32 -12
- package/dist/assertions/runtime.cjs +4 -1
- package/dist/assertions/runtime.cjs.map +1 -1
- package/dist/coordination/platform/node-process-identity.cjs +99 -21
- package/dist/coordination/platform/node-process-identity.cjs.map +1 -1
- package/dist/coordination/platform/node-process-identity.d.cts +17 -1
- package/dist/coordination/platform/node-process-identity.d.mts +17 -1
- package/dist/coordination/platform/node-process-identity.d.ts +17 -1
- package/dist/coordination/platform/node-process-identity.js +2 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2 -2
- package/dist/index.d.mts +2 -2
- package/dist/index.d.ts +2 -2
- package/dist/record/sqlite/current-schema.cjs +437 -5
- package/dist/record/sqlite/current-schema.cjs.map +1 -1
- package/dist/record/sqlite/current-schema.d.cts +4 -4
- package/dist/record/sqlite/current-schema.d.mts +4 -4
- package/dist/record/sqlite/current-schema.d.ts +4 -4
- package/dist/record/sqlite/schema.d.cts +1 -1
- package/dist/record/sqlite/schema.d.mts +1 -1
- package/dist/record/sqlite/schema.d.ts +1 -1
- package/dist/runner/attempt-resources.cjs +2 -1
- package/dist/runner/attempt-resources.cjs.map +1 -1
- package/dist/runner/attempt-resources.d.cts +2 -1
- package/dist/runner/attempt-resources.d.mts +2 -1
- package/dist/runner/attempt-resources.d.ts +2 -1
- package/dist/runner/attempt.cjs +7 -3
- package/dist/runner/attempt.cjs.map +1 -1
- package/dist/runner/node-process-identity.js +2 -0
- package/dist/types.cjs.map +1 -1
- package/dist/types.d.cts +2 -1
- package/dist/types.d.mts +2 -1
- package/dist/types.d.ts +2 -1
- package/dist/view/function-runtime.mjs +528 -29
- package/docs-site/zh/reference/define-agent.mdx +125 -3
- package/docs-site/zh/troubleshooting/debugging.mdx +2 -0
- package/docs-site/zh/tutorials/custom-application.mdx +87 -17
- package/docs-site/zh/tutorials/evaluation-kinds.mdx +1 -1
- package/docs-site/zh/tutorials/viewing-results.mdx +2 -1
- package/package.json +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Exact current ProjectDatabase 0.18 schema
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Exact current ProjectDatabase 0.18 schema, independent of frozen historical
|
|
3
|
+
* baselines. Keep these bytes stable within this format: they own its fingerprint.
|
|
4
|
+
* The disjoint namespace fences writers prepared against the 0.17 tables.
|
|
5
5
|
*/
|
|
6
|
-
export declare const RECORD_SQLITE_BASELINE_SQL: string;
|
|
6
|
+
export declare const RECORD_SQLITE_BASELINE_SQL = "\nCREATE TABLE ne18_record_metadata (\n singleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n format TEXT NOT NULL,\n storage_revision INTEGER NOT NULL CHECK (storage_revision > 0),\n storage_generation TEXT NOT NULL,\n schema_fingerprint TEXT NOT NULL CHECK (length(schema_fingerprint) = 64),\n created_at TEXT NOT NULL,\n barrier_state TEXT NOT NULL CHECK (barrier_state IN ('open','draining','portable')),\n portable_generation TEXT,\n portable_revision INTEGER CHECK (portable_revision IS NULL OR portable_revision >= 0),\n portable_gate_id TEXT,\n record_payload BLOB,\n record_digest TEXT,\n CHECK ((record_payload IS NULL) = (record_digest IS NULL)),\n CHECK (record_digest IS NULL OR length(record_digest) = 64),\n CHECK ((barrier_state = 'portable') = (portable_generation IS NOT NULL)),\n CHECK ((barrier_state = 'portable') = (portable_revision IS NOT NULL)),\n CHECK ((barrier_state = 'open') = (portable_gate_id IS NULL))\n) STRICT;\nCREATE TABLE ne18_coordination_state (\n singleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n revision INTEGER NOT NULL CHECK (revision >= 0),\n operational_generation TEXT NOT NULL,\n next_writer_sequence INTEGER NOT NULL CHECK (next_writer_sequence > 0),\n writer_ticket_id TEXT,\n writer_sequence INTEGER CHECK (writer_sequence IS NULL OR writer_sequence > 0),\n writer_host TEXT,\n writer_pid INTEGER CHECK (writer_pid IS NULL OR writer_pid > 0),\n writer_boot_id TEXT,\n writer_process_start TEXT,\n writer_deadline INTEGER CHECK (writer_deadline IS NULL OR writer_deadline > 0),\n writer_enqueued_at INTEGER CHECK (writer_enqueued_at IS NULL OR writer_enqueued_at > 0),\n writer_nonce TEXT,\n writer_admitted_at INTEGER CHECK (writer_admitted_at IS NULL OR writer_admitted_at > 0),\n writer_lease_expires_at INTEGER CHECK (writer_lease_expires_at IS NULL OR writer_lease_expires_at > 0),\n barrier_id TEXT,\n barrier_nonce TEXT,\n barrier_host TEXT,\n barrier_pid INTEGER CHECK (barrier_pid IS NULL OR barrier_pid > 0),\n barrier_boot_id TEXT,\n barrier_process_start TEXT,\n barrier_deadline INTEGER CHECK (barrier_deadline IS NULL OR barrier_deadline > 0),\n barrier_requested_at INTEGER CHECK (barrier_requested_at IS NULL OR barrier_requested_at > 0),\n barrier_lease_expires_at INTEGER CHECK (barrier_lease_expires_at IS NULL OR barrier_lease_expires_at > 0),\n barrier_status TEXT CHECK (barrier_status IS NULL OR barrier_status IN ('requested','active')),\n barrier_active_at INTEGER CHECK (barrier_active_at IS NULL OR barrier_active_at > 0),\n CHECK ((writer_ticket_id IS NULL) = (writer_sequence IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_host IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_pid IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_boot_id IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_process_start IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_deadline IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_enqueued_at IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_nonce IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_admitted_at IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_lease_expires_at IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_nonce IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_host IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_pid IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_boot_id IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_process_start IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_deadline IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_requested_at IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_lease_expires_at IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_status IS NULL)),\n CHECK (\n (barrier_status IS NULL AND barrier_active_at IS NULL) OR\n (barrier_status = 'requested' AND barrier_active_at IS NULL) OR\n (barrier_status = 'active' AND barrier_active_at IS NOT NULL)\n )\n) STRICT;\nCREATE TABLE ne18_coordination_tickets (\n ticket_id TEXT PRIMARY KEY,\n sequence INTEGER NOT NULL UNIQUE CHECK (sequence > 0),\n host TEXT NOT NULL,\n pid INTEGER NOT NULL CHECK (pid > 0),\n boot_id TEXT NOT NULL,\n process_start TEXT NOT NULL,\n deadline INTEGER NOT NULL CHECK (deadline > 0),\n enqueued_at INTEGER NOT NULL CHECK (enqueued_at > 0)\n) STRICT;\nCREATE TABLE ne18_runs (\n run_id TEXT PRIMARY KEY,\n status TEXT NOT NULL CHECK (status IN ('open','sealing','sealed')),\n writer_generation TEXT NOT NULL,\n started_at TEXT NOT NULL,\n core_payload BLOB,\n core_digest TEXT CHECK (core_digest IS NULL OR length(core_digest) = 64),\n mutation_sequence INTEGER NOT NULL DEFAULT 0 CHECK (mutation_sequence >= 0),\n candidate_seal_identity TEXT CHECK (candidate_seal_identity IS NULL OR length(candidate_seal_identity) = 64),\n candidate_seal_entry_count INTEGER CHECK (candidate_seal_entry_count IS NULL OR candidate_seal_entry_count >= 0),\n candidate_seal_staged_count INTEGER NOT NULL DEFAULT 0 CHECK (candidate_seal_staged_count >= 0),\n logical_seal_identity TEXT,\n CHECK ((core_payload IS NULL) = (core_digest IS NULL)),\n CHECK ((candidate_seal_identity IS NULL) = (candidate_seal_entry_count IS NULL)),\n CHECK ((status = 'open') = (candidate_seal_identity IS NULL)),\n CHECK (candidate_seal_entry_count IS NULL OR candidate_seal_staged_count <= candidate_seal_entry_count),\n CHECK (status != 'open' OR candidate_seal_staged_count = 0),\n CHECK ((status = 'sealed') = (logical_seal_identity IS NOT NULL)),\n CHECK (status = 'open' OR core_payload IS NOT NULL)\n) STRICT;\nCREATE TABLE ne18_slots (\n run_id TEXT NOT NULL REFERENCES ne18_runs(run_id) ON DELETE CASCADE,\n slot_id TEXT NOT NULL,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n core_payload BLOB NOT NULL,\n core_digest TEXT NOT NULL CHECK (length(core_digest) = 64),\n PRIMARY KEY (run_id, slot_id),\n UNIQUE (run_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_attempts (\n origin_run_id TEXT NOT NULL REFERENCES ne18_runs(run_id) ON DELETE CASCADE,\n attempt_id TEXT NOT NULL,\n attempt_locator TEXT NOT NULL CHECK (length(attempt_locator) = 14 AND substr(attempt_locator,1,2) = '@1'),\n publication_state TEXT NOT NULL DEFAULT 'staging' CHECK (publication_state IN ('staging','sealing','published')),\n core_payload BLOB,\n core_digest TEXT CHECK (core_digest IS NULL OR length(core_digest) = 64),\n CHECK ((core_payload IS NULL) = (core_digest IS NULL)),\n PRIMARY KEY (origin_run_id, attempt_id)\n) STRICT;\nCREATE TABLE ne18_members (\n target_run_id TEXT NOT NULL,\n slot_id TEXT NOT NULL,\n origin_run_id TEXT,\n attempt_id TEXT,\n action TEXT NOT NULL CHECK (action IN ('executed','carried','accepted','not-dispatched','interrupted')),\n core_payload BLOB NOT NULL,\n core_digest TEXT NOT NULL CHECK (length(core_digest) = 64),\n PRIMARY KEY (target_run_id, slot_id),\n CHECK (\n (action IN ('executed','carried','accepted') AND origin_run_id IS NOT NULL AND attempt_id IS NOT NULL) OR\n (action IN ('not-dispatched','interrupted') AND origin_run_id IS NULL AND attempt_id IS NULL)\n ),\n FOREIGN KEY (target_run_id, slot_id) REFERENCES ne18_slots(run_id, slot_id) ON DELETE CASCADE\n) STRICT;\nCREATE TABLE ne18_attachments (\n attachment_id TEXT PRIMARY KEY,\n owner_kind TEXT NOT NULL CHECK (owner_kind IN ('run','attempt')),\n owner_run_id TEXT NOT NULL REFERENCES ne18_runs(run_id) ON DELETE CASCADE,\n owner_attempt_id TEXT,\n family TEXT NOT NULL,\n family_revision INTEGER NOT NULL CHECK (family_revision > 0),\n logical_identity TEXT,\n canonical_payload BLOB,\n canonical_digest TEXT CHECK (canonical_digest IS NULL OR length(canonical_digest) = 64),\n logical_inventory BLOB,\n inventory_digest TEXT CHECK (inventory_digest IS NULL OR length(inventory_digest) = 64),\n CHECK ((canonical_payload IS NULL) = (canonical_digest IS NULL)),\n CHECK ((logical_inventory IS NULL) = (inventory_digest IS NULL)),\n CHECK ((owner_kind = 'run' AND owner_attempt_id IS NULL) OR (owner_kind = 'attempt' AND owner_attempt_id IS NOT NULL)),\n UNIQUE (owner_kind, owner_run_id, owner_attempt_id, family),\n FOREIGN KEY (owner_run_id, owner_attempt_id) REFERENCES ne18_attempts(origin_run_id, attempt_id) ON DELETE CASCADE\n) STRICT;\nCREATE TABLE ne18_attachment_references (\n attachment_id TEXT NOT NULL REFERENCES ne18_attachments(attachment_id) ON DELETE CASCADE,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n target_owner_kind TEXT NOT NULL CHECK (target_owner_kind IN ('run','attempt')),\n target_family TEXT NOT NULL,\n canonical_payload BLOB NOT NULL,\n reference_digest TEXT NOT NULL CHECK (length(reference_digest) = 64),\n PRIMARY KEY (attachment_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_collection_items (\n attachment_id TEXT NOT NULL REFERENCES ne18_attachments(attachment_id) ON DELETE CASCADE,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n logical_identity TEXT NOT NULL,\n canonical_payload BLOB NOT NULL,\n canonical_digest TEXT NOT NULL CHECK (length(canonical_digest) = 64),\n PRIMARY KEY (attachment_id, ordinal),\n UNIQUE (attachment_id, logical_identity)\n) STRICT;\nCREATE TABLE ne18_contents (\n content_id TEXT PRIMARY KEY,\n attachment_id TEXT NOT NULL REFERENCES ne18_attachments(attachment_id) ON DELETE CASCADE,\n logical_handle TEXT NOT NULL,\n byte_length INTEGER CHECK (byte_length IS NULL OR byte_length >= 0),\n overall_digest TEXT CHECK (overall_digest IS NULL OR length(overall_digest) = 64),\n chunk_count INTEGER CHECK (chunk_count IS NULL OR chunk_count >= 0),\n CHECK ((byte_length IS NULL) = (overall_digest IS NULL) AND (overall_digest IS NULL) = (chunk_count IS NULL)),\n UNIQUE (attachment_id, logical_handle)\n) STRICT;\nCREATE TABLE ne18_content_chunks (\n content_id TEXT NOT NULL REFERENCES ne18_contents(content_id) ON DELETE CASCADE,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n bytes BLOB NOT NULL CHECK (length(bytes) <= 262144),\n chunk_digest TEXT NOT NULL CHECK (length(chunk_digest) = 64),\n PRIMARY KEY (content_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_run_seal_entries (\n run_id TEXT NOT NULL REFERENCES ne18_runs(run_id) ON DELETE CASCADE,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n entry_kind TEXT NOT NULL CHECK (entry_kind IN ('record','run','slot','member','attempt','attachment','attachment-reference','collection-item','content','content-chunk')),\n logical_identity TEXT NOT NULL,\n digest TEXT NOT NULL CHECK (length(digest) = 64),\n PRIMARY KEY (run_id, ordinal),\n UNIQUE (run_id, entry_kind, logical_identity)\n) STRICT;\nCREATE INDEX ne18_attachments_owner_family ON ne18_attachments(owner_kind, owner_run_id, owner_attempt_id, family);\nCREATE UNIQUE INDEX ne18_attachments_owner_family_unique ON ne18_attachments(owner_kind, owner_run_id, coalesce(owner_attempt_id,''), family);\nCREATE INDEX ne18_members_origin_attempt ON ne18_members(origin_run_id, attempt_id, target_run_id);\nCREATE INDEX ne18_attempts_locator ON ne18_attempts(attempt_locator, origin_run_id, attempt_id);\nCREATE INDEX ne18_references_target_family ON ne18_attachment_references(target_owner_kind, target_family);\nCREATE INDEX ne18_content_chunks_page ON ne18_content_chunks(content_id, ordinal);\nCREATE INDEX ne18_coordination_tickets_fifo ON ne18_coordination_tickets(sequence);\nCREATE TRIGGER ne18_coordination_ticket_barrier_insert BEFORE INSERT ON ne18_coordination_tickets WHEN (SELECT barrier_state FROM ne18_record_metadata WHERE singleton=1)!='open' BEGIN SELECT RAISE(ABORT, 'ProjectDatabase writer barrier is not open'); END;\nCREATE TRIGGER ne18_coordination_writer_barrier_update BEFORE UPDATE ON ne18_coordination_state WHEN NEW.writer_ticket_id IS NOT NULL AND (SELECT barrier_state FROM ne18_record_metadata WHERE singleton=1)!='open' BEGIN SELECT RAISE(ABORT, 'ProjectDatabase writer barrier is not open'); END;\nCREATE TRIGGER ne18_runs_sealed_update BEFORE UPDATE ON ne18_runs WHEN OLD.status = 'sealed' BEGIN SELECT RAISE(ABORT, 'sealed run is immutable'); END;\nCREATE TRIGGER ne18_runs_sealed_delete BEFORE DELETE ON ne18_runs WHEN OLD.status = 'sealed' BEGIN SELECT RAISE(ABORT, 'sealed run is immutable'); END;\nCREATE TRIGGER ne18_slots_sealed_insert BEFORE INSERT ON ne18_slots WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_slots_sealed_update BEFORE UPDATE ON ne18_slots WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_slots_sealed_delete BEFORE DELETE ON ne18_slots WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attempts_sealed_insert BEFORE INSERT ON ne18_attempts WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.origin_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attempts_sealed_update BEFORE UPDATE ON ne18_attempts WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.origin_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attempts_sealed_delete BEFORE DELETE ON ne18_attempts WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.origin_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_members_sealed_insert BEFORE INSERT ON ne18_members WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.target_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_members_sealed_update BEFORE UPDATE ON ne18_members WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.target_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_members_sealed_delete BEFORE DELETE ON ne18_members WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.target_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attachments_sealed_insert BEFORE INSERT ON ne18_attachments WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.owner_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attachments_attempt_published_insert BEFORE INSERT ON ne18_attachments WHEN NEW.owner_kind='attempt' AND (SELECT publication_state FROM ne18_attempts WHERE origin_run_id=NEW.owner_run_id AND attempt_id=NEW.owner_attempt_id)='published' BEGIN SELECT RAISE(ABORT, 'published attempt is immutable'); END;\nCREATE TRIGGER ne18_attachments_sealed_update BEFORE UPDATE ON ne18_attachments WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.owner_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attachments_attempt_published_update BEFORE UPDATE ON ne18_attachments WHEN OLD.owner_kind='attempt' AND (SELECT publication_state FROM ne18_attempts WHERE origin_run_id=OLD.owner_run_id AND attempt_id=OLD.owner_attempt_id)='published' BEGIN SELECT RAISE(ABORT, 'published attempt is immutable'); END;\nCREATE TRIGGER ne18_attachments_sealed_delete BEFORE DELETE ON ne18_attachments WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.owner_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attachments_attempt_published_delete BEFORE DELETE ON ne18_attachments WHEN OLD.owner_kind='attempt' AND (SELECT publication_state FROM ne18_attempts WHERE origin_run_id=OLD.owner_run_id AND attempt_id=OLD.owner_attempt_id)='published' BEGIN SELECT RAISE(ABORT, 'published attempt is immutable'); END;\nCREATE TRIGGER ne18_references_sealed_insert BEFORE INSERT ON ne18_attachment_references WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=NEW.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_references_sealed_update BEFORE UPDATE ON ne18_attachment_references WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_references_sealed_delete BEFORE DELETE ON ne18_attachment_references WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_items_sealed_insert BEFORE INSERT ON ne18_collection_items WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=NEW.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_items_sealed_update BEFORE UPDATE ON ne18_collection_items WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_items_sealed_delete BEFORE DELETE ON ne18_collection_items WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_contents_sealed_insert BEFORE INSERT ON ne18_contents WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=NEW.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_contents_sealed_update BEFORE UPDATE ON ne18_contents WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_contents_sealed_delete BEFORE DELETE ON ne18_contents WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_chunks_sealed_insert BEFORE INSERT ON ne18_content_chunks WHEN (SELECT r.status FROM ne18_contents c JOIN ne18_attachments a ON a.attachment_id=c.attachment_id JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE c.content_id=NEW.content_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_chunks_sealed_update BEFORE UPDATE ON ne18_content_chunks WHEN (SELECT r.status FROM ne18_contents c JOIN ne18_attachments a ON a.attachment_id=c.attachment_id JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE c.content_id=OLD.content_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_chunks_sealed_delete BEFORE DELETE ON ne18_content_chunks WHEN (SELECT r.status FROM ne18_contents c JOIN ne18_attachments a ON a.attachment_id=c.attachment_id JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE c.content_id=OLD.content_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_seal_entries_sealed_insert BEFORE INSERT ON ne18_run_seal_entries WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.run_id) != 'sealing' BEGIN SELECT RAISE(ABORT, 'Seal candidates require sealing state'); END;\nCREATE TRIGGER ne18_seal_entries_sealed_update BEFORE UPDATE ON ne18_run_seal_entries BEGIN SELECT RAISE(ABORT, 'Seal entries are immutable'); END;\nCREATE TRIGGER ne18_seal_entries_sealed_delete BEFORE DELETE ON ne18_run_seal_entries WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'Seal entries are immutable'); END;\n\n\nCREATE TABLE ne18_run_publication_clock (\n singleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n revision INTEGER NOT NULL CHECK (revision >= 0)\n) STRICT;\nCREATE TABLE ne18_run_resources (\n run_id TEXT PRIMARY KEY,\n invocation_id TEXT NOT NULL,\n experiment_id TEXT NOT NULL,\n started_at TEXT NOT NULL,\n initial_writer_generation TEXT NOT NULL,\n current_writer_generation TEXT NOT NULL,\n terminal_state TEXT CHECK (terminal_state IS NULL OR terminal_state IN ('completed','interrupted','failed')),\n completed_at TEXT,\n created_revision INTEGER NOT NULL UNIQUE CHECK (created_revision > 0),\n close_revision INTEGER UNIQUE CHECK (close_revision IS NULL OR close_revision > created_revision),\n CHECK ((terminal_state IS NULL) = (completed_at IS NULL)),\n CHECK ((terminal_state IS NULL) = (close_revision IS NULL))\n) STRICT;\nCREATE TABLE ne18_run_expected_slots (\n run_id TEXT NOT NULL REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n slot_id TEXT NOT NULL,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n eval_id TEXT NOT NULL,\n attempt_ordinal INTEGER NOT NULL CHECK (attempt_ordinal >= 0),\n execution_identity_digest TEXT NOT NULL CHECK (length(execution_identity_digest) = 64),\n PRIMARY KEY (run_id, slot_id),\n UNIQUE (run_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_attempt_publications (\n attempt_id TEXT PRIMARY KEY,\n attempt_locator TEXT NOT NULL CHECK (length(attempt_locator) = 14 AND substr(attempt_locator,1,2) = '@1'),\n origin_run_id TEXT NOT NULL,\n origin_slot_id TEXT NOT NULL,\n closure_payload BLOB NOT NULL,\n closure_digest TEXT NOT NULL CHECK (length(closure_digest) = 64),\n published_revision INTEGER NOT NULL UNIQUE CHECK (published_revision > 0),\n FOREIGN KEY (origin_run_id, origin_slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT\n) STRICT;\nCREATE TABLE ne18_run_slot_bindings (\n target_run_id TEXT NOT NULL,\n slot_id TEXT NOT NULL,\n attempt_id TEXT NOT NULL REFERENCES ne18_attempt_publications(attempt_id) ON DELETE RESTRICT,\n origin_run_id TEXT NOT NULL,\n origin_slot_id TEXT NOT NULL,\n attempt_publication_revision INTEGER NOT NULL CHECK (attempt_publication_revision > 0),\n action TEXT NOT NULL CHECK (action IN ('executed','carried','accepted')),\n binding_revision INTEGER NOT NULL UNIQUE CHECK (binding_revision > 0),\n PRIMARY KEY (target_run_id, slot_id),\n FOREIGN KEY (target_run_id, slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT,\n FOREIGN KEY (origin_run_id, origin_slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT\n) STRICT;\nCREATE TABLE ne18_run_slot_absences (\n run_id TEXT NOT NULL,\n slot_id TEXT NOT NULL,\n reason TEXT NOT NULL CHECK (reason IN ('early-exit-satisfied','budget-exhausted','stopped-by-failure','interrupted-before-publication','dispatch-failed')),\n absence_revision INTEGER NOT NULL CHECK (absence_revision > 0),\n PRIMARY KEY (run_id, slot_id),\n FOREIGN KEY (run_id, slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT\n) STRICT;\nCREATE TABLE ne18_run_recoveries (\n run_id TEXT PRIMARY KEY REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n previous_writer_generation TEXT NOT NULL,\n recovery_writer_generation TEXT NOT NULL,\n evidence_kind TEXT NOT NULL,\n evidence_identity TEXT NOT NULL,\n evidence_observed_at TEXT NOT NULL,\n recovery_revision INTEGER NOT NULL UNIQUE CHECK (recovery_revision > 0)\n) STRICT;\nCREATE TABLE ne18_run_deletion_tombstones (\n run_id TEXT PRIMARY KEY REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n terminal_state TEXT NOT NULL CHECK (terminal_state IN ('completed','interrupted','failed')),\n deleted_at TEXT NOT NULL,\n deletion_revision INTEGER NOT NULL UNIQUE CHECK (deletion_revision > 0)\n) STRICT;\nCREATE INDEX ne18_run_resources_list ON ne18_run_resources(created_revision, run_id);\nCREATE INDEX ne18_run_resources_invocation ON ne18_run_resources(invocation_id, created_revision, run_id);\nCREATE INDEX ne18_attempt_publications_origin ON ne18_attempt_publications(origin_run_id, origin_slot_id);\nCREATE INDEX ne18_attempt_publications_locator ON ne18_attempt_publications(attempt_locator, origin_run_id, attempt_id);\nCREATE INDEX ne18_run_slot_bindings_attempt ON ne18_run_slot_bindings(attempt_id, target_run_id, slot_id);\nCREATE INDEX ne18_run_deletion_revision ON ne18_run_deletion_tombstones(deletion_revision, run_id);\nINSERT INTO ne18_run_publication_clock(singleton,revision) VALUES (1,0);\n\n\nCREATE TABLE ne18_invocation_sessions (\n invocation_id TEXT PRIMARY KEY,\n state TEXT NOT NULL CHECK (state IN ('active','recovering','completed','interrupted','failed')),\n owner_id TEXT NOT NULL,\n owner_generation INTEGER NOT NULL CHECK (owner_generation > 0),\n owner_host TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_boot_id TEXT NOT NULL,\n owner_process_start TEXT NOT NULL,\n started_at TEXT NOT NULL,\n heartbeat_at TEXT NOT NULL,\n active_projection BLOB,\n recovering_at TEXT,\n closed_at TEXT,\n terminal_projection BLOB,\n CHECK ((state IN ('completed','interrupted','failed')) = (closed_at IS NOT NULL)),\n CHECK ((state IN ('completed','interrupted','failed')) = (terminal_projection IS NOT NULL)),\n CHECK (state IN ('active','recovering') OR active_projection IS NULL),\n CHECK ((state = 'recovering') = (recovering_at IS NOT NULL))\n) STRICT;\nCREATE TABLE ne18_invocation_session_experiments (\n invocation_id TEXT NOT NULL REFERENCES ne18_invocation_sessions(invocation_id) ON DELETE RESTRICT,\n experiment_id TEXT NOT NULL,\n run_id TEXT NOT NULL UNIQUE REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n PRIMARY KEY (invocation_id, experiment_id),\n UNIQUE (invocation_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_invocation_session_queued_attempts (\n invocation_id TEXT NOT NULL REFERENCES ne18_invocation_sessions(invocation_id) ON DELETE RESTRICT,\n attempt_id TEXT NOT NULL,\n run_id TEXT NOT NULL REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n slot_id TEXT NOT NULL,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n PRIMARY KEY (invocation_id, attempt_id),\n UNIQUE (invocation_id, ordinal),\n FOREIGN KEY (run_id, slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT\n) STRICT;\nCREATE TABLE ne18_case_locks (\n case_id TEXT PRIMARY KEY,\n owner_id TEXT NOT NULL,\n owner_generation INTEGER NOT NULL CHECK (owner_generation > 0),\n owner_host TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_boot_id TEXT NOT NULL,\n owner_process_start TEXT NOT NULL,\n acquired_at TEXT NOT NULL,\n heartbeat_at TEXT NOT NULL\n) STRICT;\nCREATE INDEX ne18_invocation_sessions_state ON ne18_invocation_sessions(state, started_at, invocation_id);\nCREATE INDEX ne18_invocation_session_experiments_invocation ON ne18_invocation_session_experiments(invocation_id, ordinal);\nCREATE INDEX ne18_invocation_session_queued_attempts_run ON ne18_invocation_session_queued_attempts(run_id, slot_id);\nCREATE INDEX ne18_case_locks_owner ON ne18_case_locks(owner_id, owner_generation);\nCREATE TABLE ne18_teardown_obligations (\n obligation_id TEXT PRIMARY KEY,\n experiment_id TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_host TEXT NOT NULL,\n generation INTEGER NOT NULL DEFAULT 1 CHECK (generation > 0),\n payload BLOB NOT NULL,\n UNIQUE (experiment_id, owner_pid)\n) STRICT;\nCREATE TABLE ne18_shared_state_generations (\n state_key TEXT NOT NULL,\n generation INTEGER NOT NULL CHECK (generation > 0),\n parent_generation INTEGER NOT NULL CHECK (parent_generation >= 0),\n state_kind TEXT NOT NULL CHECK (state_kind IN ('active','recovering','free')),\n owner_token TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_host TEXT NOT NULL,\n owner_process_identity TEXT NOT NULL,\n heartbeat_at TEXT NOT NULL,\n payload BLOB NOT NULL,\n PRIMARY KEY (state_key, generation),\n CHECK (parent_generation = generation - 1)\n) STRICT;\nCREATE TABLE ne18_kept_sandboxes (\n entry_id TEXT PRIMARY KEY,\n provider TEXT NOT NULL,\n sandbox_id TEXT NOT NULL,\n kept_at TEXT NOT NULL,\n operation_generation INTEGER NOT NULL DEFAULT 0 CHECK (operation_generation >= 0),\n payload BLOB NOT NULL,\n UNIQUE (provider, sandbox_id)\n) STRICT;\nCREATE TABLE ne18_kept_sandbox_operation_leases (\n entry_id TEXT PRIMARY KEY REFERENCES ne18_kept_sandboxes(entry_id) ON DELETE CASCADE,\n generation INTEGER NOT NULL CHECK (generation > 0),\n token TEXT NOT NULL,\n holder TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_host TEXT NOT NULL,\n owner_process_identity TEXT NOT NULL,\n operation TEXT NOT NULL,\n acquired_at TEXT NOT NULL,\n ttl_ms INTEGER NOT NULL CHECK (ttl_ms > 0)\n) STRICT;\nCREATE INDEX ne18_teardown_obligations_experiment ON ne18_teardown_obligations(experiment_id, owner_pid);\nCREATE INDEX ne18_shared_state_generations_head ON ne18_shared_state_generations(state_key, generation DESC);\nCREATE INDEX ne18_kept_sandboxes_kept_at ON ne18_kept_sandboxes(kept_at, entry_id);\n\n\nCREATE TABLE ne18_migration_state (\n singleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n state TEXT NOT NULL CHECK (state IN ('committed','ready')),\n source_format TEXT,\n source_digest TEXT CHECK (source_digest IS NULL OR length(source_digest) = 64),\n CHECK ((source_format IS NULL) = (source_digest IS NULL)),\n CHECK (state != 'committed' OR source_format IS NOT NULL)\n) STRICT;";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Exact current ProjectDatabase 0.18 schema
|
|
3
|
-
*
|
|
4
|
-
*
|
|
2
|
+
* Exact current ProjectDatabase 0.18 schema, independent of frozen historical
|
|
3
|
+
* baselines. Keep these bytes stable within this format: they own its fingerprint.
|
|
4
|
+
* The disjoint namespace fences writers prepared against the 0.17 tables.
|
|
5
5
|
*/
|
|
6
|
-
export declare const RECORD_SQLITE_BASELINE_SQL: string;
|
|
6
|
+
export declare const RECORD_SQLITE_BASELINE_SQL = "\nCREATE TABLE ne18_record_metadata (\n singleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n format TEXT NOT NULL,\n storage_revision INTEGER NOT NULL CHECK (storage_revision > 0),\n storage_generation TEXT NOT NULL,\n schema_fingerprint TEXT NOT NULL CHECK (length(schema_fingerprint) = 64),\n created_at TEXT NOT NULL,\n barrier_state TEXT NOT NULL CHECK (barrier_state IN ('open','draining','portable')),\n portable_generation TEXT,\n portable_revision INTEGER CHECK (portable_revision IS NULL OR portable_revision >= 0),\n portable_gate_id TEXT,\n record_payload BLOB,\n record_digest TEXT,\n CHECK ((record_payload IS NULL) = (record_digest IS NULL)),\n CHECK (record_digest IS NULL OR length(record_digest) = 64),\n CHECK ((barrier_state = 'portable') = (portable_generation IS NOT NULL)),\n CHECK ((barrier_state = 'portable') = (portable_revision IS NOT NULL)),\n CHECK ((barrier_state = 'open') = (portable_gate_id IS NULL))\n) STRICT;\nCREATE TABLE ne18_coordination_state (\n singleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n revision INTEGER NOT NULL CHECK (revision >= 0),\n operational_generation TEXT NOT NULL,\n next_writer_sequence INTEGER NOT NULL CHECK (next_writer_sequence > 0),\n writer_ticket_id TEXT,\n writer_sequence INTEGER CHECK (writer_sequence IS NULL OR writer_sequence > 0),\n writer_host TEXT,\n writer_pid INTEGER CHECK (writer_pid IS NULL OR writer_pid > 0),\n writer_boot_id TEXT,\n writer_process_start TEXT,\n writer_deadline INTEGER CHECK (writer_deadline IS NULL OR writer_deadline > 0),\n writer_enqueued_at INTEGER CHECK (writer_enqueued_at IS NULL OR writer_enqueued_at > 0),\n writer_nonce TEXT,\n writer_admitted_at INTEGER CHECK (writer_admitted_at IS NULL OR writer_admitted_at > 0),\n writer_lease_expires_at INTEGER CHECK (writer_lease_expires_at IS NULL OR writer_lease_expires_at > 0),\n barrier_id TEXT,\n barrier_nonce TEXT,\n barrier_host TEXT,\n barrier_pid INTEGER CHECK (barrier_pid IS NULL OR barrier_pid > 0),\n barrier_boot_id TEXT,\n barrier_process_start TEXT,\n barrier_deadline INTEGER CHECK (barrier_deadline IS NULL OR barrier_deadline > 0),\n barrier_requested_at INTEGER CHECK (barrier_requested_at IS NULL OR barrier_requested_at > 0),\n barrier_lease_expires_at INTEGER CHECK (barrier_lease_expires_at IS NULL OR barrier_lease_expires_at > 0),\n barrier_status TEXT CHECK (barrier_status IS NULL OR barrier_status IN ('requested','active')),\n barrier_active_at INTEGER CHECK (barrier_active_at IS NULL OR barrier_active_at > 0),\n CHECK ((writer_ticket_id IS NULL) = (writer_sequence IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_host IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_pid IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_boot_id IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_process_start IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_deadline IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_enqueued_at IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_nonce IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_admitted_at IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_lease_expires_at IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_nonce IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_host IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_pid IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_boot_id IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_process_start IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_deadline IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_requested_at IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_lease_expires_at IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_status IS NULL)),\n CHECK (\n (barrier_status IS NULL AND barrier_active_at IS NULL) OR\n (barrier_status = 'requested' AND barrier_active_at IS NULL) OR\n (barrier_status = 'active' AND barrier_active_at IS NOT NULL)\n )\n) STRICT;\nCREATE TABLE ne18_coordination_tickets (\n ticket_id TEXT PRIMARY KEY,\n sequence INTEGER NOT NULL UNIQUE CHECK (sequence > 0),\n host TEXT NOT NULL,\n pid INTEGER NOT NULL CHECK (pid > 0),\n boot_id TEXT NOT NULL,\n process_start TEXT NOT NULL,\n deadline INTEGER NOT NULL CHECK (deadline > 0),\n enqueued_at INTEGER NOT NULL CHECK (enqueued_at > 0)\n) STRICT;\nCREATE TABLE ne18_runs (\n run_id TEXT PRIMARY KEY,\n status TEXT NOT NULL CHECK (status IN ('open','sealing','sealed')),\n writer_generation TEXT NOT NULL,\n started_at TEXT NOT NULL,\n core_payload BLOB,\n core_digest TEXT CHECK (core_digest IS NULL OR length(core_digest) = 64),\n mutation_sequence INTEGER NOT NULL DEFAULT 0 CHECK (mutation_sequence >= 0),\n candidate_seal_identity TEXT CHECK (candidate_seal_identity IS NULL OR length(candidate_seal_identity) = 64),\n candidate_seal_entry_count INTEGER CHECK (candidate_seal_entry_count IS NULL OR candidate_seal_entry_count >= 0),\n candidate_seal_staged_count INTEGER NOT NULL DEFAULT 0 CHECK (candidate_seal_staged_count >= 0),\n logical_seal_identity TEXT,\n CHECK ((core_payload IS NULL) = (core_digest IS NULL)),\n CHECK ((candidate_seal_identity IS NULL) = (candidate_seal_entry_count IS NULL)),\n CHECK ((status = 'open') = (candidate_seal_identity IS NULL)),\n CHECK (candidate_seal_entry_count IS NULL OR candidate_seal_staged_count <= candidate_seal_entry_count),\n CHECK (status != 'open' OR candidate_seal_staged_count = 0),\n CHECK ((status = 'sealed') = (logical_seal_identity IS NOT NULL)),\n CHECK (status = 'open' OR core_payload IS NOT NULL)\n) STRICT;\nCREATE TABLE ne18_slots (\n run_id TEXT NOT NULL REFERENCES ne18_runs(run_id) ON DELETE CASCADE,\n slot_id TEXT NOT NULL,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n core_payload BLOB NOT NULL,\n core_digest TEXT NOT NULL CHECK (length(core_digest) = 64),\n PRIMARY KEY (run_id, slot_id),\n UNIQUE (run_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_attempts (\n origin_run_id TEXT NOT NULL REFERENCES ne18_runs(run_id) ON DELETE CASCADE,\n attempt_id TEXT NOT NULL,\n attempt_locator TEXT NOT NULL CHECK (length(attempt_locator) = 14 AND substr(attempt_locator,1,2) = '@1'),\n publication_state TEXT NOT NULL DEFAULT 'staging' CHECK (publication_state IN ('staging','sealing','published')),\n core_payload BLOB,\n core_digest TEXT CHECK (core_digest IS NULL OR length(core_digest) = 64),\n CHECK ((core_payload IS NULL) = (core_digest IS NULL)),\n PRIMARY KEY (origin_run_id, attempt_id)\n) STRICT;\nCREATE TABLE ne18_members (\n target_run_id TEXT NOT NULL,\n slot_id TEXT NOT NULL,\n origin_run_id TEXT,\n attempt_id TEXT,\n action TEXT NOT NULL CHECK (action IN ('executed','carried','accepted','not-dispatched','interrupted')),\n core_payload BLOB NOT NULL,\n core_digest TEXT NOT NULL CHECK (length(core_digest) = 64),\n PRIMARY KEY (target_run_id, slot_id),\n CHECK (\n (action IN ('executed','carried','accepted') AND origin_run_id IS NOT NULL AND attempt_id IS NOT NULL) OR\n (action IN ('not-dispatched','interrupted') AND origin_run_id IS NULL AND attempt_id IS NULL)\n ),\n FOREIGN KEY (target_run_id, slot_id) REFERENCES ne18_slots(run_id, slot_id) ON DELETE CASCADE\n) STRICT;\nCREATE TABLE ne18_attachments (\n attachment_id TEXT PRIMARY KEY,\n owner_kind TEXT NOT NULL CHECK (owner_kind IN ('run','attempt')),\n owner_run_id TEXT NOT NULL REFERENCES ne18_runs(run_id) ON DELETE CASCADE,\n owner_attempt_id TEXT,\n family TEXT NOT NULL,\n family_revision INTEGER NOT NULL CHECK (family_revision > 0),\n logical_identity TEXT,\n canonical_payload BLOB,\n canonical_digest TEXT CHECK (canonical_digest IS NULL OR length(canonical_digest) = 64),\n logical_inventory BLOB,\n inventory_digest TEXT CHECK (inventory_digest IS NULL OR length(inventory_digest) = 64),\n CHECK ((canonical_payload IS NULL) = (canonical_digest IS NULL)),\n CHECK ((logical_inventory IS NULL) = (inventory_digest IS NULL)),\n CHECK ((owner_kind = 'run' AND owner_attempt_id IS NULL) OR (owner_kind = 'attempt' AND owner_attempt_id IS NOT NULL)),\n UNIQUE (owner_kind, owner_run_id, owner_attempt_id, family),\n FOREIGN KEY (owner_run_id, owner_attempt_id) REFERENCES ne18_attempts(origin_run_id, attempt_id) ON DELETE CASCADE\n) STRICT;\nCREATE TABLE ne18_attachment_references (\n attachment_id TEXT NOT NULL REFERENCES ne18_attachments(attachment_id) ON DELETE CASCADE,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n target_owner_kind TEXT NOT NULL CHECK (target_owner_kind IN ('run','attempt')),\n target_family TEXT NOT NULL,\n canonical_payload BLOB NOT NULL,\n reference_digest TEXT NOT NULL CHECK (length(reference_digest) = 64),\n PRIMARY KEY (attachment_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_collection_items (\n attachment_id TEXT NOT NULL REFERENCES ne18_attachments(attachment_id) ON DELETE CASCADE,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n logical_identity TEXT NOT NULL,\n canonical_payload BLOB NOT NULL,\n canonical_digest TEXT NOT NULL CHECK (length(canonical_digest) = 64),\n PRIMARY KEY (attachment_id, ordinal),\n UNIQUE (attachment_id, logical_identity)\n) STRICT;\nCREATE TABLE ne18_contents (\n content_id TEXT PRIMARY KEY,\n attachment_id TEXT NOT NULL REFERENCES ne18_attachments(attachment_id) ON DELETE CASCADE,\n logical_handle TEXT NOT NULL,\n byte_length INTEGER CHECK (byte_length IS NULL OR byte_length >= 0),\n overall_digest TEXT CHECK (overall_digest IS NULL OR length(overall_digest) = 64),\n chunk_count INTEGER CHECK (chunk_count IS NULL OR chunk_count >= 0),\n CHECK ((byte_length IS NULL) = (overall_digest IS NULL) AND (overall_digest IS NULL) = (chunk_count IS NULL)),\n UNIQUE (attachment_id, logical_handle)\n) STRICT;\nCREATE TABLE ne18_content_chunks (\n content_id TEXT NOT NULL REFERENCES ne18_contents(content_id) ON DELETE CASCADE,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n bytes BLOB NOT NULL CHECK (length(bytes) <= 262144),\n chunk_digest TEXT NOT NULL CHECK (length(chunk_digest) = 64),\n PRIMARY KEY (content_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_run_seal_entries (\n run_id TEXT NOT NULL REFERENCES ne18_runs(run_id) ON DELETE CASCADE,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n entry_kind TEXT NOT NULL CHECK (entry_kind IN ('record','run','slot','member','attempt','attachment','attachment-reference','collection-item','content','content-chunk')),\n logical_identity TEXT NOT NULL,\n digest TEXT NOT NULL CHECK (length(digest) = 64),\n PRIMARY KEY (run_id, ordinal),\n UNIQUE (run_id, entry_kind, logical_identity)\n) STRICT;\nCREATE INDEX ne18_attachments_owner_family ON ne18_attachments(owner_kind, owner_run_id, owner_attempt_id, family);\nCREATE UNIQUE INDEX ne18_attachments_owner_family_unique ON ne18_attachments(owner_kind, owner_run_id, coalesce(owner_attempt_id,''), family);\nCREATE INDEX ne18_members_origin_attempt ON ne18_members(origin_run_id, attempt_id, target_run_id);\nCREATE INDEX ne18_attempts_locator ON ne18_attempts(attempt_locator, origin_run_id, attempt_id);\nCREATE INDEX ne18_references_target_family ON ne18_attachment_references(target_owner_kind, target_family);\nCREATE INDEX ne18_content_chunks_page ON ne18_content_chunks(content_id, ordinal);\nCREATE INDEX ne18_coordination_tickets_fifo ON ne18_coordination_tickets(sequence);\nCREATE TRIGGER ne18_coordination_ticket_barrier_insert BEFORE INSERT ON ne18_coordination_tickets WHEN (SELECT barrier_state FROM ne18_record_metadata WHERE singleton=1)!='open' BEGIN SELECT RAISE(ABORT, 'ProjectDatabase writer barrier is not open'); END;\nCREATE TRIGGER ne18_coordination_writer_barrier_update BEFORE UPDATE ON ne18_coordination_state WHEN NEW.writer_ticket_id IS NOT NULL AND (SELECT barrier_state FROM ne18_record_metadata WHERE singleton=1)!='open' BEGIN SELECT RAISE(ABORT, 'ProjectDatabase writer barrier is not open'); END;\nCREATE TRIGGER ne18_runs_sealed_update BEFORE UPDATE ON ne18_runs WHEN OLD.status = 'sealed' BEGIN SELECT RAISE(ABORT, 'sealed run is immutable'); END;\nCREATE TRIGGER ne18_runs_sealed_delete BEFORE DELETE ON ne18_runs WHEN OLD.status = 'sealed' BEGIN SELECT RAISE(ABORT, 'sealed run is immutable'); END;\nCREATE TRIGGER ne18_slots_sealed_insert BEFORE INSERT ON ne18_slots WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_slots_sealed_update BEFORE UPDATE ON ne18_slots WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_slots_sealed_delete BEFORE DELETE ON ne18_slots WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attempts_sealed_insert BEFORE INSERT ON ne18_attempts WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.origin_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attempts_sealed_update BEFORE UPDATE ON ne18_attempts WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.origin_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attempts_sealed_delete BEFORE DELETE ON ne18_attempts WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.origin_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_members_sealed_insert BEFORE INSERT ON ne18_members WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.target_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_members_sealed_update BEFORE UPDATE ON ne18_members WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.target_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_members_sealed_delete BEFORE DELETE ON ne18_members WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.target_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attachments_sealed_insert BEFORE INSERT ON ne18_attachments WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.owner_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attachments_attempt_published_insert BEFORE INSERT ON ne18_attachments WHEN NEW.owner_kind='attempt' AND (SELECT publication_state FROM ne18_attempts WHERE origin_run_id=NEW.owner_run_id AND attempt_id=NEW.owner_attempt_id)='published' BEGIN SELECT RAISE(ABORT, 'published attempt is immutable'); END;\nCREATE TRIGGER ne18_attachments_sealed_update BEFORE UPDATE ON ne18_attachments WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.owner_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attachments_attempt_published_update BEFORE UPDATE ON ne18_attachments WHEN OLD.owner_kind='attempt' AND (SELECT publication_state FROM ne18_attempts WHERE origin_run_id=OLD.owner_run_id AND attempt_id=OLD.owner_attempt_id)='published' BEGIN SELECT RAISE(ABORT, 'published attempt is immutable'); END;\nCREATE TRIGGER ne18_attachments_sealed_delete BEFORE DELETE ON ne18_attachments WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.owner_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attachments_attempt_published_delete BEFORE DELETE ON ne18_attachments WHEN OLD.owner_kind='attempt' AND (SELECT publication_state FROM ne18_attempts WHERE origin_run_id=OLD.owner_run_id AND attempt_id=OLD.owner_attempt_id)='published' BEGIN SELECT RAISE(ABORT, 'published attempt is immutable'); END;\nCREATE TRIGGER ne18_references_sealed_insert BEFORE INSERT ON ne18_attachment_references WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=NEW.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_references_sealed_update BEFORE UPDATE ON ne18_attachment_references WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_references_sealed_delete BEFORE DELETE ON ne18_attachment_references WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_items_sealed_insert BEFORE INSERT ON ne18_collection_items WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=NEW.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_items_sealed_update BEFORE UPDATE ON ne18_collection_items WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_items_sealed_delete BEFORE DELETE ON ne18_collection_items WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_contents_sealed_insert BEFORE INSERT ON ne18_contents WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=NEW.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_contents_sealed_update BEFORE UPDATE ON ne18_contents WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_contents_sealed_delete BEFORE DELETE ON ne18_contents WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_chunks_sealed_insert BEFORE INSERT ON ne18_content_chunks WHEN (SELECT r.status FROM ne18_contents c JOIN ne18_attachments a ON a.attachment_id=c.attachment_id JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE c.content_id=NEW.content_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_chunks_sealed_update BEFORE UPDATE ON ne18_content_chunks WHEN (SELECT r.status FROM ne18_contents c JOIN ne18_attachments a ON a.attachment_id=c.attachment_id JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE c.content_id=OLD.content_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_chunks_sealed_delete BEFORE DELETE ON ne18_content_chunks WHEN (SELECT r.status FROM ne18_contents c JOIN ne18_attachments a ON a.attachment_id=c.attachment_id JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE c.content_id=OLD.content_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_seal_entries_sealed_insert BEFORE INSERT ON ne18_run_seal_entries WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.run_id) != 'sealing' BEGIN SELECT RAISE(ABORT, 'Seal candidates require sealing state'); END;\nCREATE TRIGGER ne18_seal_entries_sealed_update BEFORE UPDATE ON ne18_run_seal_entries BEGIN SELECT RAISE(ABORT, 'Seal entries are immutable'); END;\nCREATE TRIGGER ne18_seal_entries_sealed_delete BEFORE DELETE ON ne18_run_seal_entries WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'Seal entries are immutable'); END;\n\n\nCREATE TABLE ne18_run_publication_clock (\n singleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n revision INTEGER NOT NULL CHECK (revision >= 0)\n) STRICT;\nCREATE TABLE ne18_run_resources (\n run_id TEXT PRIMARY KEY,\n invocation_id TEXT NOT NULL,\n experiment_id TEXT NOT NULL,\n started_at TEXT NOT NULL,\n initial_writer_generation TEXT NOT NULL,\n current_writer_generation TEXT NOT NULL,\n terminal_state TEXT CHECK (terminal_state IS NULL OR terminal_state IN ('completed','interrupted','failed')),\n completed_at TEXT,\n created_revision INTEGER NOT NULL UNIQUE CHECK (created_revision > 0),\n close_revision INTEGER UNIQUE CHECK (close_revision IS NULL OR close_revision > created_revision),\n CHECK ((terminal_state IS NULL) = (completed_at IS NULL)),\n CHECK ((terminal_state IS NULL) = (close_revision IS NULL))\n) STRICT;\nCREATE TABLE ne18_run_expected_slots (\n run_id TEXT NOT NULL REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n slot_id TEXT NOT NULL,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n eval_id TEXT NOT NULL,\n attempt_ordinal INTEGER NOT NULL CHECK (attempt_ordinal >= 0),\n execution_identity_digest TEXT NOT NULL CHECK (length(execution_identity_digest) = 64),\n PRIMARY KEY (run_id, slot_id),\n UNIQUE (run_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_attempt_publications (\n attempt_id TEXT PRIMARY KEY,\n attempt_locator TEXT NOT NULL CHECK (length(attempt_locator) = 14 AND substr(attempt_locator,1,2) = '@1'),\n origin_run_id TEXT NOT NULL,\n origin_slot_id TEXT NOT NULL,\n closure_payload BLOB NOT NULL,\n closure_digest TEXT NOT NULL CHECK (length(closure_digest) = 64),\n published_revision INTEGER NOT NULL UNIQUE CHECK (published_revision > 0),\n FOREIGN KEY (origin_run_id, origin_slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT\n) STRICT;\nCREATE TABLE ne18_run_slot_bindings (\n target_run_id TEXT NOT NULL,\n slot_id TEXT NOT NULL,\n attempt_id TEXT NOT NULL REFERENCES ne18_attempt_publications(attempt_id) ON DELETE RESTRICT,\n origin_run_id TEXT NOT NULL,\n origin_slot_id TEXT NOT NULL,\n attempt_publication_revision INTEGER NOT NULL CHECK (attempt_publication_revision > 0),\n action TEXT NOT NULL CHECK (action IN ('executed','carried','accepted')),\n binding_revision INTEGER NOT NULL UNIQUE CHECK (binding_revision > 0),\n PRIMARY KEY (target_run_id, slot_id),\n FOREIGN KEY (target_run_id, slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT,\n FOREIGN KEY (origin_run_id, origin_slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT\n) STRICT;\nCREATE TABLE ne18_run_slot_absences (\n run_id TEXT NOT NULL,\n slot_id TEXT NOT NULL,\n reason TEXT NOT NULL CHECK (reason IN ('early-exit-satisfied','budget-exhausted','stopped-by-failure','interrupted-before-publication','dispatch-failed')),\n absence_revision INTEGER NOT NULL CHECK (absence_revision > 0),\n PRIMARY KEY (run_id, slot_id),\n FOREIGN KEY (run_id, slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT\n) STRICT;\nCREATE TABLE ne18_run_recoveries (\n run_id TEXT PRIMARY KEY REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n previous_writer_generation TEXT NOT NULL,\n recovery_writer_generation TEXT NOT NULL,\n evidence_kind TEXT NOT NULL,\n evidence_identity TEXT NOT NULL,\n evidence_observed_at TEXT NOT NULL,\n recovery_revision INTEGER NOT NULL UNIQUE CHECK (recovery_revision > 0)\n) STRICT;\nCREATE TABLE ne18_run_deletion_tombstones (\n run_id TEXT PRIMARY KEY REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n terminal_state TEXT NOT NULL CHECK (terminal_state IN ('completed','interrupted','failed')),\n deleted_at TEXT NOT NULL,\n deletion_revision INTEGER NOT NULL UNIQUE CHECK (deletion_revision > 0)\n) STRICT;\nCREATE INDEX ne18_run_resources_list ON ne18_run_resources(created_revision, run_id);\nCREATE INDEX ne18_run_resources_invocation ON ne18_run_resources(invocation_id, created_revision, run_id);\nCREATE INDEX ne18_attempt_publications_origin ON ne18_attempt_publications(origin_run_id, origin_slot_id);\nCREATE INDEX ne18_attempt_publications_locator ON ne18_attempt_publications(attempt_locator, origin_run_id, attempt_id);\nCREATE INDEX ne18_run_slot_bindings_attempt ON ne18_run_slot_bindings(attempt_id, target_run_id, slot_id);\nCREATE INDEX ne18_run_deletion_revision ON ne18_run_deletion_tombstones(deletion_revision, run_id);\nINSERT INTO ne18_run_publication_clock(singleton,revision) VALUES (1,0);\n\n\nCREATE TABLE ne18_invocation_sessions (\n invocation_id TEXT PRIMARY KEY,\n state TEXT NOT NULL CHECK (state IN ('active','recovering','completed','interrupted','failed')),\n owner_id TEXT NOT NULL,\n owner_generation INTEGER NOT NULL CHECK (owner_generation > 0),\n owner_host TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_boot_id TEXT NOT NULL,\n owner_process_start TEXT NOT NULL,\n started_at TEXT NOT NULL,\n heartbeat_at TEXT NOT NULL,\n active_projection BLOB,\n recovering_at TEXT,\n closed_at TEXT,\n terminal_projection BLOB,\n CHECK ((state IN ('completed','interrupted','failed')) = (closed_at IS NOT NULL)),\n CHECK ((state IN ('completed','interrupted','failed')) = (terminal_projection IS NOT NULL)),\n CHECK (state IN ('active','recovering') OR active_projection IS NULL),\n CHECK ((state = 'recovering') = (recovering_at IS NOT NULL))\n) STRICT;\nCREATE TABLE ne18_invocation_session_experiments (\n invocation_id TEXT NOT NULL REFERENCES ne18_invocation_sessions(invocation_id) ON DELETE RESTRICT,\n experiment_id TEXT NOT NULL,\n run_id TEXT NOT NULL UNIQUE REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n PRIMARY KEY (invocation_id, experiment_id),\n UNIQUE (invocation_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_invocation_session_queued_attempts (\n invocation_id TEXT NOT NULL REFERENCES ne18_invocation_sessions(invocation_id) ON DELETE RESTRICT,\n attempt_id TEXT NOT NULL,\n run_id TEXT NOT NULL REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n slot_id TEXT NOT NULL,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n PRIMARY KEY (invocation_id, attempt_id),\n UNIQUE (invocation_id, ordinal),\n FOREIGN KEY (run_id, slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT\n) STRICT;\nCREATE TABLE ne18_case_locks (\n case_id TEXT PRIMARY KEY,\n owner_id TEXT NOT NULL,\n owner_generation INTEGER NOT NULL CHECK (owner_generation > 0),\n owner_host TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_boot_id TEXT NOT NULL,\n owner_process_start TEXT NOT NULL,\n acquired_at TEXT NOT NULL,\n heartbeat_at TEXT NOT NULL\n) STRICT;\nCREATE INDEX ne18_invocation_sessions_state ON ne18_invocation_sessions(state, started_at, invocation_id);\nCREATE INDEX ne18_invocation_session_experiments_invocation ON ne18_invocation_session_experiments(invocation_id, ordinal);\nCREATE INDEX ne18_invocation_session_queued_attempts_run ON ne18_invocation_session_queued_attempts(run_id, slot_id);\nCREATE INDEX ne18_case_locks_owner ON ne18_case_locks(owner_id, owner_generation);\nCREATE TABLE ne18_teardown_obligations (\n obligation_id TEXT PRIMARY KEY,\n experiment_id TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_host TEXT NOT NULL,\n generation INTEGER NOT NULL DEFAULT 1 CHECK (generation > 0),\n payload BLOB NOT NULL,\n UNIQUE (experiment_id, owner_pid)\n) STRICT;\nCREATE TABLE ne18_shared_state_generations (\n state_key TEXT NOT NULL,\n generation INTEGER NOT NULL CHECK (generation > 0),\n parent_generation INTEGER NOT NULL CHECK (parent_generation >= 0),\n state_kind TEXT NOT NULL CHECK (state_kind IN ('active','recovering','free')),\n owner_token TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_host TEXT NOT NULL,\n owner_process_identity TEXT NOT NULL,\n heartbeat_at TEXT NOT NULL,\n payload BLOB NOT NULL,\n PRIMARY KEY (state_key, generation),\n CHECK (parent_generation = generation - 1)\n) STRICT;\nCREATE TABLE ne18_kept_sandboxes (\n entry_id TEXT PRIMARY KEY,\n provider TEXT NOT NULL,\n sandbox_id TEXT NOT NULL,\n kept_at TEXT NOT NULL,\n operation_generation INTEGER NOT NULL DEFAULT 0 CHECK (operation_generation >= 0),\n payload BLOB NOT NULL,\n UNIQUE (provider, sandbox_id)\n) STRICT;\nCREATE TABLE ne18_kept_sandbox_operation_leases (\n entry_id TEXT PRIMARY KEY REFERENCES ne18_kept_sandboxes(entry_id) ON DELETE CASCADE,\n generation INTEGER NOT NULL CHECK (generation > 0),\n token TEXT NOT NULL,\n holder TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_host TEXT NOT NULL,\n owner_process_identity TEXT NOT NULL,\n operation TEXT NOT NULL,\n acquired_at TEXT NOT NULL,\n ttl_ms INTEGER NOT NULL CHECK (ttl_ms > 0)\n) STRICT;\nCREATE INDEX ne18_teardown_obligations_experiment ON ne18_teardown_obligations(experiment_id, owner_pid);\nCREATE INDEX ne18_shared_state_generations_head ON ne18_shared_state_generations(state_key, generation DESC);\nCREATE INDEX ne18_kept_sandboxes_kept_at ON ne18_kept_sandboxes(kept_at, entry_id);\n\n\nCREATE TABLE ne18_migration_state (\n singleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n state TEXT NOT NULL CHECK (state IN ('committed','ready')),\n source_format TEXT,\n source_digest TEXT CHECK (source_digest IS NULL OR length(source_digest) = 64),\n CHECK ((source_format IS NULL) = (source_digest IS NULL)),\n CHECK (state != 'committed' OR source_format IS NOT NULL)\n) STRICT;";
|
|
@@ -10,7 +10,7 @@ export declare const RECORD_SQLITE_LEGACY_BASELINE_SQL = "\nCREATE TABLE record_
|
|
|
10
10
|
export declare const RECORD_SQLITE_LEGACY_TABLE_NAMES: readonly ["record_metadata", "coordination_state", "coordination_tickets", "runs", "slots", "attempts", "members", "attachments", "attachment_references", "collection_items", "contents", "content_chunks", "run_seal_entries", "run_publication_clock", "run_resources", "run_expected_slots", "attempt_publications", "run_slot_bindings", "run_slot_absences", "run_recoveries", "run_deletion_tombstones", "invocation_sessions", "invocation_session_experiments", "invocation_session_queued_attempts", "case_locks", "teardown_obligations", "shared_state_generations", "kept_sandboxes", "kept_sandbox_operation_leases"];
|
|
11
11
|
/** Complete fixed table allowlist for the historical 0.17 `ne_` namespace. */
|
|
12
12
|
export declare const RECORD_SQLITE_017_TABLE_NAMES: readonly ["ne_record_metadata", "ne_coordination_state", "ne_coordination_tickets", "ne_runs", "ne_slots", "ne_attempts", "ne_members", "ne_attachments", "ne_attachment_references", "ne_collection_items", "ne_contents", "ne_content_chunks", "ne_run_seal_entries", "ne_run_publication_clock", "ne_run_resources", "ne_run_expected_slots", "ne_attempt_publications", "ne_run_slot_bindings", "ne_run_slot_absences", "ne_run_recoveries", "ne_run_deletion_tombstones", "ne_invocation_sessions", "ne_invocation_session_experiments", "ne_invocation_session_queued_attempts", "ne_case_locks", "ne_teardown_obligations", "ne_shared_state_generations", "ne_kept_sandboxes", "ne_kept_sandbox_operation_leases", "ne_migration_state"];
|
|
13
|
-
export declare const RECORD_SQLITE_SCHEMA_SQL: string;
|
|
13
|
+
export declare const RECORD_SQLITE_SCHEMA_SQL = "\nCREATE TABLE ne18_record_metadata (\n singleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n format TEXT NOT NULL,\n storage_revision INTEGER NOT NULL CHECK (storage_revision > 0),\n storage_generation TEXT NOT NULL,\n schema_fingerprint TEXT NOT NULL CHECK (length(schema_fingerprint) = 64),\n created_at TEXT NOT NULL,\n barrier_state TEXT NOT NULL CHECK (barrier_state IN ('open','draining','portable')),\n portable_generation TEXT,\n portable_revision INTEGER CHECK (portable_revision IS NULL OR portable_revision >= 0),\n portable_gate_id TEXT,\n record_payload BLOB,\n record_digest TEXT,\n CHECK ((record_payload IS NULL) = (record_digest IS NULL)),\n CHECK (record_digest IS NULL OR length(record_digest) = 64),\n CHECK ((barrier_state = 'portable') = (portable_generation IS NOT NULL)),\n CHECK ((barrier_state = 'portable') = (portable_revision IS NOT NULL)),\n CHECK ((barrier_state = 'open') = (portable_gate_id IS NULL))\n) STRICT;\nCREATE TABLE ne18_coordination_state (\n singleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n revision INTEGER NOT NULL CHECK (revision >= 0),\n operational_generation TEXT NOT NULL,\n next_writer_sequence INTEGER NOT NULL CHECK (next_writer_sequence > 0),\n writer_ticket_id TEXT,\n writer_sequence INTEGER CHECK (writer_sequence IS NULL OR writer_sequence > 0),\n writer_host TEXT,\n writer_pid INTEGER CHECK (writer_pid IS NULL OR writer_pid > 0),\n writer_boot_id TEXT,\n writer_process_start TEXT,\n writer_deadline INTEGER CHECK (writer_deadline IS NULL OR writer_deadline > 0),\n writer_enqueued_at INTEGER CHECK (writer_enqueued_at IS NULL OR writer_enqueued_at > 0),\n writer_nonce TEXT,\n writer_admitted_at INTEGER CHECK (writer_admitted_at IS NULL OR writer_admitted_at > 0),\n writer_lease_expires_at INTEGER CHECK (writer_lease_expires_at IS NULL OR writer_lease_expires_at > 0),\n barrier_id TEXT,\n barrier_nonce TEXT,\n barrier_host TEXT,\n barrier_pid INTEGER CHECK (barrier_pid IS NULL OR barrier_pid > 0),\n barrier_boot_id TEXT,\n barrier_process_start TEXT,\n barrier_deadline INTEGER CHECK (barrier_deadline IS NULL OR barrier_deadline > 0),\n barrier_requested_at INTEGER CHECK (barrier_requested_at IS NULL OR barrier_requested_at > 0),\n barrier_lease_expires_at INTEGER CHECK (barrier_lease_expires_at IS NULL OR barrier_lease_expires_at > 0),\n barrier_status TEXT CHECK (barrier_status IS NULL OR barrier_status IN ('requested','active')),\n barrier_active_at INTEGER CHECK (barrier_active_at IS NULL OR barrier_active_at > 0),\n CHECK ((writer_ticket_id IS NULL) = (writer_sequence IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_host IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_pid IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_boot_id IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_process_start IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_deadline IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_enqueued_at IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_nonce IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_admitted_at IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_lease_expires_at IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_nonce IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_host IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_pid IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_boot_id IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_process_start IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_deadline IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_requested_at IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_lease_expires_at IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_status IS NULL)),\n CHECK (\n (barrier_status IS NULL AND barrier_active_at IS NULL) OR\n (barrier_status = 'requested' AND barrier_active_at IS NULL) OR\n (barrier_status = 'active' AND barrier_active_at IS NOT NULL)\n )\n) STRICT;\nCREATE TABLE ne18_coordination_tickets (\n ticket_id TEXT PRIMARY KEY,\n sequence INTEGER NOT NULL UNIQUE CHECK (sequence > 0),\n host TEXT NOT NULL,\n pid INTEGER NOT NULL CHECK (pid > 0),\n boot_id TEXT NOT NULL,\n process_start TEXT NOT NULL,\n deadline INTEGER NOT NULL CHECK (deadline > 0),\n enqueued_at INTEGER NOT NULL CHECK (enqueued_at > 0)\n) STRICT;\nCREATE TABLE ne18_runs (\n run_id TEXT PRIMARY KEY,\n status TEXT NOT NULL CHECK (status IN ('open','sealing','sealed')),\n writer_generation TEXT NOT NULL,\n started_at TEXT NOT NULL,\n core_payload BLOB,\n core_digest TEXT CHECK (core_digest IS NULL OR length(core_digest) = 64),\n mutation_sequence INTEGER NOT NULL DEFAULT 0 CHECK (mutation_sequence >= 0),\n candidate_seal_identity TEXT CHECK (candidate_seal_identity IS NULL OR length(candidate_seal_identity) = 64),\n candidate_seal_entry_count INTEGER CHECK (candidate_seal_entry_count IS NULL OR candidate_seal_entry_count >= 0),\n candidate_seal_staged_count INTEGER NOT NULL DEFAULT 0 CHECK (candidate_seal_staged_count >= 0),\n logical_seal_identity TEXT,\n CHECK ((core_payload IS NULL) = (core_digest IS NULL)),\n CHECK ((candidate_seal_identity IS NULL) = (candidate_seal_entry_count IS NULL)),\n CHECK ((status = 'open') = (candidate_seal_identity IS NULL)),\n CHECK (candidate_seal_entry_count IS NULL OR candidate_seal_staged_count <= candidate_seal_entry_count),\n CHECK (status != 'open' OR candidate_seal_staged_count = 0),\n CHECK ((status = 'sealed') = (logical_seal_identity IS NOT NULL)),\n CHECK (status = 'open' OR core_payload IS NOT NULL)\n) STRICT;\nCREATE TABLE ne18_slots (\n run_id TEXT NOT NULL REFERENCES ne18_runs(run_id) ON DELETE CASCADE,\n slot_id TEXT NOT NULL,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n core_payload BLOB NOT NULL,\n core_digest TEXT NOT NULL CHECK (length(core_digest) = 64),\n PRIMARY KEY (run_id, slot_id),\n UNIQUE (run_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_attempts (\n origin_run_id TEXT NOT NULL REFERENCES ne18_runs(run_id) ON DELETE CASCADE,\n attempt_id TEXT NOT NULL,\n attempt_locator TEXT NOT NULL CHECK (length(attempt_locator) = 14 AND substr(attempt_locator,1,2) = '@1'),\n publication_state TEXT NOT NULL DEFAULT 'staging' CHECK (publication_state IN ('staging','sealing','published')),\n core_payload BLOB,\n core_digest TEXT CHECK (core_digest IS NULL OR length(core_digest) = 64),\n CHECK ((core_payload IS NULL) = (core_digest IS NULL)),\n PRIMARY KEY (origin_run_id, attempt_id)\n) STRICT;\nCREATE TABLE ne18_members (\n target_run_id TEXT NOT NULL,\n slot_id TEXT NOT NULL,\n origin_run_id TEXT,\n attempt_id TEXT,\n action TEXT NOT NULL CHECK (action IN ('executed','carried','accepted','not-dispatched','interrupted')),\n core_payload BLOB NOT NULL,\n core_digest TEXT NOT NULL CHECK (length(core_digest) = 64),\n PRIMARY KEY (target_run_id, slot_id),\n CHECK (\n (action IN ('executed','carried','accepted') AND origin_run_id IS NOT NULL AND attempt_id IS NOT NULL) OR\n (action IN ('not-dispatched','interrupted') AND origin_run_id IS NULL AND attempt_id IS NULL)\n ),\n FOREIGN KEY (target_run_id, slot_id) REFERENCES ne18_slots(run_id, slot_id) ON DELETE CASCADE\n) STRICT;\nCREATE TABLE ne18_attachments (\n attachment_id TEXT PRIMARY KEY,\n owner_kind TEXT NOT NULL CHECK (owner_kind IN ('run','attempt')),\n owner_run_id TEXT NOT NULL REFERENCES ne18_runs(run_id) ON DELETE CASCADE,\n owner_attempt_id TEXT,\n family TEXT NOT NULL,\n family_revision INTEGER NOT NULL CHECK (family_revision > 0),\n logical_identity TEXT,\n canonical_payload BLOB,\n canonical_digest TEXT CHECK (canonical_digest IS NULL OR length(canonical_digest) = 64),\n logical_inventory BLOB,\n inventory_digest TEXT CHECK (inventory_digest IS NULL OR length(inventory_digest) = 64),\n CHECK ((canonical_payload IS NULL) = (canonical_digest IS NULL)),\n CHECK ((logical_inventory IS NULL) = (inventory_digest IS NULL)),\n CHECK ((owner_kind = 'run' AND owner_attempt_id IS NULL) OR (owner_kind = 'attempt' AND owner_attempt_id IS NOT NULL)),\n UNIQUE (owner_kind, owner_run_id, owner_attempt_id, family),\n FOREIGN KEY (owner_run_id, owner_attempt_id) REFERENCES ne18_attempts(origin_run_id, attempt_id) ON DELETE CASCADE\n) STRICT;\nCREATE TABLE ne18_attachment_references (\n attachment_id TEXT NOT NULL REFERENCES ne18_attachments(attachment_id) ON DELETE CASCADE,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n target_owner_kind TEXT NOT NULL CHECK (target_owner_kind IN ('run','attempt')),\n target_family TEXT NOT NULL,\n canonical_payload BLOB NOT NULL,\n reference_digest TEXT NOT NULL CHECK (length(reference_digest) = 64),\n PRIMARY KEY (attachment_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_collection_items (\n attachment_id TEXT NOT NULL REFERENCES ne18_attachments(attachment_id) ON DELETE CASCADE,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n logical_identity TEXT NOT NULL,\n canonical_payload BLOB NOT NULL,\n canonical_digest TEXT NOT NULL CHECK (length(canonical_digest) = 64),\n PRIMARY KEY (attachment_id, ordinal),\n UNIQUE (attachment_id, logical_identity)\n) STRICT;\nCREATE TABLE ne18_contents (\n content_id TEXT PRIMARY KEY,\n attachment_id TEXT NOT NULL REFERENCES ne18_attachments(attachment_id) ON DELETE CASCADE,\n logical_handle TEXT NOT NULL,\n byte_length INTEGER CHECK (byte_length IS NULL OR byte_length >= 0),\n overall_digest TEXT CHECK (overall_digest IS NULL OR length(overall_digest) = 64),\n chunk_count INTEGER CHECK (chunk_count IS NULL OR chunk_count >= 0),\n CHECK ((byte_length IS NULL) = (overall_digest IS NULL) AND (overall_digest IS NULL) = (chunk_count IS NULL)),\n UNIQUE (attachment_id, logical_handle)\n) STRICT;\nCREATE TABLE ne18_content_chunks (\n content_id TEXT NOT NULL REFERENCES ne18_contents(content_id) ON DELETE CASCADE,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n bytes BLOB NOT NULL CHECK (length(bytes) <= 262144),\n chunk_digest TEXT NOT NULL CHECK (length(chunk_digest) = 64),\n PRIMARY KEY (content_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_run_seal_entries (\n run_id TEXT NOT NULL REFERENCES ne18_runs(run_id) ON DELETE CASCADE,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n entry_kind TEXT NOT NULL CHECK (entry_kind IN ('record','run','slot','member','attempt','attachment','attachment-reference','collection-item','content','content-chunk')),\n logical_identity TEXT NOT NULL,\n digest TEXT NOT NULL CHECK (length(digest) = 64),\n PRIMARY KEY (run_id, ordinal),\n UNIQUE (run_id, entry_kind, logical_identity)\n) STRICT;\nCREATE INDEX ne18_attachments_owner_family ON ne18_attachments(owner_kind, owner_run_id, owner_attempt_id, family);\nCREATE UNIQUE INDEX ne18_attachments_owner_family_unique ON ne18_attachments(owner_kind, owner_run_id, coalesce(owner_attempt_id,''), family);\nCREATE INDEX ne18_members_origin_attempt ON ne18_members(origin_run_id, attempt_id, target_run_id);\nCREATE INDEX ne18_attempts_locator ON ne18_attempts(attempt_locator, origin_run_id, attempt_id);\nCREATE INDEX ne18_references_target_family ON ne18_attachment_references(target_owner_kind, target_family);\nCREATE INDEX ne18_content_chunks_page ON ne18_content_chunks(content_id, ordinal);\nCREATE INDEX ne18_coordination_tickets_fifo ON ne18_coordination_tickets(sequence);\nCREATE TRIGGER ne18_coordination_ticket_barrier_insert BEFORE INSERT ON ne18_coordination_tickets WHEN (SELECT barrier_state FROM ne18_record_metadata WHERE singleton=1)!='open' BEGIN SELECT RAISE(ABORT, 'ProjectDatabase writer barrier is not open'); END;\nCREATE TRIGGER ne18_coordination_writer_barrier_update BEFORE UPDATE ON ne18_coordination_state WHEN NEW.writer_ticket_id IS NOT NULL AND (SELECT barrier_state FROM ne18_record_metadata WHERE singleton=1)!='open' BEGIN SELECT RAISE(ABORT, 'ProjectDatabase writer barrier is not open'); END;\nCREATE TRIGGER ne18_runs_sealed_update BEFORE UPDATE ON ne18_runs WHEN OLD.status = 'sealed' BEGIN SELECT RAISE(ABORT, 'sealed run is immutable'); END;\nCREATE TRIGGER ne18_runs_sealed_delete BEFORE DELETE ON ne18_runs WHEN OLD.status = 'sealed' BEGIN SELECT RAISE(ABORT, 'sealed run is immutable'); END;\nCREATE TRIGGER ne18_slots_sealed_insert BEFORE INSERT ON ne18_slots WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_slots_sealed_update BEFORE UPDATE ON ne18_slots WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_slots_sealed_delete BEFORE DELETE ON ne18_slots WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attempts_sealed_insert BEFORE INSERT ON ne18_attempts WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.origin_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attempts_sealed_update BEFORE UPDATE ON ne18_attempts WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.origin_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attempts_sealed_delete BEFORE DELETE ON ne18_attempts WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.origin_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_members_sealed_insert BEFORE INSERT ON ne18_members WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.target_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_members_sealed_update BEFORE UPDATE ON ne18_members WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.target_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_members_sealed_delete BEFORE DELETE ON ne18_members WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.target_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attachments_sealed_insert BEFORE INSERT ON ne18_attachments WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.owner_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attachments_attempt_published_insert BEFORE INSERT ON ne18_attachments WHEN NEW.owner_kind='attempt' AND (SELECT publication_state FROM ne18_attempts WHERE origin_run_id=NEW.owner_run_id AND attempt_id=NEW.owner_attempt_id)='published' BEGIN SELECT RAISE(ABORT, 'published attempt is immutable'); END;\nCREATE TRIGGER ne18_attachments_sealed_update BEFORE UPDATE ON ne18_attachments WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.owner_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attachments_attempt_published_update BEFORE UPDATE ON ne18_attachments WHEN OLD.owner_kind='attempt' AND (SELECT publication_state FROM ne18_attempts WHERE origin_run_id=OLD.owner_run_id AND attempt_id=OLD.owner_attempt_id)='published' BEGIN SELECT RAISE(ABORT, 'published attempt is immutable'); END;\nCREATE TRIGGER ne18_attachments_sealed_delete BEFORE DELETE ON ne18_attachments WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.owner_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attachments_attempt_published_delete BEFORE DELETE ON ne18_attachments WHEN OLD.owner_kind='attempt' AND (SELECT publication_state FROM ne18_attempts WHERE origin_run_id=OLD.owner_run_id AND attempt_id=OLD.owner_attempt_id)='published' BEGIN SELECT RAISE(ABORT, 'published attempt is immutable'); END;\nCREATE TRIGGER ne18_references_sealed_insert BEFORE INSERT ON ne18_attachment_references WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=NEW.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_references_sealed_update BEFORE UPDATE ON ne18_attachment_references WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_references_sealed_delete BEFORE DELETE ON ne18_attachment_references WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_items_sealed_insert BEFORE INSERT ON ne18_collection_items WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=NEW.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_items_sealed_update BEFORE UPDATE ON ne18_collection_items WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_items_sealed_delete BEFORE DELETE ON ne18_collection_items WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_contents_sealed_insert BEFORE INSERT ON ne18_contents WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=NEW.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_contents_sealed_update BEFORE UPDATE ON ne18_contents WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_contents_sealed_delete BEFORE DELETE ON ne18_contents WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_chunks_sealed_insert BEFORE INSERT ON ne18_content_chunks WHEN (SELECT r.status FROM ne18_contents c JOIN ne18_attachments a ON a.attachment_id=c.attachment_id JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE c.content_id=NEW.content_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_chunks_sealed_update BEFORE UPDATE ON ne18_content_chunks WHEN (SELECT r.status FROM ne18_contents c JOIN ne18_attachments a ON a.attachment_id=c.attachment_id JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE c.content_id=OLD.content_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_chunks_sealed_delete BEFORE DELETE ON ne18_content_chunks WHEN (SELECT r.status FROM ne18_contents c JOIN ne18_attachments a ON a.attachment_id=c.attachment_id JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE c.content_id=OLD.content_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_seal_entries_sealed_insert BEFORE INSERT ON ne18_run_seal_entries WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.run_id) != 'sealing' BEGIN SELECT RAISE(ABORT, 'Seal candidates require sealing state'); END;\nCREATE TRIGGER ne18_seal_entries_sealed_update BEFORE UPDATE ON ne18_run_seal_entries BEGIN SELECT RAISE(ABORT, 'Seal entries are immutable'); END;\nCREATE TRIGGER ne18_seal_entries_sealed_delete BEFORE DELETE ON ne18_run_seal_entries WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'Seal entries are immutable'); END;\n\n\nCREATE TABLE ne18_run_publication_clock (\n singleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n revision INTEGER NOT NULL CHECK (revision >= 0)\n) STRICT;\nCREATE TABLE ne18_run_resources (\n run_id TEXT PRIMARY KEY,\n invocation_id TEXT NOT NULL,\n experiment_id TEXT NOT NULL,\n started_at TEXT NOT NULL,\n initial_writer_generation TEXT NOT NULL,\n current_writer_generation TEXT NOT NULL,\n terminal_state TEXT CHECK (terminal_state IS NULL OR terminal_state IN ('completed','interrupted','failed')),\n completed_at TEXT,\n created_revision INTEGER NOT NULL UNIQUE CHECK (created_revision > 0),\n close_revision INTEGER UNIQUE CHECK (close_revision IS NULL OR close_revision > created_revision),\n CHECK ((terminal_state IS NULL) = (completed_at IS NULL)),\n CHECK ((terminal_state IS NULL) = (close_revision IS NULL))\n) STRICT;\nCREATE TABLE ne18_run_expected_slots (\n run_id TEXT NOT NULL REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n slot_id TEXT NOT NULL,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n eval_id TEXT NOT NULL,\n attempt_ordinal INTEGER NOT NULL CHECK (attempt_ordinal >= 0),\n execution_identity_digest TEXT NOT NULL CHECK (length(execution_identity_digest) = 64),\n PRIMARY KEY (run_id, slot_id),\n UNIQUE (run_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_attempt_publications (\n attempt_id TEXT PRIMARY KEY,\n attempt_locator TEXT NOT NULL CHECK (length(attempt_locator) = 14 AND substr(attempt_locator,1,2) = '@1'),\n origin_run_id TEXT NOT NULL,\n origin_slot_id TEXT NOT NULL,\n closure_payload BLOB NOT NULL,\n closure_digest TEXT NOT NULL CHECK (length(closure_digest) = 64),\n published_revision INTEGER NOT NULL UNIQUE CHECK (published_revision > 0),\n FOREIGN KEY (origin_run_id, origin_slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT\n) STRICT;\nCREATE TABLE ne18_run_slot_bindings (\n target_run_id TEXT NOT NULL,\n slot_id TEXT NOT NULL,\n attempt_id TEXT NOT NULL REFERENCES ne18_attempt_publications(attempt_id) ON DELETE RESTRICT,\n origin_run_id TEXT NOT NULL,\n origin_slot_id TEXT NOT NULL,\n attempt_publication_revision INTEGER NOT NULL CHECK (attempt_publication_revision > 0),\n action TEXT NOT NULL CHECK (action IN ('executed','carried','accepted')),\n binding_revision INTEGER NOT NULL UNIQUE CHECK (binding_revision > 0),\n PRIMARY KEY (target_run_id, slot_id),\n FOREIGN KEY (target_run_id, slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT,\n FOREIGN KEY (origin_run_id, origin_slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT\n) STRICT;\nCREATE TABLE ne18_run_slot_absences (\n run_id TEXT NOT NULL,\n slot_id TEXT NOT NULL,\n reason TEXT NOT NULL CHECK (reason IN ('early-exit-satisfied','budget-exhausted','stopped-by-failure','interrupted-before-publication','dispatch-failed')),\n absence_revision INTEGER NOT NULL CHECK (absence_revision > 0),\n PRIMARY KEY (run_id, slot_id),\n FOREIGN KEY (run_id, slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT\n) STRICT;\nCREATE TABLE ne18_run_recoveries (\n run_id TEXT PRIMARY KEY REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n previous_writer_generation TEXT NOT NULL,\n recovery_writer_generation TEXT NOT NULL,\n evidence_kind TEXT NOT NULL,\n evidence_identity TEXT NOT NULL,\n evidence_observed_at TEXT NOT NULL,\n recovery_revision INTEGER NOT NULL UNIQUE CHECK (recovery_revision > 0)\n) STRICT;\nCREATE TABLE ne18_run_deletion_tombstones (\n run_id TEXT PRIMARY KEY REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n terminal_state TEXT NOT NULL CHECK (terminal_state IN ('completed','interrupted','failed')),\n deleted_at TEXT NOT NULL,\n deletion_revision INTEGER NOT NULL UNIQUE CHECK (deletion_revision > 0)\n) STRICT;\nCREATE INDEX ne18_run_resources_list ON ne18_run_resources(created_revision, run_id);\nCREATE INDEX ne18_run_resources_invocation ON ne18_run_resources(invocation_id, created_revision, run_id);\nCREATE INDEX ne18_attempt_publications_origin ON ne18_attempt_publications(origin_run_id, origin_slot_id);\nCREATE INDEX ne18_attempt_publications_locator ON ne18_attempt_publications(attempt_locator, origin_run_id, attempt_id);\nCREATE INDEX ne18_run_slot_bindings_attempt ON ne18_run_slot_bindings(attempt_id, target_run_id, slot_id);\nCREATE INDEX ne18_run_deletion_revision ON ne18_run_deletion_tombstones(deletion_revision, run_id);\nINSERT INTO ne18_run_publication_clock(singleton,revision) VALUES (1,0);\n\n\nCREATE TABLE ne18_invocation_sessions (\n invocation_id TEXT PRIMARY KEY,\n state TEXT NOT NULL CHECK (state IN ('active','recovering','completed','interrupted','failed')),\n owner_id TEXT NOT NULL,\n owner_generation INTEGER NOT NULL CHECK (owner_generation > 0),\n owner_host TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_boot_id TEXT NOT NULL,\n owner_process_start TEXT NOT NULL,\n started_at TEXT NOT NULL,\n heartbeat_at TEXT NOT NULL,\n active_projection BLOB,\n recovering_at TEXT,\n closed_at TEXT,\n terminal_projection BLOB,\n CHECK ((state IN ('completed','interrupted','failed')) = (closed_at IS NOT NULL)),\n CHECK ((state IN ('completed','interrupted','failed')) = (terminal_projection IS NOT NULL)),\n CHECK (state IN ('active','recovering') OR active_projection IS NULL),\n CHECK ((state = 'recovering') = (recovering_at IS NOT NULL))\n) STRICT;\nCREATE TABLE ne18_invocation_session_experiments (\n invocation_id TEXT NOT NULL REFERENCES ne18_invocation_sessions(invocation_id) ON DELETE RESTRICT,\n experiment_id TEXT NOT NULL,\n run_id TEXT NOT NULL UNIQUE REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n PRIMARY KEY (invocation_id, experiment_id),\n UNIQUE (invocation_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_invocation_session_queued_attempts (\n invocation_id TEXT NOT NULL REFERENCES ne18_invocation_sessions(invocation_id) ON DELETE RESTRICT,\n attempt_id TEXT NOT NULL,\n run_id TEXT NOT NULL REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n slot_id TEXT NOT NULL,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n PRIMARY KEY (invocation_id, attempt_id),\n UNIQUE (invocation_id, ordinal),\n FOREIGN KEY (run_id, slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT\n) STRICT;\nCREATE TABLE ne18_case_locks (\n case_id TEXT PRIMARY KEY,\n owner_id TEXT NOT NULL,\n owner_generation INTEGER NOT NULL CHECK (owner_generation > 0),\n owner_host TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_boot_id TEXT NOT NULL,\n owner_process_start TEXT NOT NULL,\n acquired_at TEXT NOT NULL,\n heartbeat_at TEXT NOT NULL\n) STRICT;\nCREATE INDEX ne18_invocation_sessions_state ON ne18_invocation_sessions(state, started_at, invocation_id);\nCREATE INDEX ne18_invocation_session_experiments_invocation ON ne18_invocation_session_experiments(invocation_id, ordinal);\nCREATE INDEX ne18_invocation_session_queued_attempts_run ON ne18_invocation_session_queued_attempts(run_id, slot_id);\nCREATE INDEX ne18_case_locks_owner ON ne18_case_locks(owner_id, owner_generation);\nCREATE TABLE ne18_teardown_obligations (\n obligation_id TEXT PRIMARY KEY,\n experiment_id TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_host TEXT NOT NULL,\n generation INTEGER NOT NULL DEFAULT 1 CHECK (generation > 0),\n payload BLOB NOT NULL,\n UNIQUE (experiment_id, owner_pid)\n) STRICT;\nCREATE TABLE ne18_shared_state_generations (\n state_key TEXT NOT NULL,\n generation INTEGER NOT NULL CHECK (generation > 0),\n parent_generation INTEGER NOT NULL CHECK (parent_generation >= 0),\n state_kind TEXT NOT NULL CHECK (state_kind IN ('active','recovering','free')),\n owner_token TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_host TEXT NOT NULL,\n owner_process_identity TEXT NOT NULL,\n heartbeat_at TEXT NOT NULL,\n payload BLOB NOT NULL,\n PRIMARY KEY (state_key, generation),\n CHECK (parent_generation = generation - 1)\n) STRICT;\nCREATE TABLE ne18_kept_sandboxes (\n entry_id TEXT PRIMARY KEY,\n provider TEXT NOT NULL,\n sandbox_id TEXT NOT NULL,\n kept_at TEXT NOT NULL,\n operation_generation INTEGER NOT NULL DEFAULT 0 CHECK (operation_generation >= 0),\n payload BLOB NOT NULL,\n UNIQUE (provider, sandbox_id)\n) STRICT;\nCREATE TABLE ne18_kept_sandbox_operation_leases (\n entry_id TEXT PRIMARY KEY REFERENCES ne18_kept_sandboxes(entry_id) ON DELETE CASCADE,\n generation INTEGER NOT NULL CHECK (generation > 0),\n token TEXT NOT NULL,\n holder TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_host TEXT NOT NULL,\n owner_process_identity TEXT NOT NULL,\n operation TEXT NOT NULL,\n acquired_at TEXT NOT NULL,\n ttl_ms INTEGER NOT NULL CHECK (ttl_ms > 0)\n) STRICT;\nCREATE INDEX ne18_teardown_obligations_experiment ON ne18_teardown_obligations(experiment_id, owner_pid);\nCREATE INDEX ne18_shared_state_generations_head ON ne18_shared_state_generations(state_key, generation DESC);\nCREATE INDEX ne18_kept_sandboxes_kept_at ON ne18_kept_sandboxes(kept_at, entry_id);\n\n\nCREATE TABLE ne18_migration_state (\n singleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n state TEXT NOT NULL CHECK (state IN ('committed','ready')),\n source_format TEXT,\n source_digest TEXT CHECK (source_digest IS NULL OR length(source_digest) = 64),\n CHECK ((source_format IS NULL) = (source_digest IS NULL)),\n CHECK (state != 'committed' OR source_format IS NOT NULL)\n) STRICT;";
|
|
14
14
|
export declare const RECORD_SQLITE_BASELINE_FINGERPRINT: string;
|
|
15
15
|
export declare const RECORD_SQLITE_017_FINGERPRINT: string;
|
|
16
16
|
export declare const RECORD_SQLITE_LEGACY_FINGERPRINTS: Readonly<{
|
|
@@ -10,7 +10,7 @@ export declare const RECORD_SQLITE_LEGACY_BASELINE_SQL = "\nCREATE TABLE record_
|
|
|
10
10
|
export declare const RECORD_SQLITE_LEGACY_TABLE_NAMES: readonly ["record_metadata", "coordination_state", "coordination_tickets", "runs", "slots", "attempts", "members", "attachments", "attachment_references", "collection_items", "contents", "content_chunks", "run_seal_entries", "run_publication_clock", "run_resources", "run_expected_slots", "attempt_publications", "run_slot_bindings", "run_slot_absences", "run_recoveries", "run_deletion_tombstones", "invocation_sessions", "invocation_session_experiments", "invocation_session_queued_attempts", "case_locks", "teardown_obligations", "shared_state_generations", "kept_sandboxes", "kept_sandbox_operation_leases"];
|
|
11
11
|
/** Complete fixed table allowlist for the historical 0.17 `ne_` namespace. */
|
|
12
12
|
export declare const RECORD_SQLITE_017_TABLE_NAMES: readonly ["ne_record_metadata", "ne_coordination_state", "ne_coordination_tickets", "ne_runs", "ne_slots", "ne_attempts", "ne_members", "ne_attachments", "ne_attachment_references", "ne_collection_items", "ne_contents", "ne_content_chunks", "ne_run_seal_entries", "ne_run_publication_clock", "ne_run_resources", "ne_run_expected_slots", "ne_attempt_publications", "ne_run_slot_bindings", "ne_run_slot_absences", "ne_run_recoveries", "ne_run_deletion_tombstones", "ne_invocation_sessions", "ne_invocation_session_experiments", "ne_invocation_session_queued_attempts", "ne_case_locks", "ne_teardown_obligations", "ne_shared_state_generations", "ne_kept_sandboxes", "ne_kept_sandbox_operation_leases", "ne_migration_state"];
|
|
13
|
-
export declare const RECORD_SQLITE_SCHEMA_SQL: string;
|
|
13
|
+
export declare const RECORD_SQLITE_SCHEMA_SQL = "\nCREATE TABLE ne18_record_metadata (\n singleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n format TEXT NOT NULL,\n storage_revision INTEGER NOT NULL CHECK (storage_revision > 0),\n storage_generation TEXT NOT NULL,\n schema_fingerprint TEXT NOT NULL CHECK (length(schema_fingerprint) = 64),\n created_at TEXT NOT NULL,\n barrier_state TEXT NOT NULL CHECK (barrier_state IN ('open','draining','portable')),\n portable_generation TEXT,\n portable_revision INTEGER CHECK (portable_revision IS NULL OR portable_revision >= 0),\n portable_gate_id TEXT,\n record_payload BLOB,\n record_digest TEXT,\n CHECK ((record_payload IS NULL) = (record_digest IS NULL)),\n CHECK (record_digest IS NULL OR length(record_digest) = 64),\n CHECK ((barrier_state = 'portable') = (portable_generation IS NOT NULL)),\n CHECK ((barrier_state = 'portable') = (portable_revision IS NOT NULL)),\n CHECK ((barrier_state = 'open') = (portable_gate_id IS NULL))\n) STRICT;\nCREATE TABLE ne18_coordination_state (\n singleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n revision INTEGER NOT NULL CHECK (revision >= 0),\n operational_generation TEXT NOT NULL,\n next_writer_sequence INTEGER NOT NULL CHECK (next_writer_sequence > 0),\n writer_ticket_id TEXT,\n writer_sequence INTEGER CHECK (writer_sequence IS NULL OR writer_sequence > 0),\n writer_host TEXT,\n writer_pid INTEGER CHECK (writer_pid IS NULL OR writer_pid > 0),\n writer_boot_id TEXT,\n writer_process_start TEXT,\n writer_deadline INTEGER CHECK (writer_deadline IS NULL OR writer_deadline > 0),\n writer_enqueued_at INTEGER CHECK (writer_enqueued_at IS NULL OR writer_enqueued_at > 0),\n writer_nonce TEXT,\n writer_admitted_at INTEGER CHECK (writer_admitted_at IS NULL OR writer_admitted_at > 0),\n writer_lease_expires_at INTEGER CHECK (writer_lease_expires_at IS NULL OR writer_lease_expires_at > 0),\n barrier_id TEXT,\n barrier_nonce TEXT,\n barrier_host TEXT,\n barrier_pid INTEGER CHECK (barrier_pid IS NULL OR barrier_pid > 0),\n barrier_boot_id TEXT,\n barrier_process_start TEXT,\n barrier_deadline INTEGER CHECK (barrier_deadline IS NULL OR barrier_deadline > 0),\n barrier_requested_at INTEGER CHECK (barrier_requested_at IS NULL OR barrier_requested_at > 0),\n barrier_lease_expires_at INTEGER CHECK (barrier_lease_expires_at IS NULL OR barrier_lease_expires_at > 0),\n barrier_status TEXT CHECK (barrier_status IS NULL OR barrier_status IN ('requested','active')),\n barrier_active_at INTEGER CHECK (barrier_active_at IS NULL OR barrier_active_at > 0),\n CHECK ((writer_ticket_id IS NULL) = (writer_sequence IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_host IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_pid IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_boot_id IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_process_start IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_deadline IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_enqueued_at IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_nonce IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_admitted_at IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_lease_expires_at IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_nonce IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_host IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_pid IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_boot_id IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_process_start IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_deadline IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_requested_at IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_lease_expires_at IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_status IS NULL)),\n CHECK (\n (barrier_status IS NULL AND barrier_active_at IS NULL) OR\n (barrier_status = 'requested' AND barrier_active_at IS NULL) OR\n (barrier_status = 'active' AND barrier_active_at IS NOT NULL)\n )\n) STRICT;\nCREATE TABLE ne18_coordination_tickets (\n ticket_id TEXT PRIMARY KEY,\n sequence INTEGER NOT NULL UNIQUE CHECK (sequence > 0),\n host TEXT NOT NULL,\n pid INTEGER NOT NULL CHECK (pid > 0),\n boot_id TEXT NOT NULL,\n process_start TEXT NOT NULL,\n deadline INTEGER NOT NULL CHECK (deadline > 0),\n enqueued_at INTEGER NOT NULL CHECK (enqueued_at > 0)\n) STRICT;\nCREATE TABLE ne18_runs (\n run_id TEXT PRIMARY KEY,\n status TEXT NOT NULL CHECK (status IN ('open','sealing','sealed')),\n writer_generation TEXT NOT NULL,\n started_at TEXT NOT NULL,\n core_payload BLOB,\n core_digest TEXT CHECK (core_digest IS NULL OR length(core_digest) = 64),\n mutation_sequence INTEGER NOT NULL DEFAULT 0 CHECK (mutation_sequence >= 0),\n candidate_seal_identity TEXT CHECK (candidate_seal_identity IS NULL OR length(candidate_seal_identity) = 64),\n candidate_seal_entry_count INTEGER CHECK (candidate_seal_entry_count IS NULL OR candidate_seal_entry_count >= 0),\n candidate_seal_staged_count INTEGER NOT NULL DEFAULT 0 CHECK (candidate_seal_staged_count >= 0),\n logical_seal_identity TEXT,\n CHECK ((core_payload IS NULL) = (core_digest IS NULL)),\n CHECK ((candidate_seal_identity IS NULL) = (candidate_seal_entry_count IS NULL)),\n CHECK ((status = 'open') = (candidate_seal_identity IS NULL)),\n CHECK (candidate_seal_entry_count IS NULL OR candidate_seal_staged_count <= candidate_seal_entry_count),\n CHECK (status != 'open' OR candidate_seal_staged_count = 0),\n CHECK ((status = 'sealed') = (logical_seal_identity IS NOT NULL)),\n CHECK (status = 'open' OR core_payload IS NOT NULL)\n) STRICT;\nCREATE TABLE ne18_slots (\n run_id TEXT NOT NULL REFERENCES ne18_runs(run_id) ON DELETE CASCADE,\n slot_id TEXT NOT NULL,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n core_payload BLOB NOT NULL,\n core_digest TEXT NOT NULL CHECK (length(core_digest) = 64),\n PRIMARY KEY (run_id, slot_id),\n UNIQUE (run_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_attempts (\n origin_run_id TEXT NOT NULL REFERENCES ne18_runs(run_id) ON DELETE CASCADE,\n attempt_id TEXT NOT NULL,\n attempt_locator TEXT NOT NULL CHECK (length(attempt_locator) = 14 AND substr(attempt_locator,1,2) = '@1'),\n publication_state TEXT NOT NULL DEFAULT 'staging' CHECK (publication_state IN ('staging','sealing','published')),\n core_payload BLOB,\n core_digest TEXT CHECK (core_digest IS NULL OR length(core_digest) = 64),\n CHECK ((core_payload IS NULL) = (core_digest IS NULL)),\n PRIMARY KEY (origin_run_id, attempt_id)\n) STRICT;\nCREATE TABLE ne18_members (\n target_run_id TEXT NOT NULL,\n slot_id TEXT NOT NULL,\n origin_run_id TEXT,\n attempt_id TEXT,\n action TEXT NOT NULL CHECK (action IN ('executed','carried','accepted','not-dispatched','interrupted')),\n core_payload BLOB NOT NULL,\n core_digest TEXT NOT NULL CHECK (length(core_digest) = 64),\n PRIMARY KEY (target_run_id, slot_id),\n CHECK (\n (action IN ('executed','carried','accepted') AND origin_run_id IS NOT NULL AND attempt_id IS NOT NULL) OR\n (action IN ('not-dispatched','interrupted') AND origin_run_id IS NULL AND attempt_id IS NULL)\n ),\n FOREIGN KEY (target_run_id, slot_id) REFERENCES ne18_slots(run_id, slot_id) ON DELETE CASCADE\n) STRICT;\nCREATE TABLE ne18_attachments (\n attachment_id TEXT PRIMARY KEY,\n owner_kind TEXT NOT NULL CHECK (owner_kind IN ('run','attempt')),\n owner_run_id TEXT NOT NULL REFERENCES ne18_runs(run_id) ON DELETE CASCADE,\n owner_attempt_id TEXT,\n family TEXT NOT NULL,\n family_revision INTEGER NOT NULL CHECK (family_revision > 0),\n logical_identity TEXT,\n canonical_payload BLOB,\n canonical_digest TEXT CHECK (canonical_digest IS NULL OR length(canonical_digest) = 64),\n logical_inventory BLOB,\n inventory_digest TEXT CHECK (inventory_digest IS NULL OR length(inventory_digest) = 64),\n CHECK ((canonical_payload IS NULL) = (canonical_digest IS NULL)),\n CHECK ((logical_inventory IS NULL) = (inventory_digest IS NULL)),\n CHECK ((owner_kind = 'run' AND owner_attempt_id IS NULL) OR (owner_kind = 'attempt' AND owner_attempt_id IS NOT NULL)),\n UNIQUE (owner_kind, owner_run_id, owner_attempt_id, family),\n FOREIGN KEY (owner_run_id, owner_attempt_id) REFERENCES ne18_attempts(origin_run_id, attempt_id) ON DELETE CASCADE\n) STRICT;\nCREATE TABLE ne18_attachment_references (\n attachment_id TEXT NOT NULL REFERENCES ne18_attachments(attachment_id) ON DELETE CASCADE,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n target_owner_kind TEXT NOT NULL CHECK (target_owner_kind IN ('run','attempt')),\n target_family TEXT NOT NULL,\n canonical_payload BLOB NOT NULL,\n reference_digest TEXT NOT NULL CHECK (length(reference_digest) = 64),\n PRIMARY KEY (attachment_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_collection_items (\n attachment_id TEXT NOT NULL REFERENCES ne18_attachments(attachment_id) ON DELETE CASCADE,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n logical_identity TEXT NOT NULL,\n canonical_payload BLOB NOT NULL,\n canonical_digest TEXT NOT NULL CHECK (length(canonical_digest) = 64),\n PRIMARY KEY (attachment_id, ordinal),\n UNIQUE (attachment_id, logical_identity)\n) STRICT;\nCREATE TABLE ne18_contents (\n content_id TEXT PRIMARY KEY,\n attachment_id TEXT NOT NULL REFERENCES ne18_attachments(attachment_id) ON DELETE CASCADE,\n logical_handle TEXT NOT NULL,\n byte_length INTEGER CHECK (byte_length IS NULL OR byte_length >= 0),\n overall_digest TEXT CHECK (overall_digest IS NULL OR length(overall_digest) = 64),\n chunk_count INTEGER CHECK (chunk_count IS NULL OR chunk_count >= 0),\n CHECK ((byte_length IS NULL) = (overall_digest IS NULL) AND (overall_digest IS NULL) = (chunk_count IS NULL)),\n UNIQUE (attachment_id, logical_handle)\n) STRICT;\nCREATE TABLE ne18_content_chunks (\n content_id TEXT NOT NULL REFERENCES ne18_contents(content_id) ON DELETE CASCADE,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n bytes BLOB NOT NULL CHECK (length(bytes) <= 262144),\n chunk_digest TEXT NOT NULL CHECK (length(chunk_digest) = 64),\n PRIMARY KEY (content_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_run_seal_entries (\n run_id TEXT NOT NULL REFERENCES ne18_runs(run_id) ON DELETE CASCADE,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n entry_kind TEXT NOT NULL CHECK (entry_kind IN ('record','run','slot','member','attempt','attachment','attachment-reference','collection-item','content','content-chunk')),\n logical_identity TEXT NOT NULL,\n digest TEXT NOT NULL CHECK (length(digest) = 64),\n PRIMARY KEY (run_id, ordinal),\n UNIQUE (run_id, entry_kind, logical_identity)\n) STRICT;\nCREATE INDEX ne18_attachments_owner_family ON ne18_attachments(owner_kind, owner_run_id, owner_attempt_id, family);\nCREATE UNIQUE INDEX ne18_attachments_owner_family_unique ON ne18_attachments(owner_kind, owner_run_id, coalesce(owner_attempt_id,''), family);\nCREATE INDEX ne18_members_origin_attempt ON ne18_members(origin_run_id, attempt_id, target_run_id);\nCREATE INDEX ne18_attempts_locator ON ne18_attempts(attempt_locator, origin_run_id, attempt_id);\nCREATE INDEX ne18_references_target_family ON ne18_attachment_references(target_owner_kind, target_family);\nCREATE INDEX ne18_content_chunks_page ON ne18_content_chunks(content_id, ordinal);\nCREATE INDEX ne18_coordination_tickets_fifo ON ne18_coordination_tickets(sequence);\nCREATE TRIGGER ne18_coordination_ticket_barrier_insert BEFORE INSERT ON ne18_coordination_tickets WHEN (SELECT barrier_state FROM ne18_record_metadata WHERE singleton=1)!='open' BEGIN SELECT RAISE(ABORT, 'ProjectDatabase writer barrier is not open'); END;\nCREATE TRIGGER ne18_coordination_writer_barrier_update BEFORE UPDATE ON ne18_coordination_state WHEN NEW.writer_ticket_id IS NOT NULL AND (SELECT barrier_state FROM ne18_record_metadata WHERE singleton=1)!='open' BEGIN SELECT RAISE(ABORT, 'ProjectDatabase writer barrier is not open'); END;\nCREATE TRIGGER ne18_runs_sealed_update BEFORE UPDATE ON ne18_runs WHEN OLD.status = 'sealed' BEGIN SELECT RAISE(ABORT, 'sealed run is immutable'); END;\nCREATE TRIGGER ne18_runs_sealed_delete BEFORE DELETE ON ne18_runs WHEN OLD.status = 'sealed' BEGIN SELECT RAISE(ABORT, 'sealed run is immutable'); END;\nCREATE TRIGGER ne18_slots_sealed_insert BEFORE INSERT ON ne18_slots WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_slots_sealed_update BEFORE UPDATE ON ne18_slots WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_slots_sealed_delete BEFORE DELETE ON ne18_slots WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attempts_sealed_insert BEFORE INSERT ON ne18_attempts WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.origin_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attempts_sealed_update BEFORE UPDATE ON ne18_attempts WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.origin_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attempts_sealed_delete BEFORE DELETE ON ne18_attempts WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.origin_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_members_sealed_insert BEFORE INSERT ON ne18_members WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.target_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_members_sealed_update BEFORE UPDATE ON ne18_members WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.target_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_members_sealed_delete BEFORE DELETE ON ne18_members WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.target_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attachments_sealed_insert BEFORE INSERT ON ne18_attachments WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.owner_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attachments_attempt_published_insert BEFORE INSERT ON ne18_attachments WHEN NEW.owner_kind='attempt' AND (SELECT publication_state FROM ne18_attempts WHERE origin_run_id=NEW.owner_run_id AND attempt_id=NEW.owner_attempt_id)='published' BEGIN SELECT RAISE(ABORT, 'published attempt is immutable'); END;\nCREATE TRIGGER ne18_attachments_sealed_update BEFORE UPDATE ON ne18_attachments WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.owner_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attachments_attempt_published_update BEFORE UPDATE ON ne18_attachments WHEN OLD.owner_kind='attempt' AND (SELECT publication_state FROM ne18_attempts WHERE origin_run_id=OLD.owner_run_id AND attempt_id=OLD.owner_attempt_id)='published' BEGIN SELECT RAISE(ABORT, 'published attempt is immutable'); END;\nCREATE TRIGGER ne18_attachments_sealed_delete BEFORE DELETE ON ne18_attachments WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.owner_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attachments_attempt_published_delete BEFORE DELETE ON ne18_attachments WHEN OLD.owner_kind='attempt' AND (SELECT publication_state FROM ne18_attempts WHERE origin_run_id=OLD.owner_run_id AND attempt_id=OLD.owner_attempt_id)='published' BEGIN SELECT RAISE(ABORT, 'published attempt is immutable'); END;\nCREATE TRIGGER ne18_references_sealed_insert BEFORE INSERT ON ne18_attachment_references WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=NEW.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_references_sealed_update BEFORE UPDATE ON ne18_attachment_references WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_references_sealed_delete BEFORE DELETE ON ne18_attachment_references WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_items_sealed_insert BEFORE INSERT ON ne18_collection_items WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=NEW.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_items_sealed_update BEFORE UPDATE ON ne18_collection_items WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_items_sealed_delete BEFORE DELETE ON ne18_collection_items WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_contents_sealed_insert BEFORE INSERT ON ne18_contents WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=NEW.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_contents_sealed_update BEFORE UPDATE ON ne18_contents WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_contents_sealed_delete BEFORE DELETE ON ne18_contents WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_chunks_sealed_insert BEFORE INSERT ON ne18_content_chunks WHEN (SELECT r.status FROM ne18_contents c JOIN ne18_attachments a ON a.attachment_id=c.attachment_id JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE c.content_id=NEW.content_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_chunks_sealed_update BEFORE UPDATE ON ne18_content_chunks WHEN (SELECT r.status FROM ne18_contents c JOIN ne18_attachments a ON a.attachment_id=c.attachment_id JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE c.content_id=OLD.content_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_chunks_sealed_delete BEFORE DELETE ON ne18_content_chunks WHEN (SELECT r.status FROM ne18_contents c JOIN ne18_attachments a ON a.attachment_id=c.attachment_id JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE c.content_id=OLD.content_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_seal_entries_sealed_insert BEFORE INSERT ON ne18_run_seal_entries WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.run_id) != 'sealing' BEGIN SELECT RAISE(ABORT, 'Seal candidates require sealing state'); END;\nCREATE TRIGGER ne18_seal_entries_sealed_update BEFORE UPDATE ON ne18_run_seal_entries BEGIN SELECT RAISE(ABORT, 'Seal entries are immutable'); END;\nCREATE TRIGGER ne18_seal_entries_sealed_delete BEFORE DELETE ON ne18_run_seal_entries WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'Seal entries are immutable'); END;\n\n\nCREATE TABLE ne18_run_publication_clock (\n singleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n revision INTEGER NOT NULL CHECK (revision >= 0)\n) STRICT;\nCREATE TABLE ne18_run_resources (\n run_id TEXT PRIMARY KEY,\n invocation_id TEXT NOT NULL,\n experiment_id TEXT NOT NULL,\n started_at TEXT NOT NULL,\n initial_writer_generation TEXT NOT NULL,\n current_writer_generation TEXT NOT NULL,\n terminal_state TEXT CHECK (terminal_state IS NULL OR terminal_state IN ('completed','interrupted','failed')),\n completed_at TEXT,\n created_revision INTEGER NOT NULL UNIQUE CHECK (created_revision > 0),\n close_revision INTEGER UNIQUE CHECK (close_revision IS NULL OR close_revision > created_revision),\n CHECK ((terminal_state IS NULL) = (completed_at IS NULL)),\n CHECK ((terminal_state IS NULL) = (close_revision IS NULL))\n) STRICT;\nCREATE TABLE ne18_run_expected_slots (\n run_id TEXT NOT NULL REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n slot_id TEXT NOT NULL,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n eval_id TEXT NOT NULL,\n attempt_ordinal INTEGER NOT NULL CHECK (attempt_ordinal >= 0),\n execution_identity_digest TEXT NOT NULL CHECK (length(execution_identity_digest) = 64),\n PRIMARY KEY (run_id, slot_id),\n UNIQUE (run_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_attempt_publications (\n attempt_id TEXT PRIMARY KEY,\n attempt_locator TEXT NOT NULL CHECK (length(attempt_locator) = 14 AND substr(attempt_locator,1,2) = '@1'),\n origin_run_id TEXT NOT NULL,\n origin_slot_id TEXT NOT NULL,\n closure_payload BLOB NOT NULL,\n closure_digest TEXT NOT NULL CHECK (length(closure_digest) = 64),\n published_revision INTEGER NOT NULL UNIQUE CHECK (published_revision > 0),\n FOREIGN KEY (origin_run_id, origin_slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT\n) STRICT;\nCREATE TABLE ne18_run_slot_bindings (\n target_run_id TEXT NOT NULL,\n slot_id TEXT NOT NULL,\n attempt_id TEXT NOT NULL REFERENCES ne18_attempt_publications(attempt_id) ON DELETE RESTRICT,\n origin_run_id TEXT NOT NULL,\n origin_slot_id TEXT NOT NULL,\n attempt_publication_revision INTEGER NOT NULL CHECK (attempt_publication_revision > 0),\n action TEXT NOT NULL CHECK (action IN ('executed','carried','accepted')),\n binding_revision INTEGER NOT NULL UNIQUE CHECK (binding_revision > 0),\n PRIMARY KEY (target_run_id, slot_id),\n FOREIGN KEY (target_run_id, slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT,\n FOREIGN KEY (origin_run_id, origin_slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT\n) STRICT;\nCREATE TABLE ne18_run_slot_absences (\n run_id TEXT NOT NULL,\n slot_id TEXT NOT NULL,\n reason TEXT NOT NULL CHECK (reason IN ('early-exit-satisfied','budget-exhausted','stopped-by-failure','interrupted-before-publication','dispatch-failed')),\n absence_revision INTEGER NOT NULL CHECK (absence_revision > 0),\n PRIMARY KEY (run_id, slot_id),\n FOREIGN KEY (run_id, slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT\n) STRICT;\nCREATE TABLE ne18_run_recoveries (\n run_id TEXT PRIMARY KEY REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n previous_writer_generation TEXT NOT NULL,\n recovery_writer_generation TEXT NOT NULL,\n evidence_kind TEXT NOT NULL,\n evidence_identity TEXT NOT NULL,\n evidence_observed_at TEXT NOT NULL,\n recovery_revision INTEGER NOT NULL UNIQUE CHECK (recovery_revision > 0)\n) STRICT;\nCREATE TABLE ne18_run_deletion_tombstones (\n run_id TEXT PRIMARY KEY REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n terminal_state TEXT NOT NULL CHECK (terminal_state IN ('completed','interrupted','failed')),\n deleted_at TEXT NOT NULL,\n deletion_revision INTEGER NOT NULL UNIQUE CHECK (deletion_revision > 0)\n) STRICT;\nCREATE INDEX ne18_run_resources_list ON ne18_run_resources(created_revision, run_id);\nCREATE INDEX ne18_run_resources_invocation ON ne18_run_resources(invocation_id, created_revision, run_id);\nCREATE INDEX ne18_attempt_publications_origin ON ne18_attempt_publications(origin_run_id, origin_slot_id);\nCREATE INDEX ne18_attempt_publications_locator ON ne18_attempt_publications(attempt_locator, origin_run_id, attempt_id);\nCREATE INDEX ne18_run_slot_bindings_attempt ON ne18_run_slot_bindings(attempt_id, target_run_id, slot_id);\nCREATE INDEX ne18_run_deletion_revision ON ne18_run_deletion_tombstones(deletion_revision, run_id);\nINSERT INTO ne18_run_publication_clock(singleton,revision) VALUES (1,0);\n\n\nCREATE TABLE ne18_invocation_sessions (\n invocation_id TEXT PRIMARY KEY,\n state TEXT NOT NULL CHECK (state IN ('active','recovering','completed','interrupted','failed')),\n owner_id TEXT NOT NULL,\n owner_generation INTEGER NOT NULL CHECK (owner_generation > 0),\n owner_host TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_boot_id TEXT NOT NULL,\n owner_process_start TEXT NOT NULL,\n started_at TEXT NOT NULL,\n heartbeat_at TEXT NOT NULL,\n active_projection BLOB,\n recovering_at TEXT,\n closed_at TEXT,\n terminal_projection BLOB,\n CHECK ((state IN ('completed','interrupted','failed')) = (closed_at IS NOT NULL)),\n CHECK ((state IN ('completed','interrupted','failed')) = (terminal_projection IS NOT NULL)),\n CHECK (state IN ('active','recovering') OR active_projection IS NULL),\n CHECK ((state = 'recovering') = (recovering_at IS NOT NULL))\n) STRICT;\nCREATE TABLE ne18_invocation_session_experiments (\n invocation_id TEXT NOT NULL REFERENCES ne18_invocation_sessions(invocation_id) ON DELETE RESTRICT,\n experiment_id TEXT NOT NULL,\n run_id TEXT NOT NULL UNIQUE REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n PRIMARY KEY (invocation_id, experiment_id),\n UNIQUE (invocation_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_invocation_session_queued_attempts (\n invocation_id TEXT NOT NULL REFERENCES ne18_invocation_sessions(invocation_id) ON DELETE RESTRICT,\n attempt_id TEXT NOT NULL,\n run_id TEXT NOT NULL REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n slot_id TEXT NOT NULL,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n PRIMARY KEY (invocation_id, attempt_id),\n UNIQUE (invocation_id, ordinal),\n FOREIGN KEY (run_id, slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT\n) STRICT;\nCREATE TABLE ne18_case_locks (\n case_id TEXT PRIMARY KEY,\n owner_id TEXT NOT NULL,\n owner_generation INTEGER NOT NULL CHECK (owner_generation > 0),\n owner_host TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_boot_id TEXT NOT NULL,\n owner_process_start TEXT NOT NULL,\n acquired_at TEXT NOT NULL,\n heartbeat_at TEXT NOT NULL\n) STRICT;\nCREATE INDEX ne18_invocation_sessions_state ON ne18_invocation_sessions(state, started_at, invocation_id);\nCREATE INDEX ne18_invocation_session_experiments_invocation ON ne18_invocation_session_experiments(invocation_id, ordinal);\nCREATE INDEX ne18_invocation_session_queued_attempts_run ON ne18_invocation_session_queued_attempts(run_id, slot_id);\nCREATE INDEX ne18_case_locks_owner ON ne18_case_locks(owner_id, owner_generation);\nCREATE TABLE ne18_teardown_obligations (\n obligation_id TEXT PRIMARY KEY,\n experiment_id TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_host TEXT NOT NULL,\n generation INTEGER NOT NULL DEFAULT 1 CHECK (generation > 0),\n payload BLOB NOT NULL,\n UNIQUE (experiment_id, owner_pid)\n) STRICT;\nCREATE TABLE ne18_shared_state_generations (\n state_key TEXT NOT NULL,\n generation INTEGER NOT NULL CHECK (generation > 0),\n parent_generation INTEGER NOT NULL CHECK (parent_generation >= 0),\n state_kind TEXT NOT NULL CHECK (state_kind IN ('active','recovering','free')),\n owner_token TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_host TEXT NOT NULL,\n owner_process_identity TEXT NOT NULL,\n heartbeat_at TEXT NOT NULL,\n payload BLOB NOT NULL,\n PRIMARY KEY (state_key, generation),\n CHECK (parent_generation = generation - 1)\n) STRICT;\nCREATE TABLE ne18_kept_sandboxes (\n entry_id TEXT PRIMARY KEY,\n provider TEXT NOT NULL,\n sandbox_id TEXT NOT NULL,\n kept_at TEXT NOT NULL,\n operation_generation INTEGER NOT NULL DEFAULT 0 CHECK (operation_generation >= 0),\n payload BLOB NOT NULL,\n UNIQUE (provider, sandbox_id)\n) STRICT;\nCREATE TABLE ne18_kept_sandbox_operation_leases (\n entry_id TEXT PRIMARY KEY REFERENCES ne18_kept_sandboxes(entry_id) ON DELETE CASCADE,\n generation INTEGER NOT NULL CHECK (generation > 0),\n token TEXT NOT NULL,\n holder TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_host TEXT NOT NULL,\n owner_process_identity TEXT NOT NULL,\n operation TEXT NOT NULL,\n acquired_at TEXT NOT NULL,\n ttl_ms INTEGER NOT NULL CHECK (ttl_ms > 0)\n) STRICT;\nCREATE INDEX ne18_teardown_obligations_experiment ON ne18_teardown_obligations(experiment_id, owner_pid);\nCREATE INDEX ne18_shared_state_generations_head ON ne18_shared_state_generations(state_key, generation DESC);\nCREATE INDEX ne18_kept_sandboxes_kept_at ON ne18_kept_sandboxes(kept_at, entry_id);\n\n\nCREATE TABLE ne18_migration_state (\n singleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n state TEXT NOT NULL CHECK (state IN ('committed','ready')),\n source_format TEXT,\n source_digest TEXT CHECK (source_digest IS NULL OR length(source_digest) = 64),\n CHECK ((source_format IS NULL) = (source_digest IS NULL)),\n CHECK (state != 'committed' OR source_format IS NOT NULL)\n) STRICT;";
|
|
14
14
|
export declare const RECORD_SQLITE_BASELINE_FINGERPRINT: string;
|
|
15
15
|
export declare const RECORD_SQLITE_017_FINGERPRINT: string;
|
|
16
16
|
export declare const RECORD_SQLITE_LEGACY_FINGERPRINTS: Readonly<{
|
|
@@ -10,7 +10,7 @@ export declare const RECORD_SQLITE_LEGACY_BASELINE_SQL = "\nCREATE TABLE record_
|
|
|
10
10
|
export declare const RECORD_SQLITE_LEGACY_TABLE_NAMES: readonly ["record_metadata", "coordination_state", "coordination_tickets", "runs", "slots", "attempts", "members", "attachments", "attachment_references", "collection_items", "contents", "content_chunks", "run_seal_entries", "run_publication_clock", "run_resources", "run_expected_slots", "attempt_publications", "run_slot_bindings", "run_slot_absences", "run_recoveries", "run_deletion_tombstones", "invocation_sessions", "invocation_session_experiments", "invocation_session_queued_attempts", "case_locks", "teardown_obligations", "shared_state_generations", "kept_sandboxes", "kept_sandbox_operation_leases"];
|
|
11
11
|
/** Complete fixed table allowlist for the historical 0.17 `ne_` namespace. */
|
|
12
12
|
export declare const RECORD_SQLITE_017_TABLE_NAMES: readonly ["ne_record_metadata", "ne_coordination_state", "ne_coordination_tickets", "ne_runs", "ne_slots", "ne_attempts", "ne_members", "ne_attachments", "ne_attachment_references", "ne_collection_items", "ne_contents", "ne_content_chunks", "ne_run_seal_entries", "ne_run_publication_clock", "ne_run_resources", "ne_run_expected_slots", "ne_attempt_publications", "ne_run_slot_bindings", "ne_run_slot_absences", "ne_run_recoveries", "ne_run_deletion_tombstones", "ne_invocation_sessions", "ne_invocation_session_experiments", "ne_invocation_session_queued_attempts", "ne_case_locks", "ne_teardown_obligations", "ne_shared_state_generations", "ne_kept_sandboxes", "ne_kept_sandbox_operation_leases", "ne_migration_state"];
|
|
13
|
-
export declare const RECORD_SQLITE_SCHEMA_SQL: string;
|
|
13
|
+
export declare const RECORD_SQLITE_SCHEMA_SQL = "\nCREATE TABLE ne18_record_metadata (\n singleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n format TEXT NOT NULL,\n storage_revision INTEGER NOT NULL CHECK (storage_revision > 0),\n storage_generation TEXT NOT NULL,\n schema_fingerprint TEXT NOT NULL CHECK (length(schema_fingerprint) = 64),\n created_at TEXT NOT NULL,\n barrier_state TEXT NOT NULL CHECK (barrier_state IN ('open','draining','portable')),\n portable_generation TEXT,\n portable_revision INTEGER CHECK (portable_revision IS NULL OR portable_revision >= 0),\n portable_gate_id TEXT,\n record_payload BLOB,\n record_digest TEXT,\n CHECK ((record_payload IS NULL) = (record_digest IS NULL)),\n CHECK (record_digest IS NULL OR length(record_digest) = 64),\n CHECK ((barrier_state = 'portable') = (portable_generation IS NOT NULL)),\n CHECK ((barrier_state = 'portable') = (portable_revision IS NOT NULL)),\n CHECK ((barrier_state = 'open') = (portable_gate_id IS NULL))\n) STRICT;\nCREATE TABLE ne18_coordination_state (\n singleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n revision INTEGER NOT NULL CHECK (revision >= 0),\n operational_generation TEXT NOT NULL,\n next_writer_sequence INTEGER NOT NULL CHECK (next_writer_sequence > 0),\n writer_ticket_id TEXT,\n writer_sequence INTEGER CHECK (writer_sequence IS NULL OR writer_sequence > 0),\n writer_host TEXT,\n writer_pid INTEGER CHECK (writer_pid IS NULL OR writer_pid > 0),\n writer_boot_id TEXT,\n writer_process_start TEXT,\n writer_deadline INTEGER CHECK (writer_deadline IS NULL OR writer_deadline > 0),\n writer_enqueued_at INTEGER CHECK (writer_enqueued_at IS NULL OR writer_enqueued_at > 0),\n writer_nonce TEXT,\n writer_admitted_at INTEGER CHECK (writer_admitted_at IS NULL OR writer_admitted_at > 0),\n writer_lease_expires_at INTEGER CHECK (writer_lease_expires_at IS NULL OR writer_lease_expires_at > 0),\n barrier_id TEXT,\n barrier_nonce TEXT,\n barrier_host TEXT,\n barrier_pid INTEGER CHECK (barrier_pid IS NULL OR barrier_pid > 0),\n barrier_boot_id TEXT,\n barrier_process_start TEXT,\n barrier_deadline INTEGER CHECK (barrier_deadline IS NULL OR barrier_deadline > 0),\n barrier_requested_at INTEGER CHECK (barrier_requested_at IS NULL OR barrier_requested_at > 0),\n barrier_lease_expires_at INTEGER CHECK (barrier_lease_expires_at IS NULL OR barrier_lease_expires_at > 0),\n barrier_status TEXT CHECK (barrier_status IS NULL OR barrier_status IN ('requested','active')),\n barrier_active_at INTEGER CHECK (barrier_active_at IS NULL OR barrier_active_at > 0),\n CHECK ((writer_ticket_id IS NULL) = (writer_sequence IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_host IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_pid IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_boot_id IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_process_start IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_deadline IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_enqueued_at IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_nonce IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_admitted_at IS NULL)),\n CHECK ((writer_ticket_id IS NULL) = (writer_lease_expires_at IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_nonce IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_host IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_pid IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_boot_id IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_process_start IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_deadline IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_requested_at IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_lease_expires_at IS NULL)),\n CHECK ((barrier_id IS NULL) = (barrier_status IS NULL)),\n CHECK (\n (barrier_status IS NULL AND barrier_active_at IS NULL) OR\n (barrier_status = 'requested' AND barrier_active_at IS NULL) OR\n (barrier_status = 'active' AND barrier_active_at IS NOT NULL)\n )\n) STRICT;\nCREATE TABLE ne18_coordination_tickets (\n ticket_id TEXT PRIMARY KEY,\n sequence INTEGER NOT NULL UNIQUE CHECK (sequence > 0),\n host TEXT NOT NULL,\n pid INTEGER NOT NULL CHECK (pid > 0),\n boot_id TEXT NOT NULL,\n process_start TEXT NOT NULL,\n deadline INTEGER NOT NULL CHECK (deadline > 0),\n enqueued_at INTEGER NOT NULL CHECK (enqueued_at > 0)\n) STRICT;\nCREATE TABLE ne18_runs (\n run_id TEXT PRIMARY KEY,\n status TEXT NOT NULL CHECK (status IN ('open','sealing','sealed')),\n writer_generation TEXT NOT NULL,\n started_at TEXT NOT NULL,\n core_payload BLOB,\n core_digest TEXT CHECK (core_digest IS NULL OR length(core_digest) = 64),\n mutation_sequence INTEGER NOT NULL DEFAULT 0 CHECK (mutation_sequence >= 0),\n candidate_seal_identity TEXT CHECK (candidate_seal_identity IS NULL OR length(candidate_seal_identity) = 64),\n candidate_seal_entry_count INTEGER CHECK (candidate_seal_entry_count IS NULL OR candidate_seal_entry_count >= 0),\n candidate_seal_staged_count INTEGER NOT NULL DEFAULT 0 CHECK (candidate_seal_staged_count >= 0),\n logical_seal_identity TEXT,\n CHECK ((core_payload IS NULL) = (core_digest IS NULL)),\n CHECK ((candidate_seal_identity IS NULL) = (candidate_seal_entry_count IS NULL)),\n CHECK ((status = 'open') = (candidate_seal_identity IS NULL)),\n CHECK (candidate_seal_entry_count IS NULL OR candidate_seal_staged_count <= candidate_seal_entry_count),\n CHECK (status != 'open' OR candidate_seal_staged_count = 0),\n CHECK ((status = 'sealed') = (logical_seal_identity IS NOT NULL)),\n CHECK (status = 'open' OR core_payload IS NOT NULL)\n) STRICT;\nCREATE TABLE ne18_slots (\n run_id TEXT NOT NULL REFERENCES ne18_runs(run_id) ON DELETE CASCADE,\n slot_id TEXT NOT NULL,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n core_payload BLOB NOT NULL,\n core_digest TEXT NOT NULL CHECK (length(core_digest) = 64),\n PRIMARY KEY (run_id, slot_id),\n UNIQUE (run_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_attempts (\n origin_run_id TEXT NOT NULL REFERENCES ne18_runs(run_id) ON DELETE CASCADE,\n attempt_id TEXT NOT NULL,\n attempt_locator TEXT NOT NULL CHECK (length(attempt_locator) = 14 AND substr(attempt_locator,1,2) = '@1'),\n publication_state TEXT NOT NULL DEFAULT 'staging' CHECK (publication_state IN ('staging','sealing','published')),\n core_payload BLOB,\n core_digest TEXT CHECK (core_digest IS NULL OR length(core_digest) = 64),\n CHECK ((core_payload IS NULL) = (core_digest IS NULL)),\n PRIMARY KEY (origin_run_id, attempt_id)\n) STRICT;\nCREATE TABLE ne18_members (\n target_run_id TEXT NOT NULL,\n slot_id TEXT NOT NULL,\n origin_run_id TEXT,\n attempt_id TEXT,\n action TEXT NOT NULL CHECK (action IN ('executed','carried','accepted','not-dispatched','interrupted')),\n core_payload BLOB NOT NULL,\n core_digest TEXT NOT NULL CHECK (length(core_digest) = 64),\n PRIMARY KEY (target_run_id, slot_id),\n CHECK (\n (action IN ('executed','carried','accepted') AND origin_run_id IS NOT NULL AND attempt_id IS NOT NULL) OR\n (action IN ('not-dispatched','interrupted') AND origin_run_id IS NULL AND attempt_id IS NULL)\n ),\n FOREIGN KEY (target_run_id, slot_id) REFERENCES ne18_slots(run_id, slot_id) ON DELETE CASCADE\n) STRICT;\nCREATE TABLE ne18_attachments (\n attachment_id TEXT PRIMARY KEY,\n owner_kind TEXT NOT NULL CHECK (owner_kind IN ('run','attempt')),\n owner_run_id TEXT NOT NULL REFERENCES ne18_runs(run_id) ON DELETE CASCADE,\n owner_attempt_id TEXT,\n family TEXT NOT NULL,\n family_revision INTEGER NOT NULL CHECK (family_revision > 0),\n logical_identity TEXT,\n canonical_payload BLOB,\n canonical_digest TEXT CHECK (canonical_digest IS NULL OR length(canonical_digest) = 64),\n logical_inventory BLOB,\n inventory_digest TEXT CHECK (inventory_digest IS NULL OR length(inventory_digest) = 64),\n CHECK ((canonical_payload IS NULL) = (canonical_digest IS NULL)),\n CHECK ((logical_inventory IS NULL) = (inventory_digest IS NULL)),\n CHECK ((owner_kind = 'run' AND owner_attempt_id IS NULL) OR (owner_kind = 'attempt' AND owner_attempt_id IS NOT NULL)),\n UNIQUE (owner_kind, owner_run_id, owner_attempt_id, family),\n FOREIGN KEY (owner_run_id, owner_attempt_id) REFERENCES ne18_attempts(origin_run_id, attempt_id) ON DELETE CASCADE\n) STRICT;\nCREATE TABLE ne18_attachment_references (\n attachment_id TEXT NOT NULL REFERENCES ne18_attachments(attachment_id) ON DELETE CASCADE,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n target_owner_kind TEXT NOT NULL CHECK (target_owner_kind IN ('run','attempt')),\n target_family TEXT NOT NULL,\n canonical_payload BLOB NOT NULL,\n reference_digest TEXT NOT NULL CHECK (length(reference_digest) = 64),\n PRIMARY KEY (attachment_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_collection_items (\n attachment_id TEXT NOT NULL REFERENCES ne18_attachments(attachment_id) ON DELETE CASCADE,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n logical_identity TEXT NOT NULL,\n canonical_payload BLOB NOT NULL,\n canonical_digest TEXT NOT NULL CHECK (length(canonical_digest) = 64),\n PRIMARY KEY (attachment_id, ordinal),\n UNIQUE (attachment_id, logical_identity)\n) STRICT;\nCREATE TABLE ne18_contents (\n content_id TEXT PRIMARY KEY,\n attachment_id TEXT NOT NULL REFERENCES ne18_attachments(attachment_id) ON DELETE CASCADE,\n logical_handle TEXT NOT NULL,\n byte_length INTEGER CHECK (byte_length IS NULL OR byte_length >= 0),\n overall_digest TEXT CHECK (overall_digest IS NULL OR length(overall_digest) = 64),\n chunk_count INTEGER CHECK (chunk_count IS NULL OR chunk_count >= 0),\n CHECK ((byte_length IS NULL) = (overall_digest IS NULL) AND (overall_digest IS NULL) = (chunk_count IS NULL)),\n UNIQUE (attachment_id, logical_handle)\n) STRICT;\nCREATE TABLE ne18_content_chunks (\n content_id TEXT NOT NULL REFERENCES ne18_contents(content_id) ON DELETE CASCADE,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n bytes BLOB NOT NULL CHECK (length(bytes) <= 262144),\n chunk_digest TEXT NOT NULL CHECK (length(chunk_digest) = 64),\n PRIMARY KEY (content_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_run_seal_entries (\n run_id TEXT NOT NULL REFERENCES ne18_runs(run_id) ON DELETE CASCADE,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n entry_kind TEXT NOT NULL CHECK (entry_kind IN ('record','run','slot','member','attempt','attachment','attachment-reference','collection-item','content','content-chunk')),\n logical_identity TEXT NOT NULL,\n digest TEXT NOT NULL CHECK (length(digest) = 64),\n PRIMARY KEY (run_id, ordinal),\n UNIQUE (run_id, entry_kind, logical_identity)\n) STRICT;\nCREATE INDEX ne18_attachments_owner_family ON ne18_attachments(owner_kind, owner_run_id, owner_attempt_id, family);\nCREATE UNIQUE INDEX ne18_attachments_owner_family_unique ON ne18_attachments(owner_kind, owner_run_id, coalesce(owner_attempt_id,''), family);\nCREATE INDEX ne18_members_origin_attempt ON ne18_members(origin_run_id, attempt_id, target_run_id);\nCREATE INDEX ne18_attempts_locator ON ne18_attempts(attempt_locator, origin_run_id, attempt_id);\nCREATE INDEX ne18_references_target_family ON ne18_attachment_references(target_owner_kind, target_family);\nCREATE INDEX ne18_content_chunks_page ON ne18_content_chunks(content_id, ordinal);\nCREATE INDEX ne18_coordination_tickets_fifo ON ne18_coordination_tickets(sequence);\nCREATE TRIGGER ne18_coordination_ticket_barrier_insert BEFORE INSERT ON ne18_coordination_tickets WHEN (SELECT barrier_state FROM ne18_record_metadata WHERE singleton=1)!='open' BEGIN SELECT RAISE(ABORT, 'ProjectDatabase writer barrier is not open'); END;\nCREATE TRIGGER ne18_coordination_writer_barrier_update BEFORE UPDATE ON ne18_coordination_state WHEN NEW.writer_ticket_id IS NOT NULL AND (SELECT barrier_state FROM ne18_record_metadata WHERE singleton=1)!='open' BEGIN SELECT RAISE(ABORT, 'ProjectDatabase writer barrier is not open'); END;\nCREATE TRIGGER ne18_runs_sealed_update BEFORE UPDATE ON ne18_runs WHEN OLD.status = 'sealed' BEGIN SELECT RAISE(ABORT, 'sealed run is immutable'); END;\nCREATE TRIGGER ne18_runs_sealed_delete BEFORE DELETE ON ne18_runs WHEN OLD.status = 'sealed' BEGIN SELECT RAISE(ABORT, 'sealed run is immutable'); END;\nCREATE TRIGGER ne18_slots_sealed_insert BEFORE INSERT ON ne18_slots WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_slots_sealed_update BEFORE UPDATE ON ne18_slots WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_slots_sealed_delete BEFORE DELETE ON ne18_slots WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attempts_sealed_insert BEFORE INSERT ON ne18_attempts WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.origin_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attempts_sealed_update BEFORE UPDATE ON ne18_attempts WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.origin_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attempts_sealed_delete BEFORE DELETE ON ne18_attempts WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.origin_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_members_sealed_insert BEFORE INSERT ON ne18_members WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.target_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_members_sealed_update BEFORE UPDATE ON ne18_members WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.target_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_members_sealed_delete BEFORE DELETE ON ne18_members WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.target_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attachments_sealed_insert BEFORE INSERT ON ne18_attachments WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.owner_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attachments_attempt_published_insert BEFORE INSERT ON ne18_attachments WHEN NEW.owner_kind='attempt' AND (SELECT publication_state FROM ne18_attempts WHERE origin_run_id=NEW.owner_run_id AND attempt_id=NEW.owner_attempt_id)='published' BEGIN SELECT RAISE(ABORT, 'published attempt is immutable'); END;\nCREATE TRIGGER ne18_attachments_sealed_update BEFORE UPDATE ON ne18_attachments WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.owner_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attachments_attempt_published_update BEFORE UPDATE ON ne18_attachments WHEN OLD.owner_kind='attempt' AND (SELECT publication_state FROM ne18_attempts WHERE origin_run_id=OLD.owner_run_id AND attempt_id=OLD.owner_attempt_id)='published' BEGIN SELECT RAISE(ABORT, 'published attempt is immutable'); END;\nCREATE TRIGGER ne18_attachments_sealed_delete BEFORE DELETE ON ne18_attachments WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.owner_run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_attachments_attempt_published_delete BEFORE DELETE ON ne18_attachments WHEN OLD.owner_kind='attempt' AND (SELECT publication_state FROM ne18_attempts WHERE origin_run_id=OLD.owner_run_id AND attempt_id=OLD.owner_attempt_id)='published' BEGIN SELECT RAISE(ABORT, 'published attempt is immutable'); END;\nCREATE TRIGGER ne18_references_sealed_insert BEFORE INSERT ON ne18_attachment_references WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=NEW.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_references_sealed_update BEFORE UPDATE ON ne18_attachment_references WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_references_sealed_delete BEFORE DELETE ON ne18_attachment_references WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_items_sealed_insert BEFORE INSERT ON ne18_collection_items WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=NEW.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_items_sealed_update BEFORE UPDATE ON ne18_collection_items WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_items_sealed_delete BEFORE DELETE ON ne18_collection_items WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_contents_sealed_insert BEFORE INSERT ON ne18_contents WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=NEW.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_contents_sealed_update BEFORE UPDATE ON ne18_contents WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_contents_sealed_delete BEFORE DELETE ON ne18_contents WHEN (SELECT r.status FROM ne18_attachments a JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE a.attachment_id=OLD.attachment_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_chunks_sealed_insert BEFORE INSERT ON ne18_content_chunks WHEN (SELECT r.status FROM ne18_contents c JOIN ne18_attachments a ON a.attachment_id=c.attachment_id JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE c.content_id=NEW.content_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_chunks_sealed_update BEFORE UPDATE ON ne18_content_chunks WHEN (SELECT r.status FROM ne18_contents c JOIN ne18_attachments a ON a.attachment_id=c.attachment_id JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE c.content_id=OLD.content_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_chunks_sealed_delete BEFORE DELETE ON ne18_content_chunks WHEN (SELECT r.status FROM ne18_contents c JOIN ne18_attachments a ON a.attachment_id=c.attachment_id JOIN ne18_runs r ON r.run_id=a.owner_run_id WHERE c.content_id=OLD.content_id) != 'open' BEGIN SELECT RAISE(ABORT, 'run closure is immutable'); END;\nCREATE TRIGGER ne18_seal_entries_sealed_insert BEFORE INSERT ON ne18_run_seal_entries WHEN (SELECT status FROM ne18_runs WHERE run_id = NEW.run_id) != 'sealing' BEGIN SELECT RAISE(ABORT, 'Seal candidates require sealing state'); END;\nCREATE TRIGGER ne18_seal_entries_sealed_update BEFORE UPDATE ON ne18_run_seal_entries BEGIN SELECT RAISE(ABORT, 'Seal entries are immutable'); END;\nCREATE TRIGGER ne18_seal_entries_sealed_delete BEFORE DELETE ON ne18_run_seal_entries WHEN (SELECT status FROM ne18_runs WHERE run_id = OLD.run_id) != 'open' BEGIN SELECT RAISE(ABORT, 'Seal entries are immutable'); END;\n\n\nCREATE TABLE ne18_run_publication_clock (\n singleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n revision INTEGER NOT NULL CHECK (revision >= 0)\n) STRICT;\nCREATE TABLE ne18_run_resources (\n run_id TEXT PRIMARY KEY,\n invocation_id TEXT NOT NULL,\n experiment_id TEXT NOT NULL,\n started_at TEXT NOT NULL,\n initial_writer_generation TEXT NOT NULL,\n current_writer_generation TEXT NOT NULL,\n terminal_state TEXT CHECK (terminal_state IS NULL OR terminal_state IN ('completed','interrupted','failed')),\n completed_at TEXT,\n created_revision INTEGER NOT NULL UNIQUE CHECK (created_revision > 0),\n close_revision INTEGER UNIQUE CHECK (close_revision IS NULL OR close_revision > created_revision),\n CHECK ((terminal_state IS NULL) = (completed_at IS NULL)),\n CHECK ((terminal_state IS NULL) = (close_revision IS NULL))\n) STRICT;\nCREATE TABLE ne18_run_expected_slots (\n run_id TEXT NOT NULL REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n slot_id TEXT NOT NULL,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n eval_id TEXT NOT NULL,\n attempt_ordinal INTEGER NOT NULL CHECK (attempt_ordinal >= 0),\n execution_identity_digest TEXT NOT NULL CHECK (length(execution_identity_digest) = 64),\n PRIMARY KEY (run_id, slot_id),\n UNIQUE (run_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_attempt_publications (\n attempt_id TEXT PRIMARY KEY,\n attempt_locator TEXT NOT NULL CHECK (length(attempt_locator) = 14 AND substr(attempt_locator,1,2) = '@1'),\n origin_run_id TEXT NOT NULL,\n origin_slot_id TEXT NOT NULL,\n closure_payload BLOB NOT NULL,\n closure_digest TEXT NOT NULL CHECK (length(closure_digest) = 64),\n published_revision INTEGER NOT NULL UNIQUE CHECK (published_revision > 0),\n FOREIGN KEY (origin_run_id, origin_slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT\n) STRICT;\nCREATE TABLE ne18_run_slot_bindings (\n target_run_id TEXT NOT NULL,\n slot_id TEXT NOT NULL,\n attempt_id TEXT NOT NULL REFERENCES ne18_attempt_publications(attempt_id) ON DELETE RESTRICT,\n origin_run_id TEXT NOT NULL,\n origin_slot_id TEXT NOT NULL,\n attempt_publication_revision INTEGER NOT NULL CHECK (attempt_publication_revision > 0),\n action TEXT NOT NULL CHECK (action IN ('executed','carried','accepted')),\n binding_revision INTEGER NOT NULL UNIQUE CHECK (binding_revision > 0),\n PRIMARY KEY (target_run_id, slot_id),\n FOREIGN KEY (target_run_id, slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT,\n FOREIGN KEY (origin_run_id, origin_slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT\n) STRICT;\nCREATE TABLE ne18_run_slot_absences (\n run_id TEXT NOT NULL,\n slot_id TEXT NOT NULL,\n reason TEXT NOT NULL CHECK (reason IN ('early-exit-satisfied','budget-exhausted','stopped-by-failure','interrupted-before-publication','dispatch-failed')),\n absence_revision INTEGER NOT NULL CHECK (absence_revision > 0),\n PRIMARY KEY (run_id, slot_id),\n FOREIGN KEY (run_id, slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT\n) STRICT;\nCREATE TABLE ne18_run_recoveries (\n run_id TEXT PRIMARY KEY REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n previous_writer_generation TEXT NOT NULL,\n recovery_writer_generation TEXT NOT NULL,\n evidence_kind TEXT NOT NULL,\n evidence_identity TEXT NOT NULL,\n evidence_observed_at TEXT NOT NULL,\n recovery_revision INTEGER NOT NULL UNIQUE CHECK (recovery_revision > 0)\n) STRICT;\nCREATE TABLE ne18_run_deletion_tombstones (\n run_id TEXT PRIMARY KEY REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n terminal_state TEXT NOT NULL CHECK (terminal_state IN ('completed','interrupted','failed')),\n deleted_at TEXT NOT NULL,\n deletion_revision INTEGER NOT NULL UNIQUE CHECK (deletion_revision > 0)\n) STRICT;\nCREATE INDEX ne18_run_resources_list ON ne18_run_resources(created_revision, run_id);\nCREATE INDEX ne18_run_resources_invocation ON ne18_run_resources(invocation_id, created_revision, run_id);\nCREATE INDEX ne18_attempt_publications_origin ON ne18_attempt_publications(origin_run_id, origin_slot_id);\nCREATE INDEX ne18_attempt_publications_locator ON ne18_attempt_publications(attempt_locator, origin_run_id, attempt_id);\nCREATE INDEX ne18_run_slot_bindings_attempt ON ne18_run_slot_bindings(attempt_id, target_run_id, slot_id);\nCREATE INDEX ne18_run_deletion_revision ON ne18_run_deletion_tombstones(deletion_revision, run_id);\nINSERT INTO ne18_run_publication_clock(singleton,revision) VALUES (1,0);\n\n\nCREATE TABLE ne18_invocation_sessions (\n invocation_id TEXT PRIMARY KEY,\n state TEXT NOT NULL CHECK (state IN ('active','recovering','completed','interrupted','failed')),\n owner_id TEXT NOT NULL,\n owner_generation INTEGER NOT NULL CHECK (owner_generation > 0),\n owner_host TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_boot_id TEXT NOT NULL,\n owner_process_start TEXT NOT NULL,\n started_at TEXT NOT NULL,\n heartbeat_at TEXT NOT NULL,\n active_projection BLOB,\n recovering_at TEXT,\n closed_at TEXT,\n terminal_projection BLOB,\n CHECK ((state IN ('completed','interrupted','failed')) = (closed_at IS NOT NULL)),\n CHECK ((state IN ('completed','interrupted','failed')) = (terminal_projection IS NOT NULL)),\n CHECK (state IN ('active','recovering') OR active_projection IS NULL),\n CHECK ((state = 'recovering') = (recovering_at IS NOT NULL))\n) STRICT;\nCREATE TABLE ne18_invocation_session_experiments (\n invocation_id TEXT NOT NULL REFERENCES ne18_invocation_sessions(invocation_id) ON DELETE RESTRICT,\n experiment_id TEXT NOT NULL,\n run_id TEXT NOT NULL UNIQUE REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n PRIMARY KEY (invocation_id, experiment_id),\n UNIQUE (invocation_id, ordinal)\n) STRICT;\nCREATE TABLE ne18_invocation_session_queued_attempts (\n invocation_id TEXT NOT NULL REFERENCES ne18_invocation_sessions(invocation_id) ON DELETE RESTRICT,\n attempt_id TEXT NOT NULL,\n run_id TEXT NOT NULL REFERENCES ne18_run_resources(run_id) ON DELETE RESTRICT,\n slot_id TEXT NOT NULL,\n ordinal INTEGER NOT NULL CHECK (ordinal >= 0),\n PRIMARY KEY (invocation_id, attempt_id),\n UNIQUE (invocation_id, ordinal),\n FOREIGN KEY (run_id, slot_id) REFERENCES ne18_run_expected_slots(run_id, slot_id) ON DELETE RESTRICT\n) STRICT;\nCREATE TABLE ne18_case_locks (\n case_id TEXT PRIMARY KEY,\n owner_id TEXT NOT NULL,\n owner_generation INTEGER NOT NULL CHECK (owner_generation > 0),\n owner_host TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_boot_id TEXT NOT NULL,\n owner_process_start TEXT NOT NULL,\n acquired_at TEXT NOT NULL,\n heartbeat_at TEXT NOT NULL\n) STRICT;\nCREATE INDEX ne18_invocation_sessions_state ON ne18_invocation_sessions(state, started_at, invocation_id);\nCREATE INDEX ne18_invocation_session_experiments_invocation ON ne18_invocation_session_experiments(invocation_id, ordinal);\nCREATE INDEX ne18_invocation_session_queued_attempts_run ON ne18_invocation_session_queued_attempts(run_id, slot_id);\nCREATE INDEX ne18_case_locks_owner ON ne18_case_locks(owner_id, owner_generation);\nCREATE TABLE ne18_teardown_obligations (\n obligation_id TEXT PRIMARY KEY,\n experiment_id TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_host TEXT NOT NULL,\n generation INTEGER NOT NULL DEFAULT 1 CHECK (generation > 0),\n payload BLOB NOT NULL,\n UNIQUE (experiment_id, owner_pid)\n) STRICT;\nCREATE TABLE ne18_shared_state_generations (\n state_key TEXT NOT NULL,\n generation INTEGER NOT NULL CHECK (generation > 0),\n parent_generation INTEGER NOT NULL CHECK (parent_generation >= 0),\n state_kind TEXT NOT NULL CHECK (state_kind IN ('active','recovering','free')),\n owner_token TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_host TEXT NOT NULL,\n owner_process_identity TEXT NOT NULL,\n heartbeat_at TEXT NOT NULL,\n payload BLOB NOT NULL,\n PRIMARY KEY (state_key, generation),\n CHECK (parent_generation = generation - 1)\n) STRICT;\nCREATE TABLE ne18_kept_sandboxes (\n entry_id TEXT PRIMARY KEY,\n provider TEXT NOT NULL,\n sandbox_id TEXT NOT NULL,\n kept_at TEXT NOT NULL,\n operation_generation INTEGER NOT NULL DEFAULT 0 CHECK (operation_generation >= 0),\n payload BLOB NOT NULL,\n UNIQUE (provider, sandbox_id)\n) STRICT;\nCREATE TABLE ne18_kept_sandbox_operation_leases (\n entry_id TEXT PRIMARY KEY REFERENCES ne18_kept_sandboxes(entry_id) ON DELETE CASCADE,\n generation INTEGER NOT NULL CHECK (generation > 0),\n token TEXT NOT NULL,\n holder TEXT NOT NULL,\n owner_pid INTEGER NOT NULL CHECK (owner_pid > 0),\n owner_host TEXT NOT NULL,\n owner_process_identity TEXT NOT NULL,\n operation TEXT NOT NULL,\n acquired_at TEXT NOT NULL,\n ttl_ms INTEGER NOT NULL CHECK (ttl_ms > 0)\n) STRICT;\nCREATE INDEX ne18_teardown_obligations_experiment ON ne18_teardown_obligations(experiment_id, owner_pid);\nCREATE INDEX ne18_shared_state_generations_head ON ne18_shared_state_generations(state_key, generation DESC);\nCREATE INDEX ne18_kept_sandboxes_kept_at ON ne18_kept_sandboxes(kept_at, entry_id);\n\n\nCREATE TABLE ne18_migration_state (\n singleton INTEGER PRIMARY KEY CHECK (singleton = 1),\n state TEXT NOT NULL CHECK (state IN ('committed','ready')),\n source_format TEXT,\n source_digest TEXT CHECK (source_digest IS NULL OR length(source_digest) = 64),\n CHECK ((source_format IS NULL) = (source_digest IS NULL)),\n CHECK (state != 'committed' OR source_format IS NOT NULL)\n) STRICT;";
|
|
14
14
|
export declare const RECORD_SQLITE_BASELINE_FINGERPRINT: string;
|
|
15
15
|
export declare const RECORD_SQLITE_017_FINGERPRINT: string;
|
|
16
16
|
export declare const RECORD_SQLITE_LEGACY_FINGERPRINTS: Readonly<{
|
|
@@ -82,6 +82,7 @@ class AdapterAttemptResources {
|
|
|
82
82
|
}
|
|
83
83
|
async cleanup(signal) {
|
|
84
84
|
this.beginCleanup();
|
|
85
|
+
const context = Object.freeze({ signal });
|
|
85
86
|
const failures = [];
|
|
86
87
|
let timedOut = signal.aborted;
|
|
87
88
|
let stopWaiting;
|
|
@@ -100,7 +101,7 @@ class AdapterAttemptResources {
|
|
|
100
101
|
while (this.cleanups.length > 0 && !timedOut) {
|
|
101
102
|
const cleanup = this.cleanups.pop();
|
|
102
103
|
const outcome = await Promise.race([
|
|
103
|
-
Promise.resolve().then(cleanup).then(() => ({ _tag: "settled" }), (error) => ({ _tag: "failed", error })),
|
|
104
|
+
Promise.resolve().then(() => cleanup(context)).then(() => ({ _tag: "settled" }), (error) => ({ _tag: "failed", error })),
|
|
104
105
|
aborted.then(() => ({ _tag: "aborted" })),
|
|
105
106
|
]);
|
|
106
107
|
if (outcome._tag === "aborted") {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attempt-resources.js","sourceRoot":"","sources":["attempt-resources.ts"],"names":[],"mappings":"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","sourcesContent":["import type { EvidenceCoverage } from \"../agents/types.ts\";\nimport type { AttemptResourceRegistry } from \"../types.ts\";\nconst ADAPTER_UNAVAILABLE_ENTRY = Object.freeze({\n status: \"unavailable\" as const,\n reason: \"not-collected\",\n});\n/** Ordinary Adapters do not imply Agent conversation or usage evidence. */\nexport const adapterEvidenceUnavailable: EvidenceCoverage = Object.freeze({\n events: ADAPTER_UNAVAILABLE_ENTRY,\n actions: ADAPTER_UNAVAILABLE_ENTRY,\n messages: ADAPTER_UNAVAILABLE_ENTRY,\n usage: ADAPTER_UNAVAILABLE_ENTRY,\n status: ADAPTER_UNAVAILABLE_ENTRY,\n data: ADAPTER_UNAVAILABLE_ENTRY,\n});\nexport type AdapterResourceWindow = \"forward-open\" | \"cleanup-open\" | \"closed\";\nexport class AdapterResourceWindowClosedError extends Error {\n readonly code = \"adapter-resource-window-closed\";\n constructor(readonly window: AdapterResourceWindow) {\n super(`Adapter Attempt resource window is ${window}`);\n this.name = \"AdapterResourceWindowClosedError\";\n }\n}\nexport class AdapterAuthoringClosedError extends Error {\n readonly code = \"adapter-authoring-closed\";\n constructor() {\n super(\"Cannot call an Adapter method after Attempt authoring has closed\");\n this.name = \"AdapterAuthoringClosedError\";\n }\n}\nexport interface AdapterCleanupResult {\n readonly failures: readonly unknown[];\n readonly timedOut: boolean;\n}\n/**\n * Attempt-local Adapter resource owner. The same fixed cleanup window\n * admits callbacks registered by an already-running create/test handoff and\n * drains every admitted callback in global LIFO order.\n */\nexport class AdapterAttemptResources {\n private windowState: AdapterResourceWindow = \"forward-open\";\n private authorOpen = true;\n private readonly cleanups: Array<() => void | Promise<void>> = [];\n private readonly handoffs = new Set<Promise<void>>();\n get window(): AdapterResourceWindow {\n return this.windowState;\n }\n assertForwardOpen(): void {\n if (!this.authorOpen)\n throw new AdapterAuthoringClosedError();\n if (this.windowState !== \"forward-open\") {\n throw new AdapterResourceWindowClosedError(this.windowState);\n }\n }\n onCleanup(cleanup: () => void | Promise<void>): void {\n if (typeof cleanup !== \"function\") {\n throw new TypeError(\"Adapter onCleanup() requires a function\");\n }\n if (this.windowState === \"closed\") {\n throw new AdapterResourceWindowClosedError(this.windowState);\n }\n this.cleanups.push(cleanup);\n }\n trackHandoff<Value>(promise: Promise<Value>): Promise<Value> {\n let settled!: Promise<void>;\n settled = promise.then(() => undefined, () => undefined).finally(() => {\n this.handoffs.delete(settled);\n });\n this.handoffs.add(settled);\n return promise;\n }\n beginCleanup(): void {\n this.closeAuthoring();\n if (this.windowState === \"forward-open\")\n this.windowState = \"cleanup-open\";\n }\n closeAuthoring(): void {\n this.authorOpen = false;\n }\n close(): void {\n this.windowState = \"closed\";\n }\n async cleanup(signal: AbortSignal): Promise<AdapterCleanupResult> {\n this.beginCleanup();\n const failures: unknown[] = [];\n let timedOut = signal.aborted;\n let stopWaiting: (() => void) | undefined;\n let onAbort: (() => void) | undefined;\n const aborted = new Promise<void>((resolve) => {\n stopWaiting = resolve;\n if (signal.aborted)\n resolve();\n else {\n onAbort = () => resolve();\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n });\n try {\n while (!timedOut) {\n while (this.cleanups.length > 0 && !timedOut) {\n const cleanup = this.cleanups.pop()!;\n const outcome = await Promise.race([\n Promise.resolve().then(cleanup).then(() => ({ _tag: \"settled\" as const }), (error: unknown) => ({ _tag: \"failed\" as const, error })),\n aborted.then(() => ({ _tag: \"aborted\" as const })),\n ]);\n if (outcome._tag === \"aborted\") {\n timedOut = true;\n }\n else if (outcome._tag === \"failed\") {\n failures.push(outcome.error);\n }\n }\n if (timedOut || this.cleanups.length > 0)\n continue;\n if (this.handoffs.size === 0)\n break;\n const outcome = await Promise.race([\n ...this.handoffs,\n aborted,\n ]).then(() => signal.aborted ? \"aborted\" as const : \"settled\" as const);\n if (outcome === \"aborted\")\n timedOut = true;\n }\n }\n finally {\n this.close();\n if (onAbort !== undefined)\n signal.removeEventListener(\"abort\", onAbort);\n stopWaiting?.();\n }\n return Object.freeze({ failures: Object.freeze(failures), timedOut });\n }\n}\ntype Entry = {\n shutdown(signal: AbortSignal): Promise<void>;\n release(signal: AbortSignal): Promise<void>;\n shutdownReceipt?: Promise<void>;\n};\nexport class ManagedAttemptResources implements AttemptResourceRegistry {\n private readonly entries: Entry[] = [];\n private closing = false;\n private releaseReceipt?: Promise<void>;\n async acquire<T>(acquire: () => Promise<T>, lifecycle: {\n shutdown: (resource: T, signal: AbortSignal) => Promise<void>;\n release: (resource: T, signal: AbortSignal) => Promise<void>;\n }): Promise<T> {\n if (this.closing)\n throw new Error(\"Attempt resource registry is closing\");\n const resource = await acquire();\n try {\n if (this.closing)\n throw new Error(\"Attempt resource registry is closing\");\n this.entries.push({\n shutdown: (signal) => lifecycle.shutdown(resource, signal),\n release: (signal) => lifecycle.release(resource, signal),\n });\n return resource;\n }\n catch (error) {\n const controller = new AbortController();\n await lifecycle.release(resource, controller.signal).catch(() => undefined);\n throw error;\n }\n }\n async shutdownAll(signal: AbortSignal): Promise<void> {\n const failures: unknown[] = [];\n for (const entry of this.entries.slice().reverse()) {\n entry.shutdownReceipt ??= entry.shutdown(signal);\n try {\n await entry.shutdownReceipt;\n }\n catch (error) {\n failures.push(error);\n }\n }\n if (failures.length > 0)\n throw new AggregateError(failures, \"Attempt managed resource shutdown failed\");\n }\n async releaseAll(signal: AbortSignal): Promise<void> {\n return this.releaseReceipt ??= this.releaseEntries(signal);\n }\n private async releaseEntries(signal: AbortSignal): Promise<void> {\n this.closing = true;\n const failures: unknown[] = [];\n for (const entry of this.entries.splice(0).reverse()) {\n try {\n await entry.release(signal);\n }\n catch (error) {\n failures.push(error);\n }\n }\n if (failures.length > 0)\n throw new AggregateError(failures, \"Attempt managed resource cleanup failed\");\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"attempt-resources.js","sourceRoot":"","sources":["attempt-resources.ts"],"names":[],"mappings":"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","sourcesContent":["import type { EvidenceCoverage } from \"../agents/types.ts\";\nimport type { AdapterCleanupContext } from \"../adapter.ts\";\nimport type { AttemptResourceRegistry } from \"../types.ts\";\nconst ADAPTER_UNAVAILABLE_ENTRY = Object.freeze({\n status: \"unavailable\" as const,\n reason: \"not-collected\",\n});\n/** Ordinary Adapters do not imply Agent conversation or usage evidence. */\nexport const adapterEvidenceUnavailable: EvidenceCoverage = Object.freeze({\n events: ADAPTER_UNAVAILABLE_ENTRY,\n actions: ADAPTER_UNAVAILABLE_ENTRY,\n messages: ADAPTER_UNAVAILABLE_ENTRY,\n usage: ADAPTER_UNAVAILABLE_ENTRY,\n status: ADAPTER_UNAVAILABLE_ENTRY,\n data: ADAPTER_UNAVAILABLE_ENTRY,\n});\nexport type AdapterResourceWindow = \"forward-open\" | \"cleanup-open\" | \"closed\";\nexport class AdapterResourceWindowClosedError extends Error {\n readonly code = \"adapter-resource-window-closed\";\n constructor(readonly window: AdapterResourceWindow) {\n super(`Adapter Attempt resource window is ${window}`);\n this.name = \"AdapterResourceWindowClosedError\";\n }\n}\nexport class AdapterAuthoringClosedError extends Error {\n readonly code = \"adapter-authoring-closed\";\n constructor() {\n super(\"Cannot call an Adapter method after Attempt authoring has closed\");\n this.name = \"AdapterAuthoringClosedError\";\n }\n}\nexport interface AdapterCleanupResult {\n readonly failures: readonly unknown[];\n readonly timedOut: boolean;\n}\n/**\n * Attempt-local Adapter resource owner. The same fixed cleanup window\n * admits callbacks registered by an already-running create/test handoff and\n * drains every admitted callback in global LIFO order.\n */\nexport class AdapterAttemptResources {\n private windowState: AdapterResourceWindow = \"forward-open\";\n private authorOpen = true;\n private readonly cleanups: Array<(context: AdapterCleanupContext) => void | Promise<void>> = [];\n private readonly handoffs = new Set<Promise<void>>();\n get window(): AdapterResourceWindow {\n return this.windowState;\n }\n assertForwardOpen(): void {\n if (!this.authorOpen)\n throw new AdapterAuthoringClosedError();\n if (this.windowState !== \"forward-open\") {\n throw new AdapterResourceWindowClosedError(this.windowState);\n }\n }\n onCleanup(cleanup: (context: AdapterCleanupContext) => void | Promise<void>): void {\n if (typeof cleanup !== \"function\") {\n throw new TypeError(\"Adapter onCleanup() requires a function\");\n }\n if (this.windowState === \"closed\") {\n throw new AdapterResourceWindowClosedError(this.windowState);\n }\n this.cleanups.push(cleanup);\n }\n trackHandoff<Value>(promise: Promise<Value>): Promise<Value> {\n let settled!: Promise<void>;\n settled = promise.then(() => undefined, () => undefined).finally(() => {\n this.handoffs.delete(settled);\n });\n this.handoffs.add(settled);\n return promise;\n }\n beginCleanup(): void {\n this.closeAuthoring();\n if (this.windowState === \"forward-open\")\n this.windowState = \"cleanup-open\";\n }\n closeAuthoring(): void {\n this.authorOpen = false;\n }\n close(): void {\n this.windowState = \"closed\";\n }\n async cleanup(signal: AbortSignal): Promise<AdapterCleanupResult> {\n this.beginCleanup();\n const context: AdapterCleanupContext = Object.freeze({ signal });\n const failures: unknown[] = [];\n let timedOut = signal.aborted;\n let stopWaiting: (() => void) | undefined;\n let onAbort: (() => void) | undefined;\n const aborted = new Promise<void>((resolve) => {\n stopWaiting = resolve;\n if (signal.aborted)\n resolve();\n else {\n onAbort = () => resolve();\n signal.addEventListener(\"abort\", onAbort, { once: true });\n }\n });\n try {\n while (!timedOut) {\n while (this.cleanups.length > 0 && !timedOut) {\n const cleanup = this.cleanups.pop()!;\n const outcome = await Promise.race([\n Promise.resolve().then(() => cleanup(context)).then(() => ({ _tag: \"settled\" as const }), (error: unknown) => ({ _tag: \"failed\" as const, error })),\n aborted.then(() => ({ _tag: \"aborted\" as const })),\n ]);\n if (outcome._tag === \"aborted\") {\n timedOut = true;\n }\n else if (outcome._tag === \"failed\") {\n failures.push(outcome.error);\n }\n }\n if (timedOut || this.cleanups.length > 0)\n continue;\n if (this.handoffs.size === 0)\n break;\n const outcome = await Promise.race([\n ...this.handoffs,\n aborted,\n ]).then(() => signal.aborted ? \"aborted\" as const : \"settled\" as const);\n if (outcome === \"aborted\")\n timedOut = true;\n }\n }\n finally {\n this.close();\n if (onAbort !== undefined)\n signal.removeEventListener(\"abort\", onAbort);\n stopWaiting?.();\n }\n return Object.freeze({ failures: Object.freeze(failures), timedOut });\n }\n}\ntype Entry = {\n shutdown(signal: AbortSignal): Promise<void>;\n release(signal: AbortSignal): Promise<void>;\n shutdownReceipt?: Promise<void>;\n};\nexport class ManagedAttemptResources implements AttemptResourceRegistry {\n private readonly entries: Entry[] = [];\n private closing = false;\n private releaseReceipt?: Promise<void>;\n async acquire<T>(acquire: () => Promise<T>, lifecycle: {\n shutdown: (resource: T, signal: AbortSignal) => Promise<void>;\n release: (resource: T, signal: AbortSignal) => Promise<void>;\n }): Promise<T> {\n if (this.closing)\n throw new Error(\"Attempt resource registry is closing\");\n const resource = await acquire();\n try {\n if (this.closing)\n throw new Error(\"Attempt resource registry is closing\");\n this.entries.push({\n shutdown: (signal) => lifecycle.shutdown(resource, signal),\n release: (signal) => lifecycle.release(resource, signal),\n });\n return resource;\n }\n catch (error) {\n const controller = new AbortController();\n await lifecycle.release(resource, controller.signal).catch(() => undefined);\n throw error;\n }\n }\n async shutdownAll(signal: AbortSignal): Promise<void> {\n const failures: unknown[] = [];\n for (const entry of this.entries.slice().reverse()) {\n entry.shutdownReceipt ??= entry.shutdown(signal);\n try {\n await entry.shutdownReceipt;\n }\n catch (error) {\n failures.push(error);\n }\n }\n if (failures.length > 0)\n throw new AggregateError(failures, \"Attempt managed resource shutdown failed\");\n }\n async releaseAll(signal: AbortSignal): Promise<void> {\n return this.releaseReceipt ??= this.releaseEntries(signal);\n }\n private async releaseEntries(signal: AbortSignal): Promise<void> {\n this.closing = true;\n const failures: unknown[] = [];\n for (const entry of this.entries.splice(0).reverse()) {\n try {\n await entry.release(signal);\n }\n catch (error) {\n failures.push(error);\n }\n }\n if (failures.length > 0)\n throw new AggregateError(failures, \"Attempt managed resource cleanup failed\");\n }\n}\n"]}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { EvidenceCoverage } from "../agents/types.cjs";
|
|
2
|
+
import type { AdapterCleanupContext } from "../adapter.cjs";
|
|
2
3
|
import type { AttemptResourceRegistry } from "../types.cjs";
|
|
3
4
|
/** Ordinary Adapters do not imply Agent conversation or usage evidence. */
|
|
4
5
|
export declare const adapterEvidenceUnavailable: EvidenceCoverage;
|
|
@@ -28,7 +29,7 @@ export declare class AdapterAttemptResources {
|
|
|
28
29
|
private readonly handoffs;
|
|
29
30
|
get window(): AdapterResourceWindow;
|
|
30
31
|
assertForwardOpen(): void;
|
|
31
|
-
onCleanup(cleanup: () => void | Promise<void>): void;
|
|
32
|
+
onCleanup(cleanup: (context: AdapterCleanupContext) => void | Promise<void>): void;
|
|
32
33
|
trackHandoff<Value>(promise: Promise<Value>): Promise<Value>;
|
|
33
34
|
beginCleanup(): void;
|
|
34
35
|
closeAuthoring(): void;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { EvidenceCoverage } from "../agents/types.mjs";
|
|
2
|
+
import type { AdapterCleanupContext } from "../adapter.mjs";
|
|
2
3
|
import type { AttemptResourceRegistry } from "../types.mjs";
|
|
3
4
|
/** Ordinary Adapters do not imply Agent conversation or usage evidence. */
|
|
4
5
|
export declare const adapterEvidenceUnavailable: EvidenceCoverage;
|
|
@@ -28,7 +29,7 @@ export declare class AdapterAttemptResources {
|
|
|
28
29
|
private readonly handoffs;
|
|
29
30
|
get window(): AdapterResourceWindow;
|
|
30
31
|
assertForwardOpen(): void;
|
|
31
|
-
onCleanup(cleanup: () => void | Promise<void>): void;
|
|
32
|
+
onCleanup(cleanup: (context: AdapterCleanupContext) => void | Promise<void>): void;
|
|
32
33
|
trackHandoff<Value>(promise: Promise<Value>): Promise<Value>;
|
|
33
34
|
beginCleanup(): void;
|
|
34
35
|
closeAuthoring(): void;
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { EvidenceCoverage } from "../agents/types.js";
|
|
2
|
+
import type { AdapterCleanupContext } from "../adapter.js";
|
|
2
3
|
import type { AttemptResourceRegistry } from "../types.js";
|
|
3
4
|
/** Ordinary Adapters do not imply Agent conversation or usage evidence. */
|
|
4
5
|
export declare const adapterEvidenceUnavailable: EvidenceCoverage;
|
|
@@ -28,7 +29,7 @@ export declare class AdapterAttemptResources {
|
|
|
28
29
|
private readonly handoffs;
|
|
29
30
|
get window(): AdapterResourceWindow;
|
|
30
31
|
assertForwardOpen(): void;
|
|
31
|
-
onCleanup(cleanup: () => void | Promise<void>): void;
|
|
32
|
+
onCleanup(cleanup: (context: AdapterCleanupContext) => void | Promise<void>): void;
|
|
32
33
|
trackHandoff<Value>(promise: Promise<Value>): Promise<Value>;
|
|
33
34
|
beginCleanup(): void;
|
|
34
35
|
closeAuthoring(): void;
|
package/dist/runner/attempt.cjs
CHANGED
|
@@ -235,6 +235,7 @@ function runAttemptEffect(a, opts, sandboxSem, { buildLocators, preparedSetupPre
|
|
|
235
235
|
// release 是不是超时触发的,只在超时路径补折叠证据,正常收尾路径不重复做(见文件顶部
|
|
236
236
|
// Effect.timeoutTo 调用点的注释)。
|
|
237
237
|
let timedOut = false;
|
|
238
|
+
let deadlineError;
|
|
238
239
|
let timeoutDiff;
|
|
239
240
|
let fileChangesCapture;
|
|
240
241
|
let timeoutFileChangesCapture;
|
|
@@ -466,6 +467,7 @@ ${recentLogs.map((l) => ` · ${l}`).join("\n")}`;
|
|
|
466
467
|
timeout: { trigger: "attempt-deadline", limitMs: timeoutMs, source: timeoutSource },
|
|
467
468
|
...(rest.trim() !== "" ? { stack: rest } : {}),
|
|
468
469
|
};
|
|
470
|
+
deadlineError = error;
|
|
469
471
|
recorder.failCurrent();
|
|
470
472
|
// `timeoutTo` 已经赢得 deadline:先同步关闭所有作者/Core 修改入口,
|
|
471
473
|
// 再标记并 abort 协作式 adapter。同步 abort listener 因而也不能追加断言。
|
|
@@ -1159,7 +1161,9 @@ ${recentLogs.map((l) => ` · ${l}`).join("\n")}`;
|
|
|
1159
1161
|
const raw = effect_1.Cause.squash(cause);
|
|
1160
1162
|
const phase = (sendActive ? "agent.run" : lastPhase) ?? "eval.run";
|
|
1161
1163
|
declareFailure(phase, raw);
|
|
1162
|
-
const error =
|
|
1164
|
+
const error = timedOut && deadlineError !== undefined
|
|
1165
|
+
? deadlineError
|
|
1166
|
+
: errorFromThrown(raw, sendActive ? "agent.run" : lastPhase, attemptTimeout);
|
|
1163
1167
|
const fallback = {
|
|
1164
1168
|
...base,
|
|
1165
1169
|
durationMs: recorder.offsetNow(),
|
|
@@ -1285,8 +1289,8 @@ function runAdapterAttemptBody(input) {
|
|
|
1285
1289
|
// A synchronous plain object is validated before Promise assimilation;
|
|
1286
1290
|
// async factories are validated only after their Promise settles.
|
|
1287
1291
|
return created instanceof Promise
|
|
1288
|
-
? created.then((value) => (0, adapter_ts_1.bindAdapterEvalContext)(core, value, () => resources.assertForwardOpen()))
|
|
1289
|
-
: (0, adapter_ts_1.bindAdapterEvalContext)(core, created, () => resources.assertForwardOpen());
|
|
1292
|
+
? created.then((value) => (0, adapter_ts_1.bindAdapterEvalContext)(core, value, adapter, () => resources.assertForwardOpen()))
|
|
1293
|
+
: (0, adapter_ts_1.bindAdapterEvalContext)(core, created, adapter, () => resources.assertForwardOpen());
|
|
1290
1294
|
}));
|
|
1291
1295
|
if (effect_1.Exit.isSuccess(createExit)) {
|
|
1292
1296
|
context = createExit.value;
|