@tiangong-lca/cli 0.0.27 → 0.0.29
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/README.md +85 -2
- package/dist/src/cli.js +544 -3
- package/dist/src/cli.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-contract.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-flow-identity-approval-claim.js +175 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-approval-claim.js.map +1 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-capture.js +511 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-capture.js.map +1 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-command.js +26 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-command.js.map +1 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-contract.js +784 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-contract.js.map +1 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-execution-contract.js +1317 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-execution-contract.js.map +1 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-freeze.js +342 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-freeze.js.map +1 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-plan.js +900 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-plan.js.map +1 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-recovery.js +688 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-recovery.js.map +1 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-run.js +1369 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-run.js.map +1 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-seal.js +144 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-seal.js.map +1 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-verify.js +377 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-verify.js.map +1 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-wire.js +178 -0
- package/dist/src/lib/dataset-maintenance-flow-identity-wire.js.map +1 -0
- package/dist/src/lib/dataset-maintenance-protected-verify.js +76 -1
- package/dist/src/lib/dataset-maintenance-protected-verify.js.map +1 -1
- package/dist/src/lib/dataset-maintenance-remote.js +156 -10
- package/dist/src/lib/dataset-maintenance-remote.js.map +1 -1
- package/dist/src/lib/http.js.map +1 -1
- package/dist/src/lib/lca-release.js +683 -0
- package/dist/src/lib/lca-release.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dataset-maintenance-flow-identity-recovery.js","sourceRoot":"","sources":["../../../src/lib/dataset-maintenance-flow-identity-recovery.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'node:path';\nimport {\n materializePrivateArtifactDirectoryAtomically,\n readProtectedJsonArtifact,\n readProtectedTextArtifact,\n writePrivateImmutableJson,\n writePrivateImmutableText,\n} from './dataset-maintenance-protected-artifacts.js';\nimport {\n buildFlowIdentityExecutionIdentity,\n buildFlowIdentityScopeLookupRequest,\n parseFlowIdentityScopeLookupProof,\n parseFlowIdentityScopePreflightProof,\n parseFlowIdentityScopeStatus,\n prepareFlowIdentityExecution,\n type FlowIdentityApproval,\n type FlowIdentityExecutionIdentity,\n type FlowIdentityFreeze,\n type FlowIdentityScopeProof,\n type FlowIdentityScopeStatus,\n} from './dataset-maintenance-flow-identity-execution-contract.js';\nimport type { FlowIdentityPlan } from './dataset-maintenance-flow-identity-contract.js';\nimport {\n isJsonObject,\n sha256Json,\n sha256Text,\n stableJsonText,\n type JsonObject,\n} from './dataset-maintenance-contract.js';\nimport { flowIdentityRestrictedSha256 } from './dataset-maintenance-flow-identity-wire.js';\nimport {\n isMaintenanceRpcDomainFailure,\n lookupMaintenanceFlowIdentityScope,\n readMaintenanceFlowIdentityScope,\n resolveMaintenanceRemoteContext,\n type DatasetMaintenanceRemoteContext,\n} from './dataset-maintenance-remote.js';\nimport { parseProtectedToolchainEvidence } from './dataset-maintenance-protected-toolchain.js';\nimport { CliError } from './errors.js';\nimport type { FetchLike } from './http.js';\n\nconst HASH = /^[a-f0-9]{64}$/u;\nconst UUID = /^[a-f0-9]{8}-[a-f0-9]{4}-[1-5][a-f0-9]{3}-[89ab][a-f0-9]{3}-[a-f0-9]{12}$/u;\nconst USER_STATE_CLAIM = 'authenticated_actor_state_100_plus_own_state_0' as const;\n\nexport type FlowIdentityRecoveryReason =\n | 'wrapper_exited_without_permit'\n | 'process_response_ambiguous'\n | 'process_domain_rejected'\n | 'finalize_response_ambiguous'\n | 'derivatives_became_ready_after_wrapper_exit';\n\nconst FLOW_IDENTITY_RECOVERY_REASONS: readonly FlowIdentityRecoveryReason[] = [\n 'wrapper_exited_without_permit',\n 'process_response_ambiguous',\n 'process_domain_rejected',\n 'finalize_response_ambiguous',\n 'derivatives_became_ready_after_wrapper_exit',\n];\n\nexport type FlowIdentityRecoveryMode = 'resume_and_finalize' | 'finalize_only';\n\nexport type FlowIdentityRecoveryBaseline = {\n status: FlowIdentityScopeStatus['status'];\n completed_process_count: number;\n next_ordinal: number;\n primary_complete: boolean;\n primary_current: boolean;\n live_guard_current: boolean;\n protected_closure_current: boolean;\n derivatives_current: boolean;\n whole_scope_proof_sha256: string;\n};\n\nexport type FlowIdentityRecoveryFreeze = {\n schema_version: 'dataset-flow-identity-recovery-freeze.v1';\n generated_at_utc: string;\n environment: 'production';\n project_ref: string;\n actor: { user_id: string; email: string };\n target_visibility: 'owner_draft';\n user_state_claim: typeof USER_STATE_CLAIM;\n scope_id: string;\n scope_proof_sha256: string;\n operation_id: string;\n plan_sha256: string;\n original_freeze_sha256: string;\n original_execution_request_id: string;\n original_execution_identity_sha256: string;\n original_execution_approval_request_sha256: string;\n original_execution_approval_text_sha256: string;\n original_execution_approval_identity_sha256: string;\n recovery_reason: FlowIdentityRecoveryReason;\n recovery_mode: FlowIdentityRecoveryMode;\n baseline: FlowIdentityRecoveryBaseline;\n toolchain_evidence_sha256: string;\n approval_reusable: false;\n maximum_wrapper_invocations: 1;\n maximum_cli_apply_spawns: 1;\n maximum_process_posts: number;\n maximum_finalize_posts: 1;\n automatic_retry: false;\n recovery_freeze_sha256: string;\n};\n\nexport type FlowIdentityRecoveryApprovalRequestCore = {\n schema_version: 'dataset-flow-identity-recovery-approval-request.v1';\n approved_at_utc: string;\n environment: 'production';\n project_ref: string;\n actor: { user_id: string; email: string };\n target_visibility: 'owner_draft';\n user_state_claim: typeof USER_STATE_CLAIM;\n scope_id: string;\n scope_proof_sha256: string;\n operation_id: string;\n plan_sha256: string;\n original_freeze_sha256: string;\n original_execution_request_id: string;\n original_execution_identity_sha256: string;\n original_execution_approval_request_sha256: string;\n original_execution_approval_text_sha256: string;\n original_execution_approval_identity_sha256: string;\n recovery_reason: FlowIdentityRecoveryReason;\n recovery_mode: FlowIdentityRecoveryMode;\n baseline: FlowIdentityRecoveryBaseline;\n recovery_freeze_file_sha256: string;\n recovery_freeze_sha256: string;\n toolchain_evidence_sha256: string;\n approval_reusable: false;\n maximum_wrapper_invocations: 1;\n maximum_cli_apply_spawns: 1;\n maximum_process_posts: number;\n maximum_finalize_posts: 1;\n automatic_retry: false;\n};\n\nexport type FlowIdentityRecoveryApprovalRequest = FlowIdentityRecoveryApprovalRequestCore & {\n request_sha256: string;\n};\n\nexport type FlowIdentityRecoveryApproval = {\n schema_version: 'dataset-flow-identity-recovery-approval.v1';\n approved_at_utc: string;\n actor: { user_id: string; email: string };\n plan_sha256: string;\n scope_id: string;\n scope_proof_sha256: string;\n recovery_freeze_sha256: string;\n toolchain_evidence_sha256: string;\n recovery_approval_request_sha256: string;\n recovery_approval_text_sha256: string;\n recovery_approval_identity_sha256: string;\n};\n\nexport type FreezeFlowIdentityRecoveryOptions = {\n planPath: string;\n freezePath: string;\n approvalPath: string;\n runDir: string;\n toolchainEvidencePath: string;\n expectedProjectRef: string;\n confirm: string;\n approvedAtUtc: string;\n recoveryReason: FlowIdentityRecoveryReason;\n cliVersion: string;\n outDir: string;\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs?: number;\n now?: Date;\n dependencies?: {\n resolveContext: typeof resolveMaintenanceRemoteContext;\n lookup: typeof lookupMaintenanceFlowIdentityScope;\n read: typeof readMaintenanceFlowIdentityScope;\n };\n};\n\nexport type FlowIdentityRecoveryFreezeReport = {\n schema_version: 'dataset-flow-identity-recovery-freeze-report.v1';\n generated_at_utc: string;\n status: 'frozen';\n execution_submitted: false;\n network_calls: 2 | 3;\n database_calls: 1 | 2;\n scope_id: string;\n plan_sha256: string;\n recovery_freeze_sha256: string;\n recovery_freeze_file_sha256: string;\n recovery_approval_request_sha256: string;\n recovery_approval_text_sha256: string;\n artifacts: {\n freeze: string;\n scope_proof: string;\n approval_request: string;\n approval_text: string;\n report: string;\n };\n};\n\nexport type SealFlowIdentityRecoveryApprovalOptions = {\n recoveryFreezePath: string;\n approvalRequestPath: string;\n humanApprovalPath: string;\n approveFreezeFile: string;\n approveRequest: string;\n approveText: string;\n confirm: string;\n approvedAtUtc: string;\n outDir: string;\n now?: Date;\n};\n\nexport type FlowIdentityRecoveryApprovalSealReport = {\n schema_version: 'dataset-flow-identity-recovery-approval-seal-report.v1';\n generated_at_utc: string;\n status: 'sealed';\n execution_submitted: false;\n network_calls: 0;\n database_calls: 0;\n scope_id: string;\n plan_sha256: string;\n recovery_freeze_sha256: string;\n recovery_approval_request_sha256: string;\n recovery_approval_text_sha256: string;\n recovery_approval_identity_sha256: string;\n artifacts: { human_approval: string; approval: string; report: string };\n};\n\nexport type PreparedFlowIdentityRecoveryExecution = {\n plan: FlowIdentityPlan;\n originalFreeze: FlowIdentityFreeze;\n originalApproval: FlowIdentityApproval;\n originalIdentity: FlowIdentityExecutionIdentity;\n scope: FlowIdentityScopeProof;\n recoveryFreeze: FlowIdentityRecoveryFreeze;\n recoveryApproval: FlowIdentityRecoveryApproval;\n recoveryRequest: JsonObject;\n};\n\n/** Sanitized proof returned by the recovery admission RPC after the permit is removed. */\nexport type FlowIdentityRecoveryProof = {\n ok: true;\n command: 'cmd_dataset_flow_identity_scope_recover_guarded';\n schema_version: 'dataset-flow-identity-scope-recovery-result.v1';\n scope_id: string;\n scope_proof_sha256: string;\n status: FlowIdentityRecoveryBaseline['status'];\n completed_process_count: number;\n next_ordinal: number;\n whole_scope_proof_sha256: string;\n recovery_wire_request_sha256: string;\n recovery_approval_identity_sha256: string;\n invocation_id: string;\n audit_id: string;\n replay: boolean;\n};\n\nexport const FLOW_IDENTITY_RECOVERY_FREEZE_ARTIFACTS = {\n freeze: 'flow-identity-recovery-freeze.json',\n scope_proof: 'flow-identity-recovery-scope-proof.json',\n approval_request: 'flow-identity-recovery-approval-request.json',\n approval_text: 'flow-identity-recovery-approval-request.txt',\n report: 'flow-identity-recovery-freeze-report.json',\n} as const;\n\nexport const FLOW_IDENTITY_RECOVERY_APPROVAL_ARTIFACTS = {\n human_approval: 'flow-identity-recovery-human-approval.txt',\n approval: 'flow-identity-recovery-approval.json',\n report: 'flow-identity-recovery-approval-seal-report.json',\n} as const;\n\nfunction fail(message: string, code = 'DATASET_FLOW_IDENTITY_RECOVERY_INVALID'): never {\n throw new CliError(message, { code, exitCode: 1 });\n}\n\nfunction canonicalTimestamp(value: string, label: string): string {\n if (!Number.isFinite(Date.parse(value)) || new Date(value).toISOString() !== value) {\n fail(`${label} must be a canonical RFC3339 UTC timestamp.`);\n }\n return value;\n}\n\nfunction requireHash(value: unknown, label: string): string {\n if (typeof value !== 'string' || !HASH.test(value)) fail(`${label} must be a SHA-256.`);\n return value;\n}\n\nfunction requireUuid(value: unknown, label: string): string {\n if (typeof value !== 'string' || !UUID.test(value)) fail(`${label} must be a UUID.`);\n return value;\n}\n\nfunction assertExactKeys(value: JsonObject, expected: readonly string[], label: string): void {\n const actual = Object.keys(value).sort();\n const required = [...expected].sort();\n if (\n actual.length !== required.length ||\n actual.some((entry, index) => entry !== required[index])\n ) {\n fail(`${label} has an unexpected wire shape.`);\n }\n}\n\nfunction requireCanonicalJson(filePath: string, label: string) {\n const artifact = readProtectedJsonArtifact({ filePath, label });\n if (artifact.text !== `${stableJsonText(artifact.value)}\\n`) {\n fail(`${label} must be canonical JSON with one trailing newline.`);\n }\n return artifact;\n}\n\nfunction parseRecoveryScopeProof(\n value: unknown,\n plan: FlowIdentityPlan,\n identity: FlowIdentityExecutionIdentity,\n): FlowIdentityScopeProof {\n if (\n isJsonObject(value) &&\n value.schema_version === 'dataset-flow-identity-scope-lookup-result.v1'\n ) {\n return parseFlowIdentityScopeLookupProof(value, plan, identity);\n }\n return parseFlowIdentityScopePreflightProof(value, plan);\n}\n\nfunction readRecoveryScopeProof(options: {\n runDir: string;\n plan: FlowIdentityPlan;\n identity: FlowIdentityExecutionIdentity;\n}): FlowIdentityScopeProof | null {\n for (const [name, label] of [\n ['scope-preflight-proof.json', 'Flow identity scope preflight proof'],\n ['scope-lookup-proof.json', 'Flow identity scope lookup proof'],\n ] as const) {\n const filePath = path.join(path.resolve(options.runDir), name);\n try {\n const artifact = requireCanonicalJson(filePath, label);\n return parseRecoveryScopeProof(artifact.value, options.plan, options.identity);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') throw error;\n }\n }\n return null;\n}\n\nfunction recoveryBaseline(status: FlowIdentityScopeStatus): FlowIdentityRecoveryBaseline {\n return {\n status: status.status,\n completed_process_count: status.completed_process_count,\n next_ordinal: status.next_ordinal,\n primary_complete: status.primary_complete,\n primary_current: status.primary_current,\n live_guard_current: status.live_guard_current,\n protected_closure_current: status.protected_closure_current,\n derivatives_current: status.derivatives_current,\n whole_scope_proof_sha256: status.whole_scope_proof_sha256,\n };\n}\n\nfunction assertRecoveryBaseline(value: unknown): asserts value is FlowIdentityRecoveryBaseline {\n if (!isJsonObject(value)) fail('Recovery baseline is invalid.');\n const keys = [\n 'status',\n 'completed_process_count',\n 'next_ordinal',\n 'primary_complete',\n 'primary_current',\n 'live_guard_current',\n 'protected_closure_current',\n 'derivatives_current',\n 'whole_scope_proof_sha256',\n ];\n if (\n Object.keys(value).length !== keys.length ||\n keys.some((key) => !(key in value)) ||\n !['sealed', 'running', 'primary_complete', 'derivatives_pending'].includes(\n String(value.status),\n ) ||\n !Number.isSafeInteger(value.completed_process_count) ||\n Number(value.completed_process_count) < 0 ||\n !Number.isSafeInteger(value.next_ordinal) ||\n Number(value.next_ordinal) < 1 ||\n ![\n value.primary_complete,\n value.primary_current,\n value.live_guard_current,\n value.protected_closure_current,\n value.derivatives_current,\n ].every((entry) => typeof entry === 'boolean') ||\n !HASH.test(String(value.whole_scope_proof_sha256))\n ) {\n fail('Recovery baseline is inconsistent.');\n }\n}\n\nexport function computeFlowIdentityRecoveryFreezeSha256(\n freeze: FlowIdentityRecoveryFreeze,\n): string {\n return sha256Json({ ...freeze, recovery_freeze_sha256: '' });\n}\n\nfunction recoveryRequestCore(\n value: FlowIdentityRecoveryApprovalRequest,\n): FlowIdentityRecoveryApprovalRequestCore {\n const core = { ...value } as Partial<FlowIdentityRecoveryApprovalRequest>;\n delete core.request_sha256;\n return core as FlowIdentityRecoveryApprovalRequestCore;\n}\n\nexport function computeFlowIdentityRecoveryApprovalRequestSha256(\n request: FlowIdentityRecoveryApprovalRequest,\n): string {\n return sha256Json(recoveryRequestCore(request));\n}\n\nexport function computeFlowIdentityRecoveryApprovalIdentitySha256(\n approval: FlowIdentityRecoveryApproval,\n): string {\n return sha256Json({ ...approval, recovery_approval_identity_sha256: '' });\n}\n\nexport function renderFlowIdentityRecoveryApprovalText(\n core: FlowIdentityRecoveryApprovalRequestCore,\n requestSha256: string,\n): string {\n requireHash(requestSha256, 'request_sha256');\n return [\n 'BAFU Step 3 protected owner-draft recovery approval request',\n `schema_version=${core.schema_version}`,\n `approved_at_utc=${core.approved_at_utc}`,\n `request_sha256=${requestSha256}`,\n `environment=${core.environment}`,\n `project_ref=${core.project_ref}`,\n `account_email=${core.actor.email}`,\n `account_user_id=${core.actor.user_id}`,\n `target_visibility=${core.target_visibility}`,\n `user_state_claim=${core.user_state_claim}`,\n `scope_id=${core.scope_id}`,\n `scope_proof_sha256=${core.scope_proof_sha256}`,\n `operation_id=${core.operation_id}`,\n `plan_sha256=${core.plan_sha256}`,\n `original_freeze_sha256=${core.original_freeze_sha256}`,\n `original_execution_request_id=${core.original_execution_request_id}`,\n `original_execution_identity_sha256=${core.original_execution_identity_sha256}`,\n `original_execution_approval_request_sha256=${core.original_execution_approval_request_sha256}`,\n `original_execution_approval_text_sha256=${core.original_execution_approval_text_sha256}`,\n `original_execution_approval_identity_sha256=${core.original_execution_approval_identity_sha256}`,\n `recovery_reason=${core.recovery_reason}`,\n `recovery_mode=${core.recovery_mode}`,\n `baseline_status=${core.baseline.status}`,\n `baseline_completed_process_count=${core.baseline.completed_process_count}`,\n `baseline_next_ordinal=${core.baseline.next_ordinal}`,\n `baseline_primary_complete=${String(core.baseline.primary_complete)}`,\n `baseline_derivatives_current=${String(core.baseline.derivatives_current)}`,\n `baseline_whole_scope_proof_sha256=${core.baseline.whole_scope_proof_sha256}`,\n `recovery_freeze_file_sha256=${core.recovery_freeze_file_sha256}`,\n `recovery_freeze_sha256=${core.recovery_freeze_sha256}`,\n `toolchain_evidence_sha256=${core.toolchain_evidence_sha256}`,\n `approval_reusable=${String(core.approval_reusable)}`,\n `maximum_wrapper_invocations=${core.maximum_wrapper_invocations}`,\n `maximum_cli_apply_spawns=${core.maximum_cli_apply_spawns}`,\n `maximum_process_posts=${core.maximum_process_posts}`,\n `maximum_finalize_posts=${core.maximum_finalize_posts}`,\n `automatic_retry=${String(core.automatic_retry)}`,\n 'Approve only by returning this text byte-for-byte without edits.',\n '',\n ].join('\\n');\n}\n\nexport function parseFlowIdentityRecoveryFreeze(value: unknown): FlowIdentityRecoveryFreeze {\n if (!isJsonObject(value) || !isJsonObject(value.actor)) fail('Recovery freeze is invalid.');\n const freeze = value as FlowIdentityRecoveryFreeze;\n assertRecoveryBaseline(freeze.baseline);\n if (\n freeze.schema_version !== 'dataset-flow-identity-recovery-freeze.v1' ||\n freeze.environment !== 'production' ||\n freeze.target_visibility !== 'owner_draft' ||\n freeze.user_state_claim !== USER_STATE_CLAIM ||\n !UUID.test(freeze.actor.user_id) ||\n freeze.actor.email !== freeze.actor.email.trim().toLowerCase() ||\n !UUID.test(freeze.scope_id) ||\n ![\n freeze.scope_proof_sha256,\n freeze.plan_sha256,\n freeze.original_freeze_sha256,\n freeze.original_execution_identity_sha256,\n freeze.original_execution_approval_request_sha256,\n freeze.original_execution_approval_text_sha256,\n freeze.original_execution_approval_identity_sha256,\n freeze.toolchain_evidence_sha256,\n freeze.recovery_freeze_sha256,\n ].every((entry) => HASH.test(entry)) ||\n !Number.isFinite(Date.parse(freeze.generated_at_utc)) ||\n freeze.approval_reusable !== false ||\n freeze.maximum_wrapper_invocations !== 1 ||\n freeze.maximum_cli_apply_spawns !== 1 ||\n !Number.isSafeInteger(freeze.maximum_process_posts) ||\n freeze.maximum_process_posts < 0 ||\n freeze.maximum_finalize_posts !== 1 ||\n freeze.automatic_retry !== false ||\n !FLOW_IDENTITY_RECOVERY_REASONS.includes(freeze.recovery_reason) ||\n freeze.recovery_mode !==\n (freeze.maximum_process_posts === 0 ? 'finalize_only' : 'resume_and_finalize') ||\n freeze.recovery_freeze_sha256 !== computeFlowIdentityRecoveryFreezeSha256(freeze)\n ) {\n fail('Recovery freeze is inconsistent or tampered.');\n }\n return freeze;\n}\n\nexport function parseFlowIdentityRecoveryApprovalRequest(\n value: unknown,\n): FlowIdentityRecoveryApprovalRequest {\n if (!isJsonObject(value) || !isJsonObject(value.actor)) {\n fail('Recovery approval request is invalid.');\n }\n const request = value as FlowIdentityRecoveryApprovalRequest;\n assertRecoveryBaseline(request.baseline);\n if (\n request.schema_version !== 'dataset-flow-identity-recovery-approval-request.v1' ||\n request.environment !== 'production' ||\n request.target_visibility !== 'owner_draft' ||\n request.user_state_claim !== USER_STATE_CLAIM ||\n !UUID.test(request.actor.user_id) ||\n !UUID.test(request.scope_id) ||\n ![\n request.scope_proof_sha256,\n request.plan_sha256,\n request.original_freeze_sha256,\n request.original_execution_identity_sha256,\n request.original_execution_approval_request_sha256,\n request.original_execution_approval_text_sha256,\n request.original_execution_approval_identity_sha256,\n request.recovery_freeze_file_sha256,\n request.recovery_freeze_sha256,\n request.toolchain_evidence_sha256,\n request.request_sha256,\n ].every((entry) => HASH.test(entry)) ||\n !canonicalTimestamp(request.approved_at_utc, 'approved_at_utc') ||\n request.approval_reusable !== false ||\n request.maximum_wrapper_invocations !== 1 ||\n request.maximum_cli_apply_spawns !== 1 ||\n !Number.isSafeInteger(request.maximum_process_posts) ||\n request.maximum_process_posts < 0 ||\n request.maximum_finalize_posts !== 1 ||\n request.automatic_retry !== false ||\n !FLOW_IDENTITY_RECOVERY_REASONS.includes(request.recovery_reason) ||\n request.recovery_mode !==\n (request.maximum_process_posts === 0 ? 'finalize_only' : 'resume_and_finalize') ||\n request.request_sha256 !== computeFlowIdentityRecoveryApprovalRequestSha256(request)\n ) {\n fail('Recovery approval request is inconsistent or tampered.');\n }\n return request;\n}\n\nexport function parseFlowIdentityRecoveryApproval(\n value: unknown,\n freeze: FlowIdentityRecoveryFreeze,\n): FlowIdentityRecoveryApproval {\n if (!isJsonObject(value) || !isJsonObject(value.actor)) fail('Recovery approval is invalid.');\n const approval = value as FlowIdentityRecoveryApproval;\n if (\n approval.schema_version !== 'dataset-flow-identity-recovery-approval.v1' ||\n approval.actor.user_id !== freeze.actor.user_id ||\n approval.actor.email !== freeze.actor.email ||\n approval.plan_sha256 !== freeze.plan_sha256 ||\n approval.scope_id !== freeze.scope_id ||\n approval.scope_proof_sha256 !== freeze.scope_proof_sha256 ||\n approval.recovery_freeze_sha256 !== freeze.recovery_freeze_sha256 ||\n approval.toolchain_evidence_sha256 !== freeze.toolchain_evidence_sha256 ||\n ![\n approval.recovery_approval_request_sha256,\n approval.recovery_approval_text_sha256,\n approval.recovery_approval_identity_sha256,\n ].every((entry) => HASH.test(entry)) ||\n !Number.isFinite(Date.parse(approval.approved_at_utc)) ||\n Date.parse(approval.approved_at_utc) < Date.parse(freeze.generated_at_utc) ||\n approval.recovery_approval_identity_sha256 !==\n computeFlowIdentityRecoveryApprovalIdentitySha256(approval)\n ) {\n fail('Recovery approval does not bind the exact recovery freeze.');\n }\n return approval;\n}\n\nfunction assertContext(plan: FlowIdentityPlan, context: DatasetMaintenanceRemoteContext): void {\n if (\n context.project_ref !== plan.project_ref ||\n context.account.user_id !== plan.account.user_id ||\n context.account.email.trim().toLowerCase() !== plan.account.email\n ) {\n fail('Authenticated production context does not match the recovery plan.');\n }\n}\n\nfunction assertRecoverableStatus(status: FlowIdentityScopeStatus, plan: FlowIdentityPlan): void {\n if (\n !['sealed', 'running', 'primary_complete', 'derivatives_pending'].includes(status.status) ||\n !status.primary_current ||\n !status.live_guard_current ||\n !status.protected_closure_current ||\n status.compensation_required === true ||\n status.completed_process_count < 0 ||\n status.completed_process_count > plan.processes.length ||\n status.next_ordinal !== Math.min(status.completed_process_count + 1, plan.processes.length + 1)\n ) {\n fail('Live scope is not eligible for an exact continuation recovery approval.');\n }\n}\n\nexport async function freezeFlowIdentityRecovery(\n options: FreezeFlowIdentityRecoveryOptions,\n): Promise<FlowIdentityRecoveryFreezeReport> {\n const planArtifact = requireCanonicalJson(options.planPath, 'Flow identity plan');\n const originalFreezeArtifact = requireCanonicalJson(\n options.freezePath,\n 'Flow identity original freeze',\n );\n const originalApprovalArtifact = requireCanonicalJson(\n options.approvalPath,\n 'Flow identity original approval',\n );\n const prepared = prepareFlowIdentityExecution({\n plan: planArtifact.value,\n freeze: originalFreezeArtifact.value,\n approval: originalApprovalArtifact.value,\n });\n if (\n prepared.plan.project_ref !== options.expectedProjectRef ||\n prepared.plan.account.email !== options.confirm\n ) {\n fail('Recovery freeze requires the exact production project and account confirmation.');\n }\n let scope = readRecoveryScopeProof({\n runDir: options.runDir,\n plan: prepared.plan,\n identity: prepared.identity,\n });\n let lookupPerformed = false;\n const toolchainArtifact = requireCanonicalJson(\n options.toolchainEvidencePath,\n 'Protected toolchain evidence',\n );\n parseProtectedToolchainEvidence(toolchainArtifact.value, {\n projectRef: options.expectedProjectRef,\n cliVersion: options.cliVersion,\n });\n const generatedAt = (options.now ?? new Date()).toISOString();\n const approvedAt = canonicalTimestamp(options.approvedAtUtc, 'approvedAtUtc');\n if (Date.parse(approvedAt) < Date.parse(generatedAt)) {\n fail('approvedAtUtc cannot precede the recovery freeze.');\n }\n const context = await (options.dependencies?.resolveContext ?? resolveMaintenanceRemoteContext)({\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n now: options.now,\n });\n assertContext(prepared.plan, context);\n if (scope === null) {\n lookupPerformed = true;\n const lookupRaw = await (options.dependencies?.lookup ?? lookupMaintenanceFlowIdentityScope)({\n context,\n request: buildFlowIdentityScopeLookupRequest({ identity: prepared.identity }),\n });\n if (isMaintenanceRpcDomainFailure(lookupRaw)) {\n fail('Read-only scope lookup could not recover the lost preflight response.');\n }\n scope = parseFlowIdentityScopeLookupProof(lookupRaw, prepared.plan, prepared.identity);\n }\n const raw = await (options.dependencies?.read ?? readMaintenanceFlowIdentityScope)({\n context,\n scopeId: scope.scope_id,\n });\n if (isMaintenanceRpcDomainFailure(raw)) {\n fail('Database rejected the read-only recovery scope snapshot.');\n }\n const status = parseFlowIdentityScopeStatus(\n raw,\n prepared.plan,\n scope.scope_id,\n scope.scope_proof_sha256,\n );\n assertRecoverableStatus(status, prepared.plan);\n const remainingProcessPosts = prepared.plan.processes.length - status.completed_process_count;\n const freeze: FlowIdentityRecoveryFreeze = {\n schema_version: 'dataset-flow-identity-recovery-freeze.v1',\n generated_at_utc: generatedAt,\n environment: 'production',\n project_ref: prepared.plan.project_ref,\n actor: prepared.plan.account,\n target_visibility: 'owner_draft',\n user_state_claim: USER_STATE_CLAIM,\n scope_id: scope.scope_id,\n scope_proof_sha256: scope.scope_proof_sha256,\n operation_id: prepared.plan.operation_id,\n plan_sha256: prepared.plan.plan_sha256,\n original_freeze_sha256: prepared.freeze.freeze_sha256,\n original_execution_request_id: prepared.identity.request_id,\n original_execution_identity_sha256: prepared.identity.identity_sha256,\n original_execution_approval_request_sha256: prepared.approval.execution_approval_request_sha256,\n original_execution_approval_text_sha256: prepared.approval.execution_approval_text_sha256,\n original_execution_approval_identity_sha256:\n prepared.approval.execution_approval_identity_sha256,\n recovery_reason: options.recoveryReason,\n recovery_mode: remainingProcessPosts === 0 ? 'finalize_only' : 'resume_and_finalize',\n baseline: recoveryBaseline(status),\n toolchain_evidence_sha256: toolchainArtifact.file_sha256,\n approval_reusable: false,\n maximum_wrapper_invocations: 1,\n maximum_cli_apply_spawns: 1,\n maximum_process_posts: remainingProcessPosts,\n maximum_finalize_posts: 1,\n automatic_retry: false,\n recovery_freeze_sha256: '',\n };\n freeze.recovery_freeze_sha256 = computeFlowIdentityRecoveryFreezeSha256(freeze);\n const freezeText = `${stableJsonText(freeze)}\\n`;\n const freezeFileSha256 = sha256Text(freezeText);\n const core: FlowIdentityRecoveryApprovalRequestCore = {\n schema_version: 'dataset-flow-identity-recovery-approval-request.v1',\n approved_at_utc: approvedAt,\n environment: 'production',\n project_ref: freeze.project_ref,\n actor: freeze.actor,\n target_visibility: 'owner_draft',\n user_state_claim: USER_STATE_CLAIM,\n scope_id: freeze.scope_id,\n scope_proof_sha256: freeze.scope_proof_sha256,\n operation_id: freeze.operation_id,\n plan_sha256: freeze.plan_sha256,\n original_freeze_sha256: freeze.original_freeze_sha256,\n original_execution_request_id: freeze.original_execution_request_id,\n original_execution_identity_sha256: freeze.original_execution_identity_sha256,\n original_execution_approval_request_sha256: freeze.original_execution_approval_request_sha256,\n original_execution_approval_text_sha256: freeze.original_execution_approval_text_sha256,\n original_execution_approval_identity_sha256: freeze.original_execution_approval_identity_sha256,\n recovery_reason: freeze.recovery_reason,\n recovery_mode: freeze.recovery_mode,\n baseline: freeze.baseline,\n recovery_freeze_file_sha256: freezeFileSha256,\n recovery_freeze_sha256: freeze.recovery_freeze_sha256,\n toolchain_evidence_sha256: freeze.toolchain_evidence_sha256,\n approval_reusable: false,\n maximum_wrapper_invocations: 1,\n maximum_cli_apply_spawns: 1,\n maximum_process_posts: remainingProcessPosts,\n maximum_finalize_posts: 1,\n automatic_retry: false,\n };\n const request = parseFlowIdentityRecoveryApprovalRequest({\n ...core,\n request_sha256: sha256Json(core),\n });\n const approvalText = renderFlowIdentityRecoveryApprovalText(core, request.request_sha256);\n const approvalTextSha256 = sha256Text(approvalText);\n const outDir = path.resolve(options.outDir);\n const artifacts = Object.fromEntries(\n Object.entries(FLOW_IDENTITY_RECOVERY_FREEZE_ARTIFACTS).map(([key, name]) => [\n key,\n path.join(outDir, name),\n ]),\n ) as FlowIdentityRecoveryFreezeReport['artifacts'];\n const report: FlowIdentityRecoveryFreezeReport = {\n schema_version: 'dataset-flow-identity-recovery-freeze-report.v1',\n generated_at_utc: generatedAt,\n status: 'frozen',\n execution_submitted: false,\n network_calls: lookupPerformed ? 3 : 2,\n database_calls: lookupPerformed ? 2 : 1,\n scope_id: freeze.scope_id,\n plan_sha256: freeze.plan_sha256,\n recovery_freeze_sha256: freeze.recovery_freeze_sha256,\n recovery_freeze_file_sha256: freezeFileSha256,\n recovery_approval_request_sha256: request.request_sha256,\n recovery_approval_text_sha256: approvalTextSha256,\n artifacts,\n };\n materializePrivateArtifactDirectoryAtomically(outDir, (staging) => {\n writePrivateImmutableText(\n path.join(staging, FLOW_IDENTITY_RECOVERY_FREEZE_ARTIFACTS.freeze),\n freezeText,\n );\n writePrivateImmutableJson(\n path.join(staging, FLOW_IDENTITY_RECOVERY_FREEZE_ARTIFACTS.approval_request),\n request,\n );\n writePrivateImmutableText(\n path.join(staging, FLOW_IDENTITY_RECOVERY_FREEZE_ARTIFACTS.approval_text),\n approvalText,\n );\n writePrivateImmutableJson(\n path.join(staging, FLOW_IDENTITY_RECOVERY_FREEZE_ARTIFACTS.scope_proof),\n scope,\n );\n writePrivateImmutableJson(\n path.join(staging, FLOW_IDENTITY_RECOVERY_FREEZE_ARTIFACTS.report),\n report,\n );\n });\n return report;\n}\n\nexport function sealFlowIdentityRecoveryApproval(\n options: SealFlowIdentityRecoveryApprovalOptions,\n): FlowIdentityRecoveryApprovalSealReport {\n requireHash(options.approveFreezeFile, 'approveFreezeFile');\n requireHash(options.approveRequest, 'approveRequest');\n requireHash(options.approveText, 'approveText');\n const freezeArtifact = requireCanonicalJson(options.recoveryFreezePath, 'Recovery freeze');\n const freeze = parseFlowIdentityRecoveryFreeze(freezeArtifact.value);\n const requestArtifact = requireCanonicalJson(\n options.approvalRequestPath,\n 'Recovery approval request',\n );\n const request = parseFlowIdentityRecoveryApprovalRequest(requestArtifact.value);\n const humanApproval = readProtectedTextArtifact(options.humanApprovalPath);\n const expectedText = renderFlowIdentityRecoveryApprovalText(\n recoveryRequestCore(request),\n request.request_sha256,\n );\n if (\n freezeArtifact.file_sha256 !== options.approveFreezeFile ||\n request.request_sha256 !== options.approveRequest ||\n sha256Text(expectedText) !== options.approveText ||\n humanApproval.text !== expectedText ||\n freeze.actor.email !== options.confirm ||\n options.approvedAtUtc !== request.approved_at_utc ||\n request.actor.user_id !== freeze.actor.user_id ||\n request.actor.email !== freeze.actor.email ||\n request.plan_sha256 !== freeze.plan_sha256 ||\n request.scope_id !== freeze.scope_id ||\n request.scope_proof_sha256 !== freeze.scope_proof_sha256 ||\n request.recovery_freeze_file_sha256 !== freezeArtifact.file_sha256 ||\n request.recovery_freeze_sha256 !== freeze.recovery_freeze_sha256 ||\n request.toolchain_evidence_sha256 !== freeze.toolchain_evidence_sha256 ||\n sha256Json(request.baseline) !== sha256Json(freeze.baseline)\n ) {\n fail('Recovery human approval does not exactly bind the freeze/request/status baseline.');\n }\n const approval: FlowIdentityRecoveryApproval = {\n schema_version: 'dataset-flow-identity-recovery-approval.v1',\n approved_at_utc: request.approved_at_utc,\n actor: request.actor,\n plan_sha256: request.plan_sha256,\n scope_id: request.scope_id,\n scope_proof_sha256: request.scope_proof_sha256,\n recovery_freeze_sha256: request.recovery_freeze_sha256,\n toolchain_evidence_sha256: request.toolchain_evidence_sha256,\n recovery_approval_request_sha256: request.request_sha256,\n recovery_approval_text_sha256: sha256Text(expectedText),\n recovery_approval_identity_sha256: '',\n };\n approval.recovery_approval_identity_sha256 =\n computeFlowIdentityRecoveryApprovalIdentitySha256(approval);\n const outDir = path.resolve(options.outDir);\n const artifacts = Object.fromEntries(\n Object.entries(FLOW_IDENTITY_RECOVERY_APPROVAL_ARTIFACTS).map(([key, name]) => [\n key,\n path.join(outDir, name),\n ]),\n ) as FlowIdentityRecoveryApprovalSealReport['artifacts'];\n const report: FlowIdentityRecoveryApprovalSealReport = {\n schema_version: 'dataset-flow-identity-recovery-approval-seal-report.v1',\n generated_at_utc: (options.now ?? new Date()).toISOString(),\n status: 'sealed',\n execution_submitted: false,\n network_calls: 0,\n database_calls: 0,\n scope_id: freeze.scope_id,\n plan_sha256: freeze.plan_sha256,\n recovery_freeze_sha256: freeze.recovery_freeze_sha256,\n recovery_approval_request_sha256: approval.recovery_approval_request_sha256,\n recovery_approval_text_sha256: approval.recovery_approval_text_sha256,\n recovery_approval_identity_sha256: approval.recovery_approval_identity_sha256,\n artifacts,\n };\n materializePrivateArtifactDirectoryAtomically(outDir, (staging) => {\n writePrivateImmutableText(\n path.join(staging, FLOW_IDENTITY_RECOVERY_APPROVAL_ARTIFACTS.human_approval),\n humanApproval.text,\n );\n writePrivateImmutableJson(\n path.join(staging, FLOW_IDENTITY_RECOVERY_APPROVAL_ARTIFACTS.approval),\n approval,\n );\n writePrivateImmutableJson(\n path.join(staging, FLOW_IDENTITY_RECOVERY_APPROVAL_ARTIFACTS.report),\n report,\n );\n });\n return report;\n}\n\nfunction deterministicUuidFromSha256(digest: string): string {\n const chars = digest.slice(0, 32).split('');\n chars[12] = '5';\n chars[16] = ((Number.parseInt(chars[16]!, 16) & 0x3) | 0x8).toString(16);\n const hex = chars.join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n\nexport function buildFlowIdentityRecoveryRequest(options: {\n freeze: FlowIdentityRecoveryFreeze;\n approval: FlowIdentityRecoveryApproval;\n}): JsonObject {\n return {\n schema_version: 'dataset-flow-identity-scope-recovery.v1',\n request_id: deterministicUuidFromSha256(\n sha256Text(\n `dataset-flow-identity-recovery.v1\\u0000${options.approval.recovery_approval_identity_sha256}`,\n ),\n ),\n approved_at_utc: options.approval.approved_at_utc,\n environment: options.freeze.environment,\n project_ref: options.freeze.project_ref,\n actor: options.freeze.actor,\n target_visibility: options.freeze.target_visibility,\n user_state_claim: options.freeze.user_state_claim,\n operation_id: options.freeze.operation_id,\n plan_sha256: options.freeze.plan_sha256,\n freeze_sha256: options.freeze.original_freeze_sha256,\n original_execution_approval_identity_sha256:\n options.freeze.original_execution_approval_identity_sha256,\n scope_proof_sha256: options.freeze.scope_proof_sha256,\n observed_scope_status: options.freeze.baseline.status,\n observed_completed_process_count: options.freeze.baseline.completed_process_count,\n observed_next_ordinal: options.freeze.baseline.next_ordinal,\n observed_whole_scope_proof_sha256: options.freeze.baseline.whole_scope_proof_sha256,\n recovery_mode: options.freeze.recovery_mode,\n recovery_reason: options.freeze.recovery_reason,\n toolchain_evidence_sha256: options.freeze.toolchain_evidence_sha256,\n maximum_wrapper_invocations: 1,\n maximum_cli_apply_spawns: 1,\n maximum_process_posts: options.freeze.maximum_process_posts,\n maximum_finalize_posts: 1,\n approval_reusable: false,\n automatic_retry: false,\n recovery_approval_request_sha256: options.approval.recovery_approval_request_sha256,\n recovery_approval_text_sha256: options.approval.recovery_approval_text_sha256,\n recovery_approval_identity_sha256: options.approval.recovery_approval_identity_sha256,\n };\n}\n\nexport function parseFlowIdentityRecoveryProof(options: {\n value: unknown;\n freeze: FlowIdentityRecoveryFreeze;\n approval: FlowIdentityRecoveryApproval;\n request: JsonObject;\n expectedInvocationId?: string;\n}): FlowIdentityRecoveryProof {\n if (!isJsonObject(options.value)) fail('Recovery admission proof is invalid.');\n const value = options.value;\n assertExactKeys(\n value,\n [\n 'ok',\n 'command',\n 'schema_version',\n 'scope_id',\n 'scope_proof_sha256',\n 'status',\n 'completed_process_count',\n 'next_ordinal',\n 'whole_scope_proof_sha256',\n 'recovery_wire_request_sha256',\n 'recovery_approval_identity_sha256',\n 'invocation_id',\n 'audit_id',\n 'replay',\n ],\n 'Recovery admission proof',\n );\n const invocationId = requireUuid(value.invocation_id, 'Recovery invocation_id');\n if (\n value.ok !== true ||\n value.command !== 'cmd_dataset_flow_identity_scope_recover_guarded' ||\n value.schema_version !== 'dataset-flow-identity-scope-recovery-result.v1' ||\n value.scope_id !== options.freeze.scope_id ||\n value.scope_proof_sha256 !== options.freeze.scope_proof_sha256 ||\n value.status !== options.freeze.baseline.status ||\n value.completed_process_count !== options.freeze.baseline.completed_process_count ||\n value.next_ordinal !== options.freeze.baseline.next_ordinal ||\n value.whole_scope_proof_sha256 !== options.freeze.baseline.whole_scope_proof_sha256 ||\n value.recovery_wire_request_sha256 !== flowIdentityRestrictedSha256(options.request) ||\n value.recovery_approval_identity_sha256 !==\n options.approval.recovery_approval_identity_sha256 ||\n (options.expectedInvocationId !== undefined && invocationId !== options.expectedInvocationId) ||\n typeof value.audit_id !== 'string' ||\n !value.audit_id.trim() ||\n typeof value.replay !== 'boolean'\n ) {\n fail('Recovery admission proof does not bind the approved live baseline and wire request.');\n }\n requireUuid(value.scope_id, 'Recovery scope_id');\n requireHash(value.scope_proof_sha256, 'Recovery scope_proof_sha256');\n requireHash(value.whole_scope_proof_sha256, 'Recovery whole_scope_proof_sha256');\n requireHash(value.recovery_wire_request_sha256, 'Recovery wire request SHA-256');\n requireHash(value.recovery_approval_identity_sha256, 'Recovery approval identity SHA-256');\n return value as FlowIdentityRecoveryProof;\n}\n\nexport function prepareFlowIdentityRecoveryExecution(options: {\n plan: unknown;\n originalFreeze: unknown;\n originalApproval: unknown;\n scope: unknown;\n recoveryFreeze: unknown;\n recoveryApproval: unknown;\n}): PreparedFlowIdentityRecoveryExecution {\n const original = prepareFlowIdentityExecution({\n plan: options.plan,\n freeze: options.originalFreeze,\n approval: options.originalApproval,\n });\n const scope = parseRecoveryScopeProof(options.scope, original.plan, original.identity);\n const recoveryFreeze = parseFlowIdentityRecoveryFreeze(options.recoveryFreeze);\n const recoveryApproval = parseFlowIdentityRecoveryApproval(\n options.recoveryApproval,\n recoveryFreeze,\n );\n if (\n recoveryFreeze.project_ref !== original.plan.project_ref ||\n recoveryFreeze.actor.user_id !== original.plan.account.user_id ||\n recoveryFreeze.actor.email !== original.plan.account.email ||\n recoveryFreeze.scope_id !== scope.scope_id ||\n recoveryFreeze.scope_proof_sha256 !== scope.scope_proof_sha256 ||\n recoveryFreeze.operation_id !== original.plan.operation_id ||\n recoveryFreeze.plan_sha256 !== original.plan.plan_sha256 ||\n recoveryFreeze.original_freeze_sha256 !== original.freeze.freeze_sha256 ||\n recoveryFreeze.original_execution_request_id !== original.identity.request_id ||\n recoveryFreeze.original_execution_identity_sha256 !== original.identity.identity_sha256 ||\n recoveryFreeze.original_execution_approval_request_sha256 !==\n original.approval.execution_approval_request_sha256 ||\n recoveryFreeze.original_execution_approval_text_sha256 !==\n original.approval.execution_approval_text_sha256 ||\n recoveryFreeze.original_execution_approval_identity_sha256 !==\n original.approval.execution_approval_identity_sha256 ||\n recoveryFreeze.maximum_process_posts !==\n original.plan.processes.length - recoveryFreeze.baseline.completed_process_count\n ) {\n fail('Recovery artifacts do not bind the original immutable execution and durable scope.');\n }\n return {\n plan: original.plan,\n originalFreeze: original.freeze,\n originalApproval: original.approval,\n originalIdentity: buildFlowIdentityExecutionIdentity({\n plan: original.plan,\n freeze: original.freeze,\n approval: original.approval,\n }),\n scope,\n recoveryFreeze,\n recoveryApproval,\n recoveryRequest: buildFlowIdentityRecoveryRequest({\n freeze: recoveryFreeze,\n approval: recoveryApproval,\n }),\n };\n}\n\nexport function assertFreshRecoveryBaseline(\n status: FlowIdentityScopeStatus,\n freeze: FlowIdentityRecoveryFreeze,\n): void {\n if (sha256Json(recoveryBaseline(status)) !== sha256Json(freeze.baseline)) {\n fail(\n 'Live scope changed after recovery freeze; generate a fresh exact recovery approval.',\n 'DATASET_FLOW_IDENTITY_RECOVERY_BASELINE_DRIFT',\n );\n }\n}\n\nexport const __testInternals = {\n assertContext,\n assertRecoverableStatus,\n canonicalTimestamp,\n deterministicUuidFromSha256,\n readRecoveryScopeProof,\n recoveryBaseline,\n recoveryRequestCore,\n};\n"]}
|