@opengeni/db 1.0.1 → 3.1.0-canary.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/attached-browser-devices.d.ts +7 -0
- package/dist/automations.d.ts +154 -0
- package/dist/canonical-human-identities.js +3 -3
- package/dist/capability-integrations.d.ts +13 -0
- package/dist/child-lifecycle-notices.d.ts +68 -0
- package/dist/{chunk-LTG3S6ZY.js → chunk-EULAN2NP.js} +2 -2
- package/dist/{chunk-CUPM3FGB.js → chunk-NJVZPWXY.js} +3 -3
- package/dist/{chunk-4SR4HKKA.js → chunk-NMUBV7Z5.js} +19 -11
- package/dist/chunk-NMUBV7Z5.js.map +1 -0
- package/dist/chunk-OF5OBB76.js +4457 -0
- package/dist/chunk-OF5OBB76.js.map +1 -0
- package/dist/{chunk-6ZYKCRFO.js → chunk-PR2WMLOQ.js} +7580 -4417
- package/dist/chunk-PR2WMLOQ.js.map +1 -0
- package/dist/{chunk-ZWREYEWA.js → chunk-SCPUJS53.js} +41 -4
- package/dist/chunk-SCPUJS53.js.map +1 -0
- package/dist/{chunk-SK7YYHBI.js → chunk-SIBYBA2D.js} +46 -1
- package/dist/chunk-SIBYBA2D.js.map +1 -0
- package/dist/chunk-TIKF3KTI.js +383 -0
- package/dist/chunk-TIKF3KTI.js.map +1 -0
- package/dist/chunk-ZZ5LJEFX.js +516 -0
- package/dist/chunk-ZZ5LJEFX.js.map +1 -0
- package/dist/codemode-operations.d.ts +1 -6
- package/dist/company-brain-context-selection-schema.d.ts +705 -0
- package/dist/company-brain-context-selection.d.ts +94 -0
- package/dist/company-brain-governed-writes.d.ts +24 -0
- package/dist/company-brain.d.ts +55 -0
- package/dist/company-profile-agent-admin.d.ts +15 -0
- package/dist/company-profile-schema.d.ts +619 -2
- package/dist/company-profile.d.ts +9 -4
- package/dist/connection-authority.d.ts +95 -0
- package/dist/connection-scopes.d.ts +8 -0
- package/dist/connection-tenancy-backfill.d.ts +41 -0
- package/dist/connection-token-resolver.d.ts +30 -1
- package/dist/database.d.ts +19 -0
- package/dist/editable-artifact-durable-export.js +2 -2
- package/dist/editable-artifacts.d.ts +2 -2
- package/dist/editable-artifacts.js +3 -3
- package/dist/governed-learning-activation-schema.d.ts +984 -0
- package/dist/governed-learning-activation.d.ts +98 -0
- package/dist/governed-learning-evaluator-schema.d.ts +633 -0
- package/dist/governed-learning-evaluator.d.ts +28 -0
- package/dist/index.d.ts +1595 -81
- package/dist/index.js +21571 -8126
- package/dist/index.js.map +1 -1
- package/dist/insights.d.ts +18 -0
- package/dist/integration-bindings.d.ts +1 -0
- package/dist/integration-facets.d.ts +30 -0
- package/dist/interaction-placement-loss.d.ts +22 -0
- package/dist/managed-human-provisioning.d.ts +25 -0
- package/dist/memory-domain.d.ts +3 -3
- package/dist/migrate.d.ts +11 -1
- package/dist/migrate.js +1 -1
- package/dist/new-session-drafts.d.ts +43 -5
- package/dist/organization-membership-backfill.d.ts +174 -0
- package/dist/organization-membership-lifecycle.d.ts +162 -0
- package/dist/pr-review.d.ts +107 -0
- package/dist/preference-registry-schema.d.ts +2 -0
- package/dist/preference-registry.d.ts +2 -0
- package/dist/provision-roles.js +1 -1
- package/dist/runtime-posture.d.ts +22 -8
- package/dist/schema.d.ts +24914 -13703
- package/dist/schema.js +99 -1
- package/dist/scoped-knowledge-schema.d.ts +52 -1
- package/dist/session-background-commands.d.ts +125 -0
- package/dist/session-background-commands.js +34 -0
- package/dist/session-background-commands.js.map +1 -0
- package/dist/session-control.d.ts +156 -3
- package/dist/session-goal-pacing.d.ts +68 -0
- package/dist/session-queue-commands.d.ts +41 -4
- package/dist/session-realtime-ledger.d.ts +2 -0
- package/dist/session-tenancy.d.ts +71 -1
- package/dist/session-tenancy.js +25 -3
- package/dist/session-tool-call-settlement.d.ts +9 -4
- package/dist/slack-routing-personal-workspace.d.ts +23 -0
- package/dist/slack-routing.d.ts +153 -0
- package/dist/slack-task-policy-schema.d.ts +34 -0
- package/dist/slack-task-policy.d.ts +8 -0
- package/dist/slack-user-link-access.d.ts +1 -0
- package/dist/task-notes-schema.d.ts +594 -0
- package/dist/task-notes.d.ts +39 -0
- package/dist/turn-initiator.d.ts +2 -0
- package/dist/user-resource-authority.d.ts +109 -0
- package/dist/video-generation.js +3 -3
- package/dist/workspace-authority.d.ts +81 -0
- package/dist/workspace-instruction-policies-schema.d.ts +279 -0
- package/dist/workspace-instruction-policies.d.ts +62 -0
- package/dist/workspace-learning-policy.d.ts +1 -0
- package/dist/workspace-membership-permissions.d.ts +2 -0
- package/drizzle/0240_enrollment_connection_authority.sql +39 -0
- package/drizzle/0241_atomic_personal_resource_delegation.sql +1000 -0
- package/drizzle/0241_enrollment_agent_runtime.sql +70 -0
- package/drizzle/0244_slack_app_home_refresh_queue.sql +120 -0
- package/drizzle/0245_model_context_contribution_facts.sql +88 -0
- package/drizzle/0246_integration_personal_instance_authority.sql +70 -0
- package/drizzle/0247_terraform_stacks_provenance_repair.sql +428 -0
- package/drizzle/0248_terraform_stacks_component_resolution_fence.sql +83 -0
- package/drizzle/0249_personal_resource_delegation_authority_correction.sql +662 -0
- package/drizzle/0250_direct_retained_process_owner_liveness.sql +199 -0
- package/drizzle/0251_connected_machine_operation_policy.sql +45 -0
- package/drizzle/0252_scheduled_personal_resource_delegation.sql +1867 -0
- package/drizzle/0253_common_user_resource_authority_lifecycle.sql +1555 -0
- package/drizzle/0254_scoped_variable_set_authority.sql +1255 -0
- package/drizzle/0255_company_brain_governed_write_proposals.sql +524 -0
- package/drizzle/0256_connection_authority_delegation.sql +703 -0
- package/drizzle/0257_goal_revision_decisions_and_root_constraints.sql +436 -0
- package/drizzle/0258_three_scope_document_knowledge_authority.sql +1273 -0
- package/drizzle/0259_company_brain_context_selection_receipts.sql +869 -0
- package/drizzle/0260_task_note_knowledge_promotion.sql +820 -0
- package/drizzle/0261_preference_knowledge_proposal_actor_binding.sql +471 -0
- package/drizzle/0262_scoped_connected_machines_and_rigs.sql +1700 -0
- package/drizzle/0263_organization_membership_lifecycle.sql +3284 -0
- package/drizzle/0264_connection_authority_runtime_activation.sql +1084 -0
- package/drizzle/0266_company_brain_context_receipt_inspection.sql +156 -0
- package/drizzle/0268_governed_learning_decision_receipts.sql +825 -0
- package/drizzle/0269_governed_learning_activation_controller.sql +1874 -0
- package/drizzle/0270_governed_learning_history_inspection.sql +170 -0
- package/drizzle/0271_company_brain_retrieval_only_default.sql +524 -0
- package/drizzle/0272_human_confirmed_learning_activation.sql +591 -0
- package/drizzle/0273_scheduled_variable_set_materialization.sql +268 -0
- package/drizzle/0274_human_confirmed_knowledge_review.sql +310 -0
- package/drizzle/0275_scheduled_connection_authority.sql +5527 -0
- package/drizzle/0276_onboarding_proposal_initiating_human_guc.sql +198 -0
- package/drizzle/0277_workspace_writer_authority_attribution.sql +393 -0
- package/drizzle/0278_workspace_membership_removal_fencing.sql +1174 -0
- package/drizzle/0279_workspace_connection_use_lane.sql +343 -0
- package/drizzle/0280_connection_and_variable_set_audit_attribution.sql +773 -0
- package/drizzle/0281_viewer_holder_authority_claims.sql +52 -0
- package/drizzle/0282_variable_set_session_attach_attribution.sql +178 -0
- package/drizzle/0283_editable_spreadsheet_authored_state.sql +82 -0
- package/drizzle/0284_truthful_human_confirmed_review_reason.sql +930 -0
- package/drizzle/0285_organization_tenancy_inventory.sql +329 -0
- package/drizzle/0286_widen_task_note_expiry_ceiling.sql +391 -0
- package/drizzle/0287_open_suffix_pending_tool_calls.sql +18 -0
- package/drizzle/0288_attached_browser_reenrollment.sql +64 -0
- package/drizzle/0289_session_composer_policy_authority.sql +597 -0
- package/drizzle/0290_organization_membership_backfill.sql +268 -0
- package/drizzle/0291_resource_authority_classification_assertion.sql +371 -0
- package/drizzle/0292_truthful_tenancy_inventory_counters.sql +291 -0
- package/drizzle/0293_confirm_time_rule_rebaseline.sql +615 -0
- package/drizzle/0294_preference_activation_authority.sql +237 -0
- package/drizzle/0295_retire_legacy_standing_memory_mode.sql +476 -0
- package/drizzle/0296_force_rls_backfill_noop_repair.sql +215 -0
- package/drizzle/0297_session_ownership_classification_and_backfill.sql +752 -0
- package/drizzle/0298_organization_tenancy_parity.sql +609 -0
- package/drizzle/0299_organization_membership_lock_order.sql +291 -0
- package/drizzle/0300_tenancy_backfill_ledger.sql +459 -0
- package/drizzle/0301_session_snapshot_and_pin_visibility.sql +181 -0
- package/drizzle/0302_personal_workspace_session_ownership.sql +303 -0
- package/drizzle/0303_session_tenancy_product_activation.sql +919 -0
- package/drizzle/0304_personal_workspace_private_session_reads.sql +97 -0
- package/drizzle/0305_personal_resource_grant_management.sql +584 -0
- package/drizzle/0306_atomic_personal_resource_attachments.sql +1374 -0
- package/drizzle/0307_session_attention_state.sql +51 -0
- package/drizzle/0308_session_archives.sql +35 -0
- package/drizzle/0309_channel_project_pins.sql +6 -0
- package/drizzle/0310_channel_project_order.sql +27 -0
- package/drizzle/0311_company_scope_and_private_session_create.sql +656 -0
- package/drizzle/0312_quiescent_session_tree_deletion.sql +39 -0
- package/drizzle/0313_private_child_session_authority.sql +365 -0
- package/drizzle/0314_unregistered_organization_invitations.sql +606 -0
- package/drizzle/0315_personal_github_repository_selection.sql +624 -0
- package/drizzle/0316_human_confirmed_activation_resumed_generation.sql +869 -0
- package/drizzle/0317_session_goal_continuation_hold.sql +64 -0
- package/drizzle/0318_session_turn_startup_milestones.sql +115 -0
- package/drizzle/0319_event_triggered_automations.sql +254 -0
- package/drizzle/0320_pr_review_pack.sql +113 -0
- package/drizzle/0321_slack_bot_environment_display_name.sql +15 -0
- package/drizzle/0322_session_turns_unclaimed_prompt_trigger_index.sql +5 -0
- package/drizzle/0323_organization_private_session_enablement.sql +489 -0
- package/drizzle/0324_human_confirmed_company_profile_agent_admin.sql +856 -0
- package/drizzle/0325_child_lifecycle_notices.sql +44 -0
- package/drizzle/0326_interaction_operation_error_codes.sql +62 -0
- package/drizzle/0327_slack_first_task_hint.sql +29 -0
- package/drizzle/0328_session_background_commands.sql +590 -0
- package/drizzle/0329_slack_orchestration_delivery_events.sql +91 -0
- package/drizzle/0330_api_key_descriptions.sql +20 -0
- package/drizzle/0331_managed_organization_creation.sql +163 -0
- package/drizzle/0332_organization_shared_workspace_control_plane.sql +539 -0
- package/drizzle/0333_session_turn_prompt_routing.sql +45 -0
- package/drizzle/0334_connected_machine_workspace_root.sql +99 -0
- package/drizzle/0335_slack_workspace_routing.sql +460 -0
- package/drizzle/0336_atomic_session_fork_visibility.sql +667 -0
- package/drizzle/0337_slack_routed_action_handles.sql +189 -0
- package/drizzle/0338_atomic_connected_machine_attachments.sql +410 -0
- package/drizzle/0339_document_authority_reclassification.sql +1153 -0
- package/drizzle/0340_tenancy_backfill_activation_evidence.sql +1347 -0
- package/drizzle/0341_slack_routing_probe_organization_fence.sql +109 -0
- package/package.json +10 -6
- package/src/attached-browser-devices.ts +233 -5
- package/src/automations.ts +911 -0
- package/src/browser-sessions.ts +10 -0
- package/src/capability-integrations.ts +175 -1
- package/src/child-lifecycle-notices.ts +241 -0
- package/src/codemode-operations.ts +1 -35
- package/src/company-brain-context-selection-schema.ts +100 -0
- package/src/company-brain-context-selection.ts +359 -0
- package/src/company-brain-governed-writes.ts +1170 -0
- package/src/company-brain.ts +309 -0
- package/src/company-profile-agent-admin.ts +225 -0
- package/src/company-profile-schema.ts +121 -1
- package/src/company-profile.ts +21 -0
- package/src/computer-sessions.ts +10 -1
- package/src/connection-authority.ts +290 -0
- package/src/connection-scopes.ts +20 -0
- package/src/connection-tenancy-backfill.ts +81 -0
- package/src/connection-token-resolver.ts +263 -31
- package/src/database.ts +75 -2
- package/src/editable-artifacts-schema.ts +10 -5
- package/src/editable-artifacts.ts +21 -11
- package/src/governed-learning-activation-schema.ts +121 -0
- package/src/governed-learning-activation.ts +588 -0
- package/src/governed-learning-evaluator-schema.ts +72 -0
- package/src/governed-learning-evaluator.ts +217 -0
- package/src/index.ts +11651 -1548
- package/src/insights.ts +107 -0
- package/src/integration-bindings.ts +88 -6
- package/src/integration-facets.ts +287 -84
- package/src/interaction-placement-loss.ts +234 -0
- package/src/managed-human-provisioning.ts +116 -0
- package/src/memory-domain.ts +27 -32
- package/src/migrate.ts +77 -1
- package/src/new-session-drafts.ts +229 -35
- package/src/organization-membership-backfill.ts +735 -0
- package/src/organization-membership-lifecycle.ts +985 -0
- package/src/pr-review.ts +890 -0
- package/src/preference-registry.ts +31 -1
- package/src/provision-roles.ts +877 -6
- package/src/runtime-posture-cli.ts +2 -0
- package/src/runtime-posture.ts +1291 -76
- package/src/schema.ts +3303 -428
- package/src/scoped-knowledge-schema.ts +16 -8
- package/src/scoped-knowledge.ts +1 -1
- package/src/session-background-commands.ts +759 -0
- package/src/session-control.ts +640 -74
- package/src/session-goal-pacing.ts +126 -0
- package/src/session-queue-commands.ts +437 -84
- package/src/session-realtime-context.ts +3 -3
- package/src/session-realtime-ledger.ts +22 -11
- package/src/session-realtime-mirror.ts +1 -1
- package/src/session-tenancy.ts +403 -49
- package/src/session-tool-call-settlement.ts +38 -29
- package/src/slack-routing-personal-workspace.ts +67 -0
- package/src/slack-routing.ts +469 -0
- package/src/slack-task-policy-schema.ts +5 -0
- package/src/slack-task-policy.ts +18 -0
- package/src/slack-user-link-access.ts +17 -1
- package/src/task-notes-schema.ts +74 -0
- package/src/task-notes.ts +124 -2
- package/src/turn-initiator.ts +8 -0
- package/src/user-resource-authority.ts +377 -0
- package/src/workspace-authority.ts +160 -0
- package/src/workspace-instruction-policies-schema.ts +53 -1
- package/src/workspace-instruction-policies.ts +528 -77
- package/src/workspace-learning-policy.ts +21 -5
- package/src/workspace-membership-permissions.ts +9 -0
- package/dist/chunk-4SR4HKKA.js.map +0 -1
- package/dist/chunk-6ZYKCRFO.js.map +0 -1
- package/dist/chunk-NXAFLCQX.js +0 -2468
- package/dist/chunk-NXAFLCQX.js.map +0 -1
- package/dist/chunk-SK7YYHBI.js.map +0 -1
- package/dist/chunk-WD5ROSLL.js +0 -117
- package/dist/chunk-WD5ROSLL.js.map +0 -1
- package/dist/chunk-ZWREYEWA.js.map +0 -1
- /package/dist/{chunk-LTG3S6ZY.js.map → chunk-EULAN2NP.js.map} +0 -0
- /package/dist/{chunk-CUPM3FGB.js.map → chunk-NJVZPWXY.js.map} +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/editable-artifacts.ts"],"sourcesContent":["import { createHash } from \"node:crypto\";\nimport {\n COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n MAX_COMMITTED_TRANSACTION_BYTES,\n MAX_COMMITTED_TRANSACTION_OPERATIONS,\n decodeCommittedTransactionSummary,\n} from \"@opengeni/contracts/editable-artifact-committed-transaction\";\nimport {\n EDITABLE_ARTIFACT_NATIVE_RECEIPT_MAX_BYTES,\n EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION,\n decodeEditableArtifactSerializedCommit,\n} from \"@opengeni/contracts/editable-artifact-serialized-commit\";\nimport {\n EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION,\n EDITABLE_ARTIFACT_KERNEL_VERSION_MAX_BYTES,\n EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES,\n} from \"@opengeni/contracts/editable-artifacts\";\nimport { EDITABLE_ARTIFACT_LIVE_WIRE_VERSION } from \"@opengeni/contracts/editable-artifact-versions\";\nimport { sql } from \"drizzle-orm\";\n\nimport { rawRows, type Database, withRlsContext } from \"./database\";\n\n/**\n * Persistence DTOs intentionally live below @opengeni/core. Core already\n * depends on @opengeni/db, so importing its nominal types here would create a\n * publish-time package cycle. These shapes mirror the editable-artifact domain\n * port exactly; core owns the one-way typed adapter.\n */\nexport type PersistedEditableArtifactScope = Readonly<{\n accountId: string;\n workspaceId: string;\n}>;\n\nexport type PersistedEditableArtifactActor =\n | Readonly<{ kind: \"human\"; subjectId: string; replicaId: string }>\n | Readonly<{\n kind: \"agent\";\n subjectId: string;\n replicaId: string;\n sessionId: string;\n turnId: string;\n attemptId: string;\n generation: number;\n }>\n | Readonly<{\n kind: \"service\";\n subjectId: string;\n replicaId: string;\n service: string;\n }>;\n\nexport type PersistedEditableArtifactLiveTicketActor = PersistedEditableArtifactActor;\n\nexport type PersistedEditableArtifactLiveTicketRecord = Readonly<{\n tokenDigest: string;\n scope: PersistedEditableArtifactScope;\n artifactId: string;\n modality: \"spreadsheet\" | \"presentation\" | \"document\";\n actor: PersistedEditableArtifactLiveTicketActor;\n allowEdit: boolean;\n protocolVersion: number;\n issuedAt: string;\n expiresAt: string;\n}>;\n\nexport type PersistedEditableArtifactCausalEntry = Readonly<{\n replicaId: string;\n counter: number;\n}>;\n\nexport type PersistedEditableArtifactCausalFrontier =\n readonly PersistedEditableArtifactCausalEntry[];\n\ntype PersistedEditableArtifactCommon = Readonly<{\n scope: PersistedEditableArtifactScope;\n id: string;\n title: string;\n lifecycle: \"active\" | \"archived\";\n authorizationRevision: number;\n headSequence: number;\n stateHash: string;\n currentSnapshotId: string | null;\n createdAt: string;\n updatedAt: string;\n}>;\n\nexport type PersistedEditableArtifact =\n | (PersistedEditableArtifactCommon &\n Readonly<{\n modality: \"spreadsheet\";\n causalFrontier: PersistedEditableArtifactCausalFrontier;\n }>)\n | (PersistedEditableArtifactCommon & Readonly<{ modality: \"document\" | \"presentation\" }>);\n\nexport type PersistedEditableArtifactCreationReceipt = Readonly<{\n receiptId: string;\n scope: PersistedEditableArtifactScope;\n artifactId: string;\n operationKind: \"create\" | \"import\";\n authorityKey: string;\n idempotencyKey: string;\n requestHash: string;\n genesisSnapshotId: string;\n createdAt: string;\n}>;\n\nexport type CreatePersistedEditableArtifactResult = Readonly<{\n artifact: PersistedEditableArtifact;\n genesisSnapshot: PersistedEditableArtifactSnapshotMetadata;\n creationReceipt: PersistedEditableArtifactCreationReceipt;\n replayed: boolean;\n}>;\n\nexport type CreatePersistedEditableArtifactStoreResult =\n | Readonly<{ kind: \"result\"; value: CreatePersistedEditableArtifactResult }>\n | Readonly<{ kind: \"authorization_stale\" }>;\n\nexport type ReadPersistedEditableArtifactAtAuthorizationRevisionResult =\n | Readonly<{ kind: \"result\"; artifact: PersistedEditableArtifact | null }>\n | Readonly<{ kind: \"authorization_stale\" }>;\n\nexport type PersistedEditableArtifactOperationRecord = Readonly<{\n scope: PersistedEditableArtifactScope;\n artifactId: string;\n serverTransactionId: string;\n sequence: number;\n actorKey: string;\n createdAt: string;\n operationId: string;\n dot: PersistedEditableArtifactCausalEntry;\n}>;\n\ntype PersistedEditableArtifactCommittedTransactionCommon = Readonly<{\n scope: PersistedEditableArtifactScope;\n artifactId: string;\n modality: PersistedEditableArtifact[\"modality\"];\n serverTransactionId: string;\n requestHash: string;\n sequenceStart: number;\n sequenceEnd: number;\n priorStateHash: string;\n stateHash: string;\n modelSchemaVersion: number;\n kernelVersion: string;\n committedTransactionBytes: Uint8Array;\n committedAt: string;\n}>;\n\nexport type PersistedEditableArtifactCommittedTransactionRecord =\n | (PersistedEditableArtifactCommittedTransactionCommon &\n Readonly<{\n modality: \"spreadsheet\";\n dot: PersistedEditableArtifactCausalEntry;\n resolvedCausalBase: PersistedEditableArtifactCausalFrontier;\n resultingCausalFrontier: PersistedEditableArtifactCausalFrontier;\n operationIds: readonly string[];\n operationProtocolVersion: number;\n }>)\n | (PersistedEditableArtifactCommittedTransactionCommon &\n Readonly<{\n modality: \"document\" | \"presentation\";\n commitProtocolVersion: number;\n priorNativeRevision: number;\n nativeRevision: number;\n commandCount: number;\n nativeReceiptBytes: Uint8Array;\n }>);\n\ntype PersistedEditableArtifactReceiptCommon = Readonly<{\n receiptId: string;\n scope: PersistedEditableArtifactScope;\n artifactId: string;\n modality: PersistedEditableArtifact[\"modality\"];\n serverTransactionId: string;\n clientTransactionId: string;\n replicaId: string;\n replicaCounter: number;\n previousLocalTransactionId: string | null;\n intentBytes: Uint8Array;\n requestHash: string;\n actorKey: string;\n sequenceStart: number;\n sequenceEnd: number;\n priorStateHash: string;\n stateHash: string;\n intentEnvelopeVersion: number;\n intentProtocolVersion: number;\n commandProtocolVersion: number;\n kernelVersion: string;\n modelSchemaVersion: number;\n committedAt: string;\n}>;\n\nexport type PersistedEditableArtifactReceipt =\n | (PersistedEditableArtifactReceiptCommon &\n Readonly<{\n modality: \"spreadsheet\";\n causalBase: PersistedEditableArtifactCausalFrontier;\n resolvedCausalBase: PersistedEditableArtifactCausalFrontier;\n resultingCausalFrontier: PersistedEditableArtifactCausalFrontier;\n operationCount: number;\n selectiveUndoOperationIds: readonly string[];\n operationProtocolVersion: number;\n }>)\n | (PersistedEditableArtifactReceiptCommon &\n Readonly<{\n modality: \"document\" | \"presentation\";\n commitProtocolVersion: number;\n priorNativeRevision: number;\n nativeRevision: number;\n commandCount: number;\n }>);\n\ntype PersistedEditableArtifactSnapshotMetadataCommon = Readonly<{\n scope: PersistedEditableArtifactScope;\n artifactId: string;\n modality: PersistedEditableArtifact[\"modality\"];\n snapshotId: string;\n blobReference: string;\n byteSize: number;\n contentHash: string;\n mimeType: \"application/vnd.opengeni.editable-artifact-snapshot\";\n coveredHeadSequence: number;\n stateHash: string;\n modelSchemaVersion: number;\n kernelVersion: string;\n verifiedAt: string;\n publishedAt: string;\n}>;\n\nexport type PersistedEditableArtifactSnapshotMetadata =\n | (PersistedEditableArtifactSnapshotMetadataCommon &\n Readonly<{\n modality: \"spreadsheet\";\n coveredCausalFrontier: PersistedEditableArtifactCausalFrontier;\n operationProtocolVersion: number;\n crdtStateVersion: number;\n }>)\n | (PersistedEditableArtifactSnapshotMetadataCommon &\n Readonly<{\n modality: \"document\" | \"presentation\";\n nativeRevision: number;\n }>);\n\nexport type PersistedEditableArtifactSequenceCheckpoint =\n | Readonly<{\n modality: \"spreadsheet\";\n headSequence: number;\n causalFrontier: PersistedEditableArtifactCausalFrontier;\n stateHash: string;\n }>\n | Readonly<{\n modality: \"document\" | \"presentation\";\n headSequence: number;\n nativeRevision: number;\n stateHash: string;\n }>;\n\ntype PersistedEditableArtifactTransactionEventCommon = Readonly<{\n kind: \"transaction_committed\";\n schemaVersion: 1;\n scope: PersistedEditableArtifactScope;\n artifactId: string;\n serverTransactionId: string;\n sequenceStart: number;\n sequenceEnd: number;\n stateHash: string;\n committedAt: string;\n}>;\n\ntype PersistedEditableArtifactSnapshotEventCommon = Readonly<{\n kind: \"snapshot_published\";\n schemaVersion: 1;\n scope: PersistedEditableArtifactScope;\n artifactId: string;\n snapshotId: string;\n coveredHeadSequence: number;\n stateHash: string;\n publishedAt: string;\n}>;\n\nexport type PersistedEditableArtifactLiveEvent =\n | (PersistedEditableArtifactTransactionEventCommon &\n Readonly<{\n modality: \"spreadsheet\";\n operationProtocolVersion: number;\n }>)\n | (PersistedEditableArtifactTransactionEventCommon &\n Readonly<{\n modality: \"document\" | \"presentation\";\n commitProtocolVersion: number;\n }>)\n | (PersistedEditableArtifactSnapshotEventCommon &\n Readonly<{\n modality: \"spreadsheet\";\n operationProtocolVersion: number;\n }>)\n | (PersistedEditableArtifactSnapshotEventCommon &\n Readonly<{ modality: \"document\" | \"presentation\" }>);\n\nexport type PersistedEditableArtifactLiveOutboxRecord = Readonly<{\n outboxId: string;\n event: PersistedEditableArtifactLiveEvent;\n state: \"pending\" | \"publishing\" | \"published\" | \"dead_lettered\";\n attemptCount: number;\n leaseOwner: string | null;\n leaseExpiresAt: string | null;\n nextAttemptAt: string;\n lastErrorCode: string | null;\n publishedAt: string | null;\n deadLetteredAt: string | null;\n createdAt: string;\n}>;\n\ntype PersistedEditableArtifactLiveBoundaryCommon = Readonly<{\n modality: PersistedEditableArtifact[\"modality\"];\n headSequence: number;\n stateHash: string;\n minimumReplaySequence: number;\n}>;\n\nexport type PersistedEditableArtifactLiveHead =\n | (PersistedEditableArtifactLiveBoundaryCommon &\n Readonly<{\n modality: \"spreadsheet\";\n causalFrontier: PersistedEditableArtifactCausalFrontier;\n }>)\n | (PersistedEditableArtifactLiveBoundaryCommon &\n Readonly<{\n modality: \"document\" | \"presentation\";\n nativeRevision: number;\n }>);\n\nexport type PersistedEditableArtifactLiveResume =\n | Readonly<{\n modality: \"spreadsheet\";\n localCursor: number | null;\n localStateHash: string | null;\n localCausalFrontier: PersistedEditableArtifactCausalFrontier;\n requireSnapshot: boolean;\n }>\n | Readonly<{\n modality: \"document\" | \"presentation\";\n localCursor: number | null;\n localStateHash: string | null;\n localNativeRevision: number | null;\n requireSnapshot: boolean;\n }>;\n\nexport type PersistedEditableArtifactLiveSnapshot =\n | Readonly<{\n modality: \"spreadsheet\";\n artifactId: string;\n sequence: number;\n stateHash: string;\n causalFrontier: PersistedEditableArtifactCausalFrontier;\n digest: string;\n operationProtocolVersion: number;\n snapshotVersion: number;\n kernelVersion: string;\n modelSchemaVersion: number;\n bytes: Uint8Array;\n }>\n | Readonly<{\n modality: \"document\" | \"presentation\";\n artifactId: string;\n sequence: number;\n stateHash: string;\n nativeRevision: number;\n digest: string;\n kernelVersion: string;\n modelSchemaVersion: number;\n bytes: Uint8Array;\n }>;\n\nexport type PersistedEditableArtifactLiveCommittedTransaction =\n | Readonly<{\n modality: \"spreadsheet\";\n artifactId: string;\n transactionId: string;\n requestHash: string;\n startSequence: number;\n endSequence: number;\n priorStateHash: string;\n stateHash: string;\n causalFrontier: PersistedEditableArtifactCausalFrontier;\n operationProtocolVersion: number;\n committedTransactionBytes: Uint8Array;\n }>\n | Readonly<{\n modality: \"document\" | \"presentation\";\n artifactId: string;\n transactionId: string;\n requestHash: string;\n startSequence: number;\n endSequence: number;\n priorStateHash: string;\n stateHash: string;\n priorNativeRevision: number;\n nativeRevision: number;\n commitProtocolVersion: number;\n committedTransactionBytes: Uint8Array;\n }>;\n\nexport type PersistedEditableArtifactLiveBootstrap = PersistedEditableArtifactLiveHead &\n Readonly<{\n resumeAccepted: boolean;\n resumeSequence: number;\n resumeStateHash: string;\n snapshot: PersistedEditableArtifactLiveSnapshot | null;\n }>;\n\nexport interface PersistedEditableArtifactSnapshotBytesPort {\n readSnapshotBytes(snapshot: PersistedEditableArtifactSnapshotMetadata): Promise<Uint8Array>;\n}\n\nexport type PersistedEditableArtifactKernelState =\n | Readonly<{\n modality: \"spreadsheet\";\n artifact: Extract<PersistedEditableArtifact, { modality: \"spreadsheet\" }>;\n snapshot: Extract<\n PersistedEditableArtifactSnapshotMetadata,\n { modality: \"spreadsheet\" }\n > | null;\n tailTransactionCount: number;\n tailByteSize: number;\n committedTransactionTail: readonly Extract<\n PersistedEditableArtifactCommittedTransactionRecord,\n { modality: \"spreadsheet\" }\n >[];\n }>\n | Readonly<{\n modality: \"document\" | \"presentation\";\n artifact: Extract<PersistedEditableArtifact, { modality: \"document\" | \"presentation\" }>;\n snapshot: Extract<\n PersistedEditableArtifactSnapshotMetadata,\n { modality: \"document\" | \"presentation\" }\n > | null;\n tailTransactionCount: number;\n tailByteSize: number;\n baseNativeRevision: number;\n committedTransactionTail: readonly Extract<\n PersistedEditableArtifactCommittedTransactionRecord,\n { modality: \"document\" | \"presentation\" }\n >[];\n }>;\n\nexport type CommitPersistedEditableArtifactTransaction = Readonly<{\n expectedHeadSequence: number;\n serverTransactionId: string;\n receipt: PersistedEditableArtifactReceipt;\n committedTransaction: PersistedEditableArtifactCommittedTransactionRecord;\n operations: readonly PersistedEditableArtifactOperationRecord[];\n outbox: PersistedEditableArtifactLiveOutboxRecord;\n}>;\n\nexport type ReadPersistedEditableArtifactTransactionBasisRequest = Readonly<{\n actorKey: string;\n clientTransactionId: string;\n previousLocalTransactionId: string | null;\n selectiveUndoOperationIds: readonly string[];\n}>;\n\nexport type PersistedEditableArtifactTransactionUndoBasis = Readonly<{\n operationId: string;\n operation: PersistedEditableArtifactOperationRecord | null;\n claimedBy: string | null;\n}>;\n\nexport type PersistedEditableArtifactTransactionBasis =\n | Readonly<{\n kind: \"existing\";\n receipt: PersistedEditableArtifactReceipt;\n }>\n | Readonly<{\n kind: \"basis\";\n artifact: PersistedEditableArtifact;\n predecessor: PersistedEditableArtifactReceipt | null;\n undoTargets: readonly PersistedEditableArtifactTransactionUndoBasis[];\n kernelState: PersistedEditableArtifactKernelState;\n }>;\n\nexport type ExpectedPersistedEditableArtifactPredecessor = Readonly<{\n receiptId: string;\n serverTransactionId: string;\n actorKey: string;\n clientTransactionId: string;\n replicaId: string;\n replicaCounter: number;\n}>;\n\nexport type TryCommitPersistedEditableArtifactTransactionRequest =\n CommitPersistedEditableArtifactTransaction &\n Readonly<{\n scope: PersistedEditableArtifactScope;\n artifactId: string;\n expectedLifecycle: \"active\";\n expectedAuthorizationRevision: number;\n authorizationActor: PersistedEditableArtifactActor;\n actorKey: string;\n clientTransactionId: string;\n requestHash: string;\n expectedPredecessor: ExpectedPersistedEditableArtifactPredecessor | null;\n expectedUnclaimedUndoTargets: readonly string[];\n }>;\n\nexport type TryCommitPersistedEditableArtifactTransactionResult =\n | Readonly<{ kind: \"committed\"; receipt: PersistedEditableArtifactReceipt }>\n | Readonly<{ kind: \"replayed\"; receipt: PersistedEditableArtifactReceipt }>\n | Readonly<{ kind: \"stale\" }>;\n\nexport type CommitPersistedEditableArtifactSnapshot = Readonly<{\n expectedCurrentSnapshotId: string | null;\n expectedAuthorizationRevision: number;\n authorizationActor: PersistedEditableArtifactActor;\n authorizationPermission?: \"manage\" | \"read\" | \"edit\";\n snapshot: PersistedEditableArtifactSnapshotMetadata;\n outbox: PersistedEditableArtifactLiveOutboxRecord;\n}>;\n\nexport type CommitPersistedEditableArtifactSnapshotResult =\n | Readonly<{ kind: \"committed\" }>\n | Readonly<{ kind: \"authorization_stale\" }>;\n\ninterface PersistedEditableArtifactUnitOfWork {\n artifact(): PersistedEditableArtifact;\n findReceipt(\n actorKey: string,\n clientTransactionId: string,\n ): Promise<PersistedEditableArtifactReceipt | null>;\n findOperation(operationId: string): Promise<PersistedEditableArtifactOperationRecord | null>;\n findUndoClaim(operationId: string): Promise<string | null>;\n kernelState(): Promise<PersistedEditableArtifactKernelState>;\n checkpoint(headSequence: number): Promise<PersistedEditableArtifactSequenceCheckpoint | null>;\n findSnapshot(snapshotId: string): Promise<PersistedEditableArtifactSnapshotMetadata | null>;\n commitAppliedTransaction(input: CommitPersistedEditableArtifactTransaction): Promise<void>;\n commitSnapshot(\n input: CommitPersistedEditableArtifactSnapshot,\n ): Promise<CommitPersistedEditableArtifactSnapshotResult>;\n}\n\nexport interface PersistedEditableArtifactSnapshotPublicationUnitOfWork {\n artifact(): PersistedEditableArtifact;\n checkpoint(headSequence: number): Promise<PersistedEditableArtifactSequenceCheckpoint | null>;\n findSnapshot(snapshotId: string): Promise<PersistedEditableArtifactSnapshotMetadata | null>;\n commitSnapshot(\n input: CommitPersistedEditableArtifactSnapshot,\n ): Promise<CommitPersistedEditableArtifactSnapshotResult>;\n}\n\nexport type ClaimPersistedEditableArtifactLiveOutboxRequest = Readonly<{\n owner: string;\n leaseDurationMs: number;\n limit: number;\n}>;\n\nexport type PersistedEditableArtifactOutboxRetryErrorCode =\n | \"broker_unavailable\"\n | \"broker_backpressure\"\n | \"publish_timeout\";\n\nexport type PersistedEditableArtifactOutboxDeadLetterErrorCode = \"invalid_hint\" | \"oversized_hint\";\n\nexport type AdvancePersistedEditableArtifactAuthorizationRevisionResult = Readonly<{\n applied: boolean;\n authorizationRevision: number;\n}>;\n\nexport type PersistedEditableArtifactScopeAuthorizationHead = Readonly<{\n scope: PersistedEditableArtifactScope;\n createRevision: number;\n}>;\n\nexport class EditableArtifactPersistenceError extends Error {\n constructor(\n readonly code:\n | \"not_found\"\n | \"conflict\"\n | \"corrupt_history\"\n | \"history_limit\"\n | \"outbox_lease_conflict\"\n | \"transient\",\n message: string,\n options?: ErrorOptions,\n ) {\n super(message, options);\n this.name = \"EditableArtifactPersistenceError\";\n }\n}\n\n/** Record that one session used an artifact; repeated calls only advance recency. */\nexport async function touchEditableArtifactSessionLink(\n db: Database,\n scopeInput: PersistedEditableArtifactScope,\n sessionIdInput: string,\n artifactIdInput: string,\n): Promise<void> {\n const scope = validateScope(scopeInput);\n const sessionId = validateUuid(sessionIdInput, \"session id\");\n const artifactId = validateStableId(artifactIdInput, \"artifact id\");\n await withRlsContext(db, scope, async (tx) => {\n await tx.execute(sql`insert into editable_artifact_session_links (\n account_id, workspace_id, session_id, artifact_id\n ) values (\n ${scope.accountId}::uuid, ${scope.workspaceId}::uuid, ${sessionId}::uuid, ${artifactId}\n )\n on conflict (account_id, workspace_id, session_id, artifact_id)\n do update set last_used_at = greatest(\n editable_artifact_session_links.last_used_at,\n now()\n )`);\n });\n}\n\n/** List the exact artifacts most recently used by one session. */\nexport async function listEditableArtifactIdsForSession(\n db: Database,\n scopeInput: PersistedEditableArtifactScope,\n sessionIdInput: string,\n limitInput = 64,\n): Promise<readonly string[]> {\n const scope = validateScope(scopeInput);\n const sessionId = validateUuid(sessionIdInput, \"session id\");\n const limit = validateInteger(limitInput, \"editable artifact list limit\", 1, 64);\n return await withRlsContext(\n db,\n scope,\n async (tx) => {\n const rows = await rawRows<{ artifact_id: string }>(\n tx,\n sql`select artifact_id\n from editable_artifact_session_links\n where account_id = ${scope.accountId}::uuid\n and workspace_id = ${scope.workspaceId}::uuid\n and session_id = ${sessionId}::uuid\n order by last_used_at desc, artifact_id\n limit ${limit}`,\n );\n return Object.freeze(rows.map((row) => validateStableId(row.artifact_id, \"artifact id\")));\n },\n { isolationLevel: \"repeatable read\", accessMode: \"read only\" },\n );\n}\n\nexport const EDITABLE_ARTIFACT_INTENT_MAX_BYTES = 5 * 1024 * 1024;\nexport const EDITABLE_ARTIFACT_KERNEL_TAIL_MAX_TRANSACTIONS = 100_000;\nexport const EDITABLE_ARTIFACT_KERNEL_TAIL_MAX_BYTES = 64 * 1024 * 1024;\nconst EDITABLE_ARTIFACT_ORIGINAL_IMPORT_MAX_BYTES = 64 * 1024 * 1024;\n\ntype ArtifactRow = {\n account_id: string;\n workspace_id: string;\n id: string;\n modality: string;\n title: string;\n lifecycle_state: string;\n authorization_revision: string | number | bigint;\n head_sequence: string | number | bigint;\n causal_frontier: unknown | null;\n state_hash: string;\n current_snapshot_id: string | null;\n created_at: Date | string;\n updated_at: Date | string;\n};\n\ntype TransactionRow = {\n account_id: string;\n workspace_id: string;\n artifact_id: string;\n modality: string;\n id: string;\n receipt_id: string | null;\n client_transaction_id: string;\n replica_id: string;\n replica_counter: string | number | bigint;\n previous_local_transaction_id: string | null;\n intent_bytes: Uint8Array;\n request_hash: string;\n actor_key: string;\n sequence_start: string | number | bigint;\n sequence_end: string | number | bigint;\n prior_state_hash: string;\n causal_base: unknown | null;\n resolved_causal_base: unknown | null;\n resulting_causal_frontier: unknown | null;\n state_hash: string;\n operation_count: number | null;\n operation_ids: unknown | null;\n selective_undo_targets: unknown | null;\n intent_envelope_version: number;\n intent_protocol_version: number;\n command_protocol_version: number;\n kernel_version: string;\n model_schema_version: number;\n operation_protocol_version: number | null;\n commit_protocol_version: number | null;\n prior_native_revision: string | number | bigint | null;\n native_revision: string | number | bigint | null;\n command_count: number | null;\n native_receipt_byte_size: number | null;\n native_receipt_hash: string | null;\n native_receipt_bytes: Uint8Array | null;\n committed_transaction_byte_size: string | number | bigint;\n committed_transaction_hash: string;\n committed_transaction_bytes: Uint8Array;\n committed_at: Date | string;\n};\n\ntype CommittedTransactionRow = {\n account_id: string;\n workspace_id: string;\n artifact_id: string;\n modality: string;\n id: string;\n request_hash: string;\n sequence_start: string | number | bigint;\n sequence_end: string | number | bigint;\n prior_state_hash: string;\n state_hash: string;\n replica_id: string;\n replica_counter: string | number | bigint;\n resolved_causal_base: unknown | null;\n resulting_causal_frontier: unknown | null;\n operation_count: number | null;\n operation_ids: unknown | null;\n operation_protocol_version: number | null;\n commit_protocol_version: number | null;\n prior_native_revision: string | number | bigint | null;\n native_revision: string | number | bigint | null;\n command_count: number | null;\n native_receipt_byte_size: number | null;\n native_receipt_hash: string | null;\n native_receipt_bytes: Uint8Array | null;\n model_schema_version: number;\n kernel_version: string;\n committed_transaction_byte_size: string | number | bigint;\n committed_transaction_hash: string;\n committed_transaction_bytes: Uint8Array;\n committed_at: Date | string;\n};\n\ntype CreationReceiptRow = {\n id: string;\n operation_kind: string;\n authority_key: string;\n idempotency_key: string;\n request_hash: string;\n resource_type: string;\n resource_id: string;\n result: unknown;\n created_at: Date | string;\n};\n\ntype OperationRow = {\n account_id: string;\n workspace_id: string;\n artifact_id: string;\n transaction_id: string;\n operation_id: string;\n operation_index: number;\n sequence: string | number | bigint;\n dot_replica_id: string;\n dot_counter: string | number | bigint;\n actor_key: string;\n created_at: Date | string;\n};\n\ntype SnapshotRow = {\n account_id: string;\n workspace_id: string;\n artifact_id: string;\n modality: string;\n id: string;\n blob_reference: string;\n blob_byte_size: string | number | bigint;\n blob_content_hash: string;\n blob_mime_type: string;\n byte_size: string | number | bigint;\n content_hash: string;\n mime_type: string;\n covered_head_sequence: string | number | bigint;\n covered_causal_frontier: unknown | null;\n state_hash: string;\n model_schema_version: number;\n operation_protocol_version: number | null;\n kernel_version: string;\n crdt_state_version: number | null;\n native_revision: string | number | bigint | null;\n verified_at: Date | string;\n published_at: Date | string;\n};\n\ntype OutboxRow = {\n outbox_id: string;\n event: unknown;\n state: string;\n attempt_count: number;\n lease_owner: string | null;\n lease_expires_at: Date | string | null;\n next_attempt_at: Date | string;\n last_error_code: string | null;\n published_at: Date | string | null;\n dead_lettered_at: Date | string | null;\n created_at: Date | string;\n};\n\ntype LiveTicketRow = {\n token_digest: string;\n account_id: string;\n workspace_id: string;\n artifact_id: string;\n modality: string;\n actor_kind: string;\n actor_subject_id: string;\n replica_id: string;\n agent_session_id: string | null;\n agent_turn_id: string | null;\n agent_attempt_id: string | null;\n agent_generation: number | null;\n service_name: string | null;\n allow_edit: boolean;\n protocol_version: number;\n issued_at: Date | string;\n expires_at: Date | string;\n};\n\n/**\n * Shared PostgreSQL implementation of the live ticket atomic-take port.\n * Direct table access is intentionally unnecessary: all three operations use\n * hardened owner-defined routines installed by migration 0185.\n */\nexport class PostgresEditableArtifactLiveTicketStore {\n constructor(private readonly db: Database) {}\n\n async put(recordInput: PersistedEditableArtifactLiveTicketRecord): Promise<void> {\n const record = validateLiveTicketRecord(recordInput);\n const actor = record.actor;\n try {\n await withRlsContext(this.db, record.scope, async (tx) => {\n await rawRows<{ stored: null }>(\n tx,\n sql`select opengeni_private.put_editable_artifact_live_ticket(\n ${record.tokenDigest}, ${record.scope.accountId}::uuid,\n ${record.scope.workspaceId}::uuid, ${record.artifactId}, ${record.modality},\n ${actor.kind}, ${actor.subjectId}, ${actor.replicaId},\n ${actor.kind === \"agent\" ? actor.sessionId : null},\n ${actor.kind === \"agent\" ? actor.turnId : null},\n ${actor.kind === \"agent\" ? actor.attemptId : null},\n ${actor.kind === \"agent\" ? actor.generation : null},\n ${actor.kind === \"service\" ? actor.service : null},\n ${record.allowEdit}, ${record.protocolVersion}, ${record.issuedAt}::timestamptz,\n ${record.expiresAt}::timestamptz, current_schema()\n ) as stored`,\n );\n });\n } catch (error) {\n if (errorCode(error) === \"23505\") {\n throw new Error(\"Live ticket digest collision\", { cause: error });\n }\n throw error;\n }\n }\n\n async consume(\n tokenDigestInput: string,\n ): Promise<PersistedEditableArtifactLiveTicketRecord | null> {\n const tokenDigest = validateHash(tokenDigestInput, \"live ticket digest\");\n const rows = await rawRows<LiveTicketRow>(\n this.db,\n sql`select * from opengeni_private.consume_editable_artifact_live_ticket(\n ${tokenDigest}, current_schema()\n )`,\n );\n if (rows.length > 1) throw corrupt(\"Live ticket consume returned multiple records\");\n return rows[0] ? liveTicketFromRow(rows[0]) : null;\n }\n\n async cleanupExpired(limitInput = 1_000): Promise<number> {\n const limit = validateInteger(limitInput, \"live ticket cleanup limit\", 1, 10_000);\n const rows = await rawRows<{ removed: number | string | bigint }>(\n this.db,\n sql`select opengeni_private.cleanup_expired_editable_artifact_live_tickets(\n ${limit}, current_schema()\n ) as removed`,\n );\n return safeInteger(rows[0]?.removed ?? null, \"live ticket cleanup count\", 0);\n }\n}\n\n/**\n * PostgreSQL authority adapter. Kernel inputs are copied from a detached,\n * repeatable-read basis; only the final write CAS and narrow snapshot metadata\n * publication hold the artifact row lock. Tenant RLS is set and verified in\n * every scoped transaction.\n */\nexport class PostgresEditableArtifactStore {\n constructor(private readonly db: Database) {}\n\n async findArtifactCreation(\n scopeInput: PersistedEditableArtifactScope,\n operationKindInput: \"create\" | \"import\",\n authorityKeyInput: string,\n idempotencyKeyInput: string,\n ): Promise<CreatePersistedEditableArtifactResult | null> {\n const scope = validateScope(scopeInput);\n const operationKind = validateOriginOperation(operationKindInput);\n const authorityKey = validateActorKey(authorityKeyInput).key;\n const idempotencyKey = validateClientTransactionId(idempotencyKeyInput);\n return await withRlsContext(\n this.db,\n scope,\n async (tx) => {\n const rows = await rawRows<CreationReceiptRow>(\n tx,\n sql`select id, operation_kind, authority_key, idempotency_key, request_hash,\n resource_type, resource_id, result, created_at\n from editable_artifact_idempotency_receipts\n where account_id = ${scope.accountId}::uuid\n and workspace_id = ${scope.workspaceId}::uuid\n and operation_kind = ${operationKind}\n and authority_key_digest = sha256(convert_to(${authorityKey}, 'UTF8'))\n and authority_key = ${authorityKey}\n and idempotency_key = ${idempotencyKey}\n limit 1`,\n );\n const row = rows[0];\n if (!row) return null;\n const creationReceipt = creationReceiptFromRow(scope, row);\n const artifactRow = await loadArtifactRow(tx, scope, creationReceipt.artifactId, false);\n if (!artifactRow) throw corrupt(\"Artifact creation receipt points at a missing artifact\");\n const artifact = artifactFromRow(artifactRow);\n if (artifact.currentSnapshotId !== creationReceipt.genesisSnapshotId) {\n throw corrupt(\"Artifact creation receipt disagrees with the genesis snapshot pointer\");\n }\n const genesisSnapshot = await loadSnapshotMetadata(\n tx,\n scope,\n artifact.id,\n creationReceipt.genesisSnapshotId,\n );\n if (!genesisSnapshot) {\n throw corrupt(\"Artifact creation receipt points at a missing genesis snapshot\");\n }\n return Object.freeze({\n artifact,\n genesisSnapshot,\n creationReceipt,\n replayed: true,\n });\n },\n { isolationLevel: \"repeatable read\", accessMode: \"read only\" },\n );\n }\n\n async createArtifact(input: {\n scope: PersistedEditableArtifactScope;\n artifactId: string;\n authorizationActor: PersistedEditableArtifactActor;\n receiptId: string;\n authorityKey: string;\n idempotencyKey: string;\n requestHash: string;\n operationKind: \"create\" | \"import\";\n modality: PersistedEditableArtifact[\"modality\"];\n title: string;\n expectedScopeAuthorizationRevision: number;\n initialArtifactAuthorizationRevision: number;\n createdBySubjectId: string;\n genesisSnapshot: PersistedEditableArtifactSnapshotMetadata;\n originalImport?: Readonly<{\n fileId: string;\n blobRefId: string;\n blobReference: string;\n byteSize: number;\n contentHash: string;\n mimeType: string;\n }>;\n outbox: PersistedEditableArtifactLiveOutboxRecord;\n }): Promise<CreatePersistedEditableArtifactStoreResult> {\n const scope = validateScope(input.scope);\n const artifactId = validateStableId(input.artifactId, \"artifact id\");\n const authorizationActor = validateLiveTicketActor(input.authorizationActor);\n const receiptId = validateStableId(input.receiptId, \"creation receipt id\");\n const authorityKey = validateActorKey(input.authorityKey).key;\n if (persistedEditableArtifactActorKey(authorizationActor) !== authorityKey) {\n throw new TypeError(\"Artifact creation authority does not match its actor key\");\n }\n const idempotencyKey = validateClientTransactionId(input.idempotencyKey);\n const requestHash = validateHash(input.requestHash, \"creation request hash\");\n const operationKind = validateOriginOperation(input.operationKind);\n if ((operationKind === \"import\") !== Boolean(input.originalImport)) {\n throw new TypeError(\"Artifact import source does not match its origin operation\");\n }\n const expectedScopeAuthorizationRevision = validateInteger(\n input.expectedScopeAuthorizationRevision,\n \"expected scope create authorization revision\",\n 1,\n );\n const initialArtifactAuthorizationRevision = validateInteger(\n input.initialArtifactAuthorizationRevision,\n \"initial artifact authorization revision\",\n 1,\n );\n const title = input.title;\n validateTitle(title);\n const createdBySubjectId = validateIdentity(input.createdBySubjectId, \"creator subject id\");\n if (![\"spreadsheet\", \"presentation\", \"document\"].includes(input.modality)) {\n throw new TypeError(\"Unsupported editable artifact modality\");\n }\n const modality = input.modality;\n const genesisSnapshot = ownSnapshotMetadata(input.genesisSnapshot);\n const originalImport = input.originalImport\n ? validateOriginalImport(input.originalImport, modality)\n : null;\n const outbox = cloneOutbox(input.outbox);\n const createdAtIso = genesisSnapshot.publishedAt;\n const commonCandidateArtifact = {\n scope,\n id: artifactId,\n title,\n lifecycle: \"active\" as const,\n authorizationRevision: initialArtifactAuthorizationRevision,\n headSequence: 0,\n stateHash: genesisSnapshot.stateHash,\n currentSnapshotId: null,\n createdAt: createdAtIso,\n updatedAt: createdAtIso,\n } as const;\n const candidateArtifact: PersistedEditableArtifact =\n modality === \"spreadsheet\"\n ? Object.freeze({\n ...commonCandidateArtifact,\n modality,\n causalFrontier:\n genesisSnapshot.modality === \"spreadsheet\"\n ? genesisSnapshot.coveredCausalFrontier\n : Object.freeze([]),\n })\n : Object.freeze({ ...commonCandidateArtifact, modality });\n validateGenesisCreation(candidateArtifact, genesisSnapshot, outbox, operationKind);\n return await withRlsContext(\n this.db,\n scope,\n async (tx) => {\n await tx.execute(\n sql`select pg_advisory_xact_lock(hashtextextended(\n ${`editable-artifact:${operationKind}:${scope.accountId}:${scope.workspaceId}:${authorityKey}:${idempotencyKey}`},\n 0\n ))`,\n );\n const authorization = await transactionallyAuthorizeEditableArtifactActor(tx, {\n scope,\n artifactId,\n actor: authorizationActor,\n permission: operationKind,\n });\n if (!authorization.allowed) {\n return Object.freeze({ kind: \"authorization_stale\" as const });\n }\n const prior = await rawRows<CreationReceiptRow>(\n tx,\n sql`\n select id, operation_kind, authority_key, idempotency_key, request_hash,\n resource_type, resource_id, result, created_at\n from editable_artifact_idempotency_receipts\n where account_id = ${scope.accountId}::uuid\n and workspace_id = ${scope.workspaceId}::uuid\n and operation_kind = ${operationKind}\n and authority_key_digest = sha256(convert_to(${authorityKey}, 'UTF8'))\n and authority_key = ${authorityKey}\n and idempotency_key = ${idempotencyKey}\n limit 1`,\n );\n if (prior[0]) {\n if (validateHash(prior[0].request_hash, \"stored creation request hash\") !== requestHash) {\n throw conflict(\"Artifact create idempotency key was reused with a different request\");\n }\n if (prior[0].resource_type !== \"artifact\") {\n throw corrupt(\"Artifact creation receipt points at an invalid resource type\");\n }\n const priorArtifactId = validateStableId(\n prior[0].resource_id,\n \"created artifact resource id\",\n );\n const replayRow = await loadArtifactRow(tx, scope, priorArtifactId, false);\n if (!replayRow) throw corrupt(\"Artifact creation receipt points at a missing artifact\");\n const replayArtifact = artifactFromRow(replayRow);\n const creationReceipt = creationReceiptFromRow(scope, prior[0]);\n if (creationReceipt.artifactId !== priorArtifactId) {\n throw corrupt(\"Artifact creation receipt result disagrees with its resource\");\n }\n if (replayArtifact.currentSnapshotId !== creationReceipt.genesisSnapshotId) {\n throw corrupt(\"Artifact creation receipt disagrees with the genesis snapshot pointer\");\n }\n const replaySnapshot = await loadSnapshotMetadata(\n tx,\n scope,\n priorArtifactId,\n creationReceipt.genesisSnapshotId,\n );\n if (!replaySnapshot) {\n throw corrupt(\"Artifact creation receipt points at a missing genesis snapshot\");\n }\n return Object.freeze({\n kind: \"result\" as const,\n value: Object.freeze({\n artifact: replayArtifact,\n genesisSnapshot: replaySnapshot,\n creationReceipt,\n replayed: true,\n }),\n });\n }\n if (authorization.revision !== expectedScopeAuthorizationRevision) {\n return Object.freeze({ kind: \"authorization_stale\" as const });\n }\n const [authorizationHead] = await rawRows<{\n create_revision: string | number | bigint;\n }>(\n tx,\n sql`select opengeni_private.ensure_editable_artifact_scope_authorization_head(\n ${scope.accountId}::uuid, ${scope.workspaceId}::uuid, current_schema()\n ) as create_revision`,\n );\n if (\n !authorizationHead ||\n safeInteger(\n authorizationHead.create_revision,\n \"scope create authorization revision\",\n 1,\n ) !== expectedScopeAuthorizationRevision\n ) {\n return Object.freeze({ kind: \"authorization_stale\" as const });\n }\n try {\n await tx.execute(sql`\n insert into editable_artifacts (\n account_id, workspace_id, id, modality, title, lifecycle_state,\n authorization_revision, head_sequence, causal_frontier, state_hash,\n current_snapshot_id, created_by_subject_id, created_at, updated_at\n ) values (\n ${scope.accountId}::uuid, ${scope.workspaceId}::uuid, ${artifactId},\n ${modality}, ${title}, 'active', ${initialArtifactAuthorizationRevision},\n 0, ${\n modality === \"spreadsheet\"\n ? json(\n genesisSnapshot.modality === \"spreadsheet\"\n ? genesisSnapshot.coveredCausalFrontier\n : [],\n )\n : sql`null`\n }::jsonb,\n ${genesisSnapshot.stateHash}, ${genesisSnapshot.snapshotId},\n ${createdBySubjectId}, ${createdAtIso}, ${createdAtIso}\n )`);\n await tx.execute(sql`\n insert into editable_artifact_sequence_checkpoints (\n account_id, workspace_id, artifact_id, head_sequence,\n modality, causal_frontier, native_revision, state_hash,\n transaction_id, created_at\n ) values (\n ${scope.accountId}::uuid, ${scope.workspaceId}::uuid, ${artifactId},\n 0, ${modality},\n ${\n modality === \"spreadsheet\"\n ? json(\n genesisSnapshot.modality === \"spreadsheet\"\n ? genesisSnapshot.coveredCausalFrontier\n : [],\n )\n : sql`null`\n }::jsonb,\n ${genesisSnapshot.modality === \"spreadsheet\" ? null : genesisSnapshot.nativeRevision},\n ${genesisSnapshot.stateHash}, null, ${createdAtIso}\n )`);\n await insertSnapshotBlobReference(tx, genesisSnapshot);\n if (originalImport) {\n await insertOriginalImportBlobReference(\n tx,\n scope,\n artifactId,\n originalImport,\n createdAtIso,\n );\n }\n await insertSnapshotMetadata(tx, genesisSnapshot);\n const receiptResult = Object.freeze({\n schemaVersion: 1,\n artifactId,\n genesisSnapshotId: genesisSnapshot.snapshotId,\n });\n await tx.execute(sql`\n insert into editable_artifact_idempotency_receipts (\n account_id, workspace_id, id, artifact_id, operation_kind,\n authority_key, idempotency_key, request_hash, resource_type,\n resource_id, server_transaction_id, result, created_at\n ) values (\n ${scope.accountId}::uuid, ${scope.workspaceId}::uuid, ${receiptId},\n ${artifactId}, ${operationKind}, ${authorityKey}, ${idempotencyKey},\n ${requestHash}, 'artifact', ${artifactId}, null,\n ${json(receiptResult)}::jsonb, ${createdAtIso}\n )`);\n await insertLiveOutbox(tx, candidateArtifact, outbox);\n } catch (error) {\n throw mapPersistenceError(error, \"Editable artifact creation failed\");\n }\n const row = await loadArtifactRow(tx, scope, artifactId, false);\n if (!row)\n throw new EditableArtifactPersistenceError(\n \"corrupt_history\",\n \"Created artifact vanished\",\n );\n const artifact = artifactFromRow(row);\n return Object.freeze({\n kind: \"result\" as const,\n value: Object.freeze({\n artifact,\n genesisSnapshot,\n creationReceipt: Object.freeze({\n receiptId,\n scope,\n artifactId,\n operationKind,\n authorityKey,\n idempotencyKey,\n requestHash,\n genesisSnapshotId: genesisSnapshot.snapshotId,\n createdAt: createdAtIso,\n }),\n replayed: false,\n }),\n });\n },\n { isolationLevel: \"read committed\", accessMode: \"read write\" },\n );\n }\n\n async ensureScopeCreateAuthorizationHead(\n scopeInput: PersistedEditableArtifactScope,\n ): Promise<PersistedEditableArtifactScopeAuthorizationHead> {\n const scope = validateScope(scopeInput);\n return await withRlsContext(this.db, scope, async (tx) => {\n const rows = await rawRows<{ create_revision: string | number | bigint }>(\n tx,\n sql`select opengeni_private.ensure_editable_artifact_scope_authorization_head(\n ${scope.accountId}::uuid, ${scope.workspaceId}::uuid, current_schema()\n ) as create_revision`,\n );\n if (!rows[0]) throw corrupt(\"Scope create authorization head was not materialized\");\n return Object.freeze({\n scope,\n createRevision: safeInteger(\n rows[0].create_revision,\n \"scope create authorization revision\",\n 1,\n ),\n });\n });\n }\n\n async advanceScopeCreateAuthorizationRevision(\n scopeInput: PersistedEditableArtifactScope,\n expectedRevisionInput: number,\n nextRevisionInput: number,\n ): Promise<AdvancePersistedEditableArtifactAuthorizationRevisionResult> {\n const scope = validateScope(scopeInput);\n const expectedRevision = validateInteger(\n expectedRevisionInput,\n \"expected scope create authorization revision\",\n 1,\n );\n const nextRevision = validateInteger(\n nextRevisionInput,\n \"next scope create authorization revision\",\n 1,\n );\n if (nextRevision <= expectedRevision) {\n throw new TypeError(\"Next scope create authorization revision must advance\");\n }\n return await withRlsContext(this.db, scope, async (tx) => {\n const rows = await rawRows<{\n applied: boolean;\n authorization_revision: string | number | bigint;\n }>(\n tx,\n sql`select *\n from opengeni_private.advance_editable_artifact_scope_authorization_revision(\n ${scope.accountId}::uuid,\n ${scope.workspaceId}::uuid,\n ${expectedRevision},\n ${nextRevision},\n current_schema()\n )`,\n );\n if (!rows[0]) throw corrupt(\"Scope create authorization head advance returned no result\");\n return Object.freeze({\n applied: rows[0].applied === true,\n authorizationRevision: safeInteger(\n rows[0].authorization_revision,\n \"scope create authorization revision\",\n 1,\n ),\n });\n });\n }\n\n async getArtifact(\n scopeInput: PersistedEditableArtifactScope,\n artifactIdInput: string,\n ): Promise<PersistedEditableArtifact | null> {\n const scope = validateScope(scopeInput);\n const artifactId = validateStableId(artifactIdInput, \"artifact id\");\n return await withRlsContext(this.db, scope, async (tx) => {\n const row = await loadArtifactRow(tx, scope, artifactId, false);\n return row ? artifactFromRow(row) : null;\n });\n }\n\n async readArtifactAtAuthorizationRevision(\n scopeInput: PersistedEditableArtifactScope,\n artifactIdInput: string,\n expectedAuthorizationRevisionInput: number,\n ): Promise<ReadPersistedEditableArtifactAtAuthorizationRevisionResult> {\n const scope = validateScope(scopeInput);\n const artifactId = validateStableId(artifactIdInput, \"artifact id\");\n const expectedAuthorizationRevision = validateInteger(\n expectedAuthorizationRevisionInput,\n \"expected artifact authorization revision\",\n 1,\n );\n return await withRlsContext(\n this.db,\n scope,\n async (tx) => {\n // One MVCC read is the fence: absence and a revision mismatch are kept\n // distinct without a check-then-read race.\n const row = await loadArtifactRow(tx, scope, artifactId, false);\n if (!row) return Object.freeze({ kind: \"result\" as const, artifact: null });\n const artifact = artifactFromRow(row);\n if (artifact.authorizationRevision !== expectedAuthorizationRevision) {\n return Object.freeze({ kind: \"authorization_stale\" as const });\n }\n return Object.freeze({ kind: \"result\" as const, artifact });\n },\n { isolationLevel: \"repeatable read\", accessMode: \"read only\" },\n );\n }\n\n async advanceAuthorizationRevision(\n scopeInput: PersistedEditableArtifactScope,\n artifactIdInput: string,\n expectedRevisionInput: number,\n nextRevisionInput: number,\n ): Promise<AdvancePersistedEditableArtifactAuthorizationRevisionResult> {\n const scope = validateScope(scopeInput);\n const artifactId = validateStableId(artifactIdInput, \"artifact id\");\n const expectedRevision = validateInteger(\n expectedRevisionInput,\n \"expected authorization revision\",\n 0,\n );\n const nextRevision = validateInteger(nextRevisionInput, \"next authorization revision\", 1);\n if (nextRevision <= expectedRevision) {\n throw new TypeError(\"Next authorization revision must advance the expected revision\");\n }\n return await withRlsContext(this.db, scope, async (tx) => {\n const rows = await rawRows<{\n applied: boolean;\n authorization_revision: string | number | bigint | null;\n }>(\n tx,\n sql`select *\n from opengeni_private.advance_editable_artifact_authorization_revision(\n ${scope.accountId}::uuid,\n ${scope.workspaceId}::uuid,\n ${artifactId},\n ${expectedRevision},\n ${nextRevision},\n current_schema()\n )`,\n );\n const row = rows[0];\n if (!row || row.authorization_revision === null) {\n throw new EditableArtifactPersistenceError(\n \"not_found\",\n \"Editable artifact was not found in the requested tenant scope\",\n );\n }\n return Object.freeze({\n applied: row.applied === true,\n authorizationRevision: safeInteger(\n row.authorization_revision,\n \"artifact authorization revision\",\n ),\n });\n });\n }\n\n async readTransactionBasis(\n scopeInput: PersistedEditableArtifactScope,\n artifactIdInput: string,\n request: ReadPersistedEditableArtifactTransactionBasisRequest,\n ): Promise<PersistedEditableArtifactTransactionBasis> {\n const scope = validateScope(scopeInput);\n const artifactId = validateStableId(artifactIdInput, \"artifact id\");\n const actorKey = validateActorKey(request.actorKey).key;\n const clientTransactionId = validateClientTransactionId(request.clientTransactionId);\n const previousLocalTransactionId =\n request.previousLocalTransactionId === null\n ? null\n : validateClientTransactionId(request.previousLocalTransactionId);\n const selectiveUndoOperationIds = parseStableIdArray(\n request.selectiveUndoOperationIds,\n \"undo targets\",\n 10_000,\n );\n return await withRlsContext(\n this.db,\n scope,\n async (tx) => {\n const row = await loadArtifactRow(tx, scope, artifactId, false);\n if (!row) {\n throw new EditableArtifactPersistenceError(\n \"not_found\",\n \"Editable artifact was not found in the requested tenant scope\",\n );\n }\n const unitOfWork = new PostgresEditableArtifactUnitOfWork(tx, artifactFromRow(row));\n const priorReceipt = await unitOfWork.findReceipt(actorKey, clientTransactionId);\n if (priorReceipt) {\n return Object.freeze({ kind: \"existing\" as const, receipt: priorReceipt });\n }\n const predecessor = previousLocalTransactionId\n ? await unitOfWork.findReceipt(actorKey, previousLocalTransactionId)\n : null;\n const undoTargets = await loadUndoBasis(tx, scope, artifactId, selectiveUndoOperationIds);\n const kernelState = await unitOfWork.kernelState();\n return Object.freeze({\n kind: \"basis\" as const,\n artifact: unitOfWork.artifact(),\n predecessor,\n undoTargets,\n kernelState,\n });\n },\n // Every basis member must describe one MVCC snapshot, but no row lock may\n // survive the read. The pure kernel can safely run after this resolves.\n { isolationLevel: \"repeatable read\", accessMode: \"read only\" },\n );\n }\n\n async readCurrentKernelState(\n scopeInput: PersistedEditableArtifactScope,\n artifactIdInput: string,\n expectedAuthorizationRevisionInput: number,\n ): Promise<\n | Readonly<{ kind: \"basis\"; state: PersistedEditableArtifactKernelState }>\n | Readonly<{ kind: \"authorization_stale\" }>\n > {\n const scope = validateScope(scopeInput);\n const artifactId = validateStableId(artifactIdInput, \"artifact id\");\n const expectedAuthorizationRevision = validateInteger(\n expectedAuthorizationRevisionInput,\n \"expected compaction authorization revision\",\n 1,\n );\n return await withRlsContext(\n this.db,\n scope,\n async (tx) => {\n const row = await loadArtifactRow(tx, scope, artifactId, false);\n if (!row) {\n throw new EditableArtifactPersistenceError(\n \"not_found\",\n \"Editable artifact was not found in the requested tenant scope\",\n );\n }\n const artifact = artifactFromRow(row);\n if (artifact.authorizationRevision !== expectedAuthorizationRevision) {\n return Object.freeze({ kind: \"authorization_stale\" as const });\n }\n const unitOfWork = new PostgresEditableArtifactUnitOfWork(tx, artifact);\n return Object.freeze({ kind: \"basis\" as const, state: await unitOfWork.kernelState() });\n },\n { isolationLevel: \"repeatable read\", accessMode: \"read only\" },\n );\n }\n\n async tryCommitAppliedTransaction(\n request: TryCommitPersistedEditableArtifactTransactionRequest,\n ): Promise<TryCommitPersistedEditableArtifactTransactionResult> {\n const scope = validateScope(request.scope);\n const artifactId = validateStableId(request.artifactId, \"artifact id\");\n if (request.expectedLifecycle !== \"active\") {\n throw new TypeError(\"Optimistic artifact commit requires the active lifecycle\");\n }\n const actorKey = validateActorKey(request.actorKey).key;\n const clientTransactionId = validateClientTransactionId(request.clientTransactionId);\n const requestHash = validateHash(request.requestHash, \"request hash\");\n const authorizationActor = validateLiveTicketActor(request.authorizationActor);\n if (persistedEditableArtifactActorKey(authorizationActor) !== actorKey) {\n throw new TypeError(\"Artifact commit authority does not match its actor key\");\n }\n const expectedAuthorizationRevision = validateInteger(\n request.expectedAuthorizationRevision,\n \"expected authorization revision\",\n 0,\n );\n const expectedUndoTargets = parseStableIdArray(\n request.expectedUnclaimedUndoTargets,\n \"expected unclaimed undo targets\",\n 10_000,\n );\n const expectedPredecessor = validateExpectedPredecessor(request.expectedPredecessor);\n if (\n request.receipt.scope.accountId !== scope.accountId ||\n request.receipt.scope.workspaceId !== scope.workspaceId ||\n request.receipt.artifactId !== artifactId ||\n request.receipt.actorKey !== actorKey ||\n request.receipt.clientTransactionId !== clientTransactionId ||\n request.receipt.requestHash !== requestHash ||\n (request.receipt.modality === \"spreadsheet\"\n ? !sameStringArray(request.receipt.selectiveUndoOperationIds, expectedUndoTargets)\n : expectedUndoTargets.length !== 0) ||\n (expectedPredecessor === null) !== (request.receipt.previousLocalTransactionId === null) ||\n (expectedPredecessor !== null &&\n request.receipt.previousLocalTransactionId !== expectedPredecessor.clientTransactionId)\n ) {\n throw new TypeError(\"Optimistic commit preconditions do not match its durable receipt\");\n }\n if (expectedPredecessor && expectedPredecessor.actorKey !== actorKey) {\n throw new TypeError(\"Optimistic predecessor authority does not match the durable receipt\");\n }\n // Own every mutable byte buffer and nested collection before the first\n // await. The caller may retain its candidate while this transaction waits;\n // later mutation must never change what was validated or persisted.\n const candidate: TryCommitPersistedEditableArtifactTransactionRequest = Object.freeze({\n ...request,\n scope,\n artifactId,\n actorKey,\n clientTransactionId,\n requestHash,\n expectedAuthorizationRevision,\n authorizationActor,\n expectedPredecessor,\n expectedUnclaimedUndoTargets: expectedUndoTargets,\n receipt: cloneReceipt(request.receipt),\n operations: Object.freeze(request.operations.map(cloneOperation)),\n committedTransaction: cloneCommittedTransaction(request.committedTransaction),\n outbox: cloneOutbox(request.outbox),\n });\n validateOwnedCommitCandidate(candidate);\n\n return await withRlsContext(\n this.db,\n scope,\n async (tx) => {\n const row = await loadArtifactRow(tx, scope, artifactId, true);\n if (!row) {\n throw new EditableArtifactPersistenceError(\n \"not_found\",\n \"Editable artifact was not found in the requested tenant scope\",\n );\n }\n\n const authorization = await transactionallyAuthorizeEditableArtifactActor(tx, {\n scope,\n artifactId,\n actor: authorizationActor,\n permission: \"edit\",\n });\n if (!authorization.allowed) {\n return Object.freeze({ kind: \"stale\" as const });\n }\n\n // Another candidate may have committed while this transaction waited\n // for the aggregate lock. Recheck idempotency before judging the head.\n const priorAfterLock = await loadReceipt(\n tx,\n scope,\n artifactId,\n actorKey,\n clientTransactionId,\n );\n if (priorAfterLock) {\n return replayResult(priorAfterLock);\n }\n\n const artifact = artifactFromRow(row);\n if (\n authorization.revision !== candidate.expectedAuthorizationRevision ||\n artifact.lifecycle !== candidate.expectedLifecycle ||\n artifact.authorizationRevision !== candidate.expectedAuthorizationRevision ||\n artifact.headSequence !== candidate.expectedHeadSequence\n ) {\n return Object.freeze({ kind: \"stale\" as const });\n }\n\n const unitOfWork = new PostgresEditableArtifactUnitOfWork(tx, artifact);\n if (expectedPredecessor) {\n const predecessor = await unitOfWork.findReceipt(\n expectedPredecessor.actorKey,\n expectedPredecessor.clientTransactionId,\n );\n if (!predecessorMatches(predecessor, expectedPredecessor)) {\n return Object.freeze({ kind: \"stale\" as const });\n }\n }\n if (\n expectedUndoTargets.length > 0 &&\n (await anyUndoTargetClaimed(tx, scope, artifactId, expectedUndoTargets))\n ) {\n return Object.freeze({ kind: \"stale\" as const });\n }\n\n await unitOfWork.commitAppliedTransaction(candidate);\n return Object.freeze({\n kind: \"committed\" as const,\n receipt: cloneReceipt(candidate.receipt),\n });\n },\n { isolationLevel: \"read committed\", accessMode: \"read write\" },\n );\n }\n\n async withSnapshotPublicationLock<T>(\n scopeInput: PersistedEditableArtifactScope,\n artifactIdInput: string,\n callback: (unitOfWork: PersistedEditableArtifactSnapshotPublicationUnitOfWork) => Promise<T>,\n ): Promise<T> {\n const scope = validateScope(scopeInput);\n const artifactId = validateStableId(artifactIdInput, \"artifact id\");\n return await withRlsContext(\n this.db,\n scope,\n async (tx) => {\n const row = await loadArtifactRow(tx, scope, artifactId, true);\n if (!row) {\n throw new EditableArtifactPersistenceError(\n \"not_found\",\n \"Editable artifact was not found in the requested tenant scope\",\n );\n }\n const unitOfWork = new PostgresEditableArtifactUnitOfWork(tx, artifactFromRow(row));\n let open = true;\n const assertOpen = (): void => {\n if (!open) throw conflict(\"Snapshot publication transaction is already closed\");\n };\n const snapshotUnitOfWork: PersistedEditableArtifactSnapshotPublicationUnitOfWork =\n Object.freeze({\n artifact: () => {\n assertOpen();\n return unitOfWork.artifact();\n },\n checkpoint: (headSequence: number) => {\n assertOpen();\n return unitOfWork.checkpoint(headSequence);\n },\n findSnapshot: (snapshotId: string) => {\n assertOpen();\n return unitOfWork.findSnapshot(snapshotId);\n },\n commitSnapshot: (input: CommitPersistedEditableArtifactSnapshot) => {\n assertOpen();\n return unitOfWork.commitSnapshot(input);\n },\n });\n try {\n return await callback(snapshotUnitOfWork);\n } finally {\n open = false;\n }\n },\n { isolationLevel: \"read committed\", accessMode: \"read write\" },\n );\n }\n\n async claimLiveOutbox(\n request: ClaimPersistedEditableArtifactLiveOutboxRequest,\n ): Promise<readonly PersistedEditableArtifactLiveOutboxRecord[]> {\n const owner = validateLeaseOwner(request.owner);\n const leaseDurationMs = validateInteger(\n request.leaseDurationMs,\n \"lease duration\",\n 1,\n 86_400_000,\n );\n const limit = validateInteger(request.limit, \"claim limit\", 1, 1_000);\n const rows = await rawRows<OutboxRow>(\n this.db,\n sql`select * from opengeni_private.claim_editable_artifact_live_outbox(\n ${owner}, ${leaseDurationMs}, ${limit}, current_schema()\n )`,\n );\n return Object.freeze(rows.map(outboxFromRow));\n }\n\n async markLiveOutboxPublished(input: {\n outboxId: string;\n owner: string;\n attemptCount: number;\n }): Promise<void> {\n const outboxId = validateStableId(input.outboxId, \"outbox id\");\n const owner = validateLeaseOwner(input.owner);\n const attemptCount = validateInteger(\n input.attemptCount,\n \"outbox fencing attempt\",\n 1,\n 1_000_000,\n );\n const rows = await rawRows<{ applied: boolean }>(\n this.db,\n sql`select opengeni_private.mark_editable_artifact_live_outbox_published(\n ${outboxId}, ${owner}, ${attemptCount}, current_schema()\n ) as applied`,\n );\n if (rows[0]?.applied !== true) throw outboxLeaseConflict();\n }\n\n async renewLiveOutbox(input: {\n outboxId: string;\n owner: string;\n attemptCount: number;\n leaseDurationMs: number;\n }): Promise<void> {\n const outboxId = validateStableId(input.outboxId, \"outbox id\");\n const owner = validateLeaseOwner(input.owner);\n const attemptCount = validateInteger(\n input.attemptCount,\n \"outbox fencing attempt\",\n 1,\n 1_000_000,\n );\n const leaseDurationMs = validateInteger(input.leaseDurationMs, \"lease duration\", 1, 86_400_000);\n const rows = await rawRows<{ applied: boolean }>(\n this.db,\n sql`select opengeni_private.renew_editable_artifact_live_outbox(\n ${outboxId}, ${owner}, ${attemptCount}, ${leaseDurationMs}, current_schema()\n ) as applied`,\n );\n if (rows[0]?.applied !== true) throw outboxLeaseConflict();\n }\n\n async retryLiveOutbox(input: {\n outboxId: string;\n owner: string;\n attemptCount: number;\n retryDelayMs: number;\n errorCode: PersistedEditableArtifactOutboxRetryErrorCode;\n }): Promise<void> {\n const outboxId = validateStableId(input.outboxId, \"outbox id\");\n const owner = validateLeaseOwner(input.owner);\n const attemptCount = validateInteger(\n input.attemptCount,\n \"outbox fencing attempt\",\n 1,\n 1_000_000,\n );\n const retryDelayMs = validateInteger(input.retryDelayMs, \"outbox retry delay\", 1, 86_400_000);\n const validatedErrorCode = validateOutboxRetryErrorCode(input.errorCode);\n const rows = await rawRows<{ applied: boolean }>(\n this.db,\n sql`select opengeni_private.retry_editable_artifact_live_outbox(\n ${outboxId}, ${owner}, ${attemptCount}, ${retryDelayMs}, ${validatedErrorCode}, current_schema()\n ) as applied`,\n );\n if (rows[0]?.applied !== true) throw outboxLeaseConflict();\n }\n\n async deadLetterLiveOutbox(input: {\n outboxId: string;\n owner: string;\n attemptCount: number;\n errorCode: PersistedEditableArtifactOutboxDeadLetterErrorCode;\n }): Promise<void> {\n const outboxId = validateStableId(input.outboxId, \"outbox id\");\n const owner = validateLeaseOwner(input.owner);\n const attemptCount = validateInteger(\n input.attemptCount,\n \"outbox fencing attempt\",\n 1,\n 1_000_000,\n );\n const validatedErrorCode = validateOutboxDeadLetterErrorCode(input.errorCode);\n const rows = await rawRows<{ applied: boolean }>(\n this.db,\n sql`select opengeni_private.dead_letter_editable_artifact_live_outbox(\n ${outboxId}, ${owner}, ${attemptCount}, ${validatedErrorCode}, current_schema()\n ) as applied`,\n );\n if (rows[0]?.applied !== true) throw outboxLeaseConflict();\n }\n\n async releaseLiveOutbox(input: {\n outboxId: string;\n owner: string;\n attemptCount: number;\n }): Promise<void> {\n const outboxId = validateStableId(input.outboxId, \"outbox id\");\n const owner = validateLeaseOwner(input.owner);\n const attemptCount = validateInteger(\n input.attemptCount,\n \"outbox fencing attempt\",\n 1,\n 1_000_000,\n );\n const rows = await rawRows<{ applied: boolean }>(\n this.db,\n sql`select opengeni_private.release_editable_artifact_live_outbox(\n ${outboxId}, ${owner}, ${attemptCount}, current_schema()\n ) as applied`,\n );\n if (rows[0]?.applied !== true) throw outboxLeaseConflict();\n }\n}\n\nexport type PostgresEditableArtifactLiveReadStoreOptions = Readonly<{\n snapshotBytes: PersistedEditableArtifactSnapshotBytesPort;\n replicaLeaseTtlMs?: number;\n}>;\n\n/**\n * Durable OGALV read/ACK adapter. PostgreSQL selects the immutable modality\n * before any canonical transaction bytes are decoded; object storage supplies\n * only bytes for already-authoritative snapshot metadata.\n */\nexport class PostgresEditableArtifactLiveReadStore {\n private readonly replicaLeaseTtlMs: number;\n\n constructor(\n private readonly db: Database,\n private readonly options: PostgresEditableArtifactLiveReadStoreOptions,\n ) {\n this.replicaLeaseTtlMs = validateInteger(\n options.replicaLeaseTtlMs ?? 5 * 60_000,\n \"replica lease ttl\",\n 1_000,\n 86_400_000,\n );\n }\n\n async readBootstrap(input: {\n scope: PersistedEditableArtifactScope;\n artifactId: string;\n resume: PersistedEditableArtifactLiveResume;\n }): Promise<PersistedEditableArtifactLiveBootstrap> {\n const scope = validateScope(input.scope);\n const artifactId = validateStableId(input.artifactId, \"artifact id\");\n const resume = validateLiveResume(input.resume);\n const authority = await withRlsContext(\n this.db,\n scope,\n async (tx) => {\n const current = await loadLiveAuthority(tx, scope, artifactId);\n if (resume.modality !== current.artifact.modality) {\n throw new TypeError(\"Live resume modality differs from its durable artifact\");\n }\n let resumeCheckpoint: PersistedEditableArtifactSequenceCheckpoint | null = null;\n if (\n !resume.requireSnapshot &&\n resume.localCursor !== null &&\n resume.localStateHash !== null &&\n resume.localCursor + 1 >= current.minimumReplaySequence &&\n resume.localCursor <= current.artifact.headSequence\n ) {\n resumeCheckpoint = await loadCheckpoint(tx, scope, artifactId, resume.localCursor);\n }\n const resumeAccepted =\n resumeCheckpoint !== null &&\n resumeCheckpoint.modality === resume.modality &&\n resumeCheckpoint.stateHash === resume.localStateHash &&\n (resume.modality === \"spreadsheet\"\n ? resumeCheckpoint.modality === \"spreadsheet\" &&\n sameFrontier(resumeCheckpoint.causalFrontier, resume.localCausalFrontier)\n : resumeCheckpoint.modality !== \"spreadsheet\" &&\n resumeCheckpoint.nativeRevision === resume.localNativeRevision);\n return Object.freeze({ current, resumeAccepted });\n },\n { isolationLevel: \"repeatable read\", accessMode: \"read only\" },\n );\n\n const snapshot = authority.resumeAccepted\n ? null\n : await this.readVerifiedSnapshotBytes(authority.current.snapshot);\n const resumeSequence = authority.resumeAccepted\n ? resume.localCursor!\n : authority.current.snapshot.coveredHeadSequence;\n const resumeStateHash = authority.resumeAccepted\n ? resume.localStateHash!\n : authority.current.snapshot.stateHash;\n return Object.freeze({\n ...liveHeadFromAuthority(authority.current),\n resumeAccepted: authority.resumeAccepted,\n resumeSequence,\n resumeStateHash,\n snapshot,\n });\n }\n\n async readHead(\n scopeInput: PersistedEditableArtifactScope,\n artifactIdInput: string,\n ): Promise<PersistedEditableArtifactLiveHead> {\n const scope = validateScope(scopeInput);\n const artifactId = validateStableId(artifactIdInput, \"artifact id\");\n return await withRlsContext(\n this.db,\n scope,\n async (tx) => liveHeadFromAuthority(await loadLiveAuthority(tx, scope, artifactId)),\n { isolationLevel: \"repeatable read\", accessMode: \"read only\" },\n );\n }\n\n async readTransactions(input: {\n scope: PersistedEditableArtifactScope;\n artifactId: string;\n after: number;\n through: number;\n maxCount: number;\n maxBytes: number;\n }): Promise<\n Readonly<{\n transactions: readonly PersistedEditableArtifactLiveCommittedTransaction[];\n headSequence: number;\n minimumReplaySequence: number;\n }>\n > {\n const scope = validateScope(input.scope);\n const artifactId = validateStableId(input.artifactId, \"artifact id\");\n const after = validateInteger(input.after, \"live replay cursor\", 0);\n const through = validateInteger(input.through, \"live replay target\", after);\n const maxCount = validateInteger(input.maxCount, \"live replay count\", 1, 10_000);\n const maxBytes = validateInteger(\n input.maxBytes,\n \"live replay bytes\",\n 1,\n EDITABLE_ARTIFACT_KERNEL_TAIL_MAX_BYTES,\n );\n return await withRlsContext(\n this.db,\n scope,\n async (tx) => {\n const authority = await loadLiveAuthority(tx, scope, artifactId);\n if (through > authority.artifact.headSequence) {\n throw corrupt(\"Live replay target is beyond the durable head\");\n }\n const rows = await loadCommittedTransactionRows(\n tx,\n scope,\n artifactId,\n after,\n through,\n maxCount,\n );\n const transactions: PersistedEditableArtifactLiveCommittedTransaction[] = [];\n let byteSize = 0;\n for (const row of rows) {\n const committed = committedTransactionFromRow(row, authority.artifact.modality);\n const nextSize = byteSize + committed.committedTransactionBytes.byteLength;\n if (nextSize > maxBytes) break;\n transactions.push(liveTransactionFromCommitted(committed));\n byteSize = nextSize;\n }\n return Object.freeze({\n transactions: Object.freeze(transactions),\n headSequence: authority.artifact.headSequence,\n minimumReplaySequence: authority.minimumReplaySequence,\n });\n },\n { isolationLevel: \"repeatable read\", accessMode: \"read only\" },\n );\n }\n\n async readCommittedTransaction(input: {\n scope: PersistedEditableArtifactScope;\n artifactId: string;\n transactionId: string;\n }): Promise<PersistedEditableArtifactLiveCommittedTransaction | null> {\n const scope = validateScope(input.scope);\n const artifactId = validateStableId(input.artifactId, \"artifact id\");\n const transactionId = validateStableId(input.transactionId, \"transaction id\");\n return await withRlsContext(\n this.db,\n scope,\n async (tx) => {\n const artifactRow = await loadArtifactRow(tx, scope, artifactId, false);\n if (!artifactRow) return null;\n const artifact = artifactFromRow(artifactRow);\n const rows = await loadCommittedTransactionRowsById(tx, scope, artifactId, transactionId);\n return rows[0]\n ? liveTransactionFromCommitted(committedTransactionFromRow(rows[0], artifact.modality))\n : null;\n },\n { isolationLevel: \"repeatable read\", accessMode: \"read only\" },\n );\n }\n\n async acknowledgeReplica(input: {\n scope: PersistedEditableArtifactScope;\n artifactId: string;\n replicaId: string;\n actorKey: string;\n streamEpoch: string;\n sequence: number;\n stateHash: string;\n }): Promise<void> {\n const scope = validateScope(input.scope);\n const artifactId = validateStableId(input.artifactId, \"artifact id\");\n const replicaId = validateReplicaId(input.replicaId);\n const actorKey = validateActorKey(input.actorKey).key;\n validateBoundedText(input.streamEpoch, \"stream epoch\", 512);\n const sequence = validateInteger(input.sequence, \"applied sequence\", 0);\n const stateHash = validateHash(input.stateHash, \"applied state hash\");\n await withRlsContext(\n this.db,\n scope,\n async (tx) => {\n const artifactRow = await loadArtifactRow(tx, scope, artifactId, false);\n if (!artifactRow) {\n throw new EditableArtifactPersistenceError(\n \"not_found\",\n \"Editable artifact was not found in the requested tenant scope\",\n );\n }\n const artifact = artifactFromRow(artifactRow);\n const checkpoint = await loadCheckpoint(tx, scope, artifactId, sequence);\n if (\n !checkpoint ||\n checkpoint.modality !== artifact.modality ||\n checkpoint.stateHash !== stateHash\n ) {\n throw corrupt(\"Replica ACK differs from its durable checkpoint\");\n }\n const frontierSql =\n checkpoint.modality === \"spreadsheet\"\n ? sql`${json(checkpoint.causalFrontier)}::jsonb`\n : sql`null`;\n const nativeRevision =\n checkpoint.modality === \"spreadsheet\" ? null : checkpoint.nativeRevision;\n const applied = await rawRows<{ applied_head_sequence: string | number | bigint }>(\n tx,\n sql`\n insert into editable_artifact_replica_leases (\n account_id, workspace_id, artifact_id, modality, replica_id, actor_key,\n applied_head_sequence, causal_frontier, native_revision,\n lease_expires_at, last_seen_at, revoked_at\n ) values (\n ${scope.accountId}::uuid, ${scope.workspaceId}::uuid, ${artifactId},\n ${artifact.modality}, ${replicaId}, ${actorKey}, ${sequence},\n ${frontierSql}, ${nativeRevision},\n clock_timestamp() + (${this.replicaLeaseTtlMs} * interval '1 millisecond'),\n clock_timestamp(), null\n )\n on conflict (account_id, workspace_id, artifact_id, replica_id)\n do update set\n applied_head_sequence = excluded.applied_head_sequence,\n causal_frontier = excluded.causal_frontier,\n native_revision = excluded.native_revision,\n lease_expires_at = excluded.lease_expires_at,\n last_seen_at = excluded.last_seen_at\n where editable_artifact_replica_leases.revoked_at is null\n and editable_artifact_replica_leases.actor_key = excluded.actor_key\n and editable_artifact_replica_leases.applied_head_sequence <=\n excluded.applied_head_sequence\n returning applied_head_sequence\n `,\n );\n if (applied.length !== 1) {\n throw conflict(\"Replica ACK did not advance its durable lease\");\n }\n },\n { isolationLevel: \"read committed\", accessMode: \"read write\" },\n );\n }\n\n private async readVerifiedSnapshotBytes(\n snapshot: PersistedEditableArtifactSnapshotMetadata,\n ): Promise<PersistedEditableArtifactLiveSnapshot> {\n const bytes = await this.options.snapshotBytes.readSnapshotBytes(snapshot);\n if (!(bytes instanceof Uint8Array)) {\n throw corrupt(\"Snapshot byte reader returned a non-binary value\");\n }\n if (bytes.byteLength !== snapshot.byteSize) {\n throw corrupt(\"Snapshot bytes differ from durable byte size\");\n }\n const digest = `sha256:${createHash(\"sha256\").update(bytes).digest(\"hex\")}`;\n if (digest !== snapshot.contentHash) {\n throw corrupt(\"Snapshot bytes differ from durable content hash\");\n }\n const owned = bytes.slice();\n const common = {\n artifactId: snapshot.artifactId,\n sequence: snapshot.coveredHeadSequence,\n stateHash: snapshot.stateHash,\n digest: snapshot.contentHash,\n kernelVersion: snapshot.kernelVersion,\n modelSchemaVersion: snapshot.modelSchemaVersion,\n bytes: owned,\n } as const;\n return snapshot.modality === \"spreadsheet\"\n ? Object.freeze({\n ...common,\n modality: snapshot.modality,\n causalFrontier: snapshot.coveredCausalFrontier,\n operationProtocolVersion: snapshot.operationProtocolVersion,\n snapshotVersion: snapshot.crdtStateVersion,\n })\n : Object.freeze({\n ...common,\n modality: snapshot.modality,\n nativeRevision: snapshot.nativeRevision,\n });\n }\n}\n\nclass PostgresEditableArtifactUnitOfWork implements PersistedEditableArtifactUnitOfWork {\n private committed = false;\n\n constructor(\n private readonly tx: Database,\n private currentArtifact: PersistedEditableArtifact,\n ) {}\n\n artifact(): PersistedEditableArtifact {\n return cloneArtifact(this.currentArtifact);\n }\n\n async findReceipt(\n actorKeyInput: string,\n clientTransactionIdInput: string,\n ): Promise<PersistedEditableArtifactReceipt | null> {\n const actorKey = validateActorKey(actorKeyInput).key;\n const clientTransactionId = validateClientTransactionId(clientTransactionIdInput);\n return await loadReceipt(\n this.tx,\n this.currentArtifact.scope,\n this.currentArtifact.id,\n actorKey,\n clientTransactionId,\n );\n }\n\n async findOperation(\n operationIdInput: string,\n ): Promise<PersistedEditableArtifactOperationRecord | null> {\n const operationId = validateStableId(operationIdInput, \"operation id\");\n const rows = await rawRows<OperationRow>(\n this.tx,\n sql`select account_id, workspace_id, artifact_id, transaction_id,\n operation_id, operation_index, sequence, dot_replica_id, dot_counter,\n actor_key, created_at\n from editable_artifact_operations\n where account_id = ${this.currentArtifact.scope.accountId}::uuid\n and workspace_id = ${this.currentArtifact.scope.workspaceId}::uuid\n and artifact_id = ${this.currentArtifact.id}\n and operation_id = ${operationId}\n limit 1`,\n );\n return rows[0] ? operationFromRow(rows[0]) : null;\n }\n\n async findUndoClaim(operationIdInput: string): Promise<string | null> {\n const operationId = validateStableId(operationIdInput, \"operation id\");\n const rows = await rawRows<{ claiming_transaction_id: string }>(\n this.tx,\n sql`\n select claiming_transaction_id\n from editable_artifact_undo_claims\n where account_id = ${this.currentArtifact.scope.accountId}::uuid\n and workspace_id = ${this.currentArtifact.scope.workspaceId}::uuid\n and artifact_id = ${this.currentArtifact.id}\n and target_operation_id = ${operationId}\n limit 1`,\n );\n return rows[0]\n ? validateStableId(rows[0].claiming_transaction_id, \"claiming transaction id\")\n : null;\n }\n\n async kernelState(): Promise<PersistedEditableArtifactKernelState> {\n const snapshot = this.currentArtifact.currentSnapshotId\n ? await this.findSnapshot(this.currentArtifact.currentSnapshotId)\n : null;\n if (this.currentArtifact.currentSnapshotId && !snapshot) {\n throw corrupt(\"Artifact current snapshot pointer has no immutable snapshot\");\n }\n if (snapshot && snapshot.modality !== this.currentArtifact.modality) {\n throw corrupt(\"Artifact current snapshot modality differs from its durable artifact\");\n }\n const coveredSequence = snapshot?.coveredHeadSequence ?? 0;\n const expectedSequenceSpan = this.currentArtifact.headSequence - coveredSequence;\n if (expectedSequenceSpan < 0) throw corrupt(\"Snapshot coverage is beyond artifact head\");\n const [tailFacts] = await rawRows<{\n transaction_count: string | number | bigint;\n operation_count: string | number | bigint;\n byte_size: string | number | bigint;\n }>(\n this.tx,\n sql`select\n count(*) as transaction_count,\n coalesce(sum(operation_count), 0) as operation_count,\n coalesce(sum(committed_transaction_byte_size), 0) as byte_size\n from editable_artifact_transactions\n where account_id = ${this.currentArtifact.scope.accountId}::uuid\n and workspace_id = ${this.currentArtifact.scope.workspaceId}::uuid\n and artifact_id = ${this.currentArtifact.id}\n and sequence_start > ${coveredSequence}`,\n );\n const storedTransactionCount = safeInteger(\n tailFacts?.transaction_count ?? 0,\n \"stored committed transaction tail count\",\n );\n const storedOperationCount = safeInteger(\n tailFacts?.operation_count ?? 0,\n \"stored committed transaction operation count\",\n );\n const storedByteSize = safeInteger(\n tailFacts?.byte_size ?? 0,\n \"stored committed transaction tail bytes\",\n );\n if (\n (this.currentArtifact.modality === \"spreadsheet\" &&\n storedOperationCount !== expectedSequenceSpan) ||\n (this.currentArtifact.modality !== \"spreadsheet\" &&\n (storedOperationCount !== 0 || storedTransactionCount !== expectedSequenceSpan))\n ) {\n throw corrupt(\"Committed transaction tail does not match the authoritative head\");\n }\n if (storedTransactionCount > EDITABLE_ARTIFACT_KERNEL_TAIL_MAX_TRANSACTIONS) {\n throw new EditableArtifactPersistenceError(\n \"history_limit\",\n \"Artifact committed transaction tail exceeds its replay count limit; publish a snapshot\",\n );\n }\n if (storedByteSize > EDITABLE_ARTIFACT_KERNEL_TAIL_MAX_BYTES) {\n throw new EditableArtifactPersistenceError(\n \"history_limit\",\n \"Artifact committed transaction tail exceeds its byte replay limit; publish a snapshot\",\n );\n }\n const rows = await rawRows<CommittedTransactionRow>(\n this.tx,\n sql`select account_id, workspace_id, artifact_id, id, request_hash,\n modality, sequence_start, sequence_end, prior_state_hash, state_hash,\n replica_id, replica_counter, resolved_causal_base, resulting_causal_frontier,\n operation_count, operation_ids, operation_protocol_version, model_schema_version,\n commit_protocol_version, prior_native_revision, native_revision, command_count,\n native_receipt_byte_size, native_receipt_hash, native_receipt_bytes,\n kernel_version, committed_transaction_byte_size, committed_transaction_hash,\n committed_transaction_bytes, committed_at\n from editable_artifact_transactions\n where account_id = ${this.currentArtifact.scope.accountId}::uuid\n and workspace_id = ${this.currentArtifact.scope.workspaceId}::uuid\n and artifact_id = ${this.currentArtifact.id}\n and sequence_start > ${coveredSequence}\n order by sequence_start\n limit ${EDITABLE_ARTIFACT_KERNEL_TAIL_MAX_TRANSACTIONS + 1}`,\n );\n if (rows.length !== storedTransactionCount) {\n throw corrupt(\"Committed transaction tail changed during its repeatable read\");\n }\n const committedTransactionTail = rows.map((row) =>\n committedTransactionFromRow(row, this.currentArtifact.modality),\n );\n let expectedSequence = coveredSequence + 1;\n let reconstructedBytes = 0;\n for (const transaction of committedTransactionTail) {\n if (transaction.sequenceStart !== expectedSequence) {\n throw corrupt(\"Committed transaction history contains a sequence gap\");\n }\n expectedSequence = transaction.sequenceEnd + 1;\n reconstructedBytes += transaction.committedTransactionBytes.byteLength;\n }\n if (expectedSequence !== this.currentArtifact.headSequence + 1) {\n throw corrupt(\"Committed transaction history does not end at the artifact head\");\n }\n if (reconstructedBytes !== storedByteSize) {\n throw corrupt(\"Committed transaction tail byte preflight disagrees with reconstruction\");\n }\n if (this.currentArtifact.modality === \"spreadsheet\") {\n if (snapshot?.modality !== undefined && snapshot.modality !== \"spreadsheet\") {\n throw corrupt(\"Spreadsheet artifact has a serialized snapshot\");\n }\n if (committedTransactionTail.some((entry) => entry.modality !== \"spreadsheet\")) {\n throw corrupt(\"Spreadsheet artifact has a serialized transaction tail\");\n }\n return Object.freeze({\n modality: \"spreadsheet\" as const,\n artifact: cloneArtifact(this.currentArtifact),\n snapshot: (snapshot ?? null) as Extract<\n PersistedEditableArtifactSnapshotMetadata,\n { modality: \"spreadsheet\" }\n > | null,\n tailTransactionCount: storedTransactionCount,\n tailByteSize: storedByteSize,\n committedTransactionTail: Object.freeze(\n committedTransactionTail as Extract<\n PersistedEditableArtifactCommittedTransactionRecord,\n { modality: \"spreadsheet\" }\n >[],\n ),\n });\n }\n if (\n snapshot?.modality === \"spreadsheet\" ||\n committedTransactionTail.some((entry) => entry.modality !== this.currentArtifact.modality)\n ) {\n throw corrupt(\"Serialized artifact history contains a cross-modality record\");\n }\n return Object.freeze({\n modality: this.currentArtifact.modality,\n artifact: cloneArtifact(this.currentArtifact),\n snapshot: (snapshot ?? null) as Extract<\n PersistedEditableArtifactSnapshotMetadata,\n { modality: \"document\" | \"presentation\" }\n > | null,\n tailTransactionCount: storedTransactionCount,\n tailByteSize: storedByteSize,\n baseNativeRevision: snapshot?.nativeRevision ?? 0,\n committedTransactionTail: Object.freeze(\n committedTransactionTail as Extract<\n PersistedEditableArtifactCommittedTransactionRecord,\n { modality: \"document\" | \"presentation\" }\n >[],\n ),\n });\n }\n\n async checkpoint(\n headSequenceInput: number,\n ): Promise<PersistedEditableArtifactSequenceCheckpoint | null> {\n const headSequence = validateInteger(\n headSequenceInput,\n \"checkpoint sequence\",\n 0,\n Number.MAX_SAFE_INTEGER,\n );\n const rows = await rawRows<{\n head_sequence: string | number | bigint;\n modality: string;\n causal_frontier: unknown | null;\n native_revision: string | number | bigint | null;\n state_hash: string;\n }>(\n this.tx,\n sql`\n select head_sequence, modality, causal_frontier, native_revision, state_hash\n from editable_artifact_sequence_checkpoints\n where account_id = ${this.currentArtifact.scope.accountId}::uuid\n and workspace_id = ${this.currentArtifact.scope.workspaceId}::uuid\n and artifact_id = ${this.currentArtifact.id}\n and head_sequence = ${headSequence}\n limit 1`,\n );\n if (!rows[0]) return null;\n const row = rows[0];\n if (row.modality !== this.currentArtifact.modality) {\n throw corrupt(\"Checkpoint modality differs from its durable artifact\");\n }\n const common = {\n modality: row.modality,\n headSequence: safeInteger(row.head_sequence, \"checkpoint sequence\"),\n stateHash: validateHash(row.state_hash, \"checkpoint state hash\"),\n } as const;\n return row.modality === \"spreadsheet\"\n ? Object.freeze({\n ...common,\n modality: \"spreadsheet\" as const,\n causalFrontier: parseFrontier(row.causal_frontier),\n })\n : Object.freeze({\n ...common,\n modality: serializedModality(row.modality, \"checkpoint modality\"),\n nativeRevision: safeInteger(row.native_revision, \"checkpoint native revision\"),\n });\n }\n\n async findSnapshot(\n snapshotIdInput: string,\n ): Promise<PersistedEditableArtifactSnapshotMetadata | null> {\n const snapshotId = validateStableId(snapshotIdInput, \"snapshot id\");\n return await loadSnapshotMetadata(\n this.tx,\n this.currentArtifact.scope,\n this.currentArtifact.id,\n snapshotId,\n );\n }\n\n async commitAppliedTransaction(input: CommitPersistedEditableArtifactTransaction): Promise<void> {\n this.assertUncommitted();\n const intentBytes = validateAppliedCommit(this.currentArtifact, input);\n const receipt = input.receipt;\n const committedTransaction = input.committedTransaction;\n if (committedTransaction.modality !== receipt.modality) {\n throw new TypeError(\"Committed transaction modality differs from its receipt\");\n }\n const authority = validateActorKey(receipt.actorKey);\n const replicaId = receipt.replicaId;\n if (\n receipt.modality === \"spreadsheet\" &&\n input.operations.some((operation) => operation.dot.replicaId !== replicaId)\n ) {\n throw new TypeError(\"One transaction may advance exactly one replica namespace\");\n }\n if (receipt.previousLocalTransactionId === null) {\n if (receipt.replicaCounter !== 1) {\n throw new TypeError(\"A replica's first transaction must reserve counter one\");\n }\n if (\n receipt.modality === \"spreadsheet\" &&\n !sameFrontier(receipt.resolvedCausalBase, receipt.causalBase)\n ) {\n throw new TypeError(\"First replica transaction must not invent a resolved predecessor\");\n }\n } else {\n const predecessor = await this.findReceipt(\n receipt.actorKey,\n receipt.previousLocalTransactionId,\n );\n if (\n !predecessor ||\n predecessor.replicaId !== receipt.replicaId ||\n predecessor.replicaCounter + 1 !== receipt.replicaCounter\n ) {\n throw conflict(\"Previous local transaction does not match the replica counter chain\");\n }\n if (predecessor.modality !== receipt.modality) {\n throw conflict(\"Previous local transaction belongs to another artifact modality\");\n }\n if (receipt.modality === \"spreadsheet\") {\n if (predecessor.modality !== \"spreadsheet\") {\n throw conflict(\"Spreadsheet predecessor belongs to another modality\");\n }\n const expectedResolvedBase = mergeFrontiers(\n receipt.causalBase,\n predecessor.resolvedCausalBase,\n [\n {\n replicaId: predecessor.replicaId,\n counter: predecessor.replicaCounter,\n },\n ],\n );\n if (!sameFrontier(receipt.resolvedCausalBase, expectedResolvedBase)) {\n throw new TypeError(\"Resolved causal base does not exactly include its predecessor dot\");\n }\n }\n }\n validateTransactionOutbox(input.outbox, receipt);\n const causalBase =\n receipt.modality === \"spreadsheet\" ? parseFrontier(receipt.causalBase) : null;\n const resolvedCausalBase =\n receipt.modality === \"spreadsheet\" ? parseFrontier(receipt.resolvedCausalBase) : null;\n const resultingCausalFrontier =\n receipt.modality === \"spreadsheet\" ? parseFrontier(receipt.resultingCausalFrontier) : null;\n const selectiveUndoOperationIds =\n receipt.modality === \"spreadsheet\"\n ? parseStableIdArray(receipt.selectiveUndoOperationIds, \"undo targets\", 10_000)\n : null;\n const causalBaseSql = causalBase === null ? sql`null` : sql`${json(causalBase)}::jsonb`;\n const resolvedCausalBaseSql =\n resolvedCausalBase === null ? sql`null` : sql`${json(resolvedCausalBase)}::jsonb`;\n const resultingCausalFrontierSql =\n resultingCausalFrontier === null ? sql`null` : sql`${json(resultingCausalFrontier)}::jsonb`;\n const operationIdsSql =\n committedTransaction.modality === \"spreadsheet\"\n ? sql`${json(committedTransaction.operationIds)}::jsonb`\n : sql`null`;\n const selectiveUndoSql =\n selectiveUndoOperationIds === null\n ? sql`null`\n : sql`${json(selectiveUndoOperationIds)}::jsonb`;\n let persistedUpdatedAt = receipt.committedAt;\n try {\n await this.tx.execute(sql`\n insert into editable_artifact_transactions (\n account_id, workspace_id, artifact_id, id, modality, parent_head_sequence,\n client_transaction_id, request_hash, sequence_start, sequence_end,\n prior_state_hash,\n intent_hash, intent_byte_size, intent_bytes,\n replica_counter, previous_local_transaction_id,\n causal_base, resolved_causal_base, resulting_causal_frontier,\n state_hash, operation_count, operation_ids,\n selective_undo_targets, intent_envelope_version, intent_protocol_version,\n command_protocol_version,\n actor_kind, actor_subject_id, actor_key,\n replica_id, agent_session_id, agent_turn_id, agent_attempt_id,\n agent_generation, service_name, kernel_version, model_schema_version,\n operation_protocol_version, commit_protocol_version,\n prior_native_revision, native_revision, command_count,\n native_receipt_byte_size, native_receipt_hash, native_receipt_bytes,\n committed_transaction_byte_size,\n committed_transaction_hash, committed_transaction_bytes, committed_at\n ) values (\n ${receipt.scope.accountId}::uuid, ${receipt.scope.workspaceId}::uuid,\n ${receipt.artifactId}, ${input.serverTransactionId}, ${receipt.modality},\n ${input.expectedHeadSequence},\n ${receipt.clientTransactionId}, ${receipt.requestHash}, ${receipt.sequenceStart},\n ${receipt.sequenceEnd}, ${receipt.priorStateHash}, ${receipt.requestHash},\n ${intentBytes.byteLength},\n ${intentBytes}, ${receipt.replicaCounter},\n ${receipt.previousLocalTransactionId}, ${causalBaseSql},\n ${resolvedCausalBaseSql},\n ${resultingCausalFrontierSql}, ${receipt.stateHash},\n ${receipt.modality === \"spreadsheet\" ? receipt.operationCount : null},\n ${operationIdsSql}, ${selectiveUndoSql},\n ${receipt.intentEnvelopeVersion}, ${receipt.intentProtocolVersion},\n ${receipt.commandProtocolVersion},\n ${authority.kind}, ${authority.subjectId}, ${authority.key}, ${replicaId},\n ${authority.kind === \"agent\" ? authority.sessionId : null},\n ${authority.kind === \"agent\" ? authority.turnId : null},\n ${authority.kind === \"agent\" ? authority.attemptId : null},\n ${authority.kind === \"agent\" ? authority.generation : null},\n ${authority.kind === \"service\" ? authority.service : null},\n ${receipt.kernelVersion}, ${receipt.modelSchemaVersion},\n ${receipt.modality === \"spreadsheet\" ? receipt.operationProtocolVersion : null},\n ${receipt.modality === \"spreadsheet\" ? null : receipt.commitProtocolVersion},\n ${receipt.modality === \"spreadsheet\" ? null : receipt.priorNativeRevision},\n ${receipt.modality === \"spreadsheet\" ? null : receipt.nativeRevision},\n ${receipt.modality === \"spreadsheet\" ? null : receipt.commandCount},\n ${\n committedTransaction.modality === \"spreadsheet\"\n ? null\n : committedTransaction.nativeReceiptBytes.byteLength\n },\n ${\n committedTransaction.modality === \"spreadsheet\"\n ? null\n : `sha256:${createHash(\"sha256\")\n .update(committedTransaction.nativeReceiptBytes)\n .digest(\"hex\")}`\n },\n ${\n committedTransaction.modality === \"spreadsheet\"\n ? null\n : committedTransaction.nativeReceiptBytes\n },\n ${committedTransaction.committedTransactionBytes.byteLength},\n ${`sha256:${createHash(\"sha256\")\n .update(committedTransaction.committedTransactionBytes)\n .digest(\"hex\")}`},\n ${committedTransaction.committedTransactionBytes}, ${receipt.committedAt}\n )`);\n await this.tx.execute(sql`\n insert into editable_artifact_idempotency_receipts (\n account_id, workspace_id, id, artifact_id, operation_kind,\n authority_key, idempotency_key, request_hash, resource_type,\n resource_id, server_transaction_id, result, created_at\n ) values (\n ${receipt.scope.accountId}::uuid, ${receipt.scope.workspaceId}::uuid,\n ${receipt.receiptId}, ${receipt.artifactId}, 'edit', ${receipt.actorKey},\n ${receipt.clientTransactionId}, ${receipt.requestHash}, 'transaction',\n ${receipt.serverTransactionId}, ${receipt.serverTransactionId},\n '{\"schemaVersion\":1}'::jsonb,\n ${receipt.committedAt}\n )`);\n if (receipt.modality === \"spreadsheet\") {\n await this.insertOperations(input.operations);\n await this.insertUndoClaims(receipt);\n }\n await this.tx.execute(sql`\n insert into editable_artifact_sequence_checkpoints (\n account_id, workspace_id, artifact_id, head_sequence,\n modality, causal_frontier, native_revision, state_hash,\n transaction_id, created_at\n ) values (\n ${receipt.scope.accountId}::uuid, ${receipt.scope.workspaceId}::uuid,\n ${receipt.artifactId}, ${receipt.sequenceEnd}, ${receipt.modality},\n ${resultingCausalFrontierSql},\n ${receipt.modality === \"spreadsheet\" ? null : receipt.nativeRevision},\n ${receipt.stateHash},\n ${receipt.serverTransactionId}, ${receipt.committedAt}\n )`);\n await this.insertOutbox(input.outbox);\n const updated = await rawRows<{ id: string; updated_at: Date | string }>(\n this.tx,\n sql`\n update editable_artifacts\n set head_sequence = ${receipt.sequenceEnd},\n causal_frontier = ${resultingCausalFrontierSql},\n state_hash = ${receipt.stateHash},\n updated_at = greatest(updated_at, ${receipt.committedAt}::timestamptz)\n where account_id = ${receipt.scope.accountId}::uuid\n and workspace_id = ${receipt.scope.workspaceId}::uuid\n and id = ${receipt.artifactId}\n and head_sequence = ${input.expectedHeadSequence}\n returning id, updated_at`,\n );\n if (updated.length !== 1) throw conflict(\"Artifact head changed during locked commit\");\n persistedUpdatedAt = iso(updated[0]!.updated_at, \"artifact update time\");\n } catch (error) {\n throw mapPersistenceError(error, \"Editable artifact transaction commit failed\");\n }\n this.currentArtifact =\n receipt.modality === \"spreadsheet\" && this.currentArtifact.modality === \"spreadsheet\"\n ? Object.freeze({\n ...this.currentArtifact,\n headSequence: receipt.sequenceEnd,\n causalFrontier: cloneFrontier(receipt.resultingCausalFrontier),\n stateHash: receipt.stateHash,\n updatedAt: persistedUpdatedAt,\n })\n : Object.freeze({\n ...this.currentArtifact,\n headSequence: receipt.sequenceEnd,\n stateHash: receipt.stateHash,\n updatedAt: persistedUpdatedAt,\n });\n this.committed = true;\n }\n\n async commitSnapshot(\n input: CommitPersistedEditableArtifactSnapshot,\n ): Promise<CommitPersistedEditableArtifactSnapshotResult> {\n this.assertUncommitted();\n const candidate = ownSnapshotCommit(input);\n validateSnapshotCommit(this.currentArtifact, candidate);\n const snapshot = candidate.snapshot;\n const checkpoint = await this.checkpoint(snapshot.coveredHeadSequence);\n if (\n !checkpoint ||\n checkpoint.modality !== snapshot.modality ||\n checkpoint.stateHash !== snapshot.stateHash ||\n (checkpoint.modality === \"spreadsheet\" && snapshot.modality === \"spreadsheet\"\n ? !sameFrontier(checkpoint.causalFrontier, snapshot.coveredCausalFrontier)\n : checkpoint.modality !== \"spreadsheet\" && snapshot.modality !== \"spreadsheet\"\n ? checkpoint.nativeRevision !== snapshot.nativeRevision\n : true)\n ) {\n throw conflict(\"Snapshot does not match an authoritative transaction boundary\");\n }\n if (this.currentArtifact.currentSnapshotId) {\n const current = await this.findSnapshot(this.currentArtifact.currentSnapshotId);\n if (!current) throw corrupt(\"Current snapshot pointer has no immutable metadata\");\n if (current.modality !== snapshot.modality) {\n throw corrupt(\"Current and candidate snapshots have different modalities\");\n }\n if (snapshot.coveredHeadSequence <= current.coveredHeadSequence) {\n throw conflict(\"Snapshot publication must advance authoritative coverage\");\n }\n }\n validateSnapshotOutbox(candidate.outbox, snapshot);\n const authorization = await transactionallyAuthorizeEditableArtifactActor(this.tx, {\n scope: this.currentArtifact.scope,\n artifactId: this.currentArtifact.id,\n actor: candidate.authorizationActor,\n permission: candidate.authorizationPermission ?? \"manage\",\n });\n if (\n !authorization.allowed ||\n authorization.revision !== candidate.expectedAuthorizationRevision\n ) {\n return Object.freeze({ kind: \"authorization_stale\" as const });\n }\n let persistedUpdatedAt = snapshot.publishedAt;\n try {\n const blobRefId = await this.ensureSnapshotBlobReference(snapshot);\n await insertSnapshotMetadata(this.tx, snapshot, blobRefId);\n await this.insertOutbox(candidate.outbox);\n const expectedSnapshot = candidate.expectedCurrentSnapshotId;\n const updated = await rawRows<{ id: string; updated_at: Date | string }>(\n this.tx,\n sql`\n update editable_artifacts\n set current_snapshot_id = ${snapshot.snapshotId},\n updated_at = greatest(updated_at, ${snapshot.publishedAt}::timestamptz)\n where account_id = ${snapshot.scope.accountId}::uuid\n and workspace_id = ${snapshot.scope.workspaceId}::uuid\n and id = ${snapshot.artifactId}\n and authorization_revision = ${candidate.expectedAuthorizationRevision}\n and ${\n expectedSnapshot === null\n ? sql`current_snapshot_id is null`\n : sql`current_snapshot_id = ${expectedSnapshot}`\n }\n returning id, updated_at`,\n );\n if (updated.length !== 1) throw conflict(\"Current snapshot changed during locked commit\");\n persistedUpdatedAt = iso(updated[0]!.updated_at, \"artifact update time\");\n } catch (error) {\n throw mapPersistenceError(error, \"Editable artifact snapshot commit failed\");\n }\n this.currentArtifact = Object.freeze({\n ...this.currentArtifact,\n currentSnapshotId: snapshot.snapshotId,\n updatedAt: persistedUpdatedAt,\n });\n this.committed = true;\n return Object.freeze({ kind: \"committed\" as const });\n }\n\n private async insertOperations(\n operations: readonly PersistedEditableArtifactOperationRecord[],\n ): Promise<void> {\n for (let offset = 0; offset < operations.length; offset += 1_000) {\n const values = sql.join(\n operations.slice(offset, offset + 1_000).map((operation, chunkIndex) => {\n const operationIndex = offset + chunkIndex;\n return sql`(\n ${operation.scope.accountId}::uuid, ${operation.scope.workspaceId}::uuid,\n ${operation.artifactId}, ${operation.serverTransactionId},\n ${operation.operationId}, ${operationIndex}, ${operation.sequence},\n ${operation.dot.replicaId}, ${operation.dot.counter},\n ${operation.actorKey}, ${operation.createdAt}\n )`;\n }),\n sql`, `,\n );\n await this.tx.execute(sql`\n insert into editable_artifact_operations (\n account_id, workspace_id, artifact_id, transaction_id,\n operation_id, operation_index, sequence, dot_replica_id,\n dot_counter, actor_key, created_at\n ) values ${values}`);\n }\n }\n\n private async insertUndoClaims(\n receipt: Extract<PersistedEditableArtifactReceipt, { modality: \"spreadsheet\" }>,\n ): Promise<void> {\n for (let offset = 0; offset < receipt.selectiveUndoOperationIds.length; offset += 2_000) {\n const values = sql.join(\n receipt.selectiveUndoOperationIds.slice(offset, offset + 2_000).map(\n (target) => sql`(\n ${receipt.scope.accountId}::uuid, ${receipt.scope.workspaceId}::uuid,\n ${receipt.artifactId}, ${target}, ${receipt.serverTransactionId},\n ${receipt.committedAt}\n )`,\n ),\n sql`, `,\n );\n await this.tx.execute(sql`\n insert into editable_artifact_undo_claims (\n account_id, workspace_id, artifact_id, target_operation_id,\n claiming_transaction_id, created_at\n ) values ${values}`);\n }\n }\n\n private async insertOutbox(record: PersistedEditableArtifactLiveOutboxRecord): Promise<void> {\n await insertLiveOutbox(this.tx, this.currentArtifact, record);\n }\n\n private async ensureSnapshotBlobReference(\n snapshot: PersistedEditableArtifactSnapshotMetadata,\n ): Promise<string> {\n const rows = await rawRows<{\n id: string;\n object_reference: string;\n byte_size: string | number | bigint;\n mime_type: string;\n }>(\n this.tx,\n sql`\n select id, object_reference, byte_size, mime_type\n from editable_artifact_blob_refs\n where account_id = ${snapshot.scope.accountId}::uuid\n and workspace_id = ${snapshot.scope.workspaceId}::uuid\n and artifact_id = ${snapshot.artifactId}\n and kind = 'snapshot'\n and content_hash = ${snapshot.contentHash}\n limit 1`,\n );\n const existing = rows[0];\n if (existing) {\n if (\n existing.object_reference !== snapshot.blobReference ||\n safeInteger(existing.byte_size, \"snapshot blob byte size\", 1) !== snapshot.byteSize ||\n existing.mime_type !== snapshot.mimeType\n ) {\n throw conflict(\"Snapshot content hash is already bound to different blob facts\");\n }\n return validateStableId(existing.id, \"snapshot blob reference id\");\n }\n await this.tx.execute(sql`\n insert into editable_artifact_blob_refs (\n account_id, workspace_id, artifact_id, id, kind, object_reference,\n byte_size, content_hash, mime_type, created_at\n ) values (\n ${snapshot.scope.accountId}::uuid, ${snapshot.scope.workspaceId}::uuid,\n ${snapshot.artifactId}, ${snapshot.snapshotId}, 'snapshot',\n ${snapshot.blobReference}, ${snapshot.byteSize}, ${snapshot.contentHash},\n ${snapshot.mimeType}, ${snapshot.publishedAt}\n )`);\n return snapshot.snapshotId;\n }\n\n private assertUncommitted(): void {\n if (this.committed) throw conflict(\"Artifact unit of work may commit exactly once\");\n }\n}\n\nasync function loadArtifactRow(\n db: Database,\n scope: PersistedEditableArtifactScope,\n artifactId: string,\n forUpdate: boolean,\n): Promise<ArtifactRow | null> {\n const rows = await rawRows<ArtifactRow>(\n db,\n sql`\n select account_id, workspace_id, id, modality, title, lifecycle_state,\n authorization_revision, head_sequence, causal_frontier, state_hash, current_snapshot_id,\n created_at, updated_at\n from editable_artifacts\n where account_id = ${scope.accountId}::uuid\n and workspace_id = ${scope.workspaceId}::uuid\n and id = ${artifactId}\n ${forUpdate ? sql`for update` : sql``}\n limit 1`,\n );\n return rows[0] ?? null;\n}\n\nasync function loadSnapshotMetadata(\n db: Database,\n scope: PersistedEditableArtifactScope,\n artifactId: string,\n snapshotId: string,\n): Promise<PersistedEditableArtifactSnapshotMetadata | null> {\n const rows = await rawRows<SnapshotRow>(\n db,\n sql`\n select s.account_id, s.workspace_id, s.artifact_id, s.id,\n s.modality,\n b.object_reference as blob_reference, b.byte_size as blob_byte_size,\n b.content_hash as blob_content_hash, b.mime_type as blob_mime_type,\n s.byte_size, s.content_hash, s.mime_type, s.covered_head_sequence,\n s.covered_causal_frontier, s.state_hash, s.model_schema_version,\n s.operation_protocol_version, s.kernel_version, s.crdt_state_version,\n s.native_revision,\n s.verified_at, s.published_at\n from editable_artifact_snapshots s\n join editable_artifact_blob_refs b\n on b.account_id = s.account_id\n and b.workspace_id = s.workspace_id\n and b.artifact_id = s.artifact_id\n and b.id = s.blob_ref_id\n where s.account_id = ${scope.accountId}::uuid\n and s.workspace_id = ${scope.workspaceId}::uuid\n and s.artifact_id = ${artifactId}\n and s.id = ${snapshotId}\n limit 1`,\n );\n return rows[0] ? snapshotFromRow(rows[0]) : null;\n}\n\ntype NormalizedPersistedEditableArtifactLiveResume =\n | Readonly<{\n modality: \"spreadsheet\";\n localCursor: number | null;\n localStateHash: string | null;\n localCausalFrontier: PersistedEditableArtifactCausalFrontier;\n requireSnapshot: boolean;\n }>\n | Readonly<{\n modality: \"document\" | \"presentation\";\n localCursor: number | null;\n localStateHash: string | null;\n localNativeRevision: number | null;\n requireSnapshot: boolean;\n }>;\n\ntype PersistedEditableArtifactLiveAuthority = Readonly<{\n artifact: PersistedEditableArtifact;\n checkpoint: PersistedEditableArtifactSequenceCheckpoint;\n snapshot: PersistedEditableArtifactSnapshotMetadata;\n minimumReplaySequence: number;\n}>;\n\nfunction validateLiveResume(\n input: PersistedEditableArtifactLiveResume,\n): NormalizedPersistedEditableArtifactLiveResume {\n if (!isPlainRecord(input)) throw new TypeError(\"Editable artifact live resume is invalid\");\n const modality = input.modality;\n if (modality !== \"spreadsheet\" && modality !== \"document\" && modality !== \"presentation\") {\n throw new TypeError(\"Editable artifact live resume modality is invalid\");\n }\n const localCursor =\n input.localCursor === null ? null : validateInteger(input.localCursor, \"live resume cursor\", 0);\n const localStateHash =\n input.localStateHash === null\n ? null\n : validateHash(input.localStateHash, \"live resume state hash\");\n if ((localCursor === null) !== (localStateHash === null)) {\n throw new TypeError(\"Live resume cursor and state hash must both be null or present\");\n }\n if (typeof input.requireSnapshot !== \"boolean\") {\n throw new TypeError(\"Live resume snapshot requirement must be boolean\");\n }\n if (modality === \"spreadsheet\") {\n if (!(\"localCausalFrontier\" in input)) {\n throw new TypeError(\"Spreadsheet live resume requires a causal frontier\");\n }\n return Object.freeze({\n modality,\n localCursor,\n localStateHash,\n localCausalFrontier: parseFrontier(input.localCausalFrontier),\n requireSnapshot: input.requireSnapshot,\n });\n }\n if (!(\"localNativeRevision\" in input)) {\n throw new TypeError(\"Serialized live resume requires a native revision\");\n }\n const localNativeRevision =\n input.localNativeRevision === null\n ? null\n : validateInteger(input.localNativeRevision, \"live resume native revision\", 0);\n if ((localCursor === null) !== (localNativeRevision === null)) {\n throw new TypeError(\"Live resume cursor and native revision must both be null or present\");\n }\n return Object.freeze({\n modality,\n localCursor,\n localStateHash,\n localNativeRevision,\n requireSnapshot: input.requireSnapshot,\n });\n}\n\nasync function loadCheckpoint(\n db: Database,\n scope: PersistedEditableArtifactScope,\n artifactId: string,\n headSequence: number,\n): Promise<PersistedEditableArtifactSequenceCheckpoint | null> {\n const rows = await rawRows<{\n head_sequence: string | number | bigint;\n modality: string;\n causal_frontier: unknown | null;\n native_revision: string | number | bigint | null;\n state_hash: string;\n }>(\n db,\n sql`\n select head_sequence, modality, causal_frontier, native_revision, state_hash\n from editable_artifact_sequence_checkpoints\n where account_id = ${scope.accountId}::uuid\n and workspace_id = ${scope.workspaceId}::uuid\n and artifact_id = ${artifactId}\n and head_sequence = ${headSequence}\n limit 1`,\n );\n const row = rows[0];\n if (!row) return null;\n const modality = artifactModality(row.modality, \"checkpoint modality\");\n const common = {\n headSequence: safeInteger(row.head_sequence, \"checkpoint sequence\"),\n stateHash: validateHash(row.state_hash, \"checkpoint state hash\"),\n } as const;\n if (modality === \"spreadsheet\") {\n if (row.native_revision !== null) {\n throw corrupt(\"Spreadsheet checkpoint contains a native revision\");\n }\n return Object.freeze({\n ...common,\n modality,\n causalFrontier: parseFrontier(row.causal_frontier),\n });\n }\n if (row.causal_frontier !== null) {\n throw corrupt(\"Serialized checkpoint contains a causal frontier\");\n }\n return Object.freeze({\n ...common,\n modality,\n nativeRevision: safeInteger(row.native_revision, \"checkpoint native revision\"),\n });\n}\n\nasync function loadLiveAuthority(\n db: Database,\n scope: PersistedEditableArtifactScope,\n artifactId: string,\n): Promise<PersistedEditableArtifactLiveAuthority> {\n const artifactRow = await loadArtifactRow(db, scope, artifactId, false);\n if (!artifactRow) {\n throw new EditableArtifactPersistenceError(\n \"not_found\",\n \"Editable artifact was not found in the requested tenant scope\",\n );\n }\n const artifact = artifactFromRow(artifactRow);\n if (artifact.currentSnapshotId === null) {\n throw corrupt(\"Live artifact has no authoritative snapshot\");\n }\n const [checkpoint, snapshot] = await Promise.all([\n loadCheckpoint(db, scope, artifactId, artifact.headSequence),\n loadSnapshotMetadata(db, scope, artifactId, artifact.currentSnapshotId),\n ]);\n if (!checkpoint) throw corrupt(\"Artifact head has no durable checkpoint\");\n if (!snapshot) throw corrupt(\"Artifact snapshot pointer has no immutable snapshot\");\n if (\n checkpoint.modality !== artifact.modality ||\n checkpoint.headSequence !== artifact.headSequence ||\n checkpoint.stateHash !== artifact.stateHash ||\n snapshot.modality !== artifact.modality\n ) {\n throw corrupt(\"Live authority projections disagree with the durable artifact\");\n }\n if (\n artifact.modality === \"spreadsheet\" &&\n (checkpoint.modality !== \"spreadsheet\" ||\n snapshot.modality !== \"spreadsheet\" ||\n !sameFrontier(checkpoint.causalFrontier, artifact.causalFrontier))\n ) {\n throw corrupt(\"Spreadsheet live head differs from its durable causal authority\");\n }\n const snapshotCheckpoint =\n snapshot.coveredHeadSequence === checkpoint.headSequence\n ? checkpoint\n : await loadCheckpoint(db, scope, artifactId, snapshot.coveredHeadSequence);\n if (\n !snapshotCheckpoint ||\n snapshotCheckpoint.modality !== snapshot.modality ||\n snapshotCheckpoint.headSequence !== snapshot.coveredHeadSequence ||\n snapshotCheckpoint.stateHash !== snapshot.stateHash ||\n (snapshot.modality === \"spreadsheet\"\n ? snapshotCheckpoint.modality !== \"spreadsheet\" ||\n !sameFrontier(snapshotCheckpoint.causalFrontier, snapshot.coveredCausalFrontier)\n : snapshotCheckpoint.modality === \"spreadsheet\" ||\n snapshotCheckpoint.nativeRevision !== snapshot.nativeRevision)\n ) {\n throw corrupt(\"Current snapshot differs from its durable checkpoint\");\n }\n const minimumReplaySequence = snapshot.coveredHeadSequence + 1;\n if (minimumReplaySequence > artifact.headSequence + 1) {\n throw corrupt(\"Current snapshot coverage is beyond the durable head\");\n }\n return Object.freeze({ artifact, checkpoint, snapshot, minimumReplaySequence });\n}\n\nfunction liveHeadFromAuthority(\n authority: PersistedEditableArtifactLiveAuthority,\n): PersistedEditableArtifactLiveHead {\n const common = {\n headSequence: authority.artifact.headSequence,\n stateHash: authority.artifact.stateHash,\n minimumReplaySequence: authority.minimumReplaySequence,\n } as const;\n return authority.checkpoint.modality === \"spreadsheet\"\n ? Object.freeze({\n ...common,\n modality: authority.checkpoint.modality,\n causalFrontier: authority.checkpoint.causalFrontier,\n })\n : Object.freeze({\n ...common,\n modality: authority.checkpoint.modality,\n nativeRevision: authority.checkpoint.nativeRevision,\n });\n}\n\nconst committedTransactionColumns = sql`\n account_id, workspace_id, artifact_id, id, request_hash,\n modality, sequence_start, sequence_end, prior_state_hash, state_hash,\n replica_id, replica_counter, resolved_causal_base, resulting_causal_frontier,\n operation_count, operation_ids, operation_protocol_version, model_schema_version,\n commit_protocol_version, prior_native_revision, native_revision, command_count,\n native_receipt_byte_size, native_receipt_hash, native_receipt_bytes,\n kernel_version, committed_transaction_byte_size, committed_transaction_hash,\n committed_transaction_bytes, committed_at`;\n\nasync function loadCommittedTransactionRows(\n db: Database,\n scope: PersistedEditableArtifactScope,\n artifactId: string,\n after: number,\n through: number,\n maxCount: number,\n): Promise<readonly CommittedTransactionRow[]> {\n return await rawRows<CommittedTransactionRow>(\n db,\n sql`select ${committedTransactionColumns}\n from editable_artifact_transactions\n where account_id = ${scope.accountId}::uuid\n and workspace_id = ${scope.workspaceId}::uuid\n and artifact_id = ${artifactId}\n and sequence_start > ${after}\n and sequence_end <= ${through}\n order by sequence_start\n limit ${maxCount}`,\n );\n}\n\nasync function loadCommittedTransactionRowsById(\n db: Database,\n scope: PersistedEditableArtifactScope,\n artifactId: string,\n transactionId: string,\n): Promise<readonly CommittedTransactionRow[]> {\n return await rawRows<CommittedTransactionRow>(\n db,\n sql`select ${committedTransactionColumns}\n from editable_artifact_transactions\n where account_id = ${scope.accountId}::uuid\n and workspace_id = ${scope.workspaceId}::uuid\n and artifact_id = ${artifactId}\n and id = ${transactionId}\n limit 1`,\n );\n}\n\nfunction liveTransactionFromCommitted(\n transaction: PersistedEditableArtifactCommittedTransactionRecord,\n): PersistedEditableArtifactLiveCommittedTransaction {\n const common = {\n artifactId: transaction.artifactId,\n transactionId: transaction.serverTransactionId,\n requestHash: transaction.requestHash,\n startSequence: transaction.sequenceStart,\n endSequence: transaction.sequenceEnd,\n priorStateHash: transaction.priorStateHash,\n stateHash: transaction.stateHash,\n committedTransactionBytes: transaction.committedTransactionBytes.slice(),\n } as const;\n return transaction.modality === \"spreadsheet\"\n ? Object.freeze({\n ...common,\n modality: transaction.modality,\n causalFrontier: transaction.resultingCausalFrontier,\n operationProtocolVersion: transaction.operationProtocolVersion,\n })\n : Object.freeze({\n ...common,\n modality: transaction.modality,\n priorNativeRevision: transaction.priorNativeRevision,\n nativeRevision: transaction.nativeRevision,\n commitProtocolVersion: transaction.commitProtocolVersion,\n });\n}\n\nasync function insertSnapshotBlobReference(\n db: Database,\n snapshot: PersistedEditableArtifactSnapshotMetadata,\n): Promise<void> {\n await db.execute(sql`\n insert into editable_artifact_blob_refs (\n account_id, workspace_id, artifact_id, id, kind, object_reference,\n byte_size, content_hash, mime_type, created_at\n ) values (\n ${snapshot.scope.accountId}::uuid, ${snapshot.scope.workspaceId}::uuid,\n ${snapshot.artifactId}, ${snapshot.snapshotId}, 'snapshot',\n ${snapshot.blobReference}, ${snapshot.byteSize}, ${snapshot.contentHash},\n ${snapshot.mimeType}, ${snapshot.publishedAt}\n )`);\n}\n\nasync function insertOriginalImportBlobReference(\n db: Database,\n scope: PersistedEditableArtifactScope,\n artifactId: string,\n source: Readonly<{\n fileId: string;\n blobRefId: string;\n blobReference: string;\n byteSize: number;\n contentHash: string;\n mimeType: string;\n }>,\n createdAt: string,\n): Promise<void> {\n await db.execute(sql`\n insert into editable_artifact_blob_refs (\n account_id, workspace_id, artifact_id, id, kind, object_reference,\n byte_size, content_hash, mime_type, source_file_id, created_at\n ) values (\n ${scope.accountId}::uuid, ${scope.workspaceId}::uuid, ${artifactId},\n ${source.blobRefId}, 'original_import', ${source.blobReference},\n ${source.byteSize}, ${source.contentHash}, ${source.mimeType},\n ${source.fileId}::uuid, ${createdAt}\n )`);\n}\n\nasync function insertSnapshotMetadata(\n db: Database,\n snapshot: PersistedEditableArtifactSnapshotMetadata,\n blobRefId = snapshot.snapshotId,\n): Promise<void> {\n const coveredCausalFrontierSql =\n snapshot.modality === \"spreadsheet\"\n ? sql`${json(snapshot.coveredCausalFrontier)}::jsonb`\n : sql`null`;\n await db.execute(sql`\n insert into editable_artifact_snapshots (\n account_id, workspace_id, artifact_id, id, modality, blob_ref_id, byte_size,\n content_hash, mime_type, covered_head_sequence, covered_causal_frontier,\n state_hash, model_schema_version, operation_protocol_version,\n kernel_version, crdt_state_version, native_revision, verified_at, published_at\n ) values (\n ${snapshot.scope.accountId}::uuid, ${snapshot.scope.workspaceId}::uuid,\n ${snapshot.artifactId}, ${snapshot.snapshotId}, ${snapshot.modality}, ${blobRefId},\n ${snapshot.byteSize}, ${snapshot.contentHash}, ${snapshot.mimeType},\n ${snapshot.coveredHeadSequence}, ${coveredCausalFrontierSql}, ${snapshot.stateHash},\n ${snapshot.modelSchemaVersion},\n ${snapshot.modality === \"spreadsheet\" ? snapshot.operationProtocolVersion : null},\n ${snapshot.kernelVersion},\n ${snapshot.modality === \"spreadsheet\" ? snapshot.crdtStateVersion : null},\n ${snapshot.modality === \"spreadsheet\" ? null : snapshot.nativeRevision},\n ${snapshot.verifiedAt}, ${snapshot.publishedAt}\n )`);\n}\n\nasync function insertLiveOutbox(\n db: Database,\n artifact: PersistedEditableArtifact,\n record: PersistedEditableArtifactLiveOutboxRecord,\n): Promise<void> {\n validateOutboxRecord(record, artifact);\n const event = parseLiveEvent(record.event);\n await db.execute(sql`\n insert into editable_artifact_live_outbox (\n account_id, workspace_id, artifact_id, id, transaction_id, snapshot_id,\n event_kind, event, state, attempt_count, lease_owner, lease_expires_at,\n next_attempt_at, last_error_code, published_at, dead_lettered_at, created_at\n ) values (\n ${artifact.scope.accountId}::uuid, ${artifact.scope.workspaceId}::uuid,\n ${artifact.id}, ${record.outboxId},\n ${event.kind === \"transaction_committed\" ? event.serverTransactionId : null},\n ${event.kind === \"snapshot_published\" ? event.snapshotId : null},\n ${event.kind}, ${json(event)}::jsonb, ${record.state}, ${record.attemptCount},\n ${record.leaseOwner}, ${record.leaseExpiresAt}, ${record.nextAttemptAt},\n ${record.lastErrorCode}, ${record.publishedAt}, ${record.deadLetteredAt},\n ${record.createdAt}\n )`);\n}\n\nasync function loadReceipt(\n db: Database,\n scope: PersistedEditableArtifactScope,\n artifactId: string,\n actorKey: string,\n clientTransactionId: string,\n): Promise<PersistedEditableArtifactReceipt | null> {\n const rows = await rawRows<TransactionRow>(\n db,\n sql`\n select\n t.account_id, t.workspace_id, t.artifact_id, t.id,\n t.modality, r.id as receipt_id, t.client_transaction_id, t.replica_id,\n t.replica_counter, t.previous_local_transaction_id, t.intent_bytes,\n r.request_hash, t.actor_key,\n t.sequence_start, t.sequence_end, t.prior_state_hash, t.causal_base,\n t.resolved_causal_base, t.resulting_causal_frontier,\n t.state_hash, t.operation_count, t.operation_ids,\n t.selective_undo_targets, t.intent_envelope_version,\n t.intent_protocol_version, t.command_protocol_version,\n t.kernel_version, t.model_schema_version,\n t.operation_protocol_version, t.commit_protocol_version,\n t.prior_native_revision, t.native_revision, t.command_count,\n t.native_receipt_byte_size, t.native_receipt_hash, t.native_receipt_bytes,\n t.committed_transaction_byte_size, t.committed_transaction_hash,\n t.committed_transaction_bytes, t.committed_at\n from editable_artifact_idempotency_receipts r\n join editable_artifact_transactions t\n on t.account_id = r.account_id\n and t.workspace_id = r.workspace_id\n and t.artifact_id = r.artifact_id\n and t.id = r.server_transaction_id\n and t.actor_key_digest = r.authority_key_digest\n and t.actor_key = r.authority_key\n and t.client_transaction_id = r.idempotency_key\n and t.request_hash = r.request_hash\n where r.account_id = ${scope.accountId}::uuid\n and r.workspace_id = ${scope.workspaceId}::uuid\n and r.artifact_id = ${artifactId}\n and r.operation_kind = 'edit'\n and r.authority_key_digest = sha256(convert_to(${actorKey}, 'UTF8'))\n and r.authority_key = ${actorKey}\n and r.idempotency_key = ${clientTransactionId}\n limit 1`,\n );\n return rows[0] ? receiptFromRow(rows[0]) : null;\n}\n\nasync function loadUndoBasis(\n db: Database,\n scope: PersistedEditableArtifactScope,\n artifactId: string,\n operationIds: readonly string[],\n): Promise<readonly PersistedEditableArtifactTransactionUndoBasis[]> {\n if (operationIds.length === 0) return Object.freeze([]);\n const operationRows: OperationRow[] = [];\n const claimByOperationId = new Map<string, string>();\n for (let offset = 0; offset < operationIds.length; offset += 1_000) {\n const chunk = operationIds.slice(offset, offset + 1_000);\n const identifiers = sql.join(\n chunk.map((operationId) => sql`${operationId}`),\n sql`, `,\n );\n operationRows.push(\n ...(await rawRows<OperationRow>(\n db,\n sql`\n select account_id, workspace_id, artifact_id, transaction_id,\n operation_id, operation_index, sequence, dot_replica_id,\n dot_counter, actor_key, created_at\n from editable_artifact_operations\n where account_id = ${scope.accountId}::uuid\n and workspace_id = ${scope.workspaceId}::uuid\n and artifact_id = ${artifactId}\n and operation_id in (${identifiers})\n order by sequence`,\n )),\n );\n const claims = await rawRows<{\n target_operation_id: string;\n claiming_transaction_id: string;\n }>(\n db,\n sql`\n select target_operation_id, claiming_transaction_id\n from editable_artifact_undo_claims\n where account_id = ${scope.accountId}::uuid\n and workspace_id = ${scope.workspaceId}::uuid\n and artifact_id = ${artifactId}\n and target_operation_id in (${identifiers})`,\n );\n for (const claim of claims) {\n claimByOperationId.set(\n validateStableId(claim.target_operation_id, \"undo target operation id\"),\n validateStableId(claim.claiming_transaction_id, \"claiming transaction id\"),\n );\n }\n }\n const operationById = new Map(\n operationRows.map(operationFromRow).map((operation) => [operation.operationId, operation]),\n );\n return Object.freeze(\n operationIds.map((operationId) =>\n Object.freeze({\n operationId,\n operation: operationById.get(operationId) ?? null,\n claimedBy: claimByOperationId.get(operationId) ?? null,\n }),\n ),\n );\n}\n\nasync function anyUndoTargetClaimed(\n db: Database,\n scope: PersistedEditableArtifactScope,\n artifactId: string,\n operationIds: readonly string[],\n): Promise<boolean> {\n for (let offset = 0; offset < operationIds.length; offset += 2_000) {\n const identifiers = sql.join(\n operationIds.slice(offset, offset + 2_000).map((operationId) => sql`${operationId}`),\n sql`, `,\n );\n const rows = await rawRows<{ claimed: boolean }>(\n db,\n sql`select exists (\n select 1\n from editable_artifact_undo_claims\n where account_id = ${scope.accountId}::uuid\n and workspace_id = ${scope.workspaceId}::uuid\n and artifact_id = ${artifactId}\n and target_operation_id in (${identifiers})\n ) as claimed`,\n );\n if (rows[0]?.claimed === true) return true;\n }\n return false;\n}\n\nfunction operationFromRow(row: OperationRow): PersistedEditableArtifactOperationRecord {\n const operationIndex = validateInteger(\n row.operation_index,\n \"operation index\",\n 0,\n MAX_COMMITTED_TRANSACTION_OPERATIONS - 1,\n );\n const sequence = safeInteger(row.sequence, \"operation sequence\", 1);\n if (sequence <= operationIndex) {\n throw corrupt(\"Operation index is outside its authoritative sequence interval\");\n }\n return Object.freeze({\n scope: validateScope({ accountId: row.account_id, workspaceId: row.workspace_id }),\n artifactId: validateStableId(row.artifact_id, \"artifact id\"),\n serverTransactionId: validateStableId(row.transaction_id, \"transaction id\"),\n sequence,\n actorKey: validateActorKey(row.actor_key).key,\n createdAt: iso(row.created_at, \"operation creation time\"),\n operationId: validateStableId(row.operation_id, \"operation id\"),\n dot: Object.freeze({\n replicaId: validateReplicaId(row.dot_replica_id),\n counter: safeInteger(row.dot_counter, \"operation causal counter\", 1),\n }),\n });\n}\n\nfunction committedTransactionFromRow(\n row: CommittedTransactionRow,\n durableModality: PersistedEditableArtifact[\"modality\"],\n): PersistedEditableArtifactCommittedTransactionRecord {\n if (row.modality !== durableModality) {\n throw corrupt(\"Stored transaction modality differs from its durable artifact\");\n }\n const bytes = Uint8Array.from(row.committed_transaction_bytes);\n const declaredByteSize = validateInteger(\n row.committed_transaction_byte_size,\n \"committed transaction byte size\",\n 1,\n MAX_COMMITTED_TRANSACTION_BYTES,\n );\n if (bytes.byteLength !== declaredByteSize) {\n throw corrupt(\"Canonical committed transaction size does not match its stored bytes\");\n }\n const digest = `sha256:${createHash(\"sha256\").update(bytes).digest(\"hex\")}`;\n if (digest !== validateHash(row.committed_transaction_hash, \"committed transaction hash\")) {\n throw corrupt(\"Canonical committed transaction digest verification failed\");\n }\n\n const sequenceStart = safeInteger(row.sequence_start, \"transaction start sequence\", 1);\n const sequenceEnd = safeInteger(row.sequence_end, \"transaction end sequence\", sequenceStart);\n const priorStateHash = validateHash(row.prior_state_hash, \"transaction prior state hash\");\n const stateHash = validateHash(row.state_hash, \"transaction state hash\");\n const common = {\n scope: validateScope({ accountId: row.account_id, workspaceId: row.workspace_id }),\n artifactId: validateStableId(row.artifact_id, \"artifact id\"),\n serverTransactionId: validateStableId(row.id, \"transaction id\"),\n requestHash: validateHash(row.request_hash, \"transaction request hash\"),\n sequenceStart,\n sequenceEnd,\n priorStateHash,\n stateHash,\n modelSchemaVersion: validateInteger(row.model_schema_version, \"model schema version\", 1),\n kernelVersion: validateBoundedText(\n row.kernel_version,\n \"kernel version\",\n EDITABLE_ARTIFACT_KERNEL_VERSION_MAX_BYTES,\n ),\n committedTransactionBytes: bytes,\n committedAt: iso(row.committed_at, \"transaction commit time\"),\n } as const;\n\n if (durableModality === \"spreadsheet\") {\n let summary: ReturnType<typeof decodeCommittedTransactionSummary>;\n try {\n summary = decodeCommittedTransactionSummary(bytes);\n } catch (error) {\n throw new EditableArtifactPersistenceError(\n \"corrupt_history\",\n \"Stored canonical committed transaction is not a valid OGACO002 envelope\",\n { cause: error },\n );\n }\n const operationCount = validateInteger(\n row.operation_count,\n \"committed transaction operation count\",\n 1,\n MAX_COMMITTED_TRANSACTION_OPERATIONS,\n );\n const operationIds = parseStableIdArray(\n row.operation_ids,\n \"committed transaction operation ids\",\n MAX_COMMITTED_TRANSACTION_OPERATIONS,\n );\n const resolvedCausalBase = parseFrontier(row.resolved_causal_base);\n const resultingCausalFrontier = parseFrontier(row.resulting_causal_frontier);\n const dot = Object.freeze({\n replicaId: validateReplicaId(row.replica_id),\n counter: safeInteger(row.replica_counter, \"transaction causal counter\", 1),\n });\n const operationProtocolVersion = validateInteger(\n row.operation_protocol_version,\n \"transaction operation protocol version\",\n COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n );\n if (\n sequenceEnd - sequenceStart + 1 !== operationCount ||\n operationIds.length !== operationCount ||\n summary.operationIds.length !== operationCount ||\n summary.transactionId !== row.id ||\n summary.dot.replicaId !== dot.replicaId ||\n summary.dot.counter !== dot.counter ||\n summary.priorStateHash !== priorStateHash ||\n summary.stateHash !== stateHash ||\n summary.operationProtocolVersion !== operationProtocolVersion ||\n !sameStringArray(summary.operationIds, operationIds) ||\n !sameFrontier(summary.resolvedCausalBase, resolvedCausalBase) ||\n !sameFrontier(summary.resultingCausalFrontier, resultingCausalFrontier)\n ) {\n throw corrupt(\"Canonical committed transaction disagrees with its durable projection\");\n }\n assertSerializedColumnsAbsent(row);\n return Object.freeze({\n ...common,\n modality: \"spreadsheet\" as const,\n dot,\n resolvedCausalBase,\n resultingCausalFrontier,\n operationIds,\n operationProtocolVersion,\n });\n }\n\n const modality = serializedModality(durableModality, \"transaction modality\");\n if (\n row.operation_count !== null ||\n row.operation_ids !== null ||\n row.operation_protocol_version !== null ||\n row.resolved_causal_base !== null ||\n row.resulting_causal_frontier !== null\n ) {\n throw corrupt(\"Serialized transaction contains spreadsheet projection fields\");\n }\n const nativeReceiptBytes = readNativeReceiptBytes(row);\n let summary: ReturnType<typeof decodeEditableArtifactSerializedCommit>;\n try {\n summary = decodeEditableArtifactSerializedCommit(bytes, modality);\n } catch (error) {\n throw new EditableArtifactPersistenceError(\n \"corrupt_history\",\n \"Stored canonical committed transaction is not a valid OGAST001 envelope\",\n { cause: error },\n );\n }\n const commitProtocolVersion = validateInteger(\n row.commit_protocol_version,\n \"serialized commit protocol version\",\n EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION,\n EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION,\n );\n const priorNativeRevision = safeInteger(\n row.prior_native_revision,\n \"serialized prior native revision\",\n );\n const nativeRevision = safeInteger(row.native_revision, \"serialized native revision\");\n const commandCount = validateInteger(\n row.command_count,\n \"serialized command count\",\n 1,\n MAX_COMMITTED_TRANSACTION_OPERATIONS,\n );\n if (\n sequenceStart !== sequenceEnd ||\n summary.commitProtocolVersion !== commitProtocolVersion ||\n summary.transactionId !== row.id ||\n summary.parentHeadSequence !== sequenceStart - 1 ||\n summary.resultHeadSequence !== sequenceEnd ||\n summary.priorNativeRevision !== priorNativeRevision ||\n summary.nativeReceipt.revision !== nativeRevision ||\n summary.nativeReceipt.commandCount !== commandCount ||\n summary.priorStateHash !== priorStateHash ||\n summary.stateHash !== stateHash ||\n summary.requestHash !== common.requestHash ||\n !equalByteArrays(summary.nativeReceiptBytes, nativeReceiptBytes)\n ) {\n throw corrupt(\"Canonical serialized commit disagrees with its durable projection\");\n }\n return Object.freeze({\n ...common,\n modality,\n commitProtocolVersion,\n priorNativeRevision,\n nativeRevision,\n commandCount,\n nativeReceiptBytes,\n });\n}\n\nfunction artifactFromRow(row: ArtifactRow): PersistedEditableArtifact {\n if (![\"spreadsheet\", \"presentation\", \"document\"].includes(row.modality)) {\n throw corrupt(\"Stored artifact modality is invalid\");\n }\n if (![\"active\", \"archived\"].includes(row.lifecycle_state)) {\n throw corrupt(\"Stored artifact lifecycle is invalid\");\n }\n validateTitle(row.title);\n const common = {\n scope: validateScope({ accountId: row.account_id, workspaceId: row.workspace_id }),\n id: validateStableId(row.id, \"artifact id\"),\n title: row.title,\n lifecycle: row.lifecycle_state as PersistedEditableArtifact[\"lifecycle\"],\n authorizationRevision: safeInteger(\n row.authorization_revision,\n \"artifact authorization revision\",\n ),\n headSequence: safeInteger(row.head_sequence, \"artifact head sequence\"),\n stateHash: validateHash(row.state_hash, \"artifact state hash\"),\n currentSnapshotId: row.current_snapshot_id\n ? validateStableId(row.current_snapshot_id, \"current snapshot id\")\n : null,\n createdAt: iso(row.created_at, \"artifact creation time\"),\n updatedAt: iso(row.updated_at, \"artifact update time\"),\n } as const;\n if (row.modality === \"spreadsheet\") {\n return Object.freeze({\n ...common,\n modality: \"spreadsheet\" as const,\n causalFrontier: parseFrontier(row.causal_frontier),\n });\n }\n if (row.causal_frontier !== null) {\n throw corrupt(\"Serialized artifact contains a spreadsheet causal frontier\");\n }\n return Object.freeze({\n ...common,\n modality: serializedModality(row.modality, \"artifact modality\"),\n });\n}\n\nfunction receiptFromRow(row: TransactionRow): PersistedEditableArtifactReceipt {\n const modality = artifactModality(row.modality, \"receipt modality\");\n const committed = committedTransactionFromRow(row, modality);\n const sequenceStart = safeInteger(row.sequence_start, \"receipt start sequence\", 1);\n const sequenceEnd = safeInteger(row.sequence_end, \"receipt end sequence\", sequenceStart);\n const common = {\n receiptId: validateStableId(row.receipt_id, \"receipt id\"),\n scope: validateScope({ accountId: row.account_id, workspaceId: row.workspace_id }),\n artifactId: validateStableId(row.artifact_id, \"artifact id\"),\n modality,\n serverTransactionId: validateStableId(row.id, \"transaction id\"),\n clientTransactionId: validateClientTransactionId(row.client_transaction_id),\n replicaId: validateReplicaId(row.replica_id),\n replicaCounter: safeInteger(row.replica_counter, \"receipt replica counter\", 1),\n previousLocalTransactionId: row.previous_local_transaction_id\n ? validateClientTransactionId(row.previous_local_transaction_id)\n : null,\n intentBytes: validateCanonicalIntentBytes(row.intent_bytes, row.request_hash),\n requestHash: validateHash(row.request_hash, \"request hash\"),\n actorKey: validateActorKey(row.actor_key).key,\n sequenceStart,\n sequenceEnd,\n priorStateHash: validateHash(row.prior_state_hash, \"transaction prior state hash\"),\n stateHash: validateHash(row.state_hash, \"transaction state hash\"),\n intentEnvelopeVersion: validateInteger(\n row.intent_envelope_version,\n \"intent envelope version\",\n 1,\n ),\n intentProtocolVersion: validateIntentProtocolVersion(row.intent_protocol_version),\n commandProtocolVersion: validateInteger(\n row.command_protocol_version,\n \"command protocol version\",\n 1,\n ),\n kernelVersion: validateBoundedText(\n row.kernel_version,\n \"kernel version\",\n EDITABLE_ARTIFACT_KERNEL_VERSION_MAX_BYTES,\n ),\n modelSchemaVersion: validateInteger(row.model_schema_version, \"model schema version\", 1),\n committedAt: iso(row.committed_at, \"transaction commit time\"),\n } as const;\n if (\n committed.sequenceStart !== sequenceStart ||\n committed.sequenceEnd !== sequenceEnd ||\n committed.requestHash !== common.requestHash ||\n committed.priorStateHash !== common.priorStateHash ||\n committed.stateHash !== common.stateHash\n ) {\n throw corrupt(\"Receipt differs from its canonical committed transaction\");\n }\n if (modality === \"spreadsheet\") {\n if (committed.modality !== \"spreadsheet\") {\n throw corrupt(\"Spreadsheet receipt resolves to a serialized commit\");\n }\n const operationCount = validateInteger(\n row.operation_count,\n \"operation count\",\n 1,\n MAX_COMMITTED_TRANSACTION_OPERATIONS,\n );\n if (sequenceEnd - sequenceStart + 1 !== operationCount) {\n throw corrupt(\"Receipt operation interval does not match operation count\");\n }\n return Object.freeze({\n ...common,\n modality: \"spreadsheet\" as const,\n causalBase: parseFrontier(row.causal_base),\n resolvedCausalBase: parseFrontier(row.resolved_causal_base),\n resultingCausalFrontier: parseFrontier(row.resulting_causal_frontier),\n operationCount,\n selectiveUndoOperationIds: parseStableIdArray(\n row.selective_undo_targets,\n \"undo targets\",\n 10_000,\n ),\n operationProtocolVersion: committed.operationProtocolVersion,\n });\n }\n if (\n committed.modality === \"spreadsheet\" ||\n row.causal_base !== null ||\n row.selective_undo_targets !== null\n ) {\n throw corrupt(\"Serialized receipt contains spreadsheet projection fields\");\n }\n return Object.freeze({\n ...common,\n modality,\n commitProtocolVersion: committed.commitProtocolVersion,\n priorNativeRevision: committed.priorNativeRevision,\n nativeRevision: committed.nativeRevision,\n commandCount: committed.commandCount,\n });\n}\n\nfunction creationReceiptFromRow(\n scopeInput: PersistedEditableArtifactScope,\n row: CreationReceiptRow,\n): PersistedEditableArtifactCreationReceipt {\n const scope = validateScope(scopeInput);\n if (row.resource_type !== \"artifact\") {\n throw corrupt(\"Artifact creation receipt has an invalid resource type\");\n }\n if (!isPlainRecord(row.result)) {\n throw corrupt(\"Artifact creation receipt result is invalid\");\n }\n assertExactKeys(\n row.result,\n [\"artifactId\", \"genesisSnapshotId\", \"schemaVersion\"],\n \"artifact creation receipt result\",\n );\n if (row.result.schemaVersion !== 1) {\n throw corrupt(\"Artifact creation receipt schema version is invalid\");\n }\n const artifactId = validateStableId(row.resource_id, \"created artifact resource id\");\n if (validateStableId(row.result.artifactId, \"creation result artifact id\") !== artifactId) {\n throw corrupt(\"Artifact creation receipt result disagrees with its resource\");\n }\n return Object.freeze({\n receiptId: validateStableId(row.id, \"creation receipt id\"),\n scope,\n artifactId,\n operationKind: validateOriginOperation(row.operation_kind),\n authorityKey: validateActorKey(row.authority_key).key,\n idempotencyKey: validateClientTransactionId(row.idempotency_key),\n requestHash: validateHash(row.request_hash, \"creation request hash\"),\n genesisSnapshotId: validateStableId(\n row.result.genesisSnapshotId,\n \"creation genesis snapshot id\",\n ),\n createdAt: iso(row.created_at, \"creation receipt time\"),\n });\n}\n\nfunction snapshotFromRow(row: SnapshotRow): PersistedEditableArtifactSnapshotMetadata {\n const modality = artifactModality(row.modality, \"snapshot modality\");\n if (row.mime_type !== \"application/vnd.opengeni.editable-artifact-snapshot\") {\n throw corrupt(\"Snapshot MIME type is invalid\");\n }\n if (\n safeInteger(row.blob_byte_size, \"snapshot blob byte size\", 1) !==\n safeInteger(row.byte_size, \"snapshot byte size\", 1) ||\n validateHash(row.blob_content_hash, \"snapshot blob content hash\") !==\n validateHash(row.content_hash, \"snapshot content hash\") ||\n row.blob_mime_type !== row.mime_type\n ) {\n throw corrupt(\"Snapshot metadata disagrees with its immutable blob reference\");\n }\n const common = {\n scope: validateScope({ accountId: row.account_id, workspaceId: row.workspace_id }),\n artifactId: validateStableId(row.artifact_id, \"artifact id\"),\n modality,\n snapshotId: validateStableId(row.id, \"snapshot id\"),\n blobReference: validateBoundedText(row.blob_reference, \"snapshot blob reference\", 1024),\n byteSize: safeInteger(row.byte_size, \"snapshot byte size\", 1),\n contentHash: validateHash(row.content_hash, \"snapshot content hash\"),\n mimeType: row.mime_type,\n coveredHeadSequence: safeInteger(row.covered_head_sequence, \"snapshot coverage\"),\n stateHash: validateHash(row.state_hash, \"snapshot state hash\"),\n modelSchemaVersion: validateInteger(row.model_schema_version, \"model schema version\", 1),\n kernelVersion: validateBoundedText(\n row.kernel_version,\n \"kernel version\",\n EDITABLE_ARTIFACT_KERNEL_VERSION_MAX_BYTES,\n ),\n verifiedAt: iso(row.verified_at, \"snapshot verification time\"),\n publishedAt: iso(row.published_at, \"snapshot publication time\"),\n } as const;\n if (modality === \"spreadsheet\") {\n if (row.native_revision !== null) {\n throw corrupt(\"Spreadsheet snapshot contains a native revision\");\n }\n return Object.freeze({\n ...common,\n modality: \"spreadsheet\" as const,\n coveredCausalFrontier: parseFrontier(row.covered_causal_frontier),\n operationProtocolVersion: validateInteger(\n row.operation_protocol_version,\n \"operation protocol version\",\n 1,\n ),\n crdtStateVersion: validateInteger(row.crdt_state_version, \"CRDT state version\", 1),\n });\n }\n if (\n row.covered_causal_frontier !== null ||\n row.operation_protocol_version !== null ||\n row.crdt_state_version !== null\n ) {\n throw corrupt(\"Serialized snapshot contains spreadsheet projection fields\");\n }\n return Object.freeze({\n ...common,\n modality,\n nativeRevision: safeInteger(row.native_revision, \"snapshot native revision\"),\n });\n}\n\nfunction outboxFromRow(row: OutboxRow): PersistedEditableArtifactLiveOutboxRecord {\n const event = parseLiveEvent(row.event);\n if (![\"pending\", \"publishing\", \"published\", \"dead_lettered\"].includes(row.state)) {\n throw corrupt(\"Live outbox state is invalid\");\n }\n const leaseOwner = row.lease_owner === null ? null : validateLeaseOwner(row.lease_owner);\n const leaseExpiresAt = row.lease_expires_at\n ? iso(row.lease_expires_at, \"outbox lease expiry\")\n : null;\n const publishedAt = row.published_at ? iso(row.published_at, \"outbox publication time\") : null;\n const deadLetteredAt = row.dead_lettered_at\n ? iso(row.dead_lettered_at, \"outbox dead-letter time\")\n : null;\n const nextAttemptAt = iso(row.next_attempt_at, \"outbox next-attempt time\");\n const lastErrorCode =\n row.last_error_code === null ? null : validateOutboxStoredErrorCode(row.last_error_code);\n if (\n (row.state === \"pending\" &&\n (leaseOwner !== null ||\n leaseExpiresAt !== null ||\n publishedAt !== null ||\n deadLetteredAt !== null ||\n (lastErrorCode !== null && !isOutboxRetryErrorCode(lastErrorCode)))) ||\n (row.state === \"publishing\" &&\n (leaseOwner === null ||\n leaseExpiresAt === null ||\n publishedAt !== null ||\n deadLetteredAt !== null ||\n (lastErrorCode !== null && !isOutboxRetryErrorCode(lastErrorCode)))) ||\n (row.state === \"published\" &&\n (leaseOwner !== null ||\n leaseExpiresAt !== null ||\n publishedAt === null ||\n deadLetteredAt !== null ||\n lastErrorCode !== null)) ||\n (row.state === \"dead_lettered\" &&\n (leaseOwner !== null ||\n leaseExpiresAt !== null ||\n publishedAt !== null ||\n deadLetteredAt === null ||\n lastErrorCode === null ||\n !isOutboxStoredDeadLetterErrorCode(lastErrorCode)))\n ) {\n throw corrupt(\"Live outbox state and lease facts are inconsistent\");\n }\n return Object.freeze({\n outboxId: validateStableId(row.outbox_id, \"outbox id\"),\n event,\n state: row.state as PersistedEditableArtifactLiveOutboxRecord[\"state\"],\n attemptCount: validateInteger(row.attempt_count, \"outbox attempt count\", 0, 1_000_000),\n leaseOwner,\n leaseExpiresAt,\n nextAttemptAt,\n lastErrorCode,\n publishedAt,\n deadLetteredAt,\n createdAt: iso(row.created_at, \"outbox creation time\"),\n });\n}\n\nfunction parseLiveEvent(value: unknown): PersistedEditableArtifactLiveEvent {\n if (!isPlainRecord(value) || value.schemaVersion !== 1 || typeof value.kind !== \"string\") {\n throw corrupt(\"Live outbox event envelope is invalid\");\n }\n const scope = validateScope(value.scope as PersistedEditableArtifactScope);\n const artifactId = validateStableId(value.artifactId, \"event artifact id\");\n const modality = artifactModality(value.modality, \"event modality\");\n if (value.kind === \"transaction_committed\") {\n assertExactKeys(\n value,\n [\n \"artifactId\",\n ...(modality === \"spreadsheet\" ? [] : [\"commitProtocolVersion\"]),\n \"committedAt\",\n \"kind\",\n \"modality\",\n ...(modality === \"spreadsheet\" ? [\"operationProtocolVersion\"] : []),\n \"schemaVersion\",\n \"scope\",\n \"sequenceEnd\",\n \"sequenceStart\",\n \"serverTransactionId\",\n \"stateHash\",\n ],\n \"transaction outbox event\",\n );\n const sequenceStart = validateInteger(value.sequenceStart, \"event start sequence\", 1);\n const sequenceEnd = validateInteger(value.sequenceEnd, \"event end sequence\", sequenceStart);\n const common = {\n kind: value.kind,\n schemaVersion: 1,\n scope,\n artifactId,\n modality,\n serverTransactionId: validateStableId(value.serverTransactionId, \"event transaction id\"),\n sequenceStart,\n sequenceEnd,\n stateHash: validateHash(value.stateHash, \"event state hash\"),\n committedAt: canonicalIsoString(value.committedAt, \"event commit time\"),\n } as const;\n return modality === \"spreadsheet\"\n ? Object.freeze({\n ...common,\n modality: \"spreadsheet\" as const,\n operationProtocolVersion: validateInteger(\n value.operationProtocolVersion,\n \"event operation protocol\",\n 1,\n ),\n })\n : Object.freeze({\n ...common,\n modality,\n commitProtocolVersion: validateInteger(\n value.commitProtocolVersion,\n \"event commit protocol\",\n EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION,\n EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION,\n ),\n });\n }\n if (value.kind === \"snapshot_published\") {\n assertExactKeys(\n value,\n [\n \"artifactId\",\n \"coveredHeadSequence\",\n \"kind\",\n \"modality\",\n ...(modality === \"spreadsheet\" ? [\"operationProtocolVersion\"] : []),\n \"publishedAt\",\n \"schemaVersion\",\n \"scope\",\n \"snapshotId\",\n \"stateHash\",\n ],\n \"snapshot outbox event\",\n );\n const common = {\n kind: value.kind,\n schemaVersion: 1,\n scope,\n artifactId,\n modality,\n snapshotId: validateStableId(value.snapshotId, \"event snapshot id\"),\n coveredHeadSequence: validateInteger(value.coveredHeadSequence, \"event snapshot coverage\", 0),\n stateHash: validateHash(value.stateHash, \"event state hash\"),\n publishedAt: canonicalIsoString(value.publishedAt, \"event publication time\"),\n } as const;\n return modality === \"spreadsheet\"\n ? Object.freeze({\n ...common,\n modality: \"spreadsheet\" as const,\n operationProtocolVersion: validateInteger(\n value.operationProtocolVersion,\n \"event operation protocol\",\n 1,\n ),\n })\n : Object.freeze({ ...common, modality });\n }\n throw corrupt(\"Live outbox event kind is invalid\");\n}\n\nfunction validateAppliedCommit(\n artifact: PersistedEditableArtifact,\n input: CommitPersistedEditableArtifactTransaction,\n): Uint8Array {\n if (input.expectedHeadSequence !== artifact.headSequence) throw conflict(\"Artifact head changed\");\n if (artifact.lifecycle !== \"active\") throw conflict(\"Archived artifacts cannot accept edits\");\n const receipt = input.receipt;\n const intentBytes = validateReceipt(receipt, artifact);\n validateStableId(input.serverTransactionId, \"transaction id\");\n if (\n receipt.modality !== artifact.modality ||\n input.committedTransaction.modality !== artifact.modality ||\n receipt.serverTransactionId !== input.serverTransactionId ||\n receipt.priorStateHash !== artifact.stateHash ||\n receipt.sequenceStart !== artifact.headSequence + 1\n ) {\n throw new TypeError(\"Committed transaction does not extend its durable artifact head\");\n }\n if (receipt.modality !== \"spreadsheet\") {\n if (input.operations.length !== 0 || receipt.sequenceEnd !== receipt.sequenceStart) {\n throw new TypeError(\"Serialized commit must advance one head without CRDT operations\");\n }\n validateCommittedTransactionProjection(input.committedTransaction, receipt, input.operations);\n validateOutboxRecord(input.outbox, artifact);\n return intentBytes;\n }\n if (artifact.modality !== \"spreadsheet\") {\n throw new TypeError(\"Spreadsheet receipt cannot commit to a serialized artifact\");\n }\n if (\n input.operations.length !== receipt.operationCount ||\n receipt.sequenceEnd !== artifact.headSequence + input.operations.length\n ) {\n throw new TypeError(\"Committed operation interval does not match its receipt\");\n }\n const priorReplicaCounter = causalCounter(artifact.causalFrontier, receipt.replicaId);\n if (receipt.replicaCounter !== priorReplicaCounter + 1) {\n throw new TypeError(\"Receipt does not immediately advance its authoritative replica counter\");\n }\n if (\n !frontierDominates(receipt.resolvedCausalBase, receipt.causalBase) ||\n !frontierDominates(artifact.causalFrontier, receipt.resolvedCausalBase)\n ) {\n throw new TypeError(\"Receipt resolved causal base is inconsistent with authoritative history\");\n }\n const expectedResult = mergeFrontier(artifact.causalFrontier, {\n replicaId: receipt.replicaId,\n counter: receipt.replicaCounter,\n });\n if (!sameFrontier(expectedResult, receipt.resultingCausalFrontier)) {\n throw new TypeError(\"Receipt resulting frontier does not exactly match its transaction dot\");\n }\n for (let index = 0; index < input.operations.length; index += 1) {\n const operation = input.operations[index]!;\n if (\n operation.scope.accountId !== artifact.scope.accountId ||\n operation.scope.workspaceId !== artifact.scope.workspaceId ||\n operation.artifactId !== artifact.id ||\n operation.serverTransactionId !== input.serverTransactionId ||\n operation.sequence !== receipt.sequenceStart + index ||\n operation.actorKey !== receipt.actorKey\n ) {\n throw new TypeError(\"Committed operation is not bound to its authoritative interval\");\n }\n validateStableId(operation.operationId, \"operation id\");\n validateReplicaId(operation.dot.replicaId);\n validateInteger(operation.dot.counter, \"operation causal counter\", 1);\n if (\n operation.dot.replicaId !== receipt.replicaId ||\n operation.dot.counter !== receipt.replicaCounter\n ) {\n throw new TypeError(\"Operation dot must equal its atomic transaction dot\");\n }\n if (\n canonicalIsoString(operation.createdAt, \"operation creation time\") !== receipt.committedAt\n ) {\n throw new TypeError(\"Operation creation time must equal its transaction commit time\");\n }\n }\n validateCommittedTransactionProjection(input.committedTransaction, receipt, input.operations);\n validateOutboxRecord(input.outbox, artifact);\n return intentBytes;\n}\n\nfunction validateOwnedCommitCandidate(\n input: TryCommitPersistedEditableArtifactTransactionRequest,\n): void {\n if (\n input.receipt.scope.accountId !== input.scope.accountId ||\n input.receipt.scope.workspaceId !== input.scope.workspaceId ||\n input.receipt.artifactId !== input.artifactId ||\n input.receipt.serverTransactionId !== input.serverTransactionId ||\n input.receipt.requestHash !== input.requestHash\n ) {\n throw new TypeError(\"Optimistic commit identity does not match its durable receipt\");\n }\n validateCommittedTransactionProjection(\n input.committedTransaction,\n input.receipt,\n input.operations,\n );\n}\n\nfunction validateCommittedTransactionProjection(\n transaction: PersistedEditableArtifactCommittedTransactionRecord,\n receipt: PersistedEditableArtifactReceipt,\n operations: readonly PersistedEditableArtifactOperationRecord[],\n): void {\n if (\n transaction.modality !== receipt.modality ||\n transaction.scope.accountId !== receipt.scope.accountId ||\n transaction.scope.workspaceId !== receipt.scope.workspaceId ||\n transaction.artifactId !== receipt.artifactId ||\n transaction.serverTransactionId !== receipt.serverTransactionId ||\n transaction.requestHash !== receipt.requestHash ||\n transaction.sequenceStart !== receipt.sequenceStart ||\n transaction.sequenceEnd !== receipt.sequenceEnd ||\n transaction.priorStateHash !== receipt.priorStateHash ||\n transaction.stateHash !== receipt.stateHash ||\n transaction.modelSchemaVersion !== receipt.modelSchemaVersion ||\n transaction.kernelVersion !== receipt.kernelVersion ||\n transaction.committedAt !== receipt.committedAt\n ) {\n throw new TypeError(\"Canonical committed transaction disagrees with its receipt projection\");\n }\n validateStableId(transaction.serverTransactionId, \"committed transaction id\");\n validateHash(transaction.requestHash, \"committed transaction request hash\");\n validateHash(transaction.priorStateHash, \"committed transaction prior state hash\");\n validateHash(transaction.stateHash, \"committed transaction state hash\");\n validateInteger(transaction.modelSchemaVersion, \"committed transaction model schema version\", 1);\n validateBoundedText(\n transaction.kernelVersion,\n \"committed transaction kernel version\",\n EDITABLE_ARTIFACT_KERNEL_VERSION_MAX_BYTES,\n );\n canonicalIsoString(transaction.committedAt, \"committed transaction commit time\");\n if (\n !(transaction.committedTransactionBytes instanceof Uint8Array) ||\n transaction.committedTransactionBytes.byteLength < 1 ||\n transaction.committedTransactionBytes.byteLength > MAX_COMMITTED_TRANSACTION_BYTES\n ) {\n throw new TypeError(\"Canonical committed transaction bytes are invalid or oversized\");\n }\n if (transaction.modality === \"spreadsheet\" && receipt.modality === \"spreadsheet\") {\n if (\n transaction.dot.replicaId !== receipt.replicaId ||\n transaction.dot.counter !== receipt.replicaCounter ||\n !sameFrontier(transaction.resolvedCausalBase, receipt.resolvedCausalBase) ||\n !sameFrontier(transaction.resultingCausalFrontier, receipt.resultingCausalFrontier) ||\n transaction.operationProtocolVersion !== receipt.operationProtocolVersion ||\n transaction.operationIds.length !== operations.length ||\n transaction.operationIds.some(\n (operationId, index) => operationId !== operations[index]?.operationId,\n )\n ) {\n throw new TypeError(\"Canonical spreadsheet commit disagrees with its receipt projection\");\n }\n validateReplicaId(transaction.dot.replicaId);\n validateInteger(transaction.dot.counter, \"committed transaction causal counter\", 1);\n const resolvedCausalBase = parseFrontier(transaction.resolvedCausalBase);\n const resultingCausalFrontier = parseFrontier(transaction.resultingCausalFrontier);\n const operationIds = parseStableIdArray(\n transaction.operationIds,\n \"committed transaction operation ids\",\n MAX_COMMITTED_TRANSACTION_OPERATIONS,\n );\n validateInteger(\n transaction.operationProtocolVersion,\n \"committed transaction operation protocol version\",\n COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n COMMITTED_TRANSACTION_PROTOCOL_VERSION,\n );\n let summary: ReturnType<typeof decodeCommittedTransactionSummary>;\n try {\n summary = decodeCommittedTransactionSummary(transaction.committedTransactionBytes);\n } catch (error) {\n throw new TypeError(\"Canonical committed transaction is not a valid OGACO002 envelope\", {\n cause: error,\n });\n }\n if (\n summary.transactionId !== transaction.serverTransactionId ||\n summary.dot.replicaId !== transaction.dot.replicaId ||\n summary.dot.counter !== transaction.dot.counter ||\n summary.priorStateHash !== transaction.priorStateHash ||\n summary.stateHash !== transaction.stateHash ||\n summary.operationProtocolVersion !== transaction.operationProtocolVersion ||\n !sameStringArray(summary.operationIds, operationIds) ||\n !sameFrontier(summary.resolvedCausalBase, resolvedCausalBase) ||\n !sameFrontier(summary.resultingCausalFrontier, resultingCausalFrontier)\n ) {\n throw new TypeError(\"Canonical OGACO002 bytes disagree with their durable projection\");\n }\n return;\n }\n if (transaction.modality === \"spreadsheet\" || receipt.modality === \"spreadsheet\") {\n throw new TypeError(\"Committed transaction and receipt modalities disagree\");\n }\n if (\n operations.length !== 0 ||\n transaction.sequenceStart !== transaction.sequenceEnd ||\n transaction.commitProtocolVersion !== receipt.commitProtocolVersion ||\n transaction.priorNativeRevision !== receipt.priorNativeRevision ||\n transaction.nativeRevision !== receipt.nativeRevision ||\n transaction.commandCount !== receipt.commandCount\n ) {\n throw new TypeError(\"Canonical serialized commit disagrees with its receipt projection\");\n }\n validateInteger(\n transaction.commitProtocolVersion,\n \"serialized commit protocol version\",\n EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION,\n EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION,\n );\n validateInteger(transaction.priorNativeRevision, \"serialized prior native revision\", 0);\n validateInteger(transaction.nativeRevision, \"serialized native revision\", 0);\n validateInteger(\n transaction.commandCount,\n \"serialized command count\",\n 1,\n MAX_COMMITTED_TRANSACTION_OPERATIONS,\n );\n if (\n !(transaction.nativeReceiptBytes instanceof Uint8Array) ||\n transaction.nativeReceiptBytes.byteLength < 1 ||\n transaction.nativeReceiptBytes.byteLength > EDITABLE_ARTIFACT_NATIVE_RECEIPT_MAX_BYTES\n ) {\n throw new TypeError(\"Serialized native receipt bytes are invalid or oversized\");\n }\n let summary: ReturnType<typeof decodeEditableArtifactSerializedCommit>;\n try {\n summary = decodeEditableArtifactSerializedCommit(\n transaction.committedTransactionBytes,\n transaction.modality,\n );\n } catch (error) {\n throw new TypeError(\"Canonical committed transaction is not a valid OGAST001 envelope\", {\n cause: error,\n });\n }\n if (\n summary.transactionId !== transaction.serverTransactionId ||\n summary.parentHeadSequence !== transaction.sequenceStart - 1 ||\n summary.resultHeadSequence !== transaction.sequenceEnd ||\n summary.priorNativeRevision !== transaction.priorNativeRevision ||\n summary.priorStateHash !== transaction.priorStateHash ||\n summary.stateHash !== transaction.stateHash ||\n summary.requestHash !== transaction.requestHash ||\n summary.nativeReceipt.revision !== transaction.nativeRevision ||\n summary.nativeReceipt.commandCount !== transaction.commandCount ||\n !equalByteArrays(summary.intentBytes, receipt.intentBytes) ||\n !equalByteArrays(summary.nativeReceiptBytes, transaction.nativeReceiptBytes)\n ) {\n throw new TypeError(\"Canonical OGAST001 bytes disagree with their durable projection\");\n }\n}\n\nfunction validateReceipt(\n receipt: PersistedEditableArtifactReceipt,\n artifact: PersistedEditableArtifact,\n): Uint8Array {\n validateStableId(receipt.receiptId, \"receipt id\");\n validateStableId(receipt.serverTransactionId, \"transaction id\");\n if (\n receipt.scope.accountId !== artifact.scope.accountId ||\n receipt.scope.workspaceId !== artifact.scope.workspaceId ||\n receipt.artifactId !== artifact.id ||\n receipt.modality !== artifact.modality\n )\n throw new TypeError(\"Receipt tenant identity does not match locked artifact\");\n validateClientTransactionId(receipt.clientTransactionId);\n validateReplicaId(receipt.replicaId);\n validateInteger(receipt.replicaCounter, \"receipt replica counter\", 1);\n if (receipt.previousLocalTransactionId !== null) {\n validateClientTransactionId(receipt.previousLocalTransactionId);\n if (receipt.previousLocalTransactionId === receipt.clientTransactionId) {\n throw new TypeError(\"A transaction cannot name itself as its predecessor\");\n }\n }\n const intentBytes = validateCanonicalIntentBytes(receipt.intentBytes, receipt.requestHash);\n validateHash(receipt.requestHash, \"request hash\");\n validateActorKey(receipt.actorKey);\n validateInteger(receipt.sequenceStart, \"receipt start sequence\", 1);\n validateInteger(receipt.sequenceEnd, \"receipt end sequence\", receipt.sequenceStart);\n validateHash(receipt.priorStateHash, \"receipt prior state hash\");\n validateHash(receipt.stateHash, \"receipt state hash\");\n validateInteger(receipt.intentEnvelopeVersion, \"intent envelope version\", 1, 1);\n validateIntentProtocolVersion(receipt.intentProtocolVersion);\n validateInteger(receipt.commandProtocolVersion, \"command protocol version\", 1);\n validateBoundedText(\n receipt.kernelVersion,\n \"kernel version\",\n EDITABLE_ARTIFACT_KERNEL_VERSION_MAX_BYTES,\n );\n validateInteger(receipt.modelSchemaVersion, \"model schema version\", 1);\n canonicalIsoString(receipt.committedAt, \"receipt commit time\");\n if (receipt.modality === \"spreadsheet\") {\n validateInteger(\n receipt.operationCount,\n \"receipt operation count\",\n 1,\n MAX_COMMITTED_TRANSACTION_OPERATIONS,\n );\n if (receipt.sequenceEnd - receipt.sequenceStart + 1 !== receipt.operationCount) {\n throw new TypeError(\"Receipt interval does not match operation count\");\n }\n parseFrontier(receipt.causalBase);\n parseFrontier(receipt.resolvedCausalBase);\n parseFrontier(receipt.resultingCausalFrontier);\n parseStableIdArray(receipt.selectiveUndoOperationIds, \"undo targets\", 10_000);\n validateInteger(receipt.operationProtocolVersion, \"operation protocol version\", 1);\n } else {\n if (receipt.sequenceEnd !== receipt.sequenceStart) {\n throw new TypeError(\"Serialized receipt must advance the durable head exactly once\");\n }\n validateInteger(\n receipt.commitProtocolVersion,\n \"serialized commit protocol version\",\n EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION,\n EDITABLE_ARTIFACT_SERIALIZED_COMMIT_VERSION,\n );\n validateInteger(receipt.priorNativeRevision, \"serialized prior native revision\", 0);\n validateInteger(receipt.nativeRevision, \"serialized native revision\", 0);\n validateInteger(\n receipt.commandCount,\n \"serialized command count\",\n 1,\n MAX_COMMITTED_TRANSACTION_OPERATIONS,\n );\n }\n return intentBytes;\n}\n\nfunction ownSnapshotCommit(\n input: CommitPersistedEditableArtifactSnapshot,\n): CommitPersistedEditableArtifactSnapshot {\n const expectedCurrentSnapshotId =\n input.expectedCurrentSnapshotId === null\n ? null\n : validateStableId(input.expectedCurrentSnapshotId, \"expected current snapshot id\");\n const snapshot = ownSnapshotMetadata(input.snapshot);\n return Object.freeze({\n expectedCurrentSnapshotId,\n expectedAuthorizationRevision: validateInteger(\n input.expectedAuthorizationRevision,\n \"expected snapshot authorization revision\",\n 0,\n ),\n authorizationActor: validateLiveTicketActor(input.authorizationActor),\n authorizationPermission: snapshotAuthorizationPermission(\n input.authorizationPermission ?? \"manage\",\n ),\n snapshot,\n outbox: cloneOutbox(input.outbox),\n });\n}\n\nfunction ownSnapshotMetadata(\n snapshot: PersistedEditableArtifactSnapshotMetadata,\n): PersistedEditableArtifactSnapshotMetadata {\n return snapshot.modality === \"spreadsheet\"\n ? Object.freeze({\n ...snapshot,\n scope: validateScope(snapshot.scope),\n coveredCausalFrontier: parseFrontier(snapshot.coveredCausalFrontier),\n })\n : Object.freeze({\n ...snapshot,\n scope: validateScope(snapshot.scope),\n modality: serializedModality(snapshot.modality, \"snapshot modality\"),\n nativeRevision: validateInteger(snapshot.nativeRevision, \"snapshot native revision\", 0),\n });\n}\n\nfunction validateSnapshotCommit(\n artifact: PersistedEditableArtifact,\n input: Omit<CommitPersistedEditableArtifactSnapshot, \"authorizationActor\">,\n): void {\n if (input.expectedAuthorizationRevision !== artifact.authorizationRevision) {\n throw conflict(\"Artifact authorization changed before snapshot publication\");\n }\n if (input.expectedCurrentSnapshotId !== artifact.currentSnapshotId) {\n throw conflict(\"Current snapshot changed\");\n }\n const snapshot = input.snapshot;\n if (\n snapshot.scope.accountId !== artifact.scope.accountId ||\n snapshot.scope.workspaceId !== artifact.scope.workspaceId ||\n snapshot.artifactId !== artifact.id ||\n snapshot.modality !== artifact.modality\n )\n throw new TypeError(\"Snapshot tenant identity does not match locked artifact\");\n validateStableId(snapshot.snapshotId, \"snapshot id\");\n validateBoundedText(snapshot.blobReference, \"snapshot blob reference\", 1024);\n validateInteger(\n snapshot.byteSize,\n \"snapshot byte size\",\n 1,\n EDITABLE_ARTIFACT_PRODUCT_MAX_SNAPSHOT_BYTES,\n );\n validateHash(snapshot.contentHash, \"snapshot content hash\");\n if (snapshot.mimeType !== \"application/vnd.opengeni.editable-artifact-snapshot\") {\n throw new TypeError(\"Snapshot MIME type is invalid\");\n }\n validateInteger(snapshot.coveredHeadSequence, \"snapshot coverage\", 0, artifact.headSequence);\n validateHash(snapshot.stateHash, \"snapshot state hash\");\n validateInteger(snapshot.modelSchemaVersion, \"model schema version\", 1);\n validateBoundedText(\n snapshot.kernelVersion,\n \"kernel version\",\n EDITABLE_ARTIFACT_KERNEL_VERSION_MAX_BYTES,\n );\n if (snapshot.modality === \"spreadsheet\") {\n parseFrontier(snapshot.coveredCausalFrontier);\n validateInteger(snapshot.operationProtocolVersion, \"operation protocol version\", 1);\n validateInteger(snapshot.crdtStateVersion, \"CRDT state version\", 1);\n } else {\n validateInteger(snapshot.nativeRevision, \"snapshot native revision\", 0);\n }\n canonicalIsoString(snapshot.verifiedAt, \"snapshot verification time\");\n canonicalIsoString(snapshot.publishedAt, \"snapshot publication time\");\n if (snapshot.verifiedAt > snapshot.publishedAt) {\n throw new TypeError(\"Snapshot verification time cannot follow publication time\");\n }\n validateOutboxRecord(input.outbox, artifact);\n}\n\nfunction snapshotAuthorizationPermission(value: unknown): \"manage\" | \"read\" | \"edit\" {\n if (value !== \"manage\" && value !== \"read\" && value !== \"edit\") {\n throw new TypeError(\"Snapshot authorization permission is invalid\");\n }\n return value;\n}\n\nfunction validateGenesisCreation(\n artifact: PersistedEditableArtifact,\n snapshot: PersistedEditableArtifactSnapshotMetadata,\n outbox: PersistedEditableArtifactLiveOutboxRecord,\n operationKind: \"create\" | \"import\",\n): void {\n validateSnapshotCommit(artifact, {\n expectedCurrentSnapshotId: null,\n expectedAuthorizationRevision: artifact.authorizationRevision,\n snapshot,\n outbox,\n });\n if (\n snapshot.coveredHeadSequence !== 0 ||\n (operationKind === \"create\" &&\n (snapshot.modality === \"spreadsheet\"\n ? snapshot.coveredCausalFrontier.length !== 0\n : snapshot.nativeRevision !== 0)) ||\n snapshot.stateHash !== artifact.stateHash ||\n snapshot.publishedAt !== artifact.createdAt\n ) {\n throw new TypeError(\"Genesis snapshot must exactly define the sequence-zero artifact state\");\n }\n validateSnapshotOutbox(outbox, snapshot);\n}\n\nfunction validateExpectedPredecessor(\n value: ExpectedPersistedEditableArtifactPredecessor | null,\n): ExpectedPersistedEditableArtifactPredecessor | null {\n if (value === null) return null;\n if (!isPlainRecord(value)) throw new TypeError(\"Expected predecessor is invalid\");\n assertExactKeys(\n value,\n [\n \"actorKey\",\n \"clientTransactionId\",\n \"receiptId\",\n \"replicaCounter\",\n \"replicaId\",\n \"serverTransactionId\",\n ],\n \"expected predecessor\",\n );\n return Object.freeze({\n receiptId: validateStableId(value.receiptId, \"predecessor receipt id\"),\n serverTransactionId: validateStableId(value.serverTransactionId, \"predecessor transaction id\"),\n actorKey: validateActorKey(value.actorKey as string).key,\n clientTransactionId: validateClientTransactionId(value.clientTransactionId),\n replicaId: validateReplicaId(value.replicaId),\n replicaCounter: validateInteger(value.replicaCounter, \"predecessor replica counter\", 1),\n });\n}\n\nfunction predecessorMatches(\n actual: PersistedEditableArtifactReceipt | null,\n expected: ExpectedPersistedEditableArtifactPredecessor,\n): boolean {\n return (\n actual !== null &&\n actual.receiptId === expected.receiptId &&\n actual.serverTransactionId === expected.serverTransactionId &&\n actual.actorKey === expected.actorKey &&\n actual.clientTransactionId === expected.clientTransactionId &&\n actual.replicaId === expected.replicaId &&\n actual.replicaCounter === expected.replicaCounter\n );\n}\n\nfunction replayResult(\n receipt: PersistedEditableArtifactReceipt,\n): TryCommitPersistedEditableArtifactTransactionResult {\n return Object.freeze({ kind: \"replayed\", receipt: cloneReceipt(receipt) });\n}\n\nfunction validateOutboxRecord(\n record: PersistedEditableArtifactLiveOutboxRecord,\n artifact: PersistedEditableArtifact,\n): void {\n validateStableId(record.outboxId, \"outbox id\");\n if (\n record.event.scope.accountId !== artifact.scope.accountId ||\n record.event.scope.workspaceId !== artifact.scope.workspaceId ||\n record.event.artifactId !== artifact.id ||\n record.event.modality !== artifact.modality\n )\n throw new TypeError(\"Outbox event tenant identity does not match locked artifact\");\n parseLiveEvent(record.event);\n if (\n record.state !== \"pending\" ||\n record.attemptCount !== 0 ||\n record.leaseOwner !== null ||\n record.leaseExpiresAt !== null ||\n record.nextAttemptAt !== record.createdAt ||\n record.lastErrorCode !== null ||\n record.publishedAt !== null ||\n record.deadLetteredAt !== null\n ) {\n throw new TypeError(\"New outbox record must be pending and unleased\");\n }\n canonicalIsoString(record.createdAt, \"outbox creation time\");\n}\n\nfunction validateTransactionOutbox(\n record: PersistedEditableArtifactLiveOutboxRecord,\n receipt: PersistedEditableArtifactReceipt,\n): void {\n if (record.event.kind !== \"transaction_committed\") {\n throw new TypeError(\"Transaction commit requires a transaction outbox event\");\n }\n const event = parseLiveEvent(record.event);\n if (\n event.kind !== \"transaction_committed\" ||\n event.modality !== receipt.modality ||\n event.serverTransactionId !== receipt.serverTransactionId ||\n event.sequenceStart !== receipt.sequenceStart ||\n event.sequenceEnd !== receipt.sequenceEnd ||\n event.stateHash !== receipt.stateHash ||\n (event.modality === \"spreadsheet\" && receipt.modality === \"spreadsheet\"\n ? event.operationProtocolVersion !== receipt.operationProtocolVersion\n : event.modality !== \"spreadsheet\" && receipt.modality !== \"spreadsheet\"\n ? event.commitProtocolVersion !== receipt.commitProtocolVersion\n : true) ||\n event.committedAt !== receipt.committedAt ||\n record.createdAt !== receipt.committedAt\n ) {\n throw new TypeError(\"Transaction outbox event does not exactly describe its durable commit\");\n }\n}\n\nfunction validateSnapshotOutbox(\n record: PersistedEditableArtifactLiveOutboxRecord,\n snapshot: PersistedEditableArtifactSnapshotMetadata,\n): void {\n if (record.event.kind !== \"snapshot_published\") {\n throw new TypeError(\"Snapshot publication requires a snapshot outbox event\");\n }\n const event = parseLiveEvent(record.event);\n if (\n event.kind !== \"snapshot_published\" ||\n event.modality !== snapshot.modality ||\n event.snapshotId !== snapshot.snapshotId ||\n event.coveredHeadSequence !== snapshot.coveredHeadSequence ||\n event.stateHash !== snapshot.stateHash ||\n (event.modality === \"spreadsheet\" &&\n snapshot.modality === \"spreadsheet\" &&\n event.operationProtocolVersion !== snapshot.operationProtocolVersion) ||\n event.publishedAt !== snapshot.publishedAt ||\n record.createdAt !== snapshot.publishedAt\n ) {\n throw new TypeError(\"Snapshot outbox event does not exactly describe its durable publication\");\n }\n}\n\ntype ParsedActor =\n | { kind: \"human\"; subjectId: string; key: string }\n | {\n kind: \"agent\";\n subjectId: string;\n sessionId: string;\n turnId: string;\n attemptId: string;\n generation: number;\n key: string;\n }\n | { kind: \"service\"; subjectId: string; service: string; key: string };\n\nfunction validateActorKey(input: string): ParsedActor {\n validateBoundedText(input, \"actor key\", 8192);\n let value: unknown;\n try {\n value = JSON.parse(input);\n } catch {\n throw new TypeError(\"Actor key must be canonical JSON\");\n }\n if (!Array.isArray(value)) throw new TypeError(\"Actor key must be a JSON tuple\");\n let actor: ParsedActor;\n if (value[0] === \"human\" && value.length === 2) {\n actor = {\n kind: \"human\",\n subjectId: validateIdentity(value[1], \"actor subject id\"),\n key: input,\n };\n } else if (value[0] === \"agent\" && value.length === 6) {\n actor = {\n kind: \"agent\",\n subjectId: validateIdentity(value[1], \"actor subject id\"),\n sessionId: validateIdentity(value[2], \"agent session id\"),\n turnId: validateIdentity(value[3], \"agent turn id\"),\n attemptId: validateIdentity(value[4], \"agent attempt id\"),\n generation: validateInteger(value[5], \"agent generation\", 0),\n key: input,\n };\n } else if (value[0] === \"service\" && value.length === 3) {\n actor = {\n kind: \"service\",\n subjectId: validateIdentity(value[1], \"actor subject id\"),\n service: validateIdentity(value[2], \"service name\"),\n key: input,\n };\n } else {\n throw new TypeError(\"Actor key tuple has an unsupported authority shape\");\n }\n if (JSON.stringify(value) !== input)\n throw new TypeError(\"Actor key must use canonical JSON encoding\");\n return actor;\n}\n\nfunction parseFrontier(input: unknown): PersistedEditableArtifactCausalFrontier {\n if (!Array.isArray(input) || input.length > 65_536)\n throw corrupt(\"Causal frontier is invalid or oversized\");\n const seen = new Set<string>();\n const output = input.map((raw) => {\n if (!isPlainRecord(raw)) throw corrupt(\"Causal frontier entry is invalid\");\n const keys = Object.keys(raw).sort();\n if (keys.length !== 2 || keys[0] !== \"counter\" || keys[1] !== \"replicaId\") {\n throw corrupt(\"Causal frontier entry contains unknown fields\");\n }\n const replicaId = validateReplicaId(raw.replicaId);\n if (seen.has(replicaId)) throw corrupt(\"Causal frontier contains duplicate replicas\");\n seen.add(replicaId);\n return Object.freeze({ replicaId, counter: validateInteger(raw.counter, \"causal counter\", 1) });\n });\n output.sort((left, right) =>\n left.replicaId < right.replicaId ? -1 : left.replicaId > right.replicaId ? 1 : 0,\n );\n for (let index = 0; index < output.length; index += 1) {\n const raw = input[index] as Record<string, unknown>;\n if (raw.replicaId !== output[index]!.replicaId)\n throw corrupt(\"Causal frontier is not canonically sorted\");\n }\n if (new TextEncoder().encode(JSON.stringify(output)).byteLength > 1024 * 1024) {\n throw corrupt(\"Causal frontier exceeds 1 MiB\");\n }\n return Object.freeze(output);\n}\n\nfunction parseStableIdArray(input: unknown, label: string, max: number): readonly string[] {\n if (!Array.isArray(input) || input.length > max)\n throw corrupt(`${label} is invalid or oversized`);\n const values = input.map((value) => validateStableId(value, label));\n if (new Set(values).size !== values.length) throw corrupt(`${label} contains duplicates`);\n return Object.freeze(values);\n}\n\nfunction validateScope(scope: PersistedEditableArtifactScope): PersistedEditableArtifactScope {\n if (!isPlainRecord(scope)) throw new TypeError(\"Editable artifact scope is invalid\");\n assertExactKeys(scope, [\"accountId\", \"workspaceId\"], \"editable artifact scope\");\n return Object.freeze({\n accountId: validateIdentity(scope.accountId, \"account id\"),\n workspaceId: validateIdentity(scope.workspaceId, \"workspace id\"),\n });\n}\n\nfunction validateLiveTicketRecord(\n input: PersistedEditableArtifactLiveTicketRecord,\n): PersistedEditableArtifactLiveTicketRecord {\n if (!isPlainRecord(input)) throw new TypeError(\"Live ticket record is invalid\");\n assertExactKeys(\n input,\n [\n \"actor\",\n \"allowEdit\",\n \"artifactId\",\n \"expiresAt\",\n \"issuedAt\",\n \"modality\",\n \"protocolVersion\",\n \"scope\",\n \"tokenDigest\",\n ],\n \"live ticket record\",\n );\n const issuedAt = canonicalIsoString(input.issuedAt, \"live ticket issuedAt\");\n const expiresAt = canonicalIsoString(input.expiresAt, \"live ticket expiresAt\");\n const durationMs = Date.parse(expiresAt) - Date.parse(issuedAt);\n if (durationMs < 1_000 || durationMs > 60_000) {\n throw new TypeError(\"Live ticket lifetime must be 1-60 seconds\");\n }\n const modality = validateLiveTicketModality(input.modality);\n const protocolVersion = validateInteger(input.protocolVersion, \"live protocol version\", 1);\n if (protocolVersion !== EDITABLE_ARTIFACT_LIVE_WIRE_VERSION) {\n throw new TypeError(\"Live ticket protocol version is unsupported\");\n }\n return Object.freeze({\n tokenDigest: validateHash(input.tokenDigest, \"live ticket digest\"),\n scope: validateScope(input.scope),\n artifactId: validateStableId(input.artifactId, \"artifact id\"),\n modality,\n actor: validateLiveTicketActor(input.actor),\n allowEdit: validateBoolean(input.allowEdit, \"live ticket allowEdit\"),\n protocolVersion,\n issuedAt,\n expiresAt,\n });\n}\n\nfunction validateLiveTicketActor(\n input: PersistedEditableArtifactLiveTicketActor,\n): PersistedEditableArtifactLiveTicketActor {\n if (!isPlainRecord(input)) throw new TypeError(\"Live ticket actor is invalid\");\n const common = {\n subjectId: validateIdentity(input.subjectId, \"actor subject id\"),\n replicaId: validateReplicaId(input.replicaId),\n };\n if (input.kind === \"human\") {\n assertExactKeys(input, [\"kind\", \"replicaId\", \"subjectId\"], \"human live ticket actor\");\n return Object.freeze({ kind: \"human\" as const, ...common });\n }\n if (input.kind === \"agent\") {\n assertExactKeys(\n input,\n [\"attemptId\", \"generation\", \"kind\", \"replicaId\", \"sessionId\", \"subjectId\", \"turnId\"],\n \"agent live ticket actor\",\n );\n return Object.freeze({\n kind: \"agent\" as const,\n ...common,\n sessionId: validateIdentity(input.sessionId, \"agent session id\"),\n turnId: validateIdentity(input.turnId, \"agent turn id\"),\n attemptId: validateIdentity(input.attemptId, \"agent attempt id\"),\n generation: validateInteger(input.generation, \"agent generation\", 0, 2_147_483_647),\n });\n }\n if (input.kind === \"service\") {\n assertExactKeys(\n input,\n [\"kind\", \"replicaId\", \"service\", \"subjectId\"],\n \"service live ticket actor\",\n );\n return Object.freeze({\n kind: \"service\" as const,\n ...common,\n service: validateIdentity(input.service, \"service name\"),\n });\n }\n throw new TypeError(\"Live ticket actor kind is invalid\");\n}\n\nfunction persistedEditableArtifactActorKey(actor: PersistedEditableArtifactActor): string {\n switch (actor.kind) {\n case \"human\":\n return JSON.stringify([actor.kind, actor.subjectId]);\n case \"agent\":\n return JSON.stringify([\n actor.kind,\n actor.subjectId,\n actor.sessionId,\n actor.turnId,\n actor.attemptId,\n actor.generation,\n ]);\n case \"service\":\n return JSON.stringify([actor.kind, actor.subjectId, actor.service]);\n }\n}\n\nasync function transactionallyAuthorizeEditableArtifactActor(\n tx: Database,\n input: Readonly<{\n scope: PersistedEditableArtifactScope;\n artifactId: string;\n actor: PersistedEditableArtifactActor;\n permission: \"create\" | \"import\" | \"read\" | \"edit\" | \"manage\";\n }>,\n): Promise<Readonly<{ allowed: boolean; revision: number }>> {\n const actor = input.actor;\n const rows = await rawRows<{\n allowed: boolean;\n authorization_revision: string | number | bigint;\n }>(\n tx,\n sql`select * from opengeni_private.authorize_editable_artifact_actor(\n ${input.scope.accountId}::uuid,\n ${input.scope.workspaceId}::uuid,\n ${input.artifactId},\n ${actor.kind},\n ${actor.subjectId},\n ${actor.kind === \"agent\" ? actor.sessionId : null},\n ${actor.kind === \"agent\" ? actor.turnId : null},\n ${actor.kind === \"agent\" ? actor.attemptId : null},\n ${actor.kind === \"agent\" ? actor.generation : null},\n ${actor.kind === \"service\" ? actor.service : null},\n ${input.permission},\n current_schema()\n )`,\n );\n const row = rows[0];\n if (rows.length !== 1 || !row) {\n throw corrupt(\"Editable artifact authorization returned no exact decision\");\n }\n return Object.freeze({\n allowed: row.allowed === true,\n revision: safeInteger(row.authorization_revision, \"authorization revision\", 1),\n });\n}\n\nfunction validateLiveTicketModality(\n input: unknown,\n): PersistedEditableArtifactLiveTicketRecord[\"modality\"] {\n if (input !== \"spreadsheet\" && input !== \"presentation\" && input !== \"document\") {\n throw new TypeError(\"Live ticket modality is invalid\");\n }\n return input;\n}\n\nfunction liveTicketFromRow(row: LiveTicketRow): PersistedEditableArtifactLiveTicketRecord {\n let actor: PersistedEditableArtifactLiveTicketActor;\n if (row.actor_kind === \"human\") {\n if (\n row.agent_session_id !== null ||\n row.agent_turn_id !== null ||\n row.agent_attempt_id !== null ||\n row.agent_generation !== null ||\n row.service_name !== null\n ) {\n throw corrupt(\"Human live ticket has non-human authority fields\");\n }\n actor = { kind: \"human\", subjectId: row.actor_subject_id, replicaId: row.replica_id };\n } else if (row.actor_kind === \"agent\") {\n if (\n row.agent_session_id === null ||\n row.agent_turn_id === null ||\n row.agent_attempt_id === null ||\n row.agent_generation === null ||\n row.service_name !== null\n ) {\n throw corrupt(\"Agent live ticket authority fields are incomplete\");\n }\n actor = {\n kind: \"agent\",\n subjectId: row.actor_subject_id,\n replicaId: row.replica_id,\n sessionId: row.agent_session_id,\n turnId: row.agent_turn_id,\n attemptId: row.agent_attempt_id,\n generation: row.agent_generation,\n };\n } else if (row.actor_kind === \"service\") {\n if (\n row.agent_session_id !== null ||\n row.agent_turn_id !== null ||\n row.agent_attempt_id !== null ||\n row.agent_generation !== null ||\n row.service_name === null\n ) {\n throw corrupt(\"Service live ticket authority fields are incomplete\");\n }\n actor = {\n kind: \"service\",\n subjectId: row.actor_subject_id,\n replicaId: row.replica_id,\n service: row.service_name,\n };\n } else {\n throw corrupt(\"Live ticket actor kind is invalid\");\n }\n try {\n return validateLiveTicketRecord({\n tokenDigest: row.token_digest,\n scope: { accountId: row.account_id, workspaceId: row.workspace_id },\n artifactId: row.artifact_id,\n modality: validateLiveTicketModality(row.modality),\n actor,\n allowEdit: row.allow_edit,\n protocolVersion: row.protocol_version,\n issuedAt: iso(row.issued_at, \"live ticket issuedAt\"),\n expiresAt: iso(row.expires_at, \"live ticket expiresAt\"),\n });\n } catch (error) {\n throw corrupt(\n `Live ticket record is corrupt: ${error instanceof Error ? error.message : \"unknown error\"}`,\n );\n }\n}\n\nfunction validateStableId(value: unknown, label: string): string {\n if (typeof value !== \"string\" || !/^[0-9a-f]{32}$/.test(value) || /^0+$/.test(value)) {\n throw new TypeError(`${label} must be fixed-width lowercase nonzero hexadecimal text`);\n }\n return value;\n}\n\nfunction validateUuid(value: unknown, label: string): string {\n if (\n typeof value !== \"string\" ||\n !/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u.test(value)\n ) {\n throw new TypeError(`${label} must be a canonical UUID`);\n }\n return value;\n}\n\nfunction validateOriginOperation(value: unknown): \"create\" | \"import\" {\n if (value !== \"create\" && value !== \"import\") {\n throw new TypeError(\"Editable artifact origin operation is invalid\");\n }\n return value;\n}\n\nfunction validateOriginalImport(\n input: Readonly<{\n fileId: string;\n blobRefId: string;\n blobReference: string;\n byteSize: number;\n contentHash: string;\n mimeType: string;\n }>,\n modality: PersistedEditableArtifact[\"modality\"],\n): Readonly<{\n fileId: string;\n blobRefId: string;\n blobReference: string;\n byteSize: number;\n contentHash: string;\n mimeType: string;\n}> {\n if (\n typeof input.fileId !== \"string\" ||\n !/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/u.test(input.fileId)\n ) {\n throw new TypeError(\"Original import file id must be a canonical UUID\");\n }\n const expectedMimeType =\n modality === \"spreadsheet\"\n ? \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\"\n : modality === \"document\"\n ? \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\"\n : \"application/vnd.openxmlformats-officedocument.presentationml.presentation\";\n if (input.mimeType !== expectedMimeType) {\n throw new TypeError(\"Original import MIME type does not match artifact modality\");\n }\n return Object.freeze({\n fileId: input.fileId,\n blobRefId: validateStableId(input.blobRefId, \"original import blob id\"),\n blobReference: validateBoundedText(input.blobReference, \"original import blob reference\", 1024),\n byteSize: validateInteger(\n input.byteSize,\n \"original import byte size\",\n 1,\n EDITABLE_ARTIFACT_ORIGINAL_IMPORT_MAX_BYTES,\n ),\n contentHash: validateHash(input.contentHash, \"original import content hash\"),\n mimeType: expectedMimeType,\n });\n}\n\nfunction validateReplicaId(value: unknown): string {\n if (typeof value !== \"string\" || !/^[0-9a-f]{16}$/.test(value) || /^0+$/.test(value)) {\n throw new TypeError(\"Replica id must be fixed-width lowercase nonzero hexadecimal text\");\n }\n return value;\n}\n\nfunction validateBoolean(value: unknown, label: string): boolean {\n if (typeof value !== \"boolean\") throw new TypeError(`${label} must be boolean`);\n return value;\n}\n\nfunction validateHash(value: unknown, label: string): string {\n if (typeof value !== \"string\" || !/^sha256:[0-9a-f]{64}$/.test(value)) {\n throw new TypeError(`${label} must be a canonical SHA-256 digest`);\n }\n return value;\n}\n\nfunction validateCanonicalIntentBytes(value: unknown, requestHashInput: unknown): Uint8Array {\n if (!(value instanceof Uint8Array)) {\n throw new TypeError(\"Canonical transaction intent must be a Uint8Array\");\n }\n const bytes = value.slice();\n if (bytes.byteLength < 8 || bytes.byteLength > EDITABLE_ARTIFACT_INTENT_MAX_BYTES) {\n throw new TypeError(\"Canonical transaction intent must contain 8 bytes through 5 MiB\");\n }\n const magic = new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes.subarray(0, 8));\n if (magic !== \"OGATX001\") {\n throw new TypeError(\"Canonical transaction intent has an unsupported protocol magic\");\n }\n const requestHash = validateHash(requestHashInput, \"request hash\");\n const digest = `sha256:${createHash(\"sha256\").update(bytes).digest(\"hex\")}`;\n if (digest !== requestHash) {\n throw new TypeError(\"Canonical transaction intent digest does not match request hash\");\n }\n return bytes;\n}\n\nfunction validateIntentProtocolVersion(\n value: unknown,\n): typeof EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION {\n if (value !== EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION) {\n throw new TypeError(\"Intent protocol version is unsupported for current OGATX001\");\n }\n return EDITABLE_ARTIFACT_INTENT_PROTOCOL_VERSION;\n}\n\nfunction validateClientTransactionId(value: unknown): string {\n if (\n typeof value !== \"string\" ||\n value.length < 1 ||\n value.length > 200 ||\n !/^[A-Za-z0-9._:-]+$/.test(value)\n ) {\n throw new TypeError(\"Client transaction id is invalid\");\n }\n return value;\n}\n\nfunction validateIdentity(value: unknown, label: string): string {\n if (\n typeof value !== \"string\" ||\n value.length < 1 ||\n value.length > 256 ||\n value.trim() !== value\n ) {\n throw new TypeError(`${label} must contain 1-256 non-padding characters`);\n }\n return value;\n}\n\nfunction validateLeaseOwner(value: unknown): string {\n return validateIdentity(value, \"outbox lease owner\");\n}\n\nfunction validateOutboxRetryErrorCode(\n value: unknown,\n): PersistedEditableArtifactOutboxRetryErrorCode {\n if (\n value !== \"broker_unavailable\" &&\n value !== \"broker_backpressure\" &&\n value !== \"publish_timeout\"\n ) {\n throw new TypeError(\"Outbox retry error code is invalid\");\n }\n return value;\n}\n\nfunction validateOutboxDeadLetterErrorCode(\n value: unknown,\n): PersistedEditableArtifactOutboxDeadLetterErrorCode {\n if (value !== \"invalid_hint\" && value !== \"oversized_hint\") {\n throw new TypeError(\"Outbox dead-letter error code is invalid\");\n }\n return value;\n}\n\nfunction validateOutboxStoredErrorCode(\n value: unknown,\n):\n | PersistedEditableArtifactOutboxRetryErrorCode\n | PersistedEditableArtifactOutboxDeadLetterErrorCode\n | \"attempts_exhausted\" {\n if (isOutboxRetryErrorCode(value) || isOutboxStoredDeadLetterErrorCode(value)) return value;\n throw corrupt(\"Outbox error code is invalid\");\n}\n\nfunction isOutboxRetryErrorCode(\n value: unknown,\n): value is PersistedEditableArtifactOutboxRetryErrorCode {\n return (\n value === \"broker_unavailable\" || value === \"broker_backpressure\" || value === \"publish_timeout\"\n );\n}\n\nfunction isOutboxStoredDeadLetterErrorCode(\n value: unknown,\n): value is PersistedEditableArtifactOutboxDeadLetterErrorCode | \"attempts_exhausted\" {\n return value === \"invalid_hint\" || value === \"oversized_hint\" || value === \"attempts_exhausted\";\n}\n\nfunction validateBoundedText(value: unknown, label: string, maxBytes: number): string {\n if (typeof value !== \"string\" || value.trim() !== value)\n throw new TypeError(`${label} is invalid`);\n const bytes = new TextEncoder().encode(value).byteLength;\n if (bytes < 1 || bytes > maxBytes) throw new TypeError(`${label} exceeds its byte limit`);\n return value;\n}\n\nfunction validateTitle(value: string): void {\n validateBoundedText(value, \"artifact title\", 512);\n}\n\nfunction artifactModality(value: unknown, label: string): PersistedEditableArtifact[\"modality\"] {\n if (value !== \"spreadsheet\" && value !== \"document\" && value !== \"presentation\") {\n throw corrupt(`${label} is invalid`);\n }\n return value;\n}\n\nfunction serializedModality(value: unknown, label: string): \"document\" | \"presentation\" {\n if (value !== \"document\" && value !== \"presentation\") {\n throw corrupt(`${label} is not a serialized modality`);\n }\n return value;\n}\n\nfunction equalByteArrays(left: Uint8Array, right: Uint8Array): boolean {\n if (left.byteLength !== right.byteLength) return false;\n for (let index = 0; index < left.byteLength; index += 1) {\n if (left[index] !== right[index]) return false;\n }\n return true;\n}\n\nfunction assertSerializedColumnsAbsent(row: CommittedTransactionRow): void {\n if (\n row.commit_protocol_version !== null ||\n row.prior_native_revision !== null ||\n row.native_revision !== null ||\n row.command_count !== null ||\n row.native_receipt_byte_size !== null ||\n row.native_receipt_hash !== null ||\n row.native_receipt_bytes !== null\n ) {\n throw corrupt(\"Spreadsheet transaction contains serialized projection fields\");\n }\n}\n\nfunction readNativeReceiptBytes(row: CommittedTransactionRow): Uint8Array {\n if (!(row.native_receipt_bytes instanceof Uint8Array)) {\n throw corrupt(\"Serialized native receipt bytes are missing\");\n }\n const bytes = Uint8Array.from(row.native_receipt_bytes);\n const byteSize = validateInteger(\n row.native_receipt_byte_size,\n \"serialized native receipt byte size\",\n 1,\n EDITABLE_ARTIFACT_NATIVE_RECEIPT_MAX_BYTES,\n );\n if (bytes.byteLength !== byteSize) {\n throw corrupt(\"Serialized native receipt size disagrees with its bytes\");\n }\n const digest = `sha256:${createHash(\"sha256\").update(bytes).digest(\"hex\")}`;\n if (digest !== validateHash(row.native_receipt_hash, \"serialized native receipt hash\")) {\n throw corrupt(\"Serialized native receipt digest verification failed\");\n }\n return bytes;\n}\n\nfunction validateInteger(\n value: unknown,\n label: string,\n min: number,\n max = Number.MAX_SAFE_INTEGER,\n): number {\n if (typeof value !== \"number\" || !Number.isSafeInteger(value) || value < min || value > max) {\n throw new TypeError(`${label} must be a safe integer from ${min} through ${max}`);\n }\n return value;\n}\n\nfunction safeInteger(value: string | number | bigint | null, label: string, min = 0): number {\n if (value === null) throw corrupt(`${label} is missing`);\n const number = typeof value === \"number\" ? value : Number(value);\n return validateInteger(number, label, min);\n}\n\nfunction validateDate(value: Date, label: string): Date {\n if (!(value instanceof Date) || !Number.isFinite(value.getTime()))\n throw new TypeError(`${label} is invalid`);\n return new Date(value.getTime());\n}\n\nfunction canonicalIsoString(value: unknown, label: string): string {\n if (typeof value !== \"string\" || !/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}\\.\\d{3}Z$/.test(value)) {\n throw new TypeError(`${label} must be a canonical UTC timestamp`);\n }\n return value;\n}\n\nfunction iso(value: Date | string, label: string): string {\n if (value instanceof Date) return validateDate(value, label).toISOString();\n const date = new Date(value);\n if (!Number.isFinite(date.getTime())) throw corrupt(`${label} is invalid`);\n return date.toISOString();\n}\n\nfunction json(value: unknown): string {\n return JSON.stringify(value);\n}\n\nfunction isPlainRecord(value: unknown): value is Record<string, unknown> {\n if (typeof value !== \"object\" || value === null || Array.isArray(value)) return false;\n const prototype = Object.getPrototypeOf(value);\n return prototype === Object.prototype || prototype === null;\n}\n\nfunction assertExactKeys(\n value: Record<string, unknown>,\n expected: readonly string[],\n label: string,\n): void {\n const keys = Object.keys(value).sort();\n if (keys.length !== expected.length || keys.some((key, index) => key !== expected[index])) {\n throw new TypeError(`${label} contains unknown or missing fields`);\n }\n}\n\nfunction sameFrontier(\n left: PersistedEditableArtifactCausalFrontier,\n right: PersistedEditableArtifactCausalFrontier,\n): boolean {\n return (\n left.length === right.length &&\n left.every(\n (entry, index) =>\n entry.replicaId === right[index]?.replicaId && entry.counter === right[index]?.counter,\n )\n );\n}\n\nfunction causalCounter(\n frontier: PersistedEditableArtifactCausalFrontier,\n replicaId: string,\n): number {\n return frontier.find((entry) => entry.replicaId === replicaId)?.counter ?? 0;\n}\n\nfunction frontierDominates(\n candidate: PersistedEditableArtifactCausalFrontier,\n required: PersistedEditableArtifactCausalFrontier,\n): boolean {\n return required.every((entry) => causalCounter(candidate, entry.replicaId) >= entry.counter);\n}\n\nfunction mergeFrontier(\n frontier: PersistedEditableArtifactCausalFrontier,\n entry: PersistedEditableArtifactCausalEntry,\n): PersistedEditableArtifactCausalFrontier {\n return mergeFrontiers(frontier, [entry]);\n}\n\nfunction mergeFrontiers(\n ...frontiers: readonly PersistedEditableArtifactCausalFrontier[]\n): PersistedEditableArtifactCausalFrontier {\n const counters = new Map<string, number>();\n for (const frontier of frontiers) {\n for (const entry of frontier) {\n counters.set(entry.replicaId, Math.max(counters.get(entry.replicaId) ?? 0, entry.counter));\n }\n }\n return Object.freeze(\n [...counters]\n .sort(([left], [right]) => (left < right ? -1 : left > right ? 1 : 0))\n .map(([replicaId, counter]) => Object.freeze({ replicaId, counter })),\n );\n}\n\nfunction cloneFrontier(\n frontier: PersistedEditableArtifactCausalFrontier,\n): PersistedEditableArtifactCausalFrontier {\n return Object.freeze(frontier.map((entry) => Object.freeze({ ...entry })));\n}\n\nfunction cloneReceipt(receipt: PersistedEditableArtifactReceipt): PersistedEditableArtifactReceipt {\n return receipt.modality === \"spreadsheet\"\n ? Object.freeze({\n ...receipt,\n scope: Object.freeze({ ...receipt.scope }),\n intentBytes: receipt.intentBytes.slice(),\n modality: \"spreadsheet\" as const,\n causalBase: cloneFrontier(receipt.causalBase),\n resolvedCausalBase: cloneFrontier(receipt.resolvedCausalBase),\n resultingCausalFrontier: cloneFrontier(receipt.resultingCausalFrontier),\n selectiveUndoOperationIds: Object.freeze([...receipt.selectiveUndoOperationIds]),\n })\n : Object.freeze({\n ...receipt,\n scope: Object.freeze({ ...receipt.scope }),\n intentBytes: receipt.intentBytes.slice(),\n modality: receipt.modality,\n });\n}\n\nfunction cloneOperation(\n operation: PersistedEditableArtifactOperationRecord,\n): PersistedEditableArtifactOperationRecord {\n return Object.freeze({\n ...operation,\n scope: Object.freeze({ ...operation.scope }),\n dot: Object.freeze({ ...operation.dot }),\n });\n}\n\nfunction cloneCommittedTransaction(\n transaction: PersistedEditableArtifactCommittedTransactionRecord,\n): PersistedEditableArtifactCommittedTransactionRecord {\n if (!(transaction.committedTransactionBytes instanceof Uint8Array)) {\n throw new TypeError(\"Canonical committed transaction bytes must be a Uint8Array\");\n }\n // Inspect the caller-owned buffer synchronously before copying, then inspect\n // the owned copy in validateOwnedCommitCandidate. This closes the only\n // mutable boundary before the first await without retaining caller memory.\n if (transaction.modality === \"spreadsheet\") {\n decodeCommittedTransactionSummary(transaction.committedTransactionBytes);\n return Object.freeze({\n ...transaction,\n scope: Object.freeze({ ...transaction.scope }),\n dot: Object.freeze({ ...transaction.dot }),\n resolvedCausalBase: cloneFrontier(transaction.resolvedCausalBase),\n resultingCausalFrontier: cloneFrontier(transaction.resultingCausalFrontier),\n operationIds: Object.freeze([...transaction.operationIds]),\n committedTransactionBytes: transaction.committedTransactionBytes.slice(),\n });\n }\n if (!(transaction.nativeReceiptBytes instanceof Uint8Array)) {\n throw new TypeError(\"Serialized native receipt bytes must be a Uint8Array\");\n }\n decodeEditableArtifactSerializedCommit(\n transaction.committedTransactionBytes,\n transaction.modality,\n );\n return Object.freeze({\n ...transaction,\n scope: Object.freeze({ ...transaction.scope }),\n nativeReceiptBytes: transaction.nativeReceiptBytes.slice(),\n committedTransactionBytes: transaction.committedTransactionBytes.slice(),\n });\n}\n\nfunction cloneOutbox(\n outbox: PersistedEditableArtifactLiveOutboxRecord,\n): PersistedEditableArtifactLiveOutboxRecord {\n return Object.freeze({\n ...outbox,\n event: parseLiveEvent(outbox.event),\n });\n}\n\nfunction sameStringArray(left: readonly string[], right: readonly string[]): boolean {\n return left.length === right.length && left.every((value, index) => value === right[index]);\n}\n\nfunction cloneArtifact(\n artifact: Extract<PersistedEditableArtifact, { modality: \"spreadsheet\" }>,\n): Extract<PersistedEditableArtifact, { modality: \"spreadsheet\" }>;\nfunction cloneArtifact(\n artifact: Extract<PersistedEditableArtifact, { modality: \"document\" | \"presentation\" }>,\n): Extract<PersistedEditableArtifact, { modality: \"document\" | \"presentation\" }>;\nfunction cloneArtifact(artifact: PersistedEditableArtifact): PersistedEditableArtifact;\nfunction cloneArtifact(artifact: PersistedEditableArtifact): PersistedEditableArtifact {\n return artifact.modality === \"spreadsheet\"\n ? Object.freeze({\n ...artifact,\n scope: Object.freeze({ ...artifact.scope }),\n causalFrontier: cloneFrontier(artifact.causalFrontier),\n })\n : Object.freeze({\n ...artifact,\n scope: Object.freeze({ ...artifact.scope }),\n modality: artifact.modality,\n });\n}\n\nfunction corrupt(message: string): EditableArtifactPersistenceError {\n return new EditableArtifactPersistenceError(\"corrupt_history\", message);\n}\n\nfunction conflict(message: string): EditableArtifactPersistenceError {\n return new EditableArtifactPersistenceError(\"conflict\", message);\n}\n\nfunction outboxLeaseConflict(): EditableArtifactPersistenceError {\n return new EditableArtifactPersistenceError(\n \"outbox_lease_conflict\",\n \"Live outbox record is not leased by this publisher\",\n );\n}\n\nfunction mapPersistenceError(error: unknown, message: string): Error {\n if (error instanceof EditableArtifactPersistenceError) return error;\n const code = errorCode(error);\n if (code === \"23503\" || code === \"23505\" || code === \"23514\" || code === \"23P01\") {\n return new EditableArtifactPersistenceError(\"conflict\", message, { cause: error });\n }\n if (\n code === \"40001\" ||\n code === \"40P01\" ||\n code === \"55P03\" ||\n code === \"57014\" ||\n code.startsWith(\"08\") ||\n code === \"57P01\" ||\n code === \"57P02\" ||\n code === \"57P03\"\n ) {\n return new EditableArtifactPersistenceError(\"transient\", message, { cause: error });\n }\n return error instanceof Error ? error : new Error(message, { cause: error });\n}\n\nfunction errorCode(error: unknown): string {\n const seen = new Set<unknown>();\n let current = error;\n for (let depth = 0; depth < 8 && current !== null && current !== undefined; depth += 1) {\n if (seen.has(current)) break;\n seen.add(current);\n const value = objectProperty(current, \"code\");\n if (typeof value === \"string\" && /^[0-9A-Z]{5}$/.test(value)) return value;\n current = objectProperty(current, \"cause\");\n }\n return \"\";\n}\n\nfunction objectProperty(value: unknown, key: string): unknown {\n if ((typeof value !== \"object\" && typeof value !== \"function\") || value === null) {\n return undefined;\n }\n return Reflect.get(value, key);\n}\n"],"mappings":"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","names":["summary"]}
|