niceeval 0.16.2 → 0.17.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/dist/cli/bootstrap.cjs +7 -1
- package/dist/cli/bootstrap.cjs.map +1 -1
- package/dist/cli/project-configuration.cjs +8 -11
- package/dist/cli/project-configuration.cjs.map +1 -1
- package/dist/expect/index.cjs.map +1 -1
- package/dist/expect/index.d.cts +1 -0
- package/dist/expect/index.d.mts +1 -0
- package/dist/expect/index.d.ts +1 -0
- package/dist/experiment/host/cli/contribution.cjs +6 -11
- package/dist/experiment/host/cli/contribution.cjs.map +1 -1
- package/dist/experiment/host/cli/contribution.d.cts +0 -16
- package/dist/experiment/host/cli/contribution.d.mts +0 -16
- package/dist/experiment/host/cli/contribution.d.ts +0 -16
- package/dist/experiment/host/operations.cjs +3 -3
- package/dist/experiment/host/operations.cjs.map +1 -1
- package/dist/experiment/host/types.cjs.map +1 -1
- package/dist/experiment/host/types.d.cts +0 -4
- package/dist/experiment/host/types.d.mts +0 -4
- package/dist/experiment/host/types.d.ts +0 -4
- package/dist/fresh-import.cjs +2 -2
- package/dist/fresh-import.cjs.map +1 -1
- package/dist/fresh-import.d.cts +3 -3
- package/dist/fresh-import.d.mts +3 -3
- package/dist/fresh-import.d.ts +3 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +1 -0
- package/dist/index.d.mts +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/inspection/codec.cjs.map +1 -1
- package/dist/inspection/codec.d.cts +1 -1
- package/dist/inspection/codec.d.mts +1 -1
- package/dist/inspection/codec.d.ts +1 -1
- package/dist/inspection/facts.cjs +66 -9
- package/dist/inspection/facts.cjs.map +1 -1
- package/dist/inspection/facts.d.cts +4 -0
- package/dist/inspection/facts.d.mts +4 -0
- package/dist/inspection/facts.d.ts +4 -0
- package/dist/inspection/facts.js +4 -2
- package/dist/inspection/index.cjs +1 -3
- package/dist/inspection/index.cjs.map +1 -1
- package/dist/inspection/index.d.cts +1 -1
- package/dist/inspection/index.d.mts +1 -1
- package/dist/inspection/index.d.ts +1 -1
- package/dist/inspection/index.js +44 -48
- package/dist/inspection/limits.cjs +3 -1
- package/dist/inspection/limits.cjs.map +1 -1
- package/dist/inspection/limits.d.cts +2 -0
- package/dist/inspection/limits.d.mts +2 -0
- package/dist/inspection/limits.d.ts +2 -0
- package/dist/inspection/limits.js +6 -4
- package/dist/inspection/project-source.cjs +4 -1
- package/dist/inspection/project-source.cjs.map +1 -1
- package/dist/inspection/protocol.cjs +10 -18
- package/dist/inspection/protocol.cjs.map +1 -1
- package/dist/inspection/protocol.d.cts +111 -173
- package/dist/inspection/protocol.d.mts +111 -173
- package/dist/inspection/protocol.d.ts +111 -173
- package/dist/inspection/public.mjs +73 -109
- package/dist/inspection/results.cjs +12 -48
- package/dist/inspection/results.cjs.map +1 -1
- package/dist/inspection/results.d.cts +124 -122
- package/dist/inspection/results.d.mts +124 -122
- package/dist/inspection/results.d.ts +124 -122
- package/dist/inspection/results.js +16 -20
- package/dist/inspection/select.cjs +80 -117
- package/dist/inspection/select.cjs.map +1 -1
- package/dist/inspection/source.cjs +14 -15
- package/dist/inspection/source.cjs.map +1 -1
- package/dist/inspection/source.d.cts +6 -3
- package/dist/inspection/source.d.mts +6 -3
- package/dist/inspection/source.d.ts +6 -3
- package/dist/inspection/trace.cjs +1 -1
- package/dist/inspection/trace.cjs.map +1 -1
- package/dist/load-config.cjs +17 -11
- package/dist/load-config.cjs.map +1 -1
- package/dist/load-config.d.cts +3 -2
- package/dist/load-config.d.mts +3 -2
- package/dist/load-config.d.ts +3 -2
- package/dist/o11y/adapter-usage-projection.cjs +5 -1
- package/dist/o11y/adapter-usage-projection.cjs.map +1 -1
- package/dist/o11y/adapter-usage-projection.d.cts +109 -1
- package/dist/o11y/adapter-usage-projection.d.mts +109 -1
- package/dist/o11y/adapter-usage-projection.d.ts +109 -1
- package/dist/o11y/cache-read.cjs +113 -0
- package/dist/o11y/cache-read.cjs.map +1 -0
- package/dist/o11y/cache-read.d.cts +80 -0
- package/dist/o11y/cache-read.d.mts +80 -0
- package/dist/o11y/cache-read.d.ts +80 -0
- package/dist/o11y/cache-read.js +8 -0
- package/dist/o11y/cache-read.js.map +1 -0
- package/dist/o11y/eval-usage.cjs +4 -1
- package/dist/o11y/eval-usage.cjs.map +1 -1
- package/dist/o11y/eval-usage.d.cts +4 -1
- package/dist/o11y/eval-usage.d.mts +4 -1
- package/dist/o11y/eval-usage.d.ts +4 -1
- package/dist/record/host/sqlite-host.cjs +188 -53
- package/dist/record/host/sqlite-host.cjs.map +1 -1
- package/dist/record/host/sqlite-host.d.cts +37 -1
- package/dist/record/host/sqlite-host.d.mts +37 -1
- package/dist/record/host/sqlite-host.d.ts +37 -1
- package/dist/record/host/sqlite-host.js +16 -8
- package/dist/record/maintenance/runtime.cjs +3 -3
- package/dist/record/maintenance/runtime.cjs.map +1 -1
- package/dist/record/sqlite/admission-repository.cjs +18 -18
- package/dist/record/sqlite/admission-repository.cjs.map +1 -1
- package/dist/record/sqlite/case-repository.cjs +6 -6
- package/dist/record/sqlite/case-repository.cjs.map +1 -1
- package/dist/record/sqlite/coordination-repository.cjs +25 -25
- package/dist/record/sqlite/coordination-repository.cjs.map +1 -1
- package/dist/record/sqlite/current-schema.cjs +115 -111
- package/dist/record/sqlite/current-schema.cjs.map +1 -1
- package/dist/record/sqlite/current-schema.d.cts +3 -3
- package/dist/record/sqlite/current-schema.d.mts +3 -3
- package/dist/record/sqlite/current-schema.d.ts +3 -3
- package/dist/record/sqlite/database.cjs +56 -53
- package/dist/record/sqlite/database.cjs.map +1 -1
- package/dist/record/sqlite/index.cjs +3 -1
- package/dist/record/sqlite/index.cjs.map +1 -1
- package/dist/record/sqlite/index.d.cts +5 -2
- package/dist/record/sqlite/index.d.mts +5 -2
- package/dist/record/sqlite/index.d.ts +5 -2
- package/dist/record/sqlite/legacy-schema-018.cjs +443 -0
- package/dist/record/sqlite/legacy-schema-018.cjs.map +1 -0
- package/dist/record/sqlite/legacy-schema-018.d.cts +6 -0
- package/dist/record/sqlite/legacy-schema-018.d.mts +6 -0
- package/dist/record/sqlite/legacy-schema-018.d.ts +6 -0
- package/dist/record/sqlite/legacy-schema-018.js +6 -0
- package/dist/record/sqlite/legacy-schema-018.js.map +1 -0
- package/dist/record/sqlite/migration.cjs +105 -46
- package/dist/record/sqlite/migration.cjs.map +1 -1
- package/dist/record/sqlite/migration.d.cts +2 -1
- package/dist/record/sqlite/migration.d.mts +2 -1
- package/dist/record/sqlite/migration.d.ts +2 -1
- package/dist/record/sqlite/portable-capture.cjs +13 -13
- package/dist/record/sqlite/portable-capture.cjs.map +1 -1
- package/dist/record/sqlite/registry-repository.cjs +22 -22
- package/dist/record/sqlite/registry-repository.cjs.map +1 -1
- package/dist/record/sqlite/schema.cjs +10 -2
- package/dist/record/sqlite/schema.cjs.map +1 -1
- package/dist/record/sqlite/schema.d.cts +4 -1
- package/dist/record/sqlite/schema.d.mts +4 -1
- package/dist/record/sqlite/schema.d.ts +4 -1
- package/dist/record/sqlite/schema.js +20 -14
- package/dist/record/sqlite/storage-worker.cjs +1 -1
- package/dist/record/sqlite/storage-worker.cjs.map +1 -1
- package/dist/record/sqlite/storage.cjs +316 -232
- package/dist/record/sqlite/storage.cjs.map +1 -1
- package/dist/record/sqlite/storage.d.cts +10 -2
- package/dist/record/sqlite/storage.d.mts +10 -2
- package/dist/record/sqlite/storage.d.ts +10 -2
- package/dist/record/sqlite/storage.js +54 -50
- package/dist/record/sqlite/types.cjs +1 -1
- package/dist/record/sqlite/types.cjs.map +1 -1
- package/dist/record/sqlite/types.d.cts +13 -1
- package/dist/record/sqlite/types.d.mts +13 -1
- package/dist/record/sqlite/types.d.ts +13 -1
- package/dist/run/cli/contribution.cjs +17 -12
- package/dist/run/cli/contribution.cjs.map +1 -1
- package/dist/run/host/lifecycle-adapter.cjs +1 -1
- package/dist/run/host/lifecycle-adapter.cjs.map +1 -1
- package/dist/run/storage/owner-identity.cjs +78 -16
- package/dist/run/storage/owner-identity.cjs.map +1 -1
- package/dist/run/storage/owner-identity.d.cts +2 -1
- package/dist/run/storage/owner-identity.d.mts +2 -1
- package/dist/run/storage/owner-identity.d.ts +2 -1
- package/dist/run/storage/sqlite.cjs +55 -55
- package/dist/run/storage/sqlite.cjs.map +1 -1
- package/dist/runner/accept.cjs +12 -42
- package/dist/runner/accept.cjs.map +1 -1
- package/dist/runner/accept.d.cts +2 -3
- package/dist/runner/accept.d.mts +2 -3
- package/dist/runner/accept.d.ts +2 -3
- package/dist/runner/adapter-usage.cjs +2 -2
- package/dist/runner/adapter-usage.cjs.map +1 -1
- package/dist/runner/adoption.cjs +14 -26
- package/dist/runner/adoption.cjs.map +1 -1
- package/dist/runner/adoption.d.cts +5 -13
- package/dist/runner/adoption.d.mts +5 -13
- package/dist/runner/adoption.d.ts +5 -13
- package/dist/runner/adoption.js +2 -4
- package/dist/runner/record.cjs +24 -18
- package/dist/runner/record.cjs.map +1 -1
- package/dist/runner/rename-experiment.cjs +5 -7
- package/dist/runner/rename-experiment.cjs.map +1 -1
- package/dist/runner/reuse-plan.cjs +37 -18
- package/dist/runner/reuse-plan.cjs.map +1 -1
- package/dist/runner/reuse-plan.d.cts +4 -1
- package/dist/runner/reuse-plan.d.mts +4 -1
- package/dist/runner/reuse-plan.d.ts +4 -1
- package/dist/runner/setup-prefix-plan.cjs +17 -12
- package/dist/runner/setup-prefix-plan.cjs.map +1 -1
- package/dist/runner/setup-prefix-plan.d.cts +0 -2
- package/dist/runner/setup-prefix-plan.d.mts +0 -2
- package/dist/runner/setup-prefix-plan.d.ts +0 -2
- package/dist/runner/setup-prefix-plan.js +8 -12
- package/dist/sandbox/backend.cjs +10 -1
- package/dist/sandbox/backend.cjs.map +1 -1
- package/dist/sandbox/backend.d.cts +16 -8
- package/dist/sandbox/backend.d.mts +16 -8
- package/dist/sandbox/backend.d.ts +16 -8
- package/dist/sandbox/backend.js +28 -26
- package/dist/sandbox/docker.cjs +7 -1
- package/dist/sandbox/docker.cjs.map +1 -1
- package/dist/sandbox/e2b-cache-repository.cjs +13 -3
- package/dist/sandbox/e2b-cache-repository.cjs.map +1 -1
- package/dist/sandbox/e2b-cache-repository.d.cts +3 -0
- package/dist/sandbox/e2b-cache-repository.d.mts +3 -0
- package/dist/sandbox/e2b-cache-repository.d.ts +3 -0
- package/dist/sandbox/e2b-cache-repository.js +16 -12
- package/dist/sandbox/e2b.cjs +2 -2
- package/dist/sandbox/e2b.cjs.map +1 -1
- package/dist/sandbox/incus/materialize.cjs +1 -1
- package/dist/sandbox/incus/materialize.cjs.map +1 -1
- package/dist/show/contribution.cjs +3 -3
- package/dist/show/contribution.cjs.map +1 -1
- package/dist/show/model.cjs +14 -13
- package/dist/show/model.cjs.map +1 -1
- package/dist/show/model.d.cts +7 -7
- package/dist/show/model.d.mts +7 -7
- package/dist/show/model.d.ts +7 -7
- package/dist/show/render.cjs +14 -0
- package/dist/show/render.cjs.map +1 -1
- package/dist/user-database/storage-worker.cjs +13 -3
- package/dist/user-database/storage-worker.cjs.map +1 -1
- package/dist/view/app-dist/.vite/manifest.json +2 -2
- package/dist/view/app-dist/assets/{index-CmVoXbwG.js → index-B3ijZRph.js} +17 -17
- package/dist/view/app-dist/assets/{quality-cost-scatter-BuLISaH4.js → quality-cost-scatter-B--DfJ9s.js} +1 -1
- package/dist/view/app-dist/index.html +1 -1
- package/dist/view/application-runtime.cjs +8 -0
- package/dist/view/application-runtime.cjs.map +1 -0
- package/dist/view/application-runtime.d.cts +9 -0
- package/dist/view/application-runtime.d.mts +9 -0
- package/dist/view/application-runtime.d.ts +9 -0
- package/dist/view/application-runtime.js +6 -0
- package/dist/view/application-runtime.js.map +1 -0
- package/dist/view/cli/contribution.cjs +5 -2
- package/dist/view/cli/contribution.cjs.map +1 -1
- package/dist/view/cli/contribution.d.cts +2 -1
- package/dist/view/cli/contribution.d.mts +2 -1
- package/dist/view/cli/contribution.d.ts +2 -1
- package/dist/view/function-runtime.mjs +1019 -456
- package/dist/view/http-protocol.d.cts +1 -9
- package/dist/view/http-protocol.d.mts +1 -9
- package/dist/view/http-protocol.d.ts +1 -9
- package/dist/view/inspection-host.cjs +39 -30
- package/dist/view/inspection-host.cjs.map +1 -1
- package/dist/view/inspection-host.d.cts +7545 -2
- package/dist/view/inspection-host.d.mts +7545 -2
- package/dist/view/inspection-host.d.ts +7545 -2
- package/dist/view/server.cjs +8 -5
- package/dist/view/server.cjs.map +1 -1
- package/dist/view/server.d.cts +4 -2
- package/dist/view/server.d.mts +4 -2
- package/dist/view/server.d.ts +4 -2
- package/docs-site/zh/reference/cli.mdx +1 -2
- package/docs-site/zh/tutorials/control-run-cost.mdx +22 -0
- package/docs-site/zh/tutorials/niceeval-taste-application.mdx +21 -0
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration.js","sourceRoot":"","sources":["migration.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, randomUUID } from \"node:crypto\";\nimport { chmodSync, closeSync, copyFileSync, fsyncSync, lstatSync, openSync, renameSync, unlinkSync } from \"node:fs\";\nimport { dirname } from \"node:path\";\nimport { backup, constants, DatabaseSync, type SQLOutputValue } from \"node:sqlite\";\nimport { migrateLegacyClosureBytes, migrateLegacyRunBytes, type LegacyProjectDatabaseFormat } from \"../codec/legacy-run-context.ts\";\nimport { closeRecordDatabase, recordStatement, validateExactSchema, type RecordDatabase } from \"./database.ts\";\nimport { sqliteError } from \"./errors.ts\";\nimport { exactLogicalSealIdentity } from \"./seal.ts\";\nimport { RECORD_SQLITE_BASELINE_FINGERPRINT, RECORD_SQLITE_BASELINE_SQL, RECORD_SQLITE_017_BASELINE_SQL, RECORD_SQLITE_017_FINGERPRINT, RECORD_SQLITE_017_TABLE_NAMES, RECORD_SQLITE_LEGACY_BASELINE_SQL, RECORD_SQLITE_LEGACY_FINGERPRINTS, RECORD_SQLITE_LEGACY_TABLE_NAMES, RECORD_SQLITE_PREPARED_SEAL_TEMP_SQL, } from \"./schema.ts\";\nimport { collectRunSealEntries, verifyAllSealedRuns } from \"./storage.ts\";\nimport { RECORD_SQLITE_FORMAT, RECORD_SQLITE_STORAGE_REVISION, type SealEntry } from \"./types.ts\";\nimport { validatePortableRecordDatabase } from \"./portable-capture.ts\";\ntype MigrationResult = \"absent\" | \"current\" | \"migrated\";\ntype Row = Record<string, SQLOutputValue>;\nconst LEGACY_FORMATS = new Set<LegacyProjectDatabaseFormat>([\n \"niceeval.project-database/0.15\",\n \"niceeval.project-database/0.16\",\n \"niceeval.project-database/0.17\",\n]);\ntype HistoricalSchemaKind = \"legacy-015-016\" | \"legacy-017\";\nconst READ_DENIED = new Set([\n constants.SQLITE_ATTACH,\n constants.SQLITE_DETACH,\n constants.SQLITE_INSERT,\n constants.SQLITE_UPDATE,\n constants.SQLITE_DELETE,\n constants.SQLITE_CREATE_INDEX,\n constants.SQLITE_CREATE_TABLE,\n constants.SQLITE_CREATE_TEMP_INDEX,\n constants.SQLITE_CREATE_TEMP_TABLE,\n constants.SQLITE_CREATE_TEMP_TRIGGER,\n constants.SQLITE_CREATE_TEMP_VIEW,\n constants.SQLITE_CREATE_TRIGGER,\n constants.SQLITE_CREATE_VIEW,\n constants.SQLITE_DROP_INDEX,\n constants.SQLITE_DROP_TABLE,\n constants.SQLITE_DROP_TEMP_INDEX,\n constants.SQLITE_DROP_TEMP_TABLE,\n constants.SQLITE_DROP_TEMP_TRIGGER,\n constants.SQLITE_DROP_TEMP_VIEW,\n constants.SQLITE_DROP_TRIGGER,\n constants.SQLITE_DROP_VIEW,\n constants.SQLITE_ALTER_TABLE,\n constants.SQLITE_REINDEX,\n constants.SQLITE_ANALYZE,\n constants.SQLITE_CREATE_VTABLE,\n constants.SQLITE_DROP_VTABLE,\n]);\nconst COPY_ORDER = [\n \"coordination_state\",\n \"coordination_tickets\",\n \"runs\",\n \"slots\",\n \"attempts\",\n \"members\",\n \"attachments\",\n \"attachment_references\",\n \"collection_items\",\n \"contents\",\n \"content_chunks\",\n \"run_publication_clock\",\n \"run_resources\",\n \"run_expected_slots\",\n \"attempt_publications\",\n \"run_slot_bindings\",\n \"run_slot_absences\",\n \"run_recoveries\",\n \"run_deletion_tombstones\",\n \"invocation_sessions\",\n \"invocation_session_experiments\",\n \"invocation_session_queued_attempts\",\n \"case_locks\",\n \"teardown_obligations\",\n \"shared_state_generations\",\n \"kept_sandboxes\",\n \"kept_sandbox_operation_leases\",\n] as const;\nfunction fail(message: string, cause?: unknown): never {\n throw sqliteError(\"record-schema-unsupported\", \"auto-migrate\", message, cause);\n}\nfunction text(value: SQLOutputValue | undefined, field: string): string {\n if (typeof value !== \"string\")\n fail(`${field} is not text`);\n return value;\n}\nfunction integer(value: SQLOutputValue | undefined, field: string): number {\n const number = typeof value === \"bigint\" ? Number(value) : value;\n if (typeof number !== \"number\" || !Number.isSafeInteger(number))\n fail(`${field} is not a safe integer`);\n return number;\n}\nfunction normalizeSql(sql: string): string {\n return sql.replace(/\\s+/gu, \" \").replace(/\\s*([(),])\\s*/gu, \"$1\").trim().replace(/;$/u, \"\");\n}\nfunction schemaRows(db: DatabaseSync): readonly string[] {\n const rows = db.prepare(`SELECT type,name,tbl_name,sql FROM sqlite_schema\n WHERE name NOT LIKE 'sqlite_stat%' ORDER BY type,name LIMIT 257`).all() as unknown as readonly Row[];\n if (rows.length > 256)\n fail(\"database schema exceeds the bounded object allowlist\");\n return rows.map((row) => JSON.stringify([\n text(row.type, \"sqlite_schema.type\"),\n text(row.name, \"sqlite_schema.name\"),\n text(row.tbl_name, \"sqlite_schema.tbl_name\"),\n row.sql === null ? null : normalizeSql(text(row.sql, \"sqlite_schema.sql\")),\n ]));\n}\nconst expectedLegacySchemaRows = (() => {\n const db = new DatabaseSync(\":memory:\", { allowExtension: false, defensive: true, readBigInts: true });\n try {\n db.exec(RECORD_SQLITE_LEGACY_BASELINE_SQL);\n return Object.freeze(schemaRows(db));\n }\n finally {\n db.close();\n }\n})();\nconst expected017SchemaRows = (() => {\n const db = new DatabaseSync(\":memory:\", { allowExtension: false, defensive: true, readBigInts: true });\n try {\n db.exec(RECORD_SQLITE_017_BASELINE_SQL);\n return Object.freeze(schemaRows(db));\n }\n finally {\n db.close();\n }\n})();\nconst expectedCurrentSchemaRows = (() => {\n const db = new DatabaseSync(\":memory:\", { allowExtension: false, defensive: true, readBigInts: true });\n try {\n db.exec(RECORD_SQLITE_BASELINE_SQL);\n return Object.freeze(schemaRows(db));\n }\n finally {\n db.close();\n }\n})();\nfunction historicalSchemaKind(db: DatabaseSync): HistoricalSchemaKind {\n const actual = schemaRows(db);\n if (actual.length === expectedLegacySchemaRows.length && actual.every((row, index) => row === expectedLegacySchemaRows[index]))\n return \"legacy-015-016\";\n if (actual.length === expected017SchemaRows.length && actual.every((row, index) => row === expected017SchemaRows[index]))\n return \"legacy-017\";\n fail(\"historical database objects do not match an exact 0.15/0.16/0.17 schema allowlist\");\n}\nfunction exactSchemaKind(db: DatabaseSync): HistoricalSchemaKind | \"current\" {\n const actual = schemaRows(db);\n if (actual.length === expectedLegacySchemaRows.length && actual.every((row, index) => row === expectedLegacySchemaRows[index])) {\n return \"legacy-015-016\";\n }\n if (actual.length === expected017SchemaRows.length && actual.every((row, index) => row === expected017SchemaRows[index])) {\n return \"legacy-017\";\n }\n if (actual.length === expectedCurrentSchemaRows.length && actual.every((row, index) => row === expectedCurrentSchemaRows[index])) {\n return \"current\";\n }\n fail(\"private portable database objects do not match an exact current or migratable schema allowlist\");\n}\n/** Classifies only an already-private capture, before reading domain metadata. */\nexport function capturedRecordSchemaKind(path: string): \"legacy\" | \"current\" {\n const db = openRaw(path, true, 0);\n try {\n return exactSchemaKind(db) === \"current\" ? \"current\" : \"legacy\";\n }\n finally {\n db.close();\n }\n}\nfunction privateReaderAuthorizer(action: number, arg1: string | null, arg2: string | null, dbName: string | null): number {\n // All TEMP objects were installed from fixed SQL before this authorizer.\n // The main database is read-only at the VFS level; allowing private TEMP\n // work lets the existing bounded streaming Seal verifier spill and sort.\n if (dbName === \"temp\")\n return constants.SQLITE_OK;\n if (dbName !== null && dbName !== \"main\")\n return constants.SQLITE_DENY;\n if (READ_DENIED.has(action))\n return constants.SQLITE_DENY;\n if (action === constants.SQLITE_PRAGMA && arg1 !== \"quick_check\" && arg1 !== \"foreign_key_check\" &&\n arg1 !== \"secure_delete\" && arg1 !== \"table_info\") {\n return constants.SQLITE_DENY;\n }\n if (action === constants.SQLITE_FUNCTION && arg2?.toLowerCase() === \"load_extension\")\n return constants.SQLITE_DENY;\n return constants.SQLITE_OK;\n}\nfunction updatePart(hash: ReturnType<typeof createHash>, value: SQLOutputValue): void {\n let tag: number;\n let bytes: Uint8Array;\n if (value === null) {\n tag = 0;\n bytes = new Uint8Array();\n }\n else if (typeof value === \"string\") {\n tag = 1;\n bytes = new TextEncoder().encode(value);\n }\n else if (typeof value === \"number\" || typeof value === \"bigint\") {\n tag = 2;\n bytes = new TextEncoder().encode(String(value));\n }\n else {\n tag = 3;\n bytes = value;\n }\n const length = new Uint8Array(4);\n new DataView(length.buffer).setUint32(0, bytes.byteLength, false);\n hash.update(Uint8Array.of(tag));\n hash.update(length);\n hash.update(bytes);\n}\n/** Exact typed digest of every legacy table row, independent of SQLite page layout. */\nfunction legacyFactsDigest(db: DatabaseSync, kind: HistoricalSchemaKind): string {\n const hash = createHash(\"sha256\").update(\"niceeval.project-database.legacy-facts/v1\\0\");\n const tables: readonly string[] = kind === \"legacy-017\" ? RECORD_SQLITE_017_TABLE_NAMES : RECORD_SQLITE_LEGACY_TABLE_NAMES;\n for (const table of tables) {\n hash.update(`${table}\\0`);\n const columns = db.prepare(`PRAGMA table_info(\"${table}\")`).all() as unknown as readonly Row[];\n if (columns.length === 0)\n fail(`legacy table ${table} has no columns`);\n const names = columns.map((column) => text(column.name, `${table}.column`));\n const primary = [...columns]\n .filter((column) => integer(column.pk, `${table}.pk`) > 0)\n .sort((left, right) => integer(left.pk, `${table}.pk`) - integer(right.pk, `${table}.pk`))\n .map((column) => text(column.name, `${table}.column`));\n const order = primary.length === 0 ? names : primary;\n const sql = `SELECT ${names.map((name) => `\"${name}\"`).join(\",\")} FROM \"${table}\" ORDER BY ${order.map((name) => `\"${name}\"`).join(\",\")}`;\n for (const row of db.prepare(sql).iterate() as unknown as Iterable<Row>) {\n hash.update(Uint8Array.of(0xff));\n for (const name of names)\n updatePart(hash, row[name]!);\n }\n }\n return hash.digest(\"hex\");\n}\nexport function projectDatabaseMigrationBackupPath(path: string, format: LegacyProjectDatabaseFormat): string {\n const version = format.slice(format.lastIndexOf(\"/\") + 1);\n return `${path}.pre-0.18-from-${version}.backup`;\n}\nfunction configure(db: DatabaseSync): void {\n db.enableLoadExtension(false);\n db.enableDefensive(true);\n db.exec(\"PRAGMA secure_delete=ON; PRAGMA foreign_keys=ON; PRAGMA trusted_schema=OFF; PRAGMA mmap_size=0; PRAGMA cache_size=-8192; PRAGMA temp_store=FILE; PRAGMA recursive_triggers=ON;\");\n}\nfunction openRaw(path: string, readOnly: boolean, timeout: number): DatabaseSync {\n const db = new DatabaseSync(path, {\n allowExtension: false,\n defensive: true,\n enableForeignKeyConstraints: true,\n readBigInts: true,\n readOnly,\n timeout,\n });\n configure(db);\n return db;\n}\nfunction legacyIdentity(db: DatabaseSync): {\n readonly format: LegacyProjectDatabaseFormat;\n readonly digest: string;\n} {\n const kind = historicalSchemaKind(db);\n const prefix = kind === \"legacy-017\" ? \"ne_\" : \"\";\n const row = db.prepare(`SELECT * FROM ${prefix}record_metadata WHERE singleton=1`).get() as Row | undefined;\n if (row === undefined)\n fail(\"legacy record_metadata singleton is missing\");\n const format = text(row.format, \"record_metadata.format\");\n if (!LEGACY_FORMATS.has(format as LegacyProjectDatabaseFormat))\n fail(`ProjectDatabase format ${format} is not auto-migratable`);\n const legacyFormat = format as LegacyProjectDatabaseFormat;\n if ((legacyFormat === \"niceeval.project-database/0.17\") !== (kind === \"legacy-017\")) {\n fail(`ProjectDatabase ${legacyFormat} does not match its exact historical schema`);\n }\n if (integer(row.storage_revision, \"record_metadata.storage_revision\") !== 1)\n fail(\"legacy storage revision is unsupported\");\n const expectedFingerprint = legacyFormat === \"niceeval.project-database/0.17\"\n ? RECORD_SQLITE_017_FINGERPRINT\n : RECORD_SQLITE_LEGACY_FINGERPRINTS[legacyFormat];\n if (text(row.schema_fingerprint, \"record_metadata.schema_fingerprint\") !== expectedFingerprint) {\n fail(\"legacy schema fingerprint does not match its format\");\n }\n const secureDelete = db.prepare(\"PRAGMA secure_delete\").get() as Row | undefined;\n if (secureDelete === undefined || integer(secureDelete.secure_delete, \"secure_delete\") !== 1)\n fail(\"legacy database does not require secure_delete\");\n const coordination = db.prepare(`SELECT operational_generation FROM ${prefix}coordination_state WHERE singleton=1`).get() as Row | undefined;\n if (coordination === undefined || text(coordination.operational_generation, \"coordination_state.operational_generation\") !== text(row.storage_generation, \"record_metadata.storage_generation\")) {\n fail(\"legacy coordination generation does not match record metadata\");\n }\n if (legacyFormat === \"niceeval.project-database/0.17\") {\n const migration = db.prepare(\"SELECT state FROM ne_migration_state WHERE singleton=1\").get() as Row | undefined;\n const state = migration === undefined ? \"missing\" : text(migration.state, \"migration_state.state\");\n if (state !== \"ready\") {\n fail(`historical ProjectDatabase 0.17 migration state is ${state}; open it with the original NiceEval version and finish recovery before upgrading`);\n }\n }\n return Object.freeze({ format: legacyFormat, digest: legacyFactsDigest(db, kind) });\n}\nfunction assertLegacyIdle(db: DatabaseSync, format: LegacyProjectDatabaseFormat): void {\n const prefix = format === \"niceeval.project-database/0.17\" ? \"ne_\" : \"\";\n const metadata = db.prepare(`SELECT barrier_state FROM ${prefix}record_metadata WHERE singleton=1`).get() as Row;\n const coordination = db.prepare(`SELECT writer_ticket_id,barrier_id FROM ${prefix}coordination_state WHERE singleton=1`).get() as Row;\n const work = db.prepare(`SELECT\n (SELECT count(*) FROM ${prefix}coordination_tickets)+\n (SELECT count(*) FROM ${prefix}runs WHERE status!='sealed')+\n (SELECT count(*) FROM ${prefix}attempts WHERE publication_state!='published')+\n (SELECT count(*) FROM ${prefix}run_resources WHERE terminal_state IS NULL)+\n (SELECT count(*) FROM ${prefix}invocation_sessions WHERE state IN ('active','recovering'))+\n (SELECT count(*) FROM ${prefix}invocation_session_queued_attempts)+\n (SELECT count(*) FROM ${prefix}case_locks)+\n (SELECT count(*) FROM ${prefix}teardown_obligations)+\n (SELECT count(*) FROM ${prefix}shared_state_generations s WHERE state_kind!='free' AND generation=(SELECT max(generation) FROM ${prefix}shared_state_generations WHERE state_key=s.state_key))+\n (SELECT count(*) FROM ${prefix}kept_sandbox_operation_leases) AS count`).get() as Row;\n if (text(metadata.barrier_state, \"record_metadata.barrier_state\") === \"draining\" ||\n coordination.writer_ticket_id !== null || coordination.barrier_id !== null || integer(work.count, \"legacy active owner count\") !== 0) {\n fail(\"legacy ProjectDatabase has an active or unknown owner; stop the old NiceEval process and finish or recover its work first\");\n }\n}\nfunction assertLegacyPortable(db: DatabaseSync, format: LegacyProjectDatabaseFormat): void {\n const prefix = format === \"niceeval.project-database/0.17\" ? \"ne_\" : \"\";\n const metadata = db.prepare(`SELECT barrier_state,portable_generation,portable_revision,storage_generation\n FROM ${prefix}record_metadata WHERE singleton=1`).get() as Row | undefined;\n const coordination = db.prepare(`SELECT writer_ticket_id,barrier_id FROM ${prefix}coordination_state WHERE singleton=1`)\n .get() as Row | undefined;\n const clock = db.prepare(`SELECT revision FROM ${prefix}run_publication_clock WHERE singleton=1`).get() as Row | undefined;\n if (metadata === undefined || text(metadata.barrier_state, \"record_metadata.barrier_state\") !== \"portable\" ||\n text(metadata.portable_generation, \"record_metadata.portable_generation\") !==\n text(metadata.storage_generation, \"record_metadata.storage_generation\") ||\n clock === undefined || integer(metadata.portable_revision, \"record_metadata.portable_revision\") !==\n integer(clock.revision, \"run_publication_clock.revision\") ||\n coordination === undefined || coordination.writer_ticket_id !== null || coordination.barrier_id !== null) {\n fail(\"legacy private input does not prove a portable idle ProjectDatabase\");\n }\n assertLegacyIdle(db, format);\n}\nconst LEGACY_READ_ALIAS_TABLES = [\n \"record_metadata\",\n \"runs\",\n \"slots\",\n \"attempts\",\n \"members\",\n \"attachments\",\n \"attachment_references\",\n \"collection_items\",\n \"contents\",\n \"content_chunks\",\n \"run_seal_entries\",\n \"attempt_publications\",\n] as const;\nfunction installLegacyReadAliases(db: DatabaseSync, kind: HistoricalSchemaKind): void {\n const sourcePrefix = kind === \"legacy-017\" ? \"ne_\" : \"\";\n for (const table of LEGACY_READ_ALIAS_TABLES) {\n db.exec(`CREATE TEMP VIEW \"ne18_${table}\" AS SELECT * FROM main.\"${sourcePrefix}${table}\"`);\n }\n db.exec(RECORD_SQLITE_PREPARED_SEAL_TEMP_SQL);\n}\nfunction assertSqliteIntegrity(db: DatabaseSync): void {\n const integrity = db.prepare(\"PRAGMA quick_check\").all() as unknown as readonly Row[];\n if (integrity.length !== 1 || text(integrity[0]!.quick_check, \"quick_check\") !== \"ok\") {\n fail(\"private portable SQLite quick_check failed\");\n }\n if (db.prepare(\"PRAGMA foreign_key_check\").get() !== undefined) {\n fail(\"private portable SQLite foreign-key closure is invalid\");\n }\n}\n/**\n * No private capture obtains a writable SQLite connection before its hostile\n * read-only admission has proved an exact known schema and portable closure.\n */\nfunction admitPrivatePortable(path: string, deadlineEpochMs: number): void {\n const db = openRaw(path, true, 0);\n const connection: RecordDatabase = { db, path, mode: \"reader\", statements: new Map() };\n try {\n const kind = exactSchemaKind(db);\n if (kind !== \"current\")\n installLegacyReadAliases(db, kind);\n else\n db.exec(RECORD_SQLITE_PREPARED_SEAL_TEMP_SQL);\n db.setAuthorizer(privateReaderAuthorizer);\n assertSqliteIntegrity(db);\n if (kind !== \"current\") {\n const identity = legacyIdentity(db);\n assertLegacyPortable(db, identity.format);\n validateLegacySeals(connection, kind === \"legacy-017\" ? \"ne_\" : \"\");\n if (identity.format === \"niceeval.project-database/0.17\")\n validateFrozen017Payloads(connection);\n return;\n }\n validateExactSchema(connection);\n const state = currentState(db);\n if (state === undefined)\n fail(\"private current ProjectDatabase identity is missing\");\n const migrationState = text(state.state, \"migration_state.state\");\n if (migrationState === \"committed\") {\n const format = text(state.source_format, \"migration_state.source_format\") as LegacyProjectDatabaseFormat;\n if (!LEGACY_FORMATS.has(format))\n fail(\"committed migration source format is invalid\");\n assertBackup(projectDatabaseMigrationBackupPath(path, format), format, text(state.source_digest, \"migration_state.source_digest\"));\n }\n else if (migrationState !== \"ready\") {\n fail(\"private current ProjectDatabase migration state is invalid\");\n }\n validatePortableRecordDatabase(connection, deadlineEpochMs);\n }\n finally {\n closeRecordDatabase(connection);\n }\n}\nfunction assertBackup(path: string, format: LegacyProjectDatabaseFormat, digest: string): void {\n const db = openRaw(path, true, 0);\n try {\n const identity = legacyIdentity(db);\n if (identity.format !== format || identity.digest !== digest)\n fail(\"migration backup does not exactly match the locked legacy input\");\n }\n finally {\n db.close();\n }\n}\nfunction fsyncPath(path: string, directory = false): void {\n const descriptor = openSync(path, directory ? \"r\" : \"r+\");\n try {\n fsyncSync(descriptor);\n }\n finally {\n closeSync(descriptor);\n }\n}\nasync function ensureBackup(databasePath: string, format: LegacyProjectDatabaseFormat, digest: string): Promise<string> {\n const target = projectDatabaseMigrationBackupPath(databasePath, format);\n try {\n lstatSync(target);\n assertBackup(target, format, digest);\n return target;\n }\n catch (cause) {\n if (typeof cause !== \"object\" || cause === null || Reflect.get(cause, \"code\") !== \"ENOENT\")\n throw cause;\n }\n const temporary = `${target}.tmp-${process.pid}-${randomUUID()}`;\n const temporaryDescriptor = openSync(temporary, \"wx\", 0o600);\n try {\n // The path exists with private permissions before SQLite can copy a byte.\n }\n finally {\n closeSync(temporaryDescriptor);\n }\n let source: DatabaseSync | undefined;\n try {\n source = openRaw(databasePath, true, 0);\n await backup(source, temporary);\n }\n catch (cause) {\n try {\n unlinkSync(temporary);\n }\n catch { /* exact temporary may already be absent */ }\n throw cause;\n }\n finally {\n source?.close();\n }\n try {\n assertBackup(temporary, format, digest);\n fsyncPath(temporary);\n renameSync(temporary, target);\n fsyncPath(dirname(target), true);\n assertBackup(target, format, digest);\n return target;\n }\n catch (cause) {\n try {\n unlinkSync(temporary);\n }\n catch { /* exact temporary may already have been renamed */ }\n throw cause;\n }\n}\nfunction columns(db: DatabaseSync, table: string): readonly string[] {\n return (db.prepare(`PRAGMA table_info(\"${table}\")`).all() as unknown as readonly Row[])\n .map((row) => text(row.name, `${table}.column`));\n}\nfunction copyTable(db: DatabaseSync, table: string, sourcePrefix: \"\" | \"ne_\", overrides: Readonly<Record<string, string>> = {}): void {\n const sourceTable = `${sourcePrefix}${table}`;\n const names = columns(db, sourceTable);\n const target = names.map((name) => `\"${name}\"`).join(\",\");\n const source = names.map((name) => overrides[name] ?? `\"${name}\"`).join(\",\");\n db.exec(`INSERT INTO \"ne18_${table}\"(${target}) SELECT ${source} FROM \"${sourceTable}\"`);\n}\nfunction equalEntry(row: Row, entry: SealEntry, ordinal: number): boolean {\n return integer(row.ordinal, \"run_seal_entries.ordinal\") === ordinal &&\n text(row.entry_kind, \"run_seal_entries.entry_kind\") === entry.kind &&\n text(row.logical_identity, \"run_seal_entries.logical_identity\") === entry.logicalIdentity &&\n text(row.digest, \"run_seal_entries.digest\") === entry.digest;\n}\nfunction validateLegacySeals(connection: RecordDatabase, sourcePrefix: \"\" | \"ne_\"): readonly string[] {\n const runIds: string[] = [];\n for (const run of connection.db.prepare(`SELECT run_id,candidate_seal_identity,candidate_seal_entry_count,\n candidate_seal_staged_count,logical_seal_identity FROM ${sourcePrefix}runs ORDER BY run_id`).iterate() as unknown as Iterable<Row>) {\n const runId = text(run.run_id, \"runs.run_id\");\n const entries = collectRunSealEntries(connection, runId);\n const stored = connection.db.prepare(`SELECT ordinal,entry_kind,logical_identity,digest FROM ${sourcePrefix}run_seal_entries\n WHERE run_id=? ORDER BY ordinal`).all(runId) as unknown as readonly Row[];\n const identity = exactLogicalSealIdentity(entries);\n if (stored.length !== entries.length || stored.some((row, ordinal) => !equalEntry(row, entries[ordinal]!, ordinal)) ||\n integer(run.candidate_seal_entry_count, \"runs.candidate_seal_entry_count\") !== entries.length ||\n integer(run.candidate_seal_staged_count, \"runs.candidate_seal_staged_count\") !== entries.length ||\n text(run.candidate_seal_identity, \"runs.candidate_seal_identity\") !== identity ||\n text(run.logical_seal_identity, \"runs.logical_seal_identity\") !== identity) {\n fail(`legacy Run ${runId} Seal does not match its exact stored closure`);\n }\n runIds.push(runId);\n }\n return Object.freeze(runIds);\n}\nfunction sameBytes(left: Uint8Array, right: Uint8Array): boolean {\n return left.byteLength === right.byteLength && left.every((byte, index) => byte === right[index]);\n}\n/** Runs the independently frozen 0.17 codecs without rewriting historical bytes. */\nfunction validateFrozen017Payloads(connection: RecordDatabase): void {\n const format = \"niceeval.project-database/0.17\";\n for (const row of connection.db.prepare(\"SELECT run_id,core_payload,core_digest FROM ne18_runs ORDER BY run_id\").iterate() as unknown as Iterable<Row>) {\n if (!(row.core_payload instanceof Uint8Array))\n fail(\"historical 0.17 Run core_payload is not bytes\");\n const storedDigest = text(row.core_digest, \"runs.core_digest\");\n const validated = migrateLegacyRunBytes(format, row.core_payload);\n if (validated.runId !== text(row.run_id, \"runs.run_id\") || validated.digest !== storedDigest ||\n !sameBytes(validated.bytes, row.core_payload)) {\n fail(\"historical 0.17 Run Core does not preserve its exact bytes, digest, and identity\");\n }\n }\n for (const row of connection.db.prepare(`SELECT attempt_id,origin_run_id,closure_payload,closure_digest\n FROM ne18_attempt_publications ORDER BY attempt_id`).iterate() as unknown as Iterable<Row>) {\n if (!(row.closure_payload instanceof Uint8Array))\n fail(\"historical 0.17 Attempt closure_payload is not bytes\");\n const storedDigest = text(row.closure_digest, \"attempt_publications.closure_digest\");\n const validated = migrateLegacyClosureBytes(format, row.closure_payload);\n if (validated.originRunId !== text(row.origin_run_id, \"attempt_publications.origin_run_id\") ||\n validated.digest !== storedDigest || !sameBytes(validated.bytes, row.closure_payload)) {\n fail(\"historical 0.17 Attempt closure does not preserve its exact bytes, digest, and identity\");\n }\n }\n}\nfunction transformPayloads(connection: RecordDatabase, format: LegacyProjectDatabaseFormat, runIds: readonly string[]): void {\n for (const row of connection.db.prepare(\"SELECT run_id,core_payload,core_digest FROM ne18_runs ORDER BY run_id\").iterate() as unknown as Iterable<Row>) {\n if (!(row.core_payload instanceof Uint8Array))\n fail(\"legacy Run core_payload is not bytes\");\n const sourceDigest = createHash(\"sha256\").update(row.core_payload).digest(\"hex\");\n if (sourceDigest !== text(row.core_digest, \"runs.core_digest\"))\n fail(\"legacy Run core digest differs from bytes\");\n const migrated = migrateLegacyRunBytes(format, row.core_payload);\n if (migrated.runId !== text(row.run_id, \"runs.run_id\"))\n fail(\"legacy Run payload identity differs from its row\");\n connection.db.prepare(\"UPDATE ne18_runs SET core_payload=?,core_digest=? WHERE run_id=?\")\n .run(migrated.bytes, migrated.digest, migrated.runId);\n }\n for (const row of connection.db.prepare(`SELECT attempt_id,origin_run_id,closure_payload,closure_digest\n FROM ne18_attempt_publications ORDER BY attempt_id`).iterate() as unknown as Iterable<Row>) {\n if (!(row.closure_payload instanceof Uint8Array))\n fail(\"legacy Attempt closure_payload is not bytes\");\n const sourceDigest = createHash(\"sha256\").update(row.closure_payload).digest(\"hex\");\n if (sourceDigest !== text(row.closure_digest, \"attempt_publications.closure_digest\"))\n fail(\"legacy Attempt closure digest differs from bytes\");\n const migrated = migrateLegacyClosureBytes(format, row.closure_payload);\n if (migrated.originRunId !== text(row.origin_run_id, \"attempt_publications.origin_run_id\"))\n fail(\"legacy Attempt closure origin differs from its row\");\n connection.db.prepare(\"UPDATE ne18_attempt_publications SET closure_payload=?,closure_digest=? WHERE attempt_id=?\")\n .run(migrated.bytes, migrated.digest, text(row.attempt_id, \"attempt_publications.attempt_id\"));\n }\n sealCurrentRuns(connection, runIds);\n}\nfunction sealCurrentRuns(connection: RecordDatabase, runIds: readonly string[]): void {\n const insert = connection.db.prepare(`INSERT INTO ne18_run_seal_entries(run_id,ordinal,entry_kind,logical_identity,digest)\n VALUES (?,?,?,?,?)`);\n for (const runId of runIds) {\n const entries = collectRunSealEntries(connection, runId);\n const identity = exactLogicalSealIdentity(entries);\n connection.db.prepare(`UPDATE ne18_runs SET status='sealing',candidate_seal_identity=?,candidate_seal_entry_count=?,\n candidate_seal_staged_count=0,logical_seal_identity=NULL WHERE run_id=? AND status='open'`).run(identity, entries.length, runId);\n entries.forEach((entry, ordinal) => insert.run(runId, ordinal, entry.kind, entry.logicalIdentity, entry.digest));\n connection.db.prepare(`UPDATE ne18_runs SET status='sealed',candidate_seal_staged_count=?,logical_seal_identity=?\n WHERE run_id=? AND status='sealing'`).run(entries.length, identity, runId);\n }\n}\nfunction convertLocked(connection: RecordDatabase, format: LegacyProjectDatabaseFormat, digest: string): void {\n const db = connection.db;\n const sourcePrefix = format === \"niceeval.project-database/0.17\" ? \"ne_\" : \"\";\n db.exec(\"PRAGMA defer_foreign_keys=ON\");\n db.exec(RECORD_SQLITE_BASELINE_SQL);\n copyTable(db, \"record_metadata\", sourcePrefix);\n db.prepare(`UPDATE ne18_record_metadata SET format=?,storage_revision=?,schema_fingerprint=? WHERE singleton=1`)\n .run(RECORD_SQLITE_FORMAT, RECORD_SQLITE_STORAGE_REVISION, RECORD_SQLITE_BASELINE_FINGERPRINT);\n db.prepare(`INSERT INTO ne18_migration_state(singleton,state,source_format,source_digest) VALUES (1,'committed',?,?)`)\n .run(format, digest);\n for (const table of COPY_ORDER) {\n if (table === \"runs\") {\n copyTable(db, table, sourcePrefix, { status: \"'open'\", candidate_seal_identity: \"NULL\", candidate_seal_entry_count: \"NULL\", candidate_seal_staged_count: \"0\", logical_seal_identity: \"NULL\" });\n }\n else if (table === \"attempts\") {\n copyTable(db, table, sourcePrefix, { publication_state: \"'staging'\" });\n }\n else if (table === \"run_publication_clock\") {\n db.exec(`UPDATE ne18_run_publication_clock SET revision=(SELECT revision FROM ${sourcePrefix}run_publication_clock WHERE singleton=1)\n WHERE singleton=1`);\n }\n else {\n copyTable(db, table, sourcePrefix);\n }\n }\n const runIds = validateLegacySeals(connection, sourcePrefix);\n if (format === \"niceeval.project-database/0.17\") {\n validateFrozen017Payloads(connection);\n db.exec(`UPDATE ne18_attempts SET publication_state=(SELECT publication_state FROM ne_attempts old\n WHERE old.origin_run_id=ne18_attempts.origin_run_id AND old.attempt_id=ne18_attempts.attempt_id)`);\n sealCurrentRuns(connection, runIds);\n }\n else {\n db.exec(`UPDATE ne18_attempts SET publication_state=(SELECT publication_state FROM attempts old\n WHERE old.origin_run_id=ne18_attempts.origin_run_id AND old.attempt_id=ne18_attempts.attempt_id)`);\n transformPayloads(connection, format, runIds);\n }\n const oldTables: readonly string[] = format === \"niceeval.project-database/0.17\" ? RECORD_SQLITE_017_TABLE_NAMES : RECORD_SQLITE_LEGACY_TABLE_NAMES;\n for (const table of [...oldTables].reverse())\n db.exec(`DROP TABLE \"${table}\"`);\n validateExactSchema(connection);\n verifyAllSealedRuns(connection, true);\n const foreignKeys = db.prepare(\"PRAGMA foreign_key_check\").all();\n if (foreignKeys.length !== 0)\n fail(\"converted ProjectDatabase has a foreign-key violation\");\n}\nfunction currentState(db: DatabaseSync): Row | undefined {\n const present = db.prepare(`SELECT count(*) AS count FROM sqlite_schema WHERE type='table' AND name='ne18_record_metadata'`).get() as Row;\n if (integer(present.count, \"sqlite_schema.ne18_record_metadata\") === 0)\n return undefined;\n return db.prepare(`SELECT m.format,m.storage_revision,m.schema_fingerprint,s.state,s.source_format,s.source_digest\n FROM ne18_record_metadata m JOIN ne18_migration_state s ON s.singleton=m.singleton WHERE m.singleton=1`).get() as Row | undefined;\n}\nfunction verifyCommitted(path: string, format: LegacyProjectDatabaseFormat, digest: string): void {\n assertBackup(projectDatabaseMigrationBackupPath(path, format), format, digest);\n const db = openRaw(path, true, 5000);\n const connection: RecordDatabase = { db, path, mode: \"maintenance\", statements: new Map() };\n try {\n db.exec(RECORD_SQLITE_PREPARED_SEAL_TEMP_SQL);\n validateExactSchema(connection);\n verifyAllSealedRuns(connection, true);\n const state = currentState(db);\n if (state === undefined || text(state.state, \"migration_state.state\") !== \"committed\" ||\n text(state.source_format, \"migration_state.source_format\") !== format || text(state.source_digest, \"migration_state.source_digest\") !== digest) {\n fail(\"committed migration marker differs from its validated backup\");\n }\n }\n finally {\n closeRecordDatabase(connection);\n }\n}\nfunction markReady(path: string, format: LegacyProjectDatabaseFormat, digest: string): void {\n const db = openRaw(path, false, 5000);\n try {\n db.exec(\"BEGIN IMMEDIATE\");\n const changed = db.prepare(`UPDATE ne18_migration_state SET state='ready'\n WHERE singleton=1 AND state='committed' AND source_format=? AND source_digest=?`).run(format, digest);\n if (Number(changed.changes) !== 1)\n fail(\"committed migration marker changed before readiness publication\");\n db.exec(\"COMMIT\");\n }\n catch (cause) {\n if (db.isTransaction)\n db.exec(\"ROLLBACK\");\n throw cause;\n }\n finally {\n db.close();\n }\n}\nfunction checkpointReady(path: string): void {\n const db = openRaw(path, false, 5000);\n try {\n const checkpoint = db.prepare(\"PRAGMA wal_checkpoint(TRUNCATE)\").get() as Row | undefined;\n if (checkpoint === undefined || integer(checkpoint.busy, \"wal_checkpoint.busy\") !== 0 ||\n integer(checkpoint.log, \"wal_checkpoint.log\") !== integer(checkpoint.checkpointed, \"wal_checkpoint.checkpointed\")) {\n fail(\"ready migration could not be checkpointed into its main file\");\n }\n }\n finally {\n db.close();\n }\n}\nfunction proveReadyMainFile(path: string, deadlineEpochMs: number): void {\n const proof = `${path}.ready-proof-${process.pid}-${randomUUID()}`;\n const descriptor = openSync(proof, \"wx\", 0o600);\n closeSync(descriptor);\n try {\n // copyFileSync overwrites the already-private inode without consulting or\n // copying WAL. A successful hostile reopen therefore proves main-file-only\n // readiness for Preview and other byte-copy consumers.\n copyFileSync(path, proof);\n chmodSync(proof, 0o600);\n const db = openRaw(proof, true, 0);\n const connection: RecordDatabase = { db, path: proof, mode: \"reader\", statements: new Map() };\n try {\n if (exactSchemaKind(db) !== \"current\")\n fail(\"ready migration proof is not the current exact schema\");\n db.exec(RECORD_SQLITE_PREPARED_SEAL_TEMP_SQL);\n db.setAuthorizer(privateReaderAuthorizer);\n validateExactSchema(connection);\n const state = currentState(db);\n if (state === undefined || text(state.state, \"migration_state.state\") !== \"ready\") {\n fail(\"migration ready marker is not durable in the main file\");\n }\n validatePortableRecordDatabase(connection, deadlineEpochMs);\n }\n finally {\n closeRecordDatabase(connection);\n }\n }\n finally {\n for (const ownedPath of [proof, `${proof}-wal`, `${proof}-shm`, `${proof}-journal`]) {\n try {\n unlinkSync(ownedPath);\n }\n catch { /* exact private proof path may already be absent */ }\n }\n }\n}\n/**\n * Migration entry for a Host-owned project inode or an already captured,\n * private, writable portable input. SQLite must never call it on an external\n * source path.\n */\nexport async function migrateHostOwnedProjectDatabase(path: string, busyTimeoutMs = 5000, sourceKind: \"host-owned\" | \"private-portable\" = \"host-owned\", deadlineEpochMs = Date.now() + 30000): Promise<MigrationResult> {\n try {\n const metadata = lstatSync(path);\n if (!metadata.isFile() || metadata.isSymbolicLink())\n fail(\"ProjectDatabase path is not a regular Host-owned file\");\n }\n catch (cause) {\n if (typeof cause === \"object\" && cause !== null && Reflect.get(cause, \"code\") === \"ENOENT\")\n return \"absent\";\n throw cause;\n }\n if (sourceKind === \"private-portable\")\n admitPrivatePortable(path, deadlineEpochMs);\n const db = openRaw(path, false, Math.max(0, Math.min(30000, Math.trunc(busyTimeoutMs))));\n const connection: RecordDatabase = { db, path, mode: \"writer\", statements: new Map() };\n let migrated = false;\n let identity: {\n readonly format: LegacyProjectDatabaseFormat;\n readonly digest: string;\n } | undefined;\n try {\n db.exec(\"BEGIN IMMEDIATE\");\n const current = currentState(db);\n if (current !== undefined) {\n if (text(current.format, \"record_metadata.format\") !== RECORD_SQLITE_FORMAT ||\n integer(current.storage_revision, \"record_metadata.storage_revision\") !== RECORD_SQLITE_STORAGE_REVISION ||\n text(current.schema_fingerprint, \"record_metadata.schema_fingerprint\") !== RECORD_SQLITE_BASELINE_FINGERPRINT) {\n fail(\"current ProjectDatabase identity is invalid\");\n }\n const state = text(current.state, \"migration_state.state\");\n if (state === \"ready\") {\n db.exec(\"ROLLBACK\");\n return \"current\";\n }\n if (state !== \"committed\")\n fail(\"current ProjectDatabase migration state is invalid\");\n const format = text(current.source_format, \"migration_state.source_format\") as LegacyProjectDatabaseFormat;\n if (!LEGACY_FORMATS.has(format))\n fail(\"committed migration source format is invalid\");\n identity = { format, digest: text(current.source_digest, \"migration_state.source_digest\") };\n db.exec(\"ROLLBACK\");\n }\n else {\n identity = legacyIdentity(db);\n if (sourceKind === \"private-portable\")\n assertLegacyPortable(db, identity.format);\n else\n assertLegacyIdle(db, identity.format);\n await ensureBackup(path, identity.format, identity.digest);\n // The backup came from a second read-only connection. Revalidate the\n // still-locked source before any schema or payload mutation begins.\n const lockedAgain = legacyIdentity(db);\n if (lockedAgain.format !== identity.format || lockedAgain.digest !== identity.digest)\n fail(\"legacy facts changed while creating the migration backup\");\n convertLocked(connection, identity.format, identity.digest);\n db.exec(\"COMMIT\");\n migrated = true;\n }\n // A post-commit failure deliberately leaves state='committed'. Never copy\n // the old backup over the now-current inode; the next Host open retries\n // checkpoint and hostile validation from this durable marker.\n const checkpoint = db.prepare(\"PRAGMA wal_checkpoint(TRUNCATE)\").get() as Row | undefined;\n if (checkpoint === undefined || integer(checkpoint.busy, \"wal_checkpoint.busy\") !== 0 ||\n integer(checkpoint.log, \"wal_checkpoint.log\") !== integer(checkpoint.checkpointed, \"wal_checkpoint.checkpointed\")) {\n throw sqliteError(\"record-schema-migration-required\", \"auto-migrate-checkpoint\", \"ProjectDatabase migration committed, but an old reader still pins its WAL snapshot; close the old NiceEval process and rerun the experiment\");\n }\n }\n catch (cause) {\n if (db.isTransaction)\n db.exec(\"ROLLBACK\");\n throw cause;\n }\n finally {\n closeRecordDatabase(connection);\n }\n if (identity === undefined)\n fail(\"migration identity was not established\");\n verifyCommitted(path, identity.format, identity.digest);\n markReady(path, identity.format, identity.digest);\n if (sourceKind === \"private-portable\") {\n checkpointReady(path);\n proveReadyMainFile(path, deadlineEpochMs);\n }\n return migrated ? \"migrated\" : \"current\";\n}\n"]}
|
|
1
|
+
{"version":3,"file":"migration.js","sourceRoot":"","sources":["migration.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash, randomUUID } from \"node:crypto\";\nimport { chmodSync, closeSync, copyFileSync, fsyncSync, lstatSync, openSync, renameSync, unlinkSync } from \"node:fs\";\nimport { Result } from \"effect\";\nimport { decodeRunDocument, decodeAttemptPublicationClosure } from \"../codec/core.ts\";\nimport { dirname } from \"node:path\";\nimport { backup, constants, DatabaseSync, type SQLOutputValue } from \"node:sqlite\";\nimport { migrateLegacyClosureBytes, migrateLegacyRunBytes, type LegacyProjectDatabaseFormat } from \"../codec/legacy-run-context.ts\";\nimport { closeRecordDatabase, recordStatement, validateExactSchema, type RecordDatabase } from \"./database.ts\";\nimport { sqliteError } from \"./errors.ts\";\nimport { exactLogicalSealIdentity } from \"./seal.ts\";\nimport { RECORD_SQLITE_BASELINE_FINGERPRINT, RECORD_SQLITE_BASELINE_SQL, RECORD_SQLITE_018_BASELINE_SQL, RECORD_SQLITE_018_FINGERPRINT, RECORD_SQLITE_018_TABLE_NAMES, RECORD_SQLITE_017_BASELINE_SQL, RECORD_SQLITE_017_FINGERPRINT, RECORD_SQLITE_017_TABLE_NAMES, RECORD_SQLITE_LEGACY_BASELINE_SQL, RECORD_SQLITE_LEGACY_FINGERPRINTS, RECORD_SQLITE_LEGACY_TABLE_NAMES, RECORD_SQLITE_PREPARED_SEAL_TEMP_SQL, } from \"./schema.ts\";\nimport { collectRunSealEntries, verifyAllSealedRuns } from \"./storage.ts\";\nimport { RECORD_SQLITE_FORMAT, RECORD_SQLITE_STORAGE_REVISION, type SealEntry } from \"./types.ts\";\nimport { validatePortableRecordDatabase } from \"./portable-capture.ts\";\ntype MigrationSourceFormat = LegacyProjectDatabaseFormat | \"niceeval.project-database/0.18\";\ntype MigrationResult = \"absent\" | \"current\" | \"migrated\";\ntype Row = Record<string, SQLOutputValue>;\nconst LEGACY_FORMATS = new Set<MigrationSourceFormat>([\n \"niceeval.project-database/0.15\",\n \"niceeval.project-database/0.16\",\n \"niceeval.project-database/0.17\",\n \"niceeval.project-database/0.18\",\n]);\ntype HistoricalSchemaKind = \"legacy-015-016\" | \"legacy-017\" | \"legacy-018\";\nfunction historicalPrefix(kind: HistoricalSchemaKind): \"\" | \"ne_\" | \"ne18_\" {\n return kind === \"legacy-018\" ? \"ne18_\" : kind === \"legacy-017\" ? \"ne_\" : \"\";\n}\nfunction sourcePrefix(format: MigrationSourceFormat): \"\" | \"ne_\" | \"ne18_\" {\n return format === \"niceeval.project-database/0.18\" ? \"ne18_\" : format === \"niceeval.project-database/0.17\" ? \"ne_\" : \"\";\n}\nconst READ_DENIED = new Set([\n constants.SQLITE_ATTACH,\n constants.SQLITE_DETACH,\n constants.SQLITE_INSERT,\n constants.SQLITE_UPDATE,\n constants.SQLITE_DELETE,\n constants.SQLITE_CREATE_INDEX,\n constants.SQLITE_CREATE_TABLE,\n constants.SQLITE_CREATE_TEMP_INDEX,\n constants.SQLITE_CREATE_TEMP_TABLE,\n constants.SQLITE_CREATE_TEMP_TRIGGER,\n constants.SQLITE_CREATE_TEMP_VIEW,\n constants.SQLITE_CREATE_TRIGGER,\n constants.SQLITE_CREATE_VIEW,\n constants.SQLITE_DROP_INDEX,\n constants.SQLITE_DROP_TABLE,\n constants.SQLITE_DROP_TEMP_INDEX,\n constants.SQLITE_DROP_TEMP_TABLE,\n constants.SQLITE_DROP_TEMP_TRIGGER,\n constants.SQLITE_DROP_TEMP_VIEW,\n constants.SQLITE_DROP_TRIGGER,\n constants.SQLITE_DROP_VIEW,\n constants.SQLITE_ALTER_TABLE,\n constants.SQLITE_REINDEX,\n constants.SQLITE_ANALYZE,\n constants.SQLITE_CREATE_VTABLE,\n constants.SQLITE_DROP_VTABLE,\n]);\nconst COPY_ORDER = [\n \"coordination_state\",\n \"coordination_tickets\",\n \"runs\",\n \"slots\",\n \"attempts\",\n \"members\",\n \"attachments\",\n \"attachment_references\",\n \"collection_items\",\n \"contents\",\n \"content_chunks\",\n \"run_publication_clock\",\n \"run_resources\",\n \"run_expected_slots\",\n \"attempt_publications\",\n \"run_slot_bindings\",\n \"run_slot_absences\",\n \"run_recoveries\",\n \"run_deletion_tombstones\",\n \"invocation_sessions\",\n \"invocation_session_experiments\",\n \"invocation_session_queued_attempts\",\n \"case_locks\",\n \"teardown_obligations\",\n \"shared_state_generations\",\n \"kept_sandboxes\",\n \"kept_sandbox_operation_leases\",\n] as const;\nfunction fail(message: string, cause?: unknown): never {\n throw sqliteError(\"record-schema-unsupported\", \"auto-migrate\", message, cause);\n}\nfunction text(value: SQLOutputValue | undefined, field: string): string {\n if (typeof value !== \"string\")\n fail(`${field} is not text`);\n return value;\n}\nfunction integer(value: SQLOutputValue | undefined, field: string): number {\n const number = typeof value === \"bigint\" ? Number(value) : value;\n if (typeof number !== \"number\" || !Number.isSafeInteger(number))\n fail(`${field} is not a safe integer`);\n return number;\n}\nfunction normalizeSql(sql: string): string {\n return sql.replace(/\\s+/gu, \" \").replace(/\\s*([(),])\\s*/gu, \"$1\").trim().replace(/;$/u, \"\");\n}\nfunction schemaRows(db: DatabaseSync): readonly string[] {\n const rows = db.prepare(`SELECT type,name,tbl_name,sql FROM sqlite_schema\n WHERE name NOT LIKE 'sqlite_stat%' ORDER BY type,name LIMIT 257`).all() as unknown as readonly Row[];\n if (rows.length > 256)\n fail(\"database schema exceeds the bounded object allowlist\");\n return rows.map((row) => JSON.stringify([\n text(row.type, \"sqlite_schema.type\"),\n text(row.name, \"sqlite_schema.name\"),\n text(row.tbl_name, \"sqlite_schema.tbl_name\"),\n row.sql === null ? null : normalizeSql(text(row.sql, \"sqlite_schema.sql\")),\n ]));\n}\nconst expectedLegacySchemaRows = (() => {\n const db = new DatabaseSync(\":memory:\", { allowExtension: false, defensive: true, readBigInts: true });\n try {\n db.exec(RECORD_SQLITE_LEGACY_BASELINE_SQL);\n return Object.freeze(schemaRows(db));\n }\n finally {\n db.close();\n }\n})();\nconst expected017SchemaRows = (() => {\n const db = new DatabaseSync(\":memory:\", { allowExtension: false, defensive: true, readBigInts: true });\n try {\n db.exec(RECORD_SQLITE_017_BASELINE_SQL);\n return Object.freeze(schemaRows(db));\n }\n finally {\n db.close();\n }\n})();\nconst expected018SchemaRows = (() => {\n const db = new DatabaseSync(\":memory:\", { allowExtension: false, defensive: true, readBigInts: true });\n try {\n db.exec(RECORD_SQLITE_018_BASELINE_SQL);\n return Object.freeze(schemaRows(db));\n }\n finally {\n db.close();\n }\n})();\nconst expectedCurrentSchemaRows = (() => {\n const db = new DatabaseSync(\":memory:\", { allowExtension: false, defensive: true, readBigInts: true });\n try {\n db.exec(RECORD_SQLITE_BASELINE_SQL);\n return Object.freeze(schemaRows(db));\n }\n finally {\n db.close();\n }\n})();\nfunction historicalSchemaKind(db: DatabaseSync): HistoricalSchemaKind {\n const actual = schemaRows(db);\n if (actual.length === expectedLegacySchemaRows.length && actual.every((row, index) => row === expectedLegacySchemaRows[index]))\n return \"legacy-015-016\";\n if (actual.length === expected017SchemaRows.length && actual.every((row, index) => row === expected017SchemaRows[index]))\n return \"legacy-017\";\n if (actual.length === expected018SchemaRows.length && actual.every((row, index) => row === expected018SchemaRows[index]))\n return \"legacy-018\";\n fail(\"historical database objects do not match an exact 0.15/0.16/0.17/0.18 schema allowlist\");\n}\nfunction exactSchemaKind(db: DatabaseSync): HistoricalSchemaKind | \"current\" {\n const actual = schemaRows(db);\n if (actual.length === expectedLegacySchemaRows.length && actual.every((row, index) => row === expectedLegacySchemaRows[index])) {\n return \"legacy-015-016\";\n }\n if (actual.length === expected017SchemaRows.length && actual.every((row, index) => row === expected017SchemaRows[index])) {\n return \"legacy-017\";\n }\n if (actual.length === expected018SchemaRows.length && actual.every((row, index) => row === expected018SchemaRows[index]))\n return \"legacy-018\";\n if (actual.length === expectedCurrentSchemaRows.length && actual.every((row, index) => row === expectedCurrentSchemaRows[index])) {\n return \"current\";\n }\n fail(\"private portable database objects do not match an exact current or migratable schema allowlist\");\n}\n/** Classifies only an already-private capture, before reading domain metadata. */\nexport function capturedRecordSchemaKind(path: string): \"legacy\" | \"current\" {\n const db = openRaw(path, true, 0);\n try {\n return exactSchemaKind(db) === \"current\" ? \"current\" : \"legacy\";\n }\n finally {\n db.close();\n }\n}\nfunction privateReaderAuthorizer(action: number, arg1: string | null, arg2: string | null, dbName: string | null): number {\n // All TEMP objects were installed from fixed SQL before this authorizer.\n // The main database is read-only at the VFS level; allowing private TEMP\n // work lets the existing bounded streaming Seal verifier spill and sort.\n if (dbName === \"temp\")\n return constants.SQLITE_OK;\n if (dbName !== null && dbName !== \"main\")\n return constants.SQLITE_DENY;\n if (READ_DENIED.has(action))\n return constants.SQLITE_DENY;\n if (action === constants.SQLITE_PRAGMA && arg1 !== \"quick_check\" && arg1 !== \"foreign_key_check\" &&\n arg1 !== \"secure_delete\" && arg1 !== \"table_info\") {\n return constants.SQLITE_DENY;\n }\n if (action === constants.SQLITE_FUNCTION && arg2?.toLowerCase() === \"load_extension\")\n return constants.SQLITE_DENY;\n return constants.SQLITE_OK;\n}\nfunction updatePart(hash: ReturnType<typeof createHash>, value: SQLOutputValue): void {\n let tag: number;\n let bytes: Uint8Array;\n if (value === null) {\n tag = 0;\n bytes = new Uint8Array();\n }\n else if (typeof value === \"string\") {\n tag = 1;\n bytes = new TextEncoder().encode(value);\n }\n else if (typeof value === \"number\" || typeof value === \"bigint\") {\n tag = 2;\n bytes = new TextEncoder().encode(String(value));\n }\n else {\n tag = 3;\n bytes = value;\n }\n const length = new Uint8Array(4);\n new DataView(length.buffer).setUint32(0, bytes.byteLength, false);\n hash.update(Uint8Array.of(tag));\n hash.update(length);\n hash.update(bytes);\n}\n/** Exact typed digest of every legacy table row, independent of SQLite page layout. */\nfunction legacyFactsDigest(db: DatabaseSync, kind: HistoricalSchemaKind): string {\n const hash = createHash(\"sha256\").update(\"niceeval.project-database.legacy-facts/v1\\0\");\n const tables: readonly string[] = kind === \"legacy-018\" ? RECORD_SQLITE_018_TABLE_NAMES : kind === \"legacy-017\" ? RECORD_SQLITE_017_TABLE_NAMES : RECORD_SQLITE_LEGACY_TABLE_NAMES;\n for (const table of tables) {\n hash.update(`${table}\\0`);\n const columns = db.prepare(`PRAGMA table_info(\"${table}\")`).all() as unknown as readonly Row[];\n if (columns.length === 0)\n fail(`legacy table ${table} has no columns`);\n const names = columns.map((column) => text(column.name, `${table}.column`));\n const primary = [...columns]\n .filter((column) => integer(column.pk, `${table}.pk`) > 0)\n .sort((left, right) => integer(left.pk, `${table}.pk`) - integer(right.pk, `${table}.pk`))\n .map((column) => text(column.name, `${table}.column`));\n const order = primary.length === 0 ? names : primary;\n const sql = `SELECT ${names.map((name) => `\"${name}\"`).join(\",\")} FROM \"${table}\" ORDER BY ${order.map((name) => `\"${name}\"`).join(\",\")}`;\n for (const row of db.prepare(sql).iterate() as unknown as Iterable<Row>) {\n hash.update(Uint8Array.of(0xff));\n for (const name of names)\n updatePart(hash, row[name]!);\n }\n }\n return hash.digest(\"hex\");\n}\nexport function projectDatabaseMigrationBackupPath(path: string, format: MigrationSourceFormat): string {\n const version = format.slice(format.lastIndexOf(\"/\") + 1);\n return `${path}.pre-0.19-from-${version}.backup`;\n}\nfunction configure(db: DatabaseSync): void {\n db.enableLoadExtension(false);\n db.enableDefensive(true);\n db.exec(\"PRAGMA secure_delete=ON; PRAGMA foreign_keys=ON; PRAGMA trusted_schema=OFF; PRAGMA mmap_size=0; PRAGMA cache_size=-8192; PRAGMA temp_store=FILE; PRAGMA recursive_triggers=ON;\");\n}\nfunction openRaw(path: string, readOnly: boolean, timeout: number): DatabaseSync {\n const db = new DatabaseSync(path, {\n allowExtension: false,\n defensive: true,\n enableForeignKeyConstraints: true,\n readBigInts: true,\n readOnly,\n timeout,\n });\n configure(db);\n return db;\n}\nfunction legacyIdentity(db: DatabaseSync): {\n readonly format: MigrationSourceFormat;\n readonly digest: string;\n} {\n const kind = historicalSchemaKind(db);\n const prefix = historicalPrefix(kind);\n const row = db.prepare(`SELECT * FROM ${prefix}record_metadata WHERE singleton=1`).get() as Row | undefined;\n if (row === undefined)\n fail(\"legacy record_metadata singleton is missing\");\n const format = text(row.format, \"record_metadata.format\");\n if (!LEGACY_FORMATS.has(format as MigrationSourceFormat))\n fail(`ProjectDatabase format ${format} is not auto-migratable`);\n const legacyFormat = format as MigrationSourceFormat;\n if (sourcePrefix(legacyFormat) !== prefix) {\n fail(`ProjectDatabase ${legacyFormat} does not match its exact historical schema`);\n }\n if (integer(row.storage_revision, \"record_metadata.storage_revision\") !== 1)\n fail(\"legacy storage revision is unsupported\");\n const expectedFingerprint = legacyFormat === \"niceeval.project-database/0.18\"\n ? RECORD_SQLITE_018_FINGERPRINT\n : legacyFormat === \"niceeval.project-database/0.17\"\n ? RECORD_SQLITE_017_FINGERPRINT\n : RECORD_SQLITE_LEGACY_FINGERPRINTS[legacyFormat];\n if (text(row.schema_fingerprint, \"record_metadata.schema_fingerprint\") !== expectedFingerprint) {\n fail(\"legacy schema fingerprint does not match its format\");\n }\n const secureDelete = db.prepare(\"PRAGMA secure_delete\").get() as Row | undefined;\n if (secureDelete === undefined || integer(secureDelete.secure_delete, \"secure_delete\") !== 1)\n fail(\"legacy database does not require secure_delete\");\n const coordination = db.prepare(`SELECT operational_generation FROM ${prefix}coordination_state WHERE singleton=1`).get() as Row | undefined;\n if (coordination === undefined || text(coordination.operational_generation, \"coordination_state.operational_generation\") !== text(row.storage_generation, \"record_metadata.storage_generation\")) {\n fail(\"legacy coordination generation does not match record metadata\");\n }\n if (kind === \"legacy-017\" || kind === \"legacy-018\") {\n const migration = db.prepare(`SELECT state FROM ${prefix}migration_state WHERE singleton=1`).get() as Row | undefined;\n const state = migration === undefined ? \"missing\" : text(migration.state, \"migration_state.state\");\n if (state !== \"ready\") {\n fail(`historical ProjectDatabase ${legacyFormat} migration state is ${state}; open it with the original NiceEval version and finish recovery before upgrading`);\n }\n }\n return Object.freeze({ format: legacyFormat, digest: legacyFactsDigest(db, kind) });\n}\nfunction assertLegacyIdle(db: DatabaseSync, format: MigrationSourceFormat): void {\n const prefix = sourcePrefix(format);\n const metadata = db.prepare(`SELECT barrier_state FROM ${prefix}record_metadata WHERE singleton=1`).get() as Row;\n const coordination = db.prepare(`SELECT writer_ticket_id,barrier_id FROM ${prefix}coordination_state WHERE singleton=1`).get() as Row;\n const work = db.prepare(`SELECT\n (SELECT count(*) FROM ${prefix}coordination_tickets)+\n (SELECT count(*) FROM ${prefix}runs WHERE status!='sealed')+\n (SELECT count(*) FROM ${prefix}attempts WHERE publication_state!='published')+\n (SELECT count(*) FROM ${prefix}run_resources WHERE terminal_state IS NULL)+\n (SELECT count(*) FROM ${prefix}invocation_sessions WHERE state IN ('active','recovering'))+\n (SELECT count(*) FROM ${prefix}invocation_session_queued_attempts)+\n (SELECT count(*) FROM ${prefix}case_locks)+\n (SELECT count(*) FROM ${prefix}teardown_obligations)+\n (SELECT count(*) FROM ${prefix}shared_state_generations s WHERE state_kind!='free' AND generation=(SELECT max(generation) FROM ${prefix}shared_state_generations WHERE state_key=s.state_key))+\n (SELECT count(*) FROM ${prefix}kept_sandbox_operation_leases) AS count`).get() as Row;\n if (text(metadata.barrier_state, \"record_metadata.barrier_state\") === \"draining\" ||\n coordination.writer_ticket_id !== null || coordination.barrier_id !== null || integer(work.count, \"legacy active owner count\") !== 0) {\n fail(\"legacy ProjectDatabase has an active or unknown owner; stop the old NiceEval process and finish or recover its work first\");\n }\n}\nfunction assertLegacyPortable(db: DatabaseSync, format: MigrationSourceFormat): void {\n const prefix = sourcePrefix(format);\n const metadata = db.prepare(`SELECT barrier_state,portable_generation,portable_revision,storage_generation\n FROM ${prefix}record_metadata WHERE singleton=1`).get() as Row | undefined;\n const coordination = db.prepare(`SELECT writer_ticket_id,barrier_id FROM ${prefix}coordination_state WHERE singleton=1`)\n .get() as Row | undefined;\n const clock = db.prepare(`SELECT revision FROM ${prefix}run_publication_clock WHERE singleton=1`).get() as Row | undefined;\n if (metadata === undefined || text(metadata.barrier_state, \"record_metadata.barrier_state\") !== \"portable\" ||\n text(metadata.portable_generation, \"record_metadata.portable_generation\") !==\n text(metadata.storage_generation, \"record_metadata.storage_generation\") ||\n clock === undefined || integer(metadata.portable_revision, \"record_metadata.portable_revision\") !==\n integer(clock.revision, \"run_publication_clock.revision\") ||\n coordination === undefined || coordination.writer_ticket_id !== null || coordination.barrier_id !== null) {\n fail(\"legacy private input does not prove a portable idle ProjectDatabase\");\n }\n assertLegacyIdle(db, format);\n}\nconst LEGACY_READ_ALIAS_TABLES = [\n \"record_metadata\",\n \"runs\",\n \"slots\",\n \"attempts\",\n \"members\",\n \"attachments\",\n \"attachment_references\",\n \"collection_items\",\n \"contents\",\n \"content_chunks\",\n \"run_seal_entries\",\n \"attempt_publications\",\n] as const;\nfunction installLegacyReadAliases(db: DatabaseSync, kind: HistoricalSchemaKind): void {\n const sourcePrefix = historicalPrefix(kind);\n for (const table of LEGACY_READ_ALIAS_TABLES) {\n db.exec(`CREATE TEMP VIEW \"ne19_${table}\" AS SELECT * FROM main.\"${sourcePrefix}${table}\"`);\n }\n db.exec(RECORD_SQLITE_PREPARED_SEAL_TEMP_SQL);\n}\nfunction assertSqliteIntegrity(db: DatabaseSync): void {\n const integrity = db.prepare(\"PRAGMA quick_check\").all() as unknown as readonly Row[];\n if (integrity.length !== 1 || text(integrity[0]!.quick_check, \"quick_check\") !== \"ok\") {\n fail(\"private portable SQLite quick_check failed\");\n }\n if (db.prepare(\"PRAGMA foreign_key_check\").get() !== undefined) {\n fail(\"private portable SQLite foreign-key closure is invalid\");\n }\n}\n/**\n * No private capture obtains a writable SQLite connection before its hostile\n * read-only admission has proved an exact known schema and portable closure.\n */\nfunction admitPrivatePortable(path: string, deadlineEpochMs: number): void {\n const db = openRaw(path, true, 0);\n const connection: RecordDatabase = { db, path, mode: \"reader\", statements: new Map() };\n try {\n const kind = exactSchemaKind(db);\n if (kind !== \"current\")\n installLegacyReadAliases(db, kind);\n else\n db.exec(RECORD_SQLITE_PREPARED_SEAL_TEMP_SQL);\n db.setAuthorizer(privateReaderAuthorizer);\n assertSqliteIntegrity(db);\n if (kind !== \"current\") {\n const identity = legacyIdentity(db);\n assertLegacyPortable(db, identity.format);\n validateLegacySeals(connection, historicalPrefix(kind));\n if (identity.format === \"niceeval.project-database/0.17\")\n validateFrozen017Payloads(connection);\n if (identity.format === \"niceeval.project-database/0.18\")\n validate018Closures(connection);\n return;\n }\n validateExactSchema(connection);\n const state = currentState(db);\n if (state === undefined)\n fail(\"private current ProjectDatabase identity is missing\");\n const migrationState = text(state.state, \"migration_state.state\");\n if (migrationState === \"committed\") {\n const format = text(state.source_format, \"migration_state.source_format\") as MigrationSourceFormat;\n if (!LEGACY_FORMATS.has(format))\n fail(\"committed migration source format is invalid\");\n assertBackup(projectDatabaseMigrationBackupPath(path, format), format, text(state.source_digest, \"migration_state.source_digest\"));\n }\n else if (migrationState !== \"ready\") {\n fail(\"private current ProjectDatabase migration state is invalid\");\n }\n validatePortableRecordDatabase(connection, deadlineEpochMs);\n }\n finally {\n closeRecordDatabase(connection);\n }\n}\nfunction assertBackup(path: string, format: MigrationSourceFormat, digest: string): void {\n const db = openRaw(path, true, 0);\n try {\n const identity = legacyIdentity(db);\n if (identity.format !== format || identity.digest !== digest)\n fail(\"migration backup does not exactly match the locked legacy input\");\n }\n finally {\n db.close();\n }\n}\nfunction fsyncPath(path: string, directory = false): void {\n const descriptor = openSync(path, directory ? \"r\" : \"r+\");\n try {\n fsyncSync(descriptor);\n }\n finally {\n closeSync(descriptor);\n }\n}\nasync function ensureBackup(databasePath: string, format: MigrationSourceFormat, digest: string): Promise<string> {\n const target = projectDatabaseMigrationBackupPath(databasePath, format);\n try {\n lstatSync(target);\n assertBackup(target, format, digest);\n return target;\n }\n catch (cause) {\n if (typeof cause !== \"object\" || cause === null || Reflect.get(cause, \"code\") !== \"ENOENT\")\n throw cause;\n }\n const temporary = `${target}.tmp-${process.pid}-${randomUUID()}`;\n const temporaryDescriptor = openSync(temporary, \"wx\", 0o600);\n try {\n // The path exists with private permissions before SQLite can copy a byte.\n }\n finally {\n closeSync(temporaryDescriptor);\n }\n let source: DatabaseSync | undefined;\n try {\n source = openRaw(databasePath, true, 0);\n await backup(source, temporary);\n }\n catch (cause) {\n try {\n unlinkSync(temporary);\n }\n catch { /* exact temporary may already be absent */ }\n throw cause;\n }\n finally {\n source?.close();\n }\n try {\n assertBackup(temporary, format, digest);\n fsyncPath(temporary);\n renameSync(temporary, target);\n fsyncPath(dirname(target), true);\n assertBackup(target, format, digest);\n return target;\n }\n catch (cause) {\n try {\n unlinkSync(temporary);\n }\n catch { /* exact temporary may already have been renamed */ }\n throw cause;\n }\n}\nfunction columns(db: DatabaseSync, table: string): readonly string[] {\n return (db.prepare(`PRAGMA table_info(\"${table}\")`).all() as unknown as readonly Row[])\n .map((row) => text(row.name, `${table}.column`));\n}\nfunction copyTable(db: DatabaseSync, table: string, sourcePrefix: \"\" | \"ne_\" | \"ne18_\", overrides: Readonly<Record<string, string>> = {}): void {\n const sourceTable = `${sourcePrefix}${table}`;\n const names = columns(db, sourceTable);\n const target = names.map((name) => `\"${name}\"`).join(\",\");\n const source = names.map((name) => overrides[name] ?? `\"${name}\"`).join(\",\");\n db.exec(`INSERT INTO \"ne19_${table}\"(${target}) SELECT ${source} FROM \"${sourceTable}\"`);\n}\nfunction copyRunTable(db: DatabaseSync, format: MigrationSourceFormat, prefix: string, overrides: Readonly<Record<string, string>>): void {\n const names = columns(db, `${prefix}runs`);\n const target = [...names, \"experiment_id\"].map((name) => `\"${name}\"`).join(\",\");\n const values = names.map((name) => overrides[name] ?? \"?\").concat(\"?\").join(\",\");\n const insert = db.prepare(`INSERT INTO ne19_runs(${target}) VALUES (${values})`);\n for (const row of db.prepare(`SELECT * FROM ${prefix}runs ORDER BY run_id`).iterate() as unknown as Iterable<Row>) {\n if (!(row.core_payload instanceof Uint8Array) || createHash(\"sha256\").update(row.core_payload).digest(\"hex\") !== text(row.core_digest, \"runs.core_digest\")) {\n fail(\"historical Run Core bytes do not match their digest\");\n }\n const bytes = format === \"niceeval.project-database/0.18\" ? row.core_payload : migrateLegacyRunBytes(format, row.core_payload).bytes;\n const decoded = decodeRunDocument(JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes)));\n if (Result.isFailure(decoded) || decoded.success.runId !== text(row.run_id, \"runs.run_id\"))\n fail(\"historical Run Core identity is invalid\");\n insert.run(...names.filter((name) => overrides[name] === undefined).map((name) => row[name]!), decoded.success.experimentId);\n }\n}\nfunction validate018Closures(connection: RecordDatabase): void {\n for (const row of connection.db.prepare(\"SELECT attempt_id,origin_run_id,closure_payload,closure_digest FROM ne19_attempt_publications\").iterate() as unknown as Iterable<Row>) {\n if (!(row.closure_payload instanceof Uint8Array) || createHash(\"sha256\").update(row.closure_payload).digest(\"hex\") !== text(row.closure_digest, \"closure_digest\"))\n fail(\"0.18 Attempt closure digest is invalid\");\n const decoded = decodeAttemptPublicationClosure(JSON.parse(new TextDecoder(\"utf-8\", { fatal: true }).decode(row.closure_payload)));\n if (Result.isFailure(decoded) || decoded.success.originRun.runId !== text(row.origin_run_id, \"origin_run_id\"))\n fail(\"0.18 Attempt closure identity is invalid\");\n }\n}\nfunction equalEntry(row: Row, entry: SealEntry, ordinal: number): boolean {\n return integer(row.ordinal, \"run_seal_entries.ordinal\") === ordinal &&\n text(row.entry_kind, \"run_seal_entries.entry_kind\") === entry.kind &&\n text(row.logical_identity, \"run_seal_entries.logical_identity\") === entry.logicalIdentity &&\n text(row.digest, \"run_seal_entries.digest\") === entry.digest;\n}\nfunction validateLegacySeals(connection: RecordDatabase, sourcePrefix: \"\" | \"ne_\" | \"ne18_\"): readonly string[] {\n const runIds: string[] = [];\n for (const run of connection.db.prepare(`SELECT run_id,candidate_seal_identity,candidate_seal_entry_count,\n candidate_seal_staged_count,logical_seal_identity FROM ${sourcePrefix}runs ORDER BY run_id`).iterate() as unknown as Iterable<Row>) {\n const runId = text(run.run_id, \"runs.run_id\");\n const entries = collectRunSealEntries(connection, runId);\n const stored = connection.db.prepare(`SELECT ordinal,entry_kind,logical_identity,digest FROM ${sourcePrefix}run_seal_entries\n WHERE run_id=? ORDER BY ordinal`).all(runId) as unknown as readonly Row[];\n const identity = exactLogicalSealIdentity(entries);\n if (stored.length !== entries.length || stored.some((row, ordinal) => !equalEntry(row, entries[ordinal]!, ordinal)) ||\n integer(run.candidate_seal_entry_count, \"runs.candidate_seal_entry_count\") !== entries.length ||\n integer(run.candidate_seal_staged_count, \"runs.candidate_seal_staged_count\") !== entries.length ||\n text(run.candidate_seal_identity, \"runs.candidate_seal_identity\") !== identity ||\n text(run.logical_seal_identity, \"runs.logical_seal_identity\") !== identity) {\n fail(`legacy Run ${runId} Seal does not match its exact stored closure`);\n }\n runIds.push(runId);\n }\n return Object.freeze(runIds);\n}\nfunction sameBytes(left: Uint8Array, right: Uint8Array): boolean {\n return left.byteLength === right.byteLength && left.every((byte, index) => byte === right[index]);\n}\n/** Runs the independently frozen 0.17 codecs without rewriting historical bytes. */\nfunction validateFrozen017Payloads(connection: RecordDatabase): void {\n const format = \"niceeval.project-database/0.17\";\n for (const row of connection.db.prepare(\"SELECT run_id,core_payload,core_digest FROM ne19_runs ORDER BY run_id\").iterate() as unknown as Iterable<Row>) {\n if (!(row.core_payload instanceof Uint8Array))\n fail(\"historical 0.17 Run core_payload is not bytes\");\n const storedDigest = text(row.core_digest, \"runs.core_digest\");\n const validated = migrateLegacyRunBytes(format, row.core_payload);\n if (validated.runId !== text(row.run_id, \"runs.run_id\") || validated.digest !== storedDigest ||\n !sameBytes(validated.bytes, row.core_payload)) {\n fail(\"historical 0.17 Run Core does not preserve its exact bytes, digest, and identity\");\n }\n }\n for (const row of connection.db.prepare(`SELECT attempt_id,origin_run_id,closure_payload,closure_digest\n FROM ne19_attempt_publications ORDER BY attempt_id`).iterate() as unknown as Iterable<Row>) {\n if (!(row.closure_payload instanceof Uint8Array))\n fail(\"historical 0.17 Attempt closure_payload is not bytes\");\n const storedDigest = text(row.closure_digest, \"attempt_publications.closure_digest\");\n const validated = migrateLegacyClosureBytes(format, row.closure_payload);\n if (validated.originRunId !== text(row.origin_run_id, \"attempt_publications.origin_run_id\") ||\n validated.digest !== storedDigest || !sameBytes(validated.bytes, row.closure_payload)) {\n fail(\"historical 0.17 Attempt closure does not preserve its exact bytes, digest, and identity\");\n }\n }\n}\nfunction transformPayloads(connection: RecordDatabase, format: LegacyProjectDatabaseFormat, runIds: readonly string[]): void {\n for (const row of connection.db.prepare(\"SELECT run_id,core_payload,core_digest FROM ne19_runs ORDER BY run_id\").iterate() as unknown as Iterable<Row>) {\n if (!(row.core_payload instanceof Uint8Array))\n fail(\"legacy Run core_payload is not bytes\");\n const sourceDigest = createHash(\"sha256\").update(row.core_payload).digest(\"hex\");\n if (sourceDigest !== text(row.core_digest, \"runs.core_digest\"))\n fail(\"legacy Run core digest differs from bytes\");\n const migrated = migrateLegacyRunBytes(format, row.core_payload);\n if (migrated.runId !== text(row.run_id, \"runs.run_id\"))\n fail(\"legacy Run payload identity differs from its row\");\n connection.db.prepare(\"UPDATE ne19_runs SET core_payload=?,core_digest=? WHERE run_id=?\")\n .run(migrated.bytes, migrated.digest, migrated.runId);\n }\n for (const row of connection.db.prepare(`SELECT attempt_id,origin_run_id,closure_payload,closure_digest\n FROM ne19_attempt_publications ORDER BY attempt_id`).iterate() as unknown as Iterable<Row>) {\n if (!(row.closure_payload instanceof Uint8Array))\n fail(\"legacy Attempt closure_payload is not bytes\");\n const sourceDigest = createHash(\"sha256\").update(row.closure_payload).digest(\"hex\");\n if (sourceDigest !== text(row.closure_digest, \"attempt_publications.closure_digest\"))\n fail(\"legacy Attempt closure digest differs from bytes\");\n const migrated = migrateLegacyClosureBytes(format, row.closure_payload);\n if (migrated.originRunId !== text(row.origin_run_id, \"attempt_publications.origin_run_id\"))\n fail(\"legacy Attempt closure origin differs from its row\");\n connection.db.prepare(\"UPDATE ne19_attempt_publications SET closure_payload=?,closure_digest=? WHERE attempt_id=?\")\n .run(migrated.bytes, migrated.digest, text(row.attempt_id, \"attempt_publications.attempt_id\"));\n }\n sealCurrentRuns(connection, runIds);\n}\nfunction sealCurrentRuns(connection: RecordDatabase, runIds: readonly string[]): void {\n const insert = connection.db.prepare(`INSERT INTO ne19_run_seal_entries(run_id,ordinal,entry_kind,logical_identity,digest)\n VALUES (?,?,?,?,?)`);\n for (const runId of runIds) {\n const entries = collectRunSealEntries(connection, runId);\n const identity = exactLogicalSealIdentity(entries);\n connection.db.prepare(`UPDATE ne19_runs SET status='sealing',candidate_seal_identity=?,candidate_seal_entry_count=?,\n candidate_seal_staged_count=0,logical_seal_identity=NULL WHERE run_id=? AND status='open'`).run(identity, entries.length, runId);\n entries.forEach((entry, ordinal) => insert.run(runId, ordinal, entry.kind, entry.logicalIdentity, entry.digest));\n connection.db.prepare(`UPDATE ne19_runs SET status='sealed',candidate_seal_staged_count=?,logical_seal_identity=?\n WHERE run_id=? AND status='sealing'`).run(entries.length, identity, runId);\n }\n}\nfunction convertLocked(connection: RecordDatabase, format: MigrationSourceFormat, digest: string): void {\n const db = connection.db;\n const prefix = sourcePrefix(format);\n db.exec(\"PRAGMA defer_foreign_keys=ON\");\n db.exec(RECORD_SQLITE_BASELINE_SQL);\n copyTable(db, \"record_metadata\", prefix);\n db.prepare(`UPDATE ne19_record_metadata SET format=?,storage_revision=?,schema_fingerprint=? WHERE singleton=1`)\n .run(RECORD_SQLITE_FORMAT, RECORD_SQLITE_STORAGE_REVISION, RECORD_SQLITE_BASELINE_FINGERPRINT);\n db.prepare(`INSERT INTO ne19_migration_state(singleton,state,source_format,source_digest) VALUES (1,'committed',?,?)`)\n .run(format, digest);\n for (const table of COPY_ORDER) {\n if (table === \"runs\") {\n copyRunTable(db, format, prefix, { status: \"'open'\", candidate_seal_identity: \"NULL\", candidate_seal_entry_count: \"NULL\", candidate_seal_staged_count: \"0\", logical_seal_identity: \"NULL\" });\n }\n else if (table === \"attempts\") {\n copyTable(db, table, prefix, { publication_state: \"'staging'\" });\n }\n else if (table === \"run_publication_clock\") {\n db.exec(`UPDATE ne19_run_publication_clock SET revision=(SELECT revision FROM ${prefix}run_publication_clock WHERE singleton=1)\n WHERE singleton=1`);\n }\n else {\n copyTable(db, table, prefix);\n }\n }\n const runIds = validateLegacySeals(connection, prefix);\n if (format === \"niceeval.project-database/0.17\" || format === \"niceeval.project-database/0.18\") {\n if (format === \"niceeval.project-database/0.17\")\n validateFrozen017Payloads(connection);\n else\n validate018Closures(connection);\n db.exec(`UPDATE ne19_attempts SET publication_state=(SELECT publication_state FROM ${prefix}attempts old\n WHERE old.origin_run_id=ne19_attempts.origin_run_id AND old.attempt_id=ne19_attempts.attempt_id)`);\n sealCurrentRuns(connection, runIds);\n }\n else {\n db.exec(`UPDATE ne19_attempts SET publication_state=(SELECT publication_state FROM attempts old\n WHERE old.origin_run_id=ne19_attempts.origin_run_id AND old.attempt_id=ne19_attempts.attempt_id)`);\n transformPayloads(connection, format, runIds);\n }\n const mismatch = db.prepare(`SELECT 1 FROM ne19_runs r JOIN ne19_run_resources resource USING(run_id)\n WHERE r.experiment_id != resource.experiment_id LIMIT 1`).get();\n if (mismatch !== undefined)\n fail(\"Run Core experimentId differs from its resource\");\n const oldTables: readonly string[] = format === \"niceeval.project-database/0.18\" ? RECORD_SQLITE_018_TABLE_NAMES : format === \"niceeval.project-database/0.17\" ? RECORD_SQLITE_017_TABLE_NAMES : RECORD_SQLITE_LEGACY_TABLE_NAMES;\n for (const table of [...oldTables].reverse())\n db.exec(`DROP TABLE \"${table}\"`);\n validateExactSchema(connection);\n verifyAllSealedRuns(connection, true);\n const foreignKeys = db.prepare(\"PRAGMA foreign_key_check\").all();\n if (foreignKeys.length !== 0)\n fail(\"converted ProjectDatabase has a foreign-key violation\");\n}\nfunction currentState(db: DatabaseSync): Row | undefined {\n const present = db.prepare(`SELECT count(*) AS count FROM sqlite_schema WHERE type='table' AND name='ne19_record_metadata'`).get() as Row;\n if (integer(present.count, \"sqlite_schema.ne19_record_metadata\") === 0)\n return undefined;\n return db.prepare(`SELECT m.format,m.storage_revision,m.schema_fingerprint,s.state,s.source_format,s.source_digest\n FROM ne19_record_metadata m JOIN ne19_migration_state s ON s.singleton=m.singleton WHERE m.singleton=1`).get() as Row | undefined;\n}\nfunction verifyCommitted(path: string, format: MigrationSourceFormat, digest: string): void {\n assertBackup(projectDatabaseMigrationBackupPath(path, format), format, digest);\n const db = openRaw(path, true, 5000);\n const connection: RecordDatabase = { db, path, mode: \"maintenance\", statements: new Map() };\n try {\n db.exec(RECORD_SQLITE_PREPARED_SEAL_TEMP_SQL);\n validateExactSchema(connection);\n verifyAllSealedRuns(connection, true);\n const state = currentState(db);\n if (state === undefined || text(state.state, \"migration_state.state\") !== \"committed\" ||\n text(state.source_format, \"migration_state.source_format\") !== format || text(state.source_digest, \"migration_state.source_digest\") !== digest) {\n fail(\"committed migration marker differs from its validated backup\");\n }\n }\n finally {\n closeRecordDatabase(connection);\n }\n}\nfunction markReady(path: string, format: MigrationSourceFormat, digest: string): void {\n const db = openRaw(path, false, 5000);\n try {\n db.exec(\"BEGIN IMMEDIATE\");\n const changed = db.prepare(`UPDATE ne19_migration_state SET state='ready'\n WHERE singleton=1 AND state='committed' AND source_format=? AND source_digest=?`).run(format, digest);\n if (Number(changed.changes) !== 1)\n fail(\"committed migration marker changed before readiness publication\");\n db.exec(\"COMMIT\");\n }\n catch (cause) {\n if (db.isTransaction)\n db.exec(\"ROLLBACK\");\n throw cause;\n }\n finally {\n db.close();\n }\n}\nfunction checkpointReady(path: string): void {\n const db = openRaw(path, false, 5000);\n try {\n const checkpoint = db.prepare(\"PRAGMA wal_checkpoint(TRUNCATE)\").get() as Row | undefined;\n if (checkpoint === undefined || integer(checkpoint.busy, \"wal_checkpoint.busy\") !== 0 ||\n integer(checkpoint.log, \"wal_checkpoint.log\") !== integer(checkpoint.checkpointed, \"wal_checkpoint.checkpointed\")) {\n fail(\"ready migration could not be checkpointed into its main file\");\n }\n }\n finally {\n db.close();\n }\n}\nfunction proveReadyMainFile(path: string, deadlineEpochMs: number): void {\n const proof = `${path}.ready-proof-${process.pid}-${randomUUID()}`;\n const descriptor = openSync(proof, \"wx\", 0o600);\n closeSync(descriptor);\n try {\n // copyFileSync overwrites the already-private inode without consulting or\n // copying WAL. A successful hostile reopen therefore proves main-file-only\n // readiness for Preview and other byte-copy consumers.\n copyFileSync(path, proof);\n chmodSync(proof, 0o600);\n const db = openRaw(proof, true, 0);\n const connection: RecordDatabase = { db, path: proof, mode: \"reader\", statements: new Map() };\n try {\n if (exactSchemaKind(db) !== \"current\")\n fail(\"ready migration proof is not the current exact schema\");\n db.exec(RECORD_SQLITE_PREPARED_SEAL_TEMP_SQL);\n db.setAuthorizer(privateReaderAuthorizer);\n validateExactSchema(connection);\n const state = currentState(db);\n if (state === undefined || text(state.state, \"migration_state.state\") !== \"ready\") {\n fail(\"migration ready marker is not durable in the main file\");\n }\n validatePortableRecordDatabase(connection, deadlineEpochMs);\n }\n finally {\n closeRecordDatabase(connection);\n }\n }\n finally {\n for (const ownedPath of [proof, `${proof}-wal`, `${proof}-shm`, `${proof}-journal`]) {\n try {\n unlinkSync(ownedPath);\n }\n catch { /* exact private proof path may already be absent */ }\n }\n }\n}\n/**\n * Migration entry for a Host-owned project inode or an already captured,\n * private, writable portable input. SQLite must never call it on an external\n * source path.\n */\nexport async function migrateHostOwnedProjectDatabase(path: string, busyTimeoutMs = 5000, sourceKind: \"host-owned\" | \"private-portable\" = \"host-owned\", deadlineEpochMs = Date.now() + 30000): Promise<MigrationResult> {\n try {\n const metadata = lstatSync(path);\n if (!metadata.isFile() || metadata.isSymbolicLink())\n fail(\"ProjectDatabase path is not a regular Host-owned file\");\n }\n catch (cause) {\n if (typeof cause === \"object\" && cause !== null && Reflect.get(cause, \"code\") === \"ENOENT\")\n return \"absent\";\n throw cause;\n }\n if (sourceKind === \"private-portable\")\n admitPrivatePortable(path, deadlineEpochMs);\n const db = openRaw(path, false, Math.max(0, Math.min(30000, Math.trunc(busyTimeoutMs))));\n const connection: RecordDatabase = { db, path, mode: \"writer\", statements: new Map() };\n let migrated = false;\n let identity: {\n readonly format: MigrationSourceFormat;\n readonly digest: string;\n } | undefined;\n try {\n db.exec(\"BEGIN IMMEDIATE\");\n const current = currentState(db);\n if (current !== undefined) {\n if (text(current.format, \"record_metadata.format\") !== RECORD_SQLITE_FORMAT ||\n integer(current.storage_revision, \"record_metadata.storage_revision\") !== RECORD_SQLITE_STORAGE_REVISION ||\n text(current.schema_fingerprint, \"record_metadata.schema_fingerprint\") !== RECORD_SQLITE_BASELINE_FINGERPRINT) {\n fail(\"current ProjectDatabase identity is invalid\");\n }\n const state = text(current.state, \"migration_state.state\");\n if (state === \"ready\") {\n db.exec(\"ROLLBACK\");\n return \"current\";\n }\n if (state !== \"committed\")\n fail(\"current ProjectDatabase migration state is invalid\");\n const format = text(current.source_format, \"migration_state.source_format\") as MigrationSourceFormat;\n if (!LEGACY_FORMATS.has(format))\n fail(\"committed migration source format is invalid\");\n identity = { format, digest: text(current.source_digest, \"migration_state.source_digest\") };\n db.exec(\"ROLLBACK\");\n }\n else {\n identity = legacyIdentity(db);\n if (sourceKind === \"private-portable\")\n assertLegacyPortable(db, identity.format);\n else\n assertLegacyIdle(db, identity.format);\n await ensureBackup(path, identity.format, identity.digest);\n // The backup came from a second read-only connection. Revalidate the\n // still-locked source before any schema or payload mutation begins.\n const lockedAgain = legacyIdentity(db);\n if (lockedAgain.format !== identity.format || lockedAgain.digest !== identity.digest)\n fail(\"legacy facts changed while creating the migration backup\");\n convertLocked(connection, identity.format, identity.digest);\n db.exec(\"COMMIT\");\n migrated = true;\n }\n // A post-commit failure deliberately leaves state='committed'. Never copy\n // the old backup over the now-current inode; the next Host open retries\n // checkpoint and hostile validation from this durable marker.\n const checkpoint = db.prepare(\"PRAGMA wal_checkpoint(TRUNCATE)\").get() as Row | undefined;\n if (checkpoint === undefined || integer(checkpoint.busy, \"wal_checkpoint.busy\") !== 0 ||\n integer(checkpoint.log, \"wal_checkpoint.log\") !== integer(checkpoint.checkpointed, \"wal_checkpoint.checkpointed\")) {\n throw sqliteError(\"record-schema-migration-required\", \"auto-migrate-checkpoint\", \"ProjectDatabase migration committed, but an old reader still pins its WAL snapshot; close the old NiceEval process and rerun the experiment\");\n }\n }\n catch (cause) {\n if (db.isTransaction)\n db.exec(\"ROLLBACK\");\n throw cause;\n }\n finally {\n closeRecordDatabase(connection);\n }\n if (identity === undefined)\n fail(\"migration identity was not established\");\n verifyCommitted(path, identity.format, identity.digest);\n markReady(path, identity.format, identity.digest);\n if (sourceKind === \"private-portable\") {\n checkpointReady(path);\n proveReadyMainFile(path, deadlineEpochMs);\n }\n return migrated ? \"migrated\" : \"current\";\n}\n"]}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { type LegacyProjectDatabaseFormat } from "../codec/legacy-run-context.cjs";
|
|
2
|
+
type MigrationSourceFormat = LegacyProjectDatabaseFormat | "niceeval.project-database/0.18";
|
|
2
3
|
type MigrationResult = "absent" | "current" | "migrated";
|
|
3
4
|
/** Classifies only an already-private capture, before reading domain metadata. */
|
|
4
5
|
export declare function capturedRecordSchemaKind(path: string): "legacy" | "current";
|
|
5
|
-
export declare function projectDatabaseMigrationBackupPath(path: string, format:
|
|
6
|
+
export declare function projectDatabaseMigrationBackupPath(path: string, format: MigrationSourceFormat): string;
|
|
6
7
|
/**
|
|
7
8
|
* Migration entry for a Host-owned project inode or an already captured,
|
|
8
9
|
* private, writable portable input. SQLite must never call it on an external
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { type LegacyProjectDatabaseFormat } from "../codec/legacy-run-context.mjs";
|
|
2
|
+
type MigrationSourceFormat = LegacyProjectDatabaseFormat | "niceeval.project-database/0.18";
|
|
2
3
|
type MigrationResult = "absent" | "current" | "migrated";
|
|
3
4
|
/** Classifies only an already-private capture, before reading domain metadata. */
|
|
4
5
|
export declare function capturedRecordSchemaKind(path: string): "legacy" | "current";
|
|
5
|
-
export declare function projectDatabaseMigrationBackupPath(path: string, format:
|
|
6
|
+
export declare function projectDatabaseMigrationBackupPath(path: string, format: MigrationSourceFormat): string;
|
|
6
7
|
/**
|
|
7
8
|
* Migration entry for a Host-owned project inode or an already captured,
|
|
8
9
|
* private, writable portable input. SQLite must never call it on an external
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { type LegacyProjectDatabaseFormat } from "../codec/legacy-run-context.js";
|
|
2
|
+
type MigrationSourceFormat = LegacyProjectDatabaseFormat | "niceeval.project-database/0.18";
|
|
2
3
|
type MigrationResult = "absent" | "current" | "migrated";
|
|
3
4
|
/** Classifies only an already-private capture, before reading domain metadata. */
|
|
4
5
|
export declare function capturedRecordSchemaKind(path: string): "legacy" | "current";
|
|
5
|
-
export declare function projectDatabaseMigrationBackupPath(path: string, format:
|
|
6
|
+
export declare function projectDatabaseMigrationBackupPath(path: string, format: MigrationSourceFormat): string;
|
|
6
7
|
/**
|
|
7
8
|
* Migration entry for a Host-owned project inode or an already captured,
|
|
8
9
|
* private, writable portable input. SQLite must never call it on an external
|
|
@@ -190,23 +190,23 @@ function text(value, field) {
|
|
|
190
190
|
function validatePortableRecordDatabase(connection, deadlineEpochMs) {
|
|
191
191
|
checkDeadline(deadlineEpochMs, "portable validation");
|
|
192
192
|
const state = connection.db.prepare(`SELECT barrier_state,portable_generation,portable_revision,storage_generation
|
|
193
|
-
FROM
|
|
193
|
+
FROM ne19_record_metadata WHERE singleton=1`).get();
|
|
194
194
|
const active = connection.db.prepare(`SELECT
|
|
195
|
-
(SELECT count(*) FROM
|
|
196
|
-
(SELECT count(*) FROM
|
|
197
|
-
(SELECT count(*) FROM
|
|
198
|
-
(SELECT count(*) FROM
|
|
195
|
+
(SELECT count(*) FROM ne19_run_resources WHERE terminal_state IS NULL)+
|
|
196
|
+
(SELECT count(*) FROM ne19_runs WHERE status!='sealed')+
|
|
197
|
+
(SELECT count(*) FROM ne19_attempts WHERE publication_state!='published')+
|
|
198
|
+
(SELECT count(*) FROM ne19_coordination_tickets) AS count`).get();
|
|
199
199
|
const invocationWork = connection.db.prepare(`SELECT
|
|
200
|
-
(SELECT count(*) FROM
|
|
201
|
-
(SELECT count(*) FROM
|
|
202
|
-
(SELECT count(*) FROM
|
|
200
|
+
(SELECT count(*) FROM ne19_invocation_sessions WHERE state IN ('active','recovering'))+
|
|
201
|
+
(SELECT count(*) FROM ne19_invocation_session_queued_attempts)+
|
|
202
|
+
(SELECT count(*) FROM ne19_case_locks) AS count`).get();
|
|
203
203
|
const registryWork = connection.db.prepare(`SELECT
|
|
204
|
-
(SELECT count(*) FROM
|
|
205
|
-
(SELECT count(*) FROM
|
|
206
|
-
(SELECT count(*) FROM
|
|
207
|
-
const coordination = connection.db.prepare("SELECT writer_ticket_id,barrier_id FROM
|
|
204
|
+
(SELECT count(*) FROM ne19_teardown_obligations)+
|
|
205
|
+
(SELECT count(*) FROM ne19_shared_state_generations s WHERE state_kind!='free' AND generation=(SELECT max(generation) FROM ne19_shared_state_generations WHERE state_key=s.state_key))+
|
|
206
|
+
(SELECT count(*) FROM ne19_kept_sandbox_operation_leases) AS count`).get();
|
|
207
|
+
const coordination = connection.db.prepare("SELECT writer_ticket_id,barrier_id FROM ne19_coordination_state WHERE singleton=1")
|
|
208
208
|
.get();
|
|
209
|
-
const clock = connection.db.prepare("SELECT revision FROM
|
|
209
|
+
const clock = connection.db.prepare("SELECT revision FROM ne19_run_publication_clock WHERE singleton=1")
|
|
210
210
|
.get();
|
|
211
211
|
if (state === undefined || text(state.barrier_state, "barrier_state") !== "portable" ||
|
|
212
212
|
text(state.portable_generation, "portable_generation") !== text(state.storage_generation, "storage_generation") ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"portable-capture.js","sourceRoot":"","sources":["portable-capture.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { constants, lstatSync, type BigIntStats, watch } from \"node:fs\";\nimport { lstat, open } from \"node:fs/promises\";\nimport { basename, dirname } from \"node:path\";\nimport type { SQLOutputValue } from \"node:sqlite\";\nimport { sqliteError } from \"./errors.ts\";\nimport type { RecordDatabase } from \"./database.ts\";\nimport { verifyAllSealedRuns } from \"./storage.ts\";\nconst CAPTURE_CHUNK_BYTES = 256 * 1024;\nconst MAX_PORTABLE_RECORD_BYTES = 8 * 1024 * 1024 * 1024;\nconst SIDECAR_SUFFIXES = [\"-wal\", \"-shm\", \"-journal\"] as const;\nexport type ProjectRecordReadMode = \"capture\" | \"operational\";\nfunction fail(message: string, cause?: unknown): never {\n throw sqliteError(\"record-database-invalid\", \"capture-record\", message, cause);\n}\nfunction resourceLimit(message: string): never {\n throw sqliteError(\"record-resource-limit-exceeded\", \"capture-record\", message);\n}\nfunction checkDeadline(deadlineEpochMs: number, phase: string): void {\n if (!Number.isSafeInteger(deadlineEpochMs) || Date.now() >= deadlineEpochMs) {\n resourceLimit(`Record ${phase} exceeded its deadline`);\n }\n}\nfunction sameIdentity(left: BigIntStats, right: BigIntStats): boolean {\n return left.dev === right.dev && left.ino === right.ino && left.size === right.size &&\n left.mtimeNs === right.mtimeNs && left.ctimeNs === right.ctimeNs;\n}\nasync function sidecarStat(path: string): Promise<BigIntStats | undefined> {\n try {\n const metadata = await lstat(path, { bigint: true });\n if (!metadata.isFile() || metadata.isSymbolicLink())\n fail(`Record sidecar is not a regular file: ${path}`);\n return metadata;\n }\n catch (cause) {\n if (typeof cause === \"object\" && cause !== null && Reflect.get(cause, \"code\") === \"ENOENT\")\n return undefined;\n if (cause instanceof Error && Reflect.get(cause, \"operation\") === \"capture-record\")\n throw cause;\n return fail(`Record sidecar could not be inspected safely: ${path}`, cause);\n }\n}\nasync function inspectPortableSidecars(sourcePath: string, rejectAny: boolean): Promise<void> {\n for (const suffix of SIDECAR_SUFFIXES) {\n const sidecarPath = `${sourcePath}${suffix}`;\n const metadata = await sidecarStat(sidecarPath);\n if (metadata === undefined)\n continue;\n if (rejectAny || (suffix !== \"-shm\" && metadata.size !== 0n)) {\n fail(`Record is not a single-file portable input because sidecar ${sidecarPath} is present`);\n }\n }\n}\n/**\n * Root-level project source routing. It never opens SQLite or tries to infer a\n * historical format: any regular SQLite sidecar selects the operational path.\n */\nexport function projectRecordReadMode(sourcePath: string): ProjectRecordReadMode {\n if (sourcePath.length === 0)\n fail(\"Project Record path is empty\");\n for (const suffix of SIDECAR_SUFFIXES) {\n const sidecarPath = `${sourcePath}${suffix}`;\n try {\n const metadata = lstatSync(sidecarPath, { bigint: true });\n if (!metadata.isFile() || metadata.isSymbolicLink())\n fail(`Record sidecar is not a regular file: ${sidecarPath}`);\n return \"operational\";\n }\n catch (cause) {\n if (typeof cause === \"object\" && cause !== null && Reflect.get(cause, \"code\") === \"ENOENT\")\n continue;\n if (cause instanceof Error && Reflect.get(cause, \"operation\") === \"capture-record\")\n throw cause;\n return fail(`Record sidecar could not be inspected safely: ${sidecarPath}`, cause);\n }\n }\n return \"capture\";\n}\nasync function pathIdentity(sourcePath: string, descriptor: BigIntStats): Promise<BigIntStats> {\n let pathMetadata: BigIntStats;\n try {\n pathMetadata = await lstat(sourcePath, { bigint: true });\n }\n catch (cause) {\n return fail(\"Record source path could not be inspected safely\", cause);\n }\n if (!pathMetadata.isFile() || pathMetadata.isSymbolicLink() || !sameIdentity(pathMetadata, descriptor)) {\n fail(\"Record source path does not identify the opened regular file\");\n }\n return pathMetadata;\n}\n/**\n * Captures a delivered single-file Record without ever asking SQLite to open\n * the source. Both bounded passes use the same no-follow descriptor; the first\n * writes the private generation and the second proves identical source bytes.\n */\nexport async function captureSingleFileRecord(sourcePath: string, generationPath: string, deadlineEpochMs: number, rejectAnySidecar: boolean): Promise<void> {\n checkDeadline(deadlineEpochMs, \"capture startup\");\n const sourceName = basename(sourcePath);\n const watchedNames = new Set(SIDECAR_SUFFIXES.map((suffix) => `${sourceName}${suffix}`));\n let sidecarChanged = false;\n let watchFailure: unknown;\n const watcher = watch(dirname(sourcePath), { persistent: false }, (_event, filename) => {\n if (filename !== null && watchedNames.has(filename.toString()))\n sidecarChanged = true;\n });\n watcher.on(\"error\", (cause) => { watchFailure = cause; });\n let source: Awaited<ReturnType<typeof open>> | undefined;\n let generation: Awaited<ReturnType<typeof open>> | undefined;\n try {\n await inspectPortableSidecars(sourcePath, rejectAnySidecar);\n source = await open(sourcePath, constants.O_RDONLY | constants.O_NOFOLLOW);\n const before = await source.stat({ bigint: true });\n if (!before.isFile() || before.isSymbolicLink())\n fail(\"Record source is not a regular file\");\n if (before.size <= 0n || before.size > BigInt(MAX_PORTABLE_RECORD_BYTES)) {\n resourceLimit(`Record source size must be between 1 and ${MAX_PORTABLE_RECORD_BYTES} bytes`);\n }\n await pathIdentity(sourcePath, before);\n generation = await open(generationPath, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);\n await generation.chmod(0o600);\n const buffer = Buffer.allocUnsafe(CAPTURE_CHUNK_BYTES);\n const firstHash = createHash(\"sha256\");\n let offset = 0;\n while (BigInt(offset) < before.size) {\n checkDeadline(deadlineEpochMs, \"capture first pass\");\n const remaining = Number(before.size - BigInt(offset));\n const length = Math.min(buffer.byteLength, remaining);\n const read = await source.read(buffer, 0, length, offset);\n if (read.bytesRead !== length)\n fail(\"Record source ended during the first capture pass\");\n firstHash.update(buffer.subarray(0, read.bytesRead));\n let written = 0;\n while (written < read.bytesRead) {\n const result = await generation.write(buffer, written, read.bytesRead - written, offset + written);\n if (result.bytesWritten <= 0)\n fail(\"Private Record generation stopped accepting bytes\");\n written += result.bytesWritten;\n }\n offset += read.bytesRead;\n }\n await generation.sync();\n const secondHash = createHash(\"sha256\");\n offset = 0;\n while (BigInt(offset) < before.size) {\n checkDeadline(deadlineEpochMs, \"capture second pass\");\n const remaining = Number(before.size - BigInt(offset));\n const length = Math.min(buffer.byteLength, remaining);\n const read = await source.read(buffer, 0, length, offset);\n if (read.bytesRead !== length)\n fail(\"Record source ended during the second capture pass\");\n secondHash.update(buffer.subarray(0, read.bytesRead));\n offset += read.bytesRead;\n }\n const after = await source.stat({ bigint: true });\n await pathIdentity(sourcePath, after);\n await inspectPortableSidecars(sourcePath, rejectAnySidecar);\n if (watchFailure !== undefined)\n fail(\"Record source directory watch failed during capture\", watchFailure);\n if (sidecarChanged)\n fail(\"Record sidecar changed during single-file capture\");\n if (!sameIdentity(before, after) || firstHash.digest(\"hex\") !== secondHash.digest(\"hex\")) {\n fail(\"Record source changed during its bounded two-pass capture\");\n }\n checkDeadline(deadlineEpochMs, \"capture completion\");\n }\n catch (cause) {\n throw cause;\n }\n finally {\n watcher.close();\n await generation?.close().catch(() => undefined);\n await source?.close().catch(() => undefined);\n }\n}\nfunction integer(value: SQLOutputValue | undefined, field: string): number {\n const decoded = typeof value === \"bigint\" ? Number(value) : value;\n if (typeof decoded !== \"number\" || !Number.isSafeInteger(decoded))\n fail(`${field} is not a safe integer`);\n return decoded;\n}\nfunction text(value: SQLOutputValue | undefined, field: string): string {\n if (typeof value !== \"string\")\n fail(`${field} is not text`);\n return value;\n}\n/** Exact portable/idle admission applied only to the private current copy. */\nexport function validatePortableRecordDatabase(connection: RecordDatabase, deadlineEpochMs: number): number {\n checkDeadline(deadlineEpochMs, \"portable validation\");\n const state = connection.db.prepare(`SELECT barrier_state,portable_generation,portable_revision,storage_generation\n FROM ne18_record_metadata WHERE singleton=1`).get() as Record<string, SQLOutputValue> | undefined;\n const active = connection.db.prepare(`SELECT\n (SELECT count(*) FROM ne18_run_resources WHERE terminal_state IS NULL)+\n (SELECT count(*) FROM ne18_runs WHERE status!='sealed')+\n (SELECT count(*) FROM ne18_attempts WHERE publication_state!='published')+\n (SELECT count(*) FROM ne18_coordination_tickets) AS count`).get() as Record<string, SQLOutputValue>;\n const invocationWork = connection.db.prepare(`SELECT\n (SELECT count(*) FROM ne18_invocation_sessions WHERE state IN ('active','recovering'))+\n (SELECT count(*) FROM ne18_invocation_session_queued_attempts)+\n (SELECT count(*) FROM ne18_case_locks) AS count`).get() as Record<string, SQLOutputValue>;\n const registryWork = connection.db.prepare(`SELECT\n (SELECT count(*) FROM ne18_teardown_obligations)+\n (SELECT count(*) FROM ne18_shared_state_generations s WHERE state_kind!='free' AND generation=(SELECT max(generation) FROM ne18_shared_state_generations WHERE state_key=s.state_key))+\n (SELECT count(*) FROM ne18_kept_sandbox_operation_leases) AS count`).get() as Record<string, SQLOutputValue>;\n const coordination = connection.db.prepare(\"SELECT writer_ticket_id,barrier_id FROM ne18_coordination_state WHERE singleton=1\")\n .get() as Record<string, SQLOutputValue> | undefined;\n const clock = connection.db.prepare(\"SELECT revision FROM ne18_run_publication_clock WHERE singleton=1\")\n .get() as Record<string, SQLOutputValue> | undefined;\n if (state === undefined || text(state.barrier_state, \"barrier_state\") !== \"portable\" ||\n text(state.portable_generation, \"portable_generation\") !== text(state.storage_generation, \"storage_generation\") ||\n clock === undefined || integer(state.portable_revision, \"portable_revision\") !== integer(clock.revision, \"publication_revision\") ||\n integer(active.count, \"portable_work\") !== 0 || integer(invocationWork.count, \"portable_invocation_work\") !== 0 ||\n integer(registryWork.count, \"portable_registry_work\") !== 0 || coordination === undefined ||\n coordination.writer_ticket_id !== null || coordination.barrier_id !== null) {\n fail(\"Private generation does not prove a portable idle ProjectDatabase\");\n }\n return verifyAllSealedRuns(connection, true, deadlineEpochMs);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"portable-capture.js","sourceRoot":"","sources":["portable-capture.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHash } from \"node:crypto\";\nimport { constants, lstatSync, type BigIntStats, watch } from \"node:fs\";\nimport { lstat, open } from \"node:fs/promises\";\nimport { basename, dirname } from \"node:path\";\nimport type { SQLOutputValue } from \"node:sqlite\";\nimport { sqliteError } from \"./errors.ts\";\nimport type { RecordDatabase } from \"./database.ts\";\nimport { verifyAllSealedRuns } from \"./storage.ts\";\nconst CAPTURE_CHUNK_BYTES = 256 * 1024;\nconst MAX_PORTABLE_RECORD_BYTES = 8 * 1024 * 1024 * 1024;\nconst SIDECAR_SUFFIXES = [\"-wal\", \"-shm\", \"-journal\"] as const;\nexport type ProjectRecordReadMode = \"capture\" | \"operational\";\nfunction fail(message: string, cause?: unknown): never {\n throw sqliteError(\"record-database-invalid\", \"capture-record\", message, cause);\n}\nfunction resourceLimit(message: string): never {\n throw sqliteError(\"record-resource-limit-exceeded\", \"capture-record\", message);\n}\nfunction checkDeadline(deadlineEpochMs: number, phase: string): void {\n if (!Number.isSafeInteger(deadlineEpochMs) || Date.now() >= deadlineEpochMs) {\n resourceLimit(`Record ${phase} exceeded its deadline`);\n }\n}\nfunction sameIdentity(left: BigIntStats, right: BigIntStats): boolean {\n return left.dev === right.dev && left.ino === right.ino && left.size === right.size &&\n left.mtimeNs === right.mtimeNs && left.ctimeNs === right.ctimeNs;\n}\nasync function sidecarStat(path: string): Promise<BigIntStats | undefined> {\n try {\n const metadata = await lstat(path, { bigint: true });\n if (!metadata.isFile() || metadata.isSymbolicLink())\n fail(`Record sidecar is not a regular file: ${path}`);\n return metadata;\n }\n catch (cause) {\n if (typeof cause === \"object\" && cause !== null && Reflect.get(cause, \"code\") === \"ENOENT\")\n return undefined;\n if (cause instanceof Error && Reflect.get(cause, \"operation\") === \"capture-record\")\n throw cause;\n return fail(`Record sidecar could not be inspected safely: ${path}`, cause);\n }\n}\nasync function inspectPortableSidecars(sourcePath: string, rejectAny: boolean): Promise<void> {\n for (const suffix of SIDECAR_SUFFIXES) {\n const sidecarPath = `${sourcePath}${suffix}`;\n const metadata = await sidecarStat(sidecarPath);\n if (metadata === undefined)\n continue;\n if (rejectAny || (suffix !== \"-shm\" && metadata.size !== 0n)) {\n fail(`Record is not a single-file portable input because sidecar ${sidecarPath} is present`);\n }\n }\n}\n/**\n * Root-level project source routing. It never opens SQLite or tries to infer a\n * historical format: any regular SQLite sidecar selects the operational path.\n */\nexport function projectRecordReadMode(sourcePath: string): ProjectRecordReadMode {\n if (sourcePath.length === 0)\n fail(\"Project Record path is empty\");\n for (const suffix of SIDECAR_SUFFIXES) {\n const sidecarPath = `${sourcePath}${suffix}`;\n try {\n const metadata = lstatSync(sidecarPath, { bigint: true });\n if (!metadata.isFile() || metadata.isSymbolicLink())\n fail(`Record sidecar is not a regular file: ${sidecarPath}`);\n return \"operational\";\n }\n catch (cause) {\n if (typeof cause === \"object\" && cause !== null && Reflect.get(cause, \"code\") === \"ENOENT\")\n continue;\n if (cause instanceof Error && Reflect.get(cause, \"operation\") === \"capture-record\")\n throw cause;\n return fail(`Record sidecar could not be inspected safely: ${sidecarPath}`, cause);\n }\n }\n return \"capture\";\n}\nasync function pathIdentity(sourcePath: string, descriptor: BigIntStats): Promise<BigIntStats> {\n let pathMetadata: BigIntStats;\n try {\n pathMetadata = await lstat(sourcePath, { bigint: true });\n }\n catch (cause) {\n return fail(\"Record source path could not be inspected safely\", cause);\n }\n if (!pathMetadata.isFile() || pathMetadata.isSymbolicLink() || !sameIdentity(pathMetadata, descriptor)) {\n fail(\"Record source path does not identify the opened regular file\");\n }\n return pathMetadata;\n}\n/**\n * Captures a delivered single-file Record without ever asking SQLite to open\n * the source. Both bounded passes use the same no-follow descriptor; the first\n * writes the private generation and the second proves identical source bytes.\n */\nexport async function captureSingleFileRecord(sourcePath: string, generationPath: string, deadlineEpochMs: number, rejectAnySidecar: boolean): Promise<void> {\n checkDeadline(deadlineEpochMs, \"capture startup\");\n const sourceName = basename(sourcePath);\n const watchedNames = new Set(SIDECAR_SUFFIXES.map((suffix) => `${sourceName}${suffix}`));\n let sidecarChanged = false;\n let watchFailure: unknown;\n const watcher = watch(dirname(sourcePath), { persistent: false }, (_event, filename) => {\n if (filename !== null && watchedNames.has(filename.toString()))\n sidecarChanged = true;\n });\n watcher.on(\"error\", (cause) => { watchFailure = cause; });\n let source: Awaited<ReturnType<typeof open>> | undefined;\n let generation: Awaited<ReturnType<typeof open>> | undefined;\n try {\n await inspectPortableSidecars(sourcePath, rejectAnySidecar);\n source = await open(sourcePath, constants.O_RDONLY | constants.O_NOFOLLOW);\n const before = await source.stat({ bigint: true });\n if (!before.isFile() || before.isSymbolicLink())\n fail(\"Record source is not a regular file\");\n if (before.size <= 0n || before.size > BigInt(MAX_PORTABLE_RECORD_BYTES)) {\n resourceLimit(`Record source size must be between 1 and ${MAX_PORTABLE_RECORD_BYTES} bytes`);\n }\n await pathIdentity(sourcePath, before);\n generation = await open(generationPath, constants.O_WRONLY | constants.O_CREAT | constants.O_EXCL | constants.O_NOFOLLOW, 0o600);\n await generation.chmod(0o600);\n const buffer = Buffer.allocUnsafe(CAPTURE_CHUNK_BYTES);\n const firstHash = createHash(\"sha256\");\n let offset = 0;\n while (BigInt(offset) < before.size) {\n checkDeadline(deadlineEpochMs, \"capture first pass\");\n const remaining = Number(before.size - BigInt(offset));\n const length = Math.min(buffer.byteLength, remaining);\n const read = await source.read(buffer, 0, length, offset);\n if (read.bytesRead !== length)\n fail(\"Record source ended during the first capture pass\");\n firstHash.update(buffer.subarray(0, read.bytesRead));\n let written = 0;\n while (written < read.bytesRead) {\n const result = await generation.write(buffer, written, read.bytesRead - written, offset + written);\n if (result.bytesWritten <= 0)\n fail(\"Private Record generation stopped accepting bytes\");\n written += result.bytesWritten;\n }\n offset += read.bytesRead;\n }\n await generation.sync();\n const secondHash = createHash(\"sha256\");\n offset = 0;\n while (BigInt(offset) < before.size) {\n checkDeadline(deadlineEpochMs, \"capture second pass\");\n const remaining = Number(before.size - BigInt(offset));\n const length = Math.min(buffer.byteLength, remaining);\n const read = await source.read(buffer, 0, length, offset);\n if (read.bytesRead !== length)\n fail(\"Record source ended during the second capture pass\");\n secondHash.update(buffer.subarray(0, read.bytesRead));\n offset += read.bytesRead;\n }\n const after = await source.stat({ bigint: true });\n await pathIdentity(sourcePath, after);\n await inspectPortableSidecars(sourcePath, rejectAnySidecar);\n if (watchFailure !== undefined)\n fail(\"Record source directory watch failed during capture\", watchFailure);\n if (sidecarChanged)\n fail(\"Record sidecar changed during single-file capture\");\n if (!sameIdentity(before, after) || firstHash.digest(\"hex\") !== secondHash.digest(\"hex\")) {\n fail(\"Record source changed during its bounded two-pass capture\");\n }\n checkDeadline(deadlineEpochMs, \"capture completion\");\n }\n catch (cause) {\n throw cause;\n }\n finally {\n watcher.close();\n await generation?.close().catch(() => undefined);\n await source?.close().catch(() => undefined);\n }\n}\nfunction integer(value: SQLOutputValue | undefined, field: string): number {\n const decoded = typeof value === \"bigint\" ? Number(value) : value;\n if (typeof decoded !== \"number\" || !Number.isSafeInteger(decoded))\n fail(`${field} is not a safe integer`);\n return decoded;\n}\nfunction text(value: SQLOutputValue | undefined, field: string): string {\n if (typeof value !== \"string\")\n fail(`${field} is not text`);\n return value;\n}\n/** Exact portable/idle admission applied only to the private current copy. */\nexport function validatePortableRecordDatabase(connection: RecordDatabase, deadlineEpochMs: number): number {\n checkDeadline(deadlineEpochMs, \"portable validation\");\n const state = connection.db.prepare(`SELECT barrier_state,portable_generation,portable_revision,storage_generation\n FROM ne19_record_metadata WHERE singleton=1`).get() as Record<string, SQLOutputValue> | undefined;\n const active = connection.db.prepare(`SELECT\n (SELECT count(*) FROM ne19_run_resources WHERE terminal_state IS NULL)+\n (SELECT count(*) FROM ne19_runs WHERE status!='sealed')+\n (SELECT count(*) FROM ne19_attempts WHERE publication_state!='published')+\n (SELECT count(*) FROM ne19_coordination_tickets) AS count`).get() as Record<string, SQLOutputValue>;\n const invocationWork = connection.db.prepare(`SELECT\n (SELECT count(*) FROM ne19_invocation_sessions WHERE state IN ('active','recovering'))+\n (SELECT count(*) FROM ne19_invocation_session_queued_attempts)+\n (SELECT count(*) FROM ne19_case_locks) AS count`).get() as Record<string, SQLOutputValue>;\n const registryWork = connection.db.prepare(`SELECT\n (SELECT count(*) FROM ne19_teardown_obligations)+\n (SELECT count(*) FROM ne19_shared_state_generations s WHERE state_kind!='free' AND generation=(SELECT max(generation) FROM ne19_shared_state_generations WHERE state_key=s.state_key))+\n (SELECT count(*) FROM ne19_kept_sandbox_operation_leases) AS count`).get() as Record<string, SQLOutputValue>;\n const coordination = connection.db.prepare(\"SELECT writer_ticket_id,barrier_id FROM ne19_coordination_state WHERE singleton=1\")\n .get() as Record<string, SQLOutputValue> | undefined;\n const clock = connection.db.prepare(\"SELECT revision FROM ne19_run_publication_clock WHERE singleton=1\")\n .get() as Record<string, SQLOutputValue> | undefined;\n if (state === undefined || text(state.barrier_state, \"barrier_state\") !== \"portable\" ||\n text(state.portable_generation, \"portable_generation\") !== text(state.storage_generation, \"storage_generation\") ||\n clock === undefined || integer(state.portable_revision, \"portable_revision\") !== integer(clock.revision, \"publication_revision\") ||\n integer(active.count, \"portable_work\") !== 0 || integer(invocationWork.count, \"portable_invocation_work\") !== 0 ||\n integer(registryWork.count, \"portable_registry_work\") !== 0 || coordination === undefined ||\n coordination.writer_ticket_id !== null || coordination.barrier_id !== null) {\n fail(\"Private generation does not prove a portable idle ProjectDatabase\");\n }\n return verifyAllSealedRuns(connection, true, deadlineEpochMs);\n}\n"]}
|