@tiangong-lca/cli 0.0.33 → 0.1.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.
Files changed (101) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +29 -13
  3. package/assets/import-smoke/simapro.csv +20 -0
  4. package/bin/tiangong-lca.js +1 -1
  5. package/dist/src/cli.js +83 -64
  6. package/dist/src/cli.js.map +1 -1
  7. package/dist/src/lib/dataset-bilingual.js.map +1 -1
  8. package/dist/src/lib/dataset-classification.js.map +1 -1
  9. package/dist/src/lib/dataset-contract.js.map +1 -1
  10. package/dist/src/lib/dataset-evidence-search.js.map +1 -1
  11. package/dist/src/lib/dataset-import-lca.js +302 -131
  12. package/dist/src/lib/dataset-import-lca.js.map +1 -1
  13. package/dist/src/lib/dataset-maintenance-apply.js +213 -46
  14. package/dist/src/lib/dataset-maintenance-apply.js.map +1 -1
  15. package/dist/src/lib/dataset-maintenance-clear-account.js +10 -4
  16. package/dist/src/lib/dataset-maintenance-clear-account.js.map +1 -1
  17. package/dist/src/lib/dataset-maintenance-contract.js +1 -6
  18. package/dist/src/lib/dataset-maintenance-contract.js.map +1 -1
  19. package/dist/src/lib/dataset-maintenance-derivatives.js +0 -1
  20. package/dist/src/lib/dataset-maintenance-derivatives.js.map +1 -1
  21. package/dist/src/lib/dataset-maintenance-flow-identity-capture.js +1 -0
  22. package/dist/src/lib/dataset-maintenance-flow-identity-capture.js.map +1 -1
  23. package/dist/src/lib/dataset-maintenance-pagination.js.map +1 -1
  24. package/dist/src/lib/dataset-maintenance-protected-before.js.map +1 -1
  25. package/dist/src/lib/dataset-maintenance-protected-contract.js +0 -1
  26. package/dist/src/lib/dataset-maintenance-protected-contract.js.map +1 -1
  27. package/dist/src/lib/dataset-maintenance-protected-freeze.js.map +1 -1
  28. package/dist/src/lib/dataset-maintenance-protected-preparation.js +0 -2
  29. package/dist/src/lib/dataset-maintenance-protected-preparation.js.map +1 -1
  30. package/dist/src/lib/dataset-maintenance-protected-seal.js.map +1 -1
  31. package/dist/src/lib/dataset-maintenance-protected-verify.js +0 -3
  32. package/dist/src/lib/dataset-maintenance-protected-verify.js.map +1 -1
  33. package/dist/src/lib/dataset-maintenance-remote.js +36 -14
  34. package/dist/src/lib/dataset-maintenance-remote.js.map +1 -1
  35. package/dist/src/lib/dataset-maintenance-verify.js +1 -2
  36. package/dist/src/lib/dataset-maintenance-verify.js.map +1 -1
  37. package/dist/src/lib/dataset-remote-refresh.js.map +1 -1
  38. package/dist/src/lib/dataset-remote-verify.js +2 -0
  39. package/dist/src/lib/dataset-remote-verify.js.map +1 -1
  40. package/dist/src/lib/dataset-save-draft-run.js +2 -0
  41. package/dist/src/lib/dataset-save-draft-run.js.map +1 -1
  42. package/dist/src/lib/flow-build-alias-map.js.map +1 -1
  43. package/dist/src/lib/flow-fetch-rows.js.map +1 -1
  44. package/dist/src/lib/flow-get.js.map +1 -1
  45. package/dist/src/lib/flow-governance.js.map +1 -1
  46. package/dist/src/lib/flow-list.js +1 -0
  47. package/dist/src/lib/flow-list.js.map +1 -1
  48. package/dist/src/lib/flow-payload-validation.js.map +1 -1
  49. package/dist/src/lib/flow-publish-version.js +1 -0
  50. package/dist/src/lib/flow-publish-version.js.map +1 -1
  51. package/dist/src/lib/flow-read.js +1 -0
  52. package/dist/src/lib/flow-read.js.map +1 -1
  53. package/dist/src/lib/flow-regen-product.js.map +1 -1
  54. package/dist/src/lib/flow-remediate.js.map +1 -1
  55. package/dist/src/lib/identity-preflight.js +4 -10
  56. package/dist/src/lib/identity-preflight.js.map +1 -1
  57. package/dist/src/lib/lifecyclemodel-bundle-save.js +1 -0
  58. package/dist/src/lib/lifecyclemodel-bundle-save.js.map +1 -1
  59. package/dist/src/lib/lifecyclemodel-orchestrate.js.map +1 -1
  60. package/dist/src/lib/lifecyclemodel-publish-resulting-process.js.map +1 -1
  61. package/dist/src/lib/lifecyclemodel-resulting-process.js.map +1 -1
  62. package/dist/src/lib/lifecyclemodel-save-draft-run.js.map +1 -1
  63. package/dist/src/lib/lifecyclemodel-validate-build.js.map +1 -1
  64. package/dist/src/lib/package-version.js.map +1 -1
  65. package/dist/src/lib/process-auto-build.js.map +1 -1
  66. package/dist/src/lib/process-dedup-review.js +14 -7
  67. package/dist/src/lib/process-dedup-review.js.map +1 -1
  68. package/dist/src/lib/process-flow-build-plan.js +111 -30
  69. package/dist/src/lib/process-flow-build-plan.js.map +1 -1
  70. package/dist/src/lib/process-get.js +1 -0
  71. package/dist/src/lib/process-get.js.map +1 -1
  72. package/dist/src/lib/process-list.js +1 -0
  73. package/dist/src/lib/process-list.js.map +1 -1
  74. package/dist/src/lib/process-payload-validation.js.map +1 -1
  75. package/dist/src/lib/process-qa.js.map +1 -1
  76. package/dist/src/lib/process-refresh-references.js +15 -10
  77. package/dist/src/lib/process-refresh-references.js.map +1 -1
  78. package/dist/src/lib/process-save-draft.js +9 -3
  79. package/dist/src/lib/process-save-draft.js.map +1 -1
  80. package/dist/src/lib/process-scope-statistics.js +11 -4
  81. package/dist/src/lib/process-scope-statistics.js.map +1 -1
  82. package/dist/src/lib/process-verify-rows.js.map +1 -1
  83. package/dist/src/lib/publish.js.map +1 -1
  84. package/dist/src/lib/run.js.map +1 -1
  85. package/dist/src/lib/supabase-client.js +13 -1
  86. package/dist/src/lib/supabase-client.js.map +1 -1
  87. package/dist/src/lib/supabase-data-api-contract.js +328 -0
  88. package/dist/src/lib/supabase-data-api-contract.js.map +1 -0
  89. package/dist/src/lib/supabase-data-api-replay.js +69 -0
  90. package/dist/src/lib/supabase-data-api-replay.js.map +1 -0
  91. package/dist/src/lib/supabase-json-ordered-write.js +2 -0
  92. package/dist/src/lib/supabase-json-ordered-write.js.map +1 -1
  93. package/dist/src/lib/supabase-rest.js +1 -0
  94. package/dist/src/lib/supabase-rest.js.map +1 -1
  95. package/dist/src/lib/tidas-sdk-package-validator.js +5 -5
  96. package/dist/src/lib/tidas-sdk-package-validator.js.map +1 -1
  97. package/dist/src/lib/validation.js.map +1 -1
  98. package/dist/src/main.js.map +1 -1
  99. package/package.json +40 -40
  100. package/dist/scripts/assert-full-coverage.js +0 -77
  101. package/dist/scripts/assert-full-coverage.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"dataset-maintenance-contract.js","sourceRoot":"","sources":["../../../src/lib/dataset-maintenance-contract.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from 'node:crypto';\nimport { appendFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { inspectMaintenanceSupportPayload } from './dataset-maintenance-support-validation.js';\nimport {\n isDatasetMaintenanceSnapshotCompleteness,\n type DatasetMaintenanceSnapshotCompleteness,\n} from './dataset-maintenance-pagination.js';\nimport { CliError } from './errors.js';\n\nexport type JsonObject = Record<string, unknown>;\n\nexport const MAINTENANCE_MUTABLE_TABLES = ['contacts', 'sources', 'flows', 'processes'] as const;\n\nexport const MAINTENANCE_SUPPORT_TABLES = ['unitgroups', 'flowproperties'] as const;\n\nexport const MAINTENANCE_SCAN_TABLES = [\n ...MAINTENANCE_MUTABLE_TABLES,\n 'lifecyclemodels',\n ...MAINTENANCE_SUPPORT_TABLES,\n] as const;\n\nexport type DatasetMaintenanceMutableTable = (typeof MAINTENANCE_MUTABLE_TABLES)[number];\nexport type DatasetMaintenanceSupportTable = (typeof MAINTENANCE_SUPPORT_TABLES)[number];\nexport type DatasetMaintenanceActionTable = DatasetMaintenanceMutableTable | 'flowproperties';\nexport type DatasetMaintenanceScanTable = (typeof MAINTENANCE_SCAN_TABLES)[number];\nexport type DatasetMaintenanceOperation =\n | 'delete'\n | 'retire'\n | 'redo-import'\n | 'repair-references'\n | 'merge-support-aliases'\n | 'rebuild-derivatives';\nexport type DatasetMaintenanceActionKind =\n | 'save_draft'\n | 'delete'\n | 'update_json_ordered'\n | 'rebuild_derivatives';\nexport type DatasetMaintenanceTargetMode = 'owner_draft';\n\nexport const DERIVATIVE_REBUILD_COMPONENTS = ['extracted_md', 'embedding_ft'] as const;\nexport type DatasetMaintenanceDerivativeComponent = (typeof DERIVATIVE_REBUILD_COMPONENTS)[number];\n\nexport type DatasetMaintenanceDerivativeSnapshot = {\n schema_version: 'dataset-derivative-snapshot.v1';\n table: 'processes';\n id: string;\n version: string;\n user_id: string;\n state_code: 0;\n modified_at: string;\n json_sha256: string;\n json_ordered_sha256: string;\n extracted_text_sha256: string;\n extracted_md_sha256: string | null;\n embedding_ft_sha256: string | null;\n embedding_ft_at: string | null;\n snapshot_sha256: string;\n};\n\nexport type DatasetMaintenanceAliasDimension = 'time' | 'length_time';\n\nexport type DatasetMaintenanceEntityRef = {\n id: string;\n version: string;\n};\n\nexport type DatasetMaintenanceAliasBatch = {\n batch_id: string;\n dimension: DatasetMaintenanceAliasDimension;\n factor: string;\n source: {\n unitgroup: DatasetMaintenanceEntityRef;\n flowproperty: DatasetMaintenanceEntityRef;\n };\n target: {\n unitgroup: DatasetMaintenanceEntityRef;\n flowproperty: DatasetMaintenanceEntityRef;\n };\n};\n\nexport type DatasetMaintenanceExchangeInstance = {\n exchange_index: number;\n data_set_internal_id: string;\n flow_id: string;\n flow_version: string;\n direction: 'Input' | 'Output';\n before_exchange_sha256: string;\n before_mean_amount: string;\n before_resulting_amount: string;\n};\n\nexport type DatasetMaintenanceAliasMutation =\n | { kind: 'flowproperty_unitgroup_reference' }\n | {\n kind: 'flow_flowproperty_reference';\n flow_property_internal_id: string;\n source_flowproperty_id: string;\n source_flowproperty_version: string;\n }\n | {\n kind: 'process_exchange_amounts';\n exchanges: Array<{\n index: number;\n internal_id: string;\n flow_id: string;\n flow_version: string;\n direction: 'Input' | 'Output';\n before_exchange_sha256: string;\n }>;\n };\n\nexport type DatasetMaintenanceScopeAction = {\n action_id: string;\n action: DatasetMaintenanceActionKind;\n table: DatasetMaintenanceActionTable;\n id: string;\n version: string;\n expected_user_id: string;\n expected_state_code: 0;\n reason_code: string;\n reason: string;\n evidence: unknown[];\n batch_id?: string;\n exchange_instances?: DatasetMaintenanceExchangeInstance[];\n desired_payload_path?: string;\n expected_before_sha256?: string;\n components?: DatasetMaintenanceDerivativeComponent[];\n};\n\nexport type DatasetMaintenanceScope = {\n schema_version: 1;\n task_id: string;\n operation: DatasetMaintenanceOperation;\n account: {\n user_id: string;\n email?: string;\n };\n source_import_run_id?: string;\n source_lineage?: unknown;\n target_mode?: DatasetMaintenanceTargetMode;\n alias_batches?: DatasetMaintenanceAliasBatch[];\n actions: DatasetMaintenanceScopeAction[];\n};\n\nexport type DatasetMaintenanceRemoteRow = {\n table: DatasetMaintenanceScanTable;\n id: string;\n version: string;\n user_id: string | null;\n state_code: number | null;\n modified_at: string | null;\n json?: JsonObject | null;\n json_ordered: JsonObject | null;\n model_id: string | null;\n rule_verification: boolean | null;\n};\n\nexport type DatasetMaintenanceRowSnapshot = DatasetMaintenanceRemoteRow & {\n row_sha256: string;\n payload_sha256: string | null;\n};\n\nexport type DatasetMaintenanceBlocker = {\n code: string;\n message: string;\n action_id?: string;\n table?: DatasetMaintenanceScanTable;\n id?: string;\n version?: string;\n details?: unknown;\n};\n\nexport type DatasetMaintenanceProtectedRow = {\n table: DatasetMaintenanceScanTable;\n id: string;\n version: string;\n modified_at: string | null;\n row_sha256: string;\n payload_sha256: string | null;\n reason: 'non_action_visible_row' | 'blocked_action_row';\n};\n\nexport type DatasetMaintenanceReferenceImpact = {\n target_action_id: string;\n target_table: DatasetMaintenanceActionTable;\n target_id: string;\n target_version: string;\n phase: 'current' | 'projected';\n source_table: DatasetMaintenanceScanTable;\n source_id: string;\n source_version: string;\n reference_path: string;\n reference_version: string | null;\n};\n\nexport type DatasetMaintenancePlanAction = DatasetMaintenanceScopeAction & {\n ordinal: number;\n status: 'ready' | 'blocked';\n before: DatasetMaintenanceRowSnapshot | null;\n desired_payload: {\n path: string;\n sha256: string;\n } | null;\n blockers: DatasetMaintenanceBlocker[];\n alias_mutation?: DatasetMaintenanceAliasMutation;\n derivative_before?: DatasetMaintenanceDerivativeSnapshot;\n rollback: {\n strategy:\n | 'save_before_snapshot'\n | 'restore_deleted_before_snapshot'\n | 'restore_atomic_alias_before_snapshot'\n | 'none_derivative_only';\n before_payload_sha256: string | null;\n before_payload: JsonObject | null;\n model_id: string | null;\n rule_verification: boolean | null;\n };\n};\n\nexport type DatasetMaintenanceAliasExchangeRewrite = DatasetMaintenanceExchangeInstance & {\n action_id: string;\n process_id: string;\n process_version: string;\n after_mean_amount: string;\n after_resulting_amount: string;\n after_exchange_sha256: string;\n};\n\nexport type DatasetMaintenanceAliasBatchPlan = DatasetMaintenanceAliasBatch & {\n action_ids: string[];\n target_snapshots: {\n unitgroup: DatasetMaintenanceRowSnapshot | null;\n flowproperty: DatasetMaintenanceRowSnapshot | null;\n source_unitgroup: DatasetMaintenanceRowSnapshot | null;\n };\n conversion_evidence: {\n source_unitgroup_payload_sha256: string | null;\n source_reference_unit: JsonObject | null;\n target_conversion_unit: JsonObject | null;\n };\n exchange_rewrites: DatasetMaintenanceAliasExchangeRewrite[];\n summary: {\n rows: number;\n flowproperties: number;\n flows: number;\n processes: number;\n exchanges: number;\n amount_fields: number;\n unrelated_exchanges: number;\n };\n postconditions: {\n source_unitgroup_incoming_refs: number;\n source_flowproperty_flow_refs: number;\n target_flow_refs: number;\n target_exchange_refs: number;\n };\n};\n\nexport type DatasetMaintenancePlan = {\n schema_version: 1;\n generated_at_utc: string;\n task_id: string;\n operation: DatasetMaintenanceOperation;\n operation_id: string;\n account: {\n user_id: string;\n email: string | null;\n };\n source_import_run_id: string | null;\n source_lineage: unknown;\n target_mode: DatasetMaintenanceTargetMode | null;\n status: 'ready' | 'blocked';\n scope_sha256: string;\n visible_snapshot_sha256: string;\n snapshot_completeness?: DatasetMaintenanceSnapshotCompleteness<DatasetMaintenanceScanTable>;\n projected_reference_sha256: string;\n plan_sha256: string;\n summary: {\n actions: number;\n save_draft: number;\n delete: number;\n update_json_ordered?: number;\n rebuild_derivatives?: number;\n atomic_batches?: number;\n scaled_exchanges?: number;\n scaled_amount_fields?: number;\n unrelated_exchanges_preserved?: number;\n protected_rows: number;\n blockers: number;\n current_reference_impacts: number;\n projected_reference_impacts: number;\n };\n artifacts: {\n maintenance_scope: string;\n rls_visible_snapshot: string;\n protected_rows: string;\n reference_impact_report: string;\n maintenance_plan: string;\n dry_run_report: string;\n payload_dir: string;\n exchange_rewrite_plan?: string;\n derivative_baseline?: string;\n };\n actions: DatasetMaintenancePlanAction[];\n alias_batches?: DatasetMaintenanceAliasBatchPlan[];\n protected_rows: DatasetMaintenanceProtectedRow[];\n blockers: DatasetMaintenanceBlocker[];\n};\n\nexport type DatasetMaintenanceProgressEntry = {\n schema_version: 1;\n plan_sha256: string;\n operation_id: string;\n action_id: string;\n action: DatasetMaintenanceActionKind;\n table: DatasetMaintenanceActionTable;\n id: string;\n version: string;\n reason_code: string;\n audit_context: {\n plan_sha256: string;\n operation_id: string;\n action_id: string;\n reason_code: string;\n source: 'tiangong-lca dataset maintenance apply';\n target_mode?: DatasetMaintenanceTargetMode;\n };\n actor: {\n user_id: string;\n email: string;\n };\n started_at_utc: string;\n ended_at_utc: string;\n before_sha256: string;\n after_sha256: string | null;\n remote_result_sha256: string | null;\n result: 'success' | 'failed';\n error: string | null;\n rollback: DatasetMaintenancePlanAction['rollback'];\n batch_id?: string;\n target_mode?: DatasetMaintenanceTargetMode;\n batch_request_sha256?: string;\n database_audit_id?: string;\n summary_audit_id?: string;\n plan_request_sha256?: string;\n plan_summary_audit_id?: string;\n};\n\nfunction token(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n const normalized = value.trim();\n return normalized || null;\n}\n\nexport function isJsonObject(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function stableJsonValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(stableJsonValue);\n }\n if (isJsonObject(value)) {\n return Object.fromEntries(\n Object.keys(value)\n .sort()\n .map((key) => [key, stableJsonValue(value[key])]),\n );\n }\n return value;\n}\n\nexport function stableJsonText(value: unknown): string {\n return JSON.stringify(stableJsonValue(value));\n}\n\nexport function sha256Text(value: string): string {\n return crypto.createHash('sha256').update(value).digest('hex');\n}\n\nexport function sha256Json(value: unknown): string {\n return sha256Text(stableJsonText(value));\n}\n\nexport function snapshotRemoteRow(row: DatasetMaintenanceRemoteRow): DatasetMaintenanceRowSnapshot {\n return {\n ...row,\n row_sha256: sha256Json(row),\n payload_sha256: row.json_ordered ? sha256Json(row.json_ordered) : null,\n };\n}\n\nexport function maintenanceRowKey(row: {\n table: DatasetMaintenanceScanTable;\n id: string;\n version: string;\n}): string {\n return `${row.table}\\u0000${row.id}\\u0000${row.version}`;\n}\n\nfunction requireToken(value: unknown, label: string): string {\n const normalized = token(value);\n if (!normalized) {\n throw new CliError(`Maintenance scope ${label} must be a non-empty string.`, {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n details: { field: label },\n });\n }\n return normalized;\n}\n\nfunction parseEntityRef(value: unknown, label: string): DatasetMaintenanceEntityRef {\n if (!isJsonObject(value)) {\n throw new CliError(`Maintenance scope ${label} must be an object.`, {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n return {\n id: requireToken(value.id, `${label}.id`),\n version: requireToken(value.version, `${label}.version`),\n };\n}\n\nfunction parseAliasBatch(value: unknown, index: number): DatasetMaintenanceAliasBatch {\n const label = `alias_batches[${index}]`;\n if (!isJsonObject(value) || !isJsonObject(value.source) || !isJsonObject(value.target)) {\n throw new CliError(`Maintenance scope ${label} must include source and target objects.`, {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n const dimension = requireToken(value.dimension, `${label}.dimension`);\n const factors: Record<DatasetMaintenanceAliasDimension, string> = {\n time: '0.00011415525114155251',\n length_time: '1000',\n };\n if (!(dimension in factors)) {\n throw new CliError(`Unsupported alias-rewrite dimension: ${dimension}`, {\n code: 'DATASET_MAINTENANCE_ALIAS_DIMENSION_INVALID',\n exitCode: 2,\n });\n }\n const factor = requireToken(value.factor, `${label}.factor`);\n if (factor !== factors[dimension as DatasetMaintenanceAliasDimension]) {\n throw new CliError(`Alias-rewrite factor does not match dimension ${dimension}.`, {\n code: 'DATASET_MAINTENANCE_ALIAS_FACTOR_INVALID',\n exitCode: 2,\n });\n }\n return {\n batch_id: requireToken(value.batch_id, `${label}.batch_id`),\n dimension: dimension as DatasetMaintenanceAliasDimension,\n factor,\n source: {\n unitgroup: parseEntityRef(value.source.unitgroup, `${label}.source.unitgroup`),\n flowproperty: parseEntityRef(value.source.flowproperty, `${label}.source.flowproperty`),\n },\n target: {\n unitgroup: parseEntityRef(value.target.unitgroup, `${label}.target.unitgroup`),\n flowproperty: parseEntityRef(value.target.flowproperty, `${label}.target.flowproperty`),\n },\n };\n}\n\nfunction parseExchangeInstance(\n value: unknown,\n actionIndex: number,\n exchangeIndex: number,\n): DatasetMaintenanceExchangeInstance {\n const label = `actions[${actionIndex}].exchange_instances[${exchangeIndex}]`;\n if (\n !isJsonObject(value) ||\n typeof value.exchange_index !== 'number' ||\n !Number.isInteger(value.exchange_index) ||\n value.exchange_index < 0\n ) {\n throw new CliError(\n `Maintenance scope ${label}.exchange_index must be a non-negative integer.`,\n {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n },\n );\n }\n const beforeExchangeSha256 = requireToken(\n value.before_exchange_sha256,\n `${label}.before_exchange_sha256`,\n );\n if (!/^[a-f0-9]{64}$/u.test(beforeExchangeSha256)) {\n throw new CliError(`Maintenance scope ${label}.before_exchange_sha256 is invalid.`, {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n const direction = requireToken(value.direction, `${label}.direction`);\n if (!['Input', 'Output'].includes(direction)) {\n throw new CliError(`Maintenance scope ${label}.direction must be Input or Output.`, {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n return {\n exchange_index: value.exchange_index as number,\n data_set_internal_id: requireToken(value.data_set_internal_id, `${label}.data_set_internal_id`),\n flow_id: requireToken(value.flow_id, `${label}.flow_id`),\n flow_version: requireToken(value.flow_version, `${label}.flow_version`),\n direction: direction as 'Input' | 'Output',\n before_exchange_sha256: beforeExchangeSha256,\n before_mean_amount: requireToken(value.before_mean_amount, `${label}.before_mean_amount`),\n before_resulting_amount: requireToken(\n value.before_resulting_amount,\n `${label}.before_resulting_amount`,\n ),\n };\n}\n\nfunction parseAction(\n value: unknown,\n index: number,\n accountUserId: string,\n operation: DatasetMaintenanceOperation,\n): DatasetMaintenanceScopeAction {\n if (!isJsonObject(value)) {\n throw new CliError(`Maintenance scope action ${index} must be an object.`, {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n const action = requireToken(value.action, `actions[${index}].action`);\n const table = requireToken(value.table, `actions[${index}].table`);\n if (!['save_draft', 'delete', 'update_json_ordered', 'rebuild_derivatives'].includes(action)) {\n throw new CliError(`Unsupported maintenance action: ${action}`, {\n code: 'DATASET_MAINTENANCE_ACTION_UNSUPPORTED',\n exitCode: 2,\n });\n }\n const aliasAction = action === 'update_json_ordered';\n const derivativeAction = action === 'rebuild_derivatives';\n const allowedTable = derivativeAction\n ? table === 'processes'\n : aliasAction\n ? ['flowproperties', 'flows', 'processes'].includes(table)\n : (MAINTENANCE_MUTABLE_TABLES as readonly string[]).includes(table);\n if (!allowedTable) {\n throw new CliError(\n `Maintenance cannot mutate protected or unsupported dataset table: ${table}`,\n {\n code: 'DATASET_MAINTENANCE_TABLE_PROTECTED',\n exitCode: 2,\n },\n );\n }\n if (\n (operation === 'merge-support-aliases' && !aliasAction) ||\n (operation === 'rebuild-derivatives' && !derivativeAction) ||\n (!['merge-support-aliases', 'rebuild-derivatives'].includes(operation) &&\n (aliasAction || derivativeAction))\n ) {\n throw new CliError(`Maintenance operation ${operation} cannot contain ${action} actions.`, {\n code: 'DATASET_MAINTENANCE_OPERATION_ACTION_MISMATCH',\n exitCode: 2,\n });\n }\n if (value.expected_state_code !== 0) {\n throw new CliError(`Maintenance action ${index} must require expected_state_code=0.`, {\n code: 'DATASET_MAINTENANCE_NON_DRAFT_FORBIDDEN',\n exitCode: 2,\n });\n }\n const expectedUserId = requireToken(value.expected_user_id, `actions[${index}].expected_user_id`);\n if (expectedUserId !== accountUserId) {\n throw new CliError(`Maintenance action ${index} owner does not match scope account.`, {\n code: 'DATASET_MAINTENANCE_SCOPE_OWNER_MISMATCH',\n exitCode: 2,\n });\n }\n if (!Array.isArray(value.evidence)) {\n throw new CliError(`Maintenance action ${index} evidence must be an array.`, {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n const desiredPayloadPath = token(value.desired_payload_path);\n if (action === 'save_draft' && !desiredPayloadPath) {\n throw new CliError(`Maintenance save_draft action ${index} requires desired_payload_path.`, {\n code: 'DATASET_MAINTENANCE_DESIRED_PAYLOAD_REQUIRED',\n exitCode: 2,\n });\n }\n if (action !== 'save_draft' && desiredPayloadPath) {\n throw new CliError(\n `Maintenance ${action} action ${index} cannot include desired_payload_path.`,\n {\n code: 'DATASET_MAINTENANCE_DESIRED_PAYLOAD_FORBIDDEN',\n exitCode: 2,\n },\n );\n }\n const batchId = token(value.batch_id);\n if (aliasAction !== Boolean(batchId)) {\n throw new CliError(\n aliasAction\n ? `Maintenance alias action ${index} requires batch_id.`\n : `Maintenance non-alias action ${index} cannot include batch_id.`,\n {\n code: 'DATASET_MAINTENANCE_ALIAS_BATCH_BINDING_INVALID',\n exitCode: 2,\n },\n );\n }\n const exchangeInstances = Array.isArray(value.exchange_instances)\n ? value.exchange_instances.map((entry, exchangeIndex) =>\n parseExchangeInstance(entry, index, exchangeIndex),\n )\n : [];\n if (\n aliasAction &&\n ((table === 'processes' && exchangeInstances.length === 0) ||\n (table !== 'processes' && exchangeInstances.length > 0))\n ) {\n throw new CliError(\n `Alias action ${index} exchange_instances must be non-empty only for processes.`,\n {\n code: 'DATASET_MAINTENANCE_ALIAS_EXCHANGE_SCOPE_INVALID',\n exitCode: 2,\n },\n );\n }\n if (!aliasAction && 'exchange_instances' in value) {\n throw new CliError(`Maintenance non-alias action ${index} cannot include exchange_instances.`, {\n code: 'DATASET_MAINTENANCE_ALIAS_EXCHANGE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n const components = Array.isArray(value.components)\n ? value.components.map((component, componentIndex) =>\n requireToken(component, `actions[${index}].components[${componentIndex}]`),\n )\n : [];\n if (\n derivativeAction &&\n (components.length !== DERIVATIVE_REBUILD_COMPONENTS.length ||\n components.some(\n (component, componentIndex) => component !== DERIVATIVE_REBUILD_COMPONENTS[componentIndex],\n ))\n ) {\n throw new CliError(\n `Derivative rebuild action ${index} requires components in exact order: ${DERIVATIVE_REBUILD_COMPONENTS.join(', ')}.`,\n {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_COMPONENTS_INVALID',\n exitCode: 2,\n },\n );\n }\n if (!derivativeAction && 'components' in value) {\n throw new CliError(`Maintenance non-derivative action ${index} cannot include components.`, {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_COMPONENTS_INVALID',\n exitCode: 2,\n });\n }\n const exchangeKeys = new Set(\n exchangeInstances.map(\n (entry) => `${entry.exchange_index}\\u0000${entry.data_set_internal_id}\\u0000${entry.flow_id}`,\n ),\n );\n if (exchangeKeys.size !== exchangeInstances.length) {\n throw new CliError(`Alias action ${index} contains duplicate exchange instances.`, {\n code: 'DATASET_MAINTENANCE_ALIAS_EXCHANGE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n const expectedBeforeSha256 = token(value.expected_before_sha256);\n if (expectedBeforeSha256 && !/^[a-f0-9]{64}$/u.test(expectedBeforeSha256)) {\n throw new CliError(`Maintenance action ${index} expected_before_sha256 is invalid.`, {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n\n return {\n action_id: requireToken(value.action_id, `actions[${index}].action_id`),\n action: action as DatasetMaintenanceActionKind,\n table: table as DatasetMaintenanceActionTable,\n id: requireToken(value.id, `actions[${index}].id`),\n version: requireToken(value.version, `actions[${index}].version`),\n expected_user_id: expectedUserId,\n expected_state_code: 0,\n reason_code: requireToken(value.reason_code, `actions[${index}].reason_code`),\n reason: requireToken(value.reason, `actions[${index}].reason`),\n evidence: value.evidence,\n ...(batchId ? { batch_id: batchId } : {}),\n ...(exchangeInstances.length ? { exchange_instances: exchangeInstances } : {}),\n ...(desiredPayloadPath ? { desired_payload_path: desiredPayloadPath } : {}),\n ...(expectedBeforeSha256 ? { expected_before_sha256: expectedBeforeSha256 } : {}),\n ...(derivativeAction ? { components: [...DERIVATIVE_REBUILD_COMPONENTS] } : {}),\n };\n}\n\nexport function parseMaintenanceScope(\n value: unknown,\n expectedOperation?: DatasetMaintenanceOperation,\n): DatasetMaintenanceScope {\n if (!isJsonObject(value) || value.schema_version !== 1 || !isJsonObject(value.account)) {\n throw new CliError('Maintenance scope must use schema_version=1 and include account.', {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n const operation = requireToken(value.operation, 'operation');\n if (\n ![\n 'delete',\n 'retire',\n 'redo-import',\n 'repair-references',\n 'merge-support-aliases',\n 'rebuild-derivatives',\n ].includes(operation)\n ) {\n throw new CliError(`Unsupported maintenance operation: ${operation}`, {\n code: 'DATASET_MAINTENANCE_OPERATION_UNSUPPORTED',\n exitCode: 2,\n });\n }\n if (expectedOperation && operation !== expectedOperation) {\n throw new CliError(\n `Scope operation ${operation} does not match requested operation ${expectedOperation}.`,\n {\n code: 'DATASET_MAINTENANCE_OPERATION_MISMATCH',\n exitCode: 2,\n },\n );\n }\n const userId = requireToken(value.account.user_id, 'account.user_id');\n if (!Array.isArray(value.actions) || value.actions.length === 0) {\n throw new CliError('Maintenance scope actions must be a non-empty array.', {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n const actions = value.actions.map((entry, index) =>\n parseAction(entry, index, userId, operation as DatasetMaintenanceOperation),\n );\n const targetMode = token(value.target_mode);\n if (\n (['merge-support-aliases', 'rebuild-derivatives'].includes(operation) &&\n targetMode !== 'owner_draft') ||\n (!['merge-support-aliases', 'rebuild-derivatives'].includes(operation) && targetMode !== null)\n ) {\n throw new CliError(\n 'merge-support-aliases and rebuild-derivatives require target_mode=owner_draft; other operations forbid target_mode.',\n {\n code: 'DATASET_MAINTENANCE_TARGET_MODE_INVALID',\n exitCode: 2,\n details: { operation, target_mode: targetMode },\n },\n );\n }\n const aliasBatches = Array.isArray(value.alias_batches)\n ? value.alias_batches.map(parseAliasBatch)\n : [];\n if (\n (operation === 'merge-support-aliases' && aliasBatches.length !== 2) ||\n (operation !== 'merge-support-aliases' && aliasBatches.length !== 0)\n ) {\n throw new CliError(\n 'merge-support-aliases requires exactly two alias_batches; other operations forbid them.',\n {\n code: 'DATASET_MAINTENANCE_ALIAS_BATCH_SCOPE_INVALID',\n exitCode: 2,\n },\n );\n }\n if (operation === 'rebuild-derivatives' && actions.length !== 1) {\n throw new CliError('rebuild-derivatives requires exactly one action.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_ACTION_COUNT_INVALID',\n exitCode: 2,\n });\n }\n if (aliasBatches.length) {\n const batchIds = new Set(aliasBatches.map((batch) => batch.batch_id));\n const dimensions = new Set(aliasBatches.map((batch) => batch.dimension));\n if (\n batchIds.size !== 2 ||\n dimensions.size !== 2 ||\n !dimensions.has('time') ||\n !dimensions.has('length_time') ||\n actions.some((action) => !action.batch_id || !batchIds.has(action.batch_id))\n ) {\n throw new CliError(\n 'Alias batches and action batch_id bindings are incomplete or duplicate.',\n {\n code: 'DATASET_MAINTENANCE_ALIAS_BATCH_SCOPE_INVALID',\n exitCode: 2,\n },\n );\n }\n }\n const actionIds = new Set<string>();\n const rowKeys = new Set<string>();\n const payloadNames = new Set<string>();\n for (const action of actions) {\n if (actionIds.has(action.action_id)) {\n throw new CliError(`Duplicate maintenance action_id: ${action.action_id}`, {\n code: 'DATASET_MAINTENANCE_ACTION_ID_DUPLICATE',\n exitCode: 2,\n });\n }\n actionIds.add(action.action_id);\n const rowKey = maintenanceRowKey(action);\n if (rowKeys.has(rowKey)) {\n throw new CliError(`Multiple maintenance actions target the same row: ${action.id}`, {\n code: 'DATASET_MAINTENANCE_TARGET_DUPLICATE',\n exitCode: 2,\n });\n }\n rowKeys.add(rowKey);\n const payloadName = safeActionFileName(action.action_id);\n if (payloadNames.has(payloadName)) {\n throw new CliError(`Maintenance action ids collide as payload filenames: ${payloadName}`, {\n code: 'DATASET_MAINTENANCE_ACTION_FILENAME_COLLISION',\n exitCode: 2,\n });\n }\n payloadNames.add(payloadName);\n }\n const email = token(value.account.email);\n const sourceImportRunId = token(value.source_import_run_id);\n return {\n schema_version: 1,\n task_id: requireToken(value.task_id, 'task_id'),\n operation: operation as DatasetMaintenanceOperation,\n account: {\n user_id: userId,\n ...(email ? { email } : {}),\n },\n ...(sourceImportRunId ? { source_import_run_id: sourceImportRunId } : {}),\n ...('source_lineage' in value ? { source_lineage: value.source_lineage } : {}),\n ...(targetMode === 'owner_draft' ? { target_mode: targetMode } : {}),\n ...(aliasBatches.length ? { alias_batches: aliasBatches } : {}),\n actions,\n };\n}\n\nexport function readJsonFile(filePath: string, label: string): unknown {\n const resolved = path.resolve(filePath);\n if (!existsSync(resolved)) {\n throw new CliError(`${label} not found: ${resolved}`, {\n code: 'DATASET_MAINTENANCE_ARTIFACT_NOT_FOUND',\n exitCode: 2,\n });\n }\n try {\n return JSON.parse(readFileSync(resolved, 'utf8'));\n } catch (error) {\n throw new CliError(`${label} is not valid JSON: ${resolved}`, {\n code: 'DATASET_MAINTENANCE_ARTIFACT_INVALID',\n exitCode: 2,\n details: String(error),\n });\n }\n}\n\nfunction writeImmutableText(filePath: string, text: string): string {\n const resolved = path.resolve(filePath);\n if (existsSync(resolved)) {\n if (readFileSync(resolved, 'utf8') === text) {\n return resolved;\n }\n throw new CliError(`Refusing to overwrite immutable maintenance artifact: ${resolved}`, {\n code: 'DATASET_MAINTENANCE_ARTIFACT_IMMUTABLE',\n exitCode: 1,\n });\n }\n mkdirSync(path.dirname(resolved), { recursive: true });\n writeFileSync(resolved, text, { encoding: 'utf8', flag: 'wx' });\n return resolved;\n}\n\nexport function writeImmutableJson(filePath: string, value: unknown): string {\n return writeImmutableText(filePath, `${stableJsonText(value)}\\n`);\n}\n\nexport function writeImmutableJsonLines(filePath: string, values: unknown[]): string {\n const text = values.length ? `${values.map(stableJsonText).join('\\n')}\\n` : '';\n return writeImmutableText(filePath, text);\n}\n\nexport function appendStableJsonLine(filePath: string, value: unknown): string {\n const resolved = path.resolve(filePath);\n mkdirSync(path.dirname(resolved), { recursive: true });\n appendFileSync(resolved, `${stableJsonText(value)}\\n`, 'utf8');\n return resolved;\n}\n\nexport function readJsonLinesIfPresent(filePath: string): unknown[] {\n const resolved = path.resolve(filePath);\n if (!existsSync(resolved)) {\n return [];\n }\n return readFileSync(resolved, 'utf8')\n .split(/\\r?\\n/u)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((line, index) => {\n try {\n return JSON.parse(line);\n } catch (error) {\n throw new CliError(`Invalid maintenance JSONL at ${resolved}:${index + 1}`, {\n code: 'DATASET_MAINTENANCE_ARTIFACT_INVALID',\n exitCode: 1,\n details: String(error),\n });\n }\n });\n}\n\nexport function safeActionFileName(actionId: string): string {\n const safe = actionId.replace(/[^a-zA-Z0-9._-]+/gu, '_').replace(/^_+|_+$/gu, '');\n return safe || sha256Text(actionId).slice(0, 16);\n}\n\nexport function resolveMaintenancePlanArtifactPath(\n planDir: string,\n relativePath: string,\n label: string,\n): string {\n const root = path.resolve(planDir);\n if (!relativePath.trim() || path.isAbsolute(relativePath)) {\n throw new CliError(`${label} must be a relative path inside the maintenance plan directory.`, {\n code: 'DATASET_MAINTENANCE_PLAN_ARTIFACT_PATH_INVALID',\n exitCode: 2,\n details: relativePath,\n });\n }\n const resolved = path.resolve(root, relativePath);\n const withinRoot = path.relative(root, resolved);\n if (!withinRoot || withinRoot === '..' || withinRoot.startsWith(`..${path.sep}`)) {\n throw new CliError(`${label} must stay inside the maintenance plan directory.`, {\n code: 'DATASET_MAINTENANCE_PLAN_ARTIFACT_PATH_INVALID',\n exitCode: 2,\n details: relativePath,\n });\n }\n return resolved;\n}\n\nexport function computePlanSha256(plan: DatasetMaintenancePlan): string {\n const body = { ...plan, plan_sha256: '' };\n return sha256Json(body);\n}\n\nfunction validDerivativeSnapshot(\n value: unknown,\n action: DatasetMaintenancePlanAction,\n): value is DatasetMaintenanceDerivativeSnapshot {\n if (!isJsonObject(value)) return false;\n const requiredHashes = [\n value.json_sha256,\n value.json_ordered_sha256,\n value.extracted_text_sha256,\n value.snapshot_sha256,\n ];\n const nullableHashes = [value.extracted_md_sha256, value.embedding_ft_sha256];\n return Boolean(\n value.schema_version === 'dataset-derivative-snapshot.v1' &&\n value.table === 'processes' &&\n value.id === action.id &&\n value.version === action.version &&\n value.user_id === action.expected_user_id &&\n value.state_code === 0 &&\n value.modified_at === action.before?.modified_at &&\n typeof value.modified_at === 'string' &&\n Number.isFinite(Date.parse(value.modified_at)) &&\n requiredHashes.every((hash) => typeof hash === 'string' && /^[a-f0-9]{64}$/u.test(hash)) &&\n nullableHashes.every(\n (hash) => hash === null || (typeof hash === 'string' && /^[a-f0-9]{64}$/u.test(hash)),\n ) &&\n value.json_sha256 === value.json_ordered_sha256 &&\n (value.embedding_ft_at === null ||\n (typeof value.embedding_ft_at === 'string' &&\n Number.isFinite(Date.parse(value.embedding_ft_at)))),\n );\n}\n\nexport function parseMaintenancePlan(value: unknown): DatasetMaintenancePlan {\n if (\n !isJsonObject(value) ||\n value.schema_version !== 1 ||\n !Array.isArray(value.actions) ||\n !Array.isArray(value.protected_rows) ||\n !Array.isArray(value.blockers) ||\n !isJsonObject(value.account) ||\n !isJsonObject(value.artifacts)\n ) {\n throw new CliError('Maintenance plan is not a valid schema_version=1 plan.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n });\n }\n const plan = value as DatasetMaintenancePlan;\n if (\n plan.snapshot_completeness !== undefined &&\n !isDatasetMaintenanceSnapshotCompleteness(plan.snapshot_completeness, MAINTENANCE_SCAN_TABLES)\n ) {\n throw new CliError('Maintenance plan snapshot completeness proof is invalid.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n });\n }\n const expected = computePlanSha256(plan);\n if (plan.plan_sha256 !== expected) {\n throw new CliError('Maintenance plan hash does not match its canonical contents.', {\n code: 'DATASET_MAINTENANCE_PLAN_HASH_MISMATCH',\n exitCode: 2,\n details: { expected, received: plan.plan_sha256 },\n });\n }\n\n const normalizedScope = parseMaintenanceScope(\n {\n schema_version: 1,\n task_id: plan.task_id,\n operation: plan.operation,\n account: plan.account,\n ...(plan.source_import_run_id ? { source_import_run_id: plan.source_import_run_id } : {}),\n source_lineage: plan.source_lineage,\n ...(plan.target_mode ? { target_mode: plan.target_mode } : {}),\n ...(plan.alias_batches\n ? {\n alias_batches: plan.alias_batches.map((batch) => ({\n batch_id: batch.batch_id,\n dimension: batch.dimension,\n factor: batch.factor,\n source: batch.source,\n target: batch.target,\n })),\n }\n : {}),\n actions: plan.actions,\n },\n plan.operation,\n );\n const actionIds = new Set<string>();\n const ordinals = new Set<number>();\n for (const [index, action] of plan.actions.entries()) {\n const normalizedAction = normalizedScope.actions[index];\n if (\n !normalizedAction ||\n action.action_id !== normalizedAction.action_id ||\n !Number.isInteger(action.ordinal) ||\n action.ordinal < 0 ||\n ordinals.has(action.ordinal) ||\n !['ready', 'blocked'].includes(action.status) ||\n !Array.isArray(action.blockers) ||\n !isJsonObject(action.rollback)\n ) {\n throw new CliError('Maintenance plan contains an invalid action contract.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n details: { index, action_id: action.action_id },\n });\n }\n actionIds.add(action.action_id);\n ordinals.add(action.ordinal);\n if (action.status === 'ready') {\n const before = action.before;\n if (\n !isJsonObject(before) ||\n before.table !== action.table ||\n before.id !== action.id ||\n before.version !== action.version ||\n before.user_id !== action.expected_user_id ||\n before.state_code !== 0 ||\n !isJsonObject(before.json_ordered) ||\n typeof before.row_sha256 !== 'string' ||\n typeof before.payload_sha256 !== 'string' ||\n action.blockers.length > 0\n ) {\n throw new CliError('Ready maintenance plan action has an invalid before snapshot.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n details: { action_id: action.action_id },\n });\n }\n if (action.action === 'update_json_ordered' && !before.modified_at) {\n throw new CliError('Ready alias action requires a frozen modified_at value.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n details: { action_id: action.action_id },\n });\n }\n const remoteRow: DatasetMaintenanceRemoteRow = {\n table: before.table,\n id: before.id,\n version: before.version,\n user_id: before.user_id,\n state_code: before.state_code,\n modified_at: before.modified_at,\n json_ordered: before.json_ordered,\n model_id: before.model_id,\n rule_verification: before.rule_verification,\n };\n const expectedSnapshot = snapshotRemoteRow(remoteRow);\n if (\n before.row_sha256 !== expectedSnapshot.row_sha256 ||\n before.payload_sha256 !== expectedSnapshot.payload_sha256\n ) {\n throw new CliError('Ready maintenance plan action before snapshot hash is invalid.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n details: { action_id: action.action_id },\n });\n }\n const expectedRollbackStrategy =\n action.action === 'save_draft'\n ? 'save_before_snapshot'\n : action.action === 'delete'\n ? 'restore_deleted_before_snapshot'\n : action.action === 'update_json_ordered'\n ? 'restore_atomic_alias_before_snapshot'\n : 'none_derivative_only';\n const derivativeRollback = action.action === 'rebuild_derivatives';\n const rollbackMatches = derivativeRollback\n ? action.rollback.strategy === expectedRollbackStrategy &&\n action.rollback.before_payload_sha256 === null &&\n action.rollback.before_payload === null &&\n action.rollback.model_id === null &&\n action.rollback.rule_verification === null\n : action.rollback.strategy === expectedRollbackStrategy &&\n action.rollback.before_payload_sha256 === before.payload_sha256 &&\n isJsonObject(action.rollback.before_payload) &&\n sha256Json(action.rollback.before_payload) === before.payload_sha256 &&\n action.rollback.model_id === before.model_id &&\n action.rollback.rule_verification === before.rule_verification;\n if (!rollbackMatches) {\n throw new CliError('Ready maintenance plan action rollback snapshot is invalid.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n details: { action_id: action.action_id },\n });\n }\n }\n if (\n (['save_draft', 'update_json_ordered'].includes(action.action) &&\n action.status === 'ready' &&\n (!isJsonObject(action.desired_payload) ||\n typeof action.desired_payload.path !== 'string' ||\n !/^[a-f0-9]{64}$/u.test(String(action.desired_payload.sha256)))) ||\n (!['save_draft', 'update_json_ordered'].includes(action.action) &&\n action.desired_payload !== null)\n ) {\n throw new CliError('Maintenance plan action desired payload contract is invalid.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n details: { action_id: action.action_id },\n });\n }\n }\n const flattenedBlockers = plan.actions.flatMap((action) => action.blockers);\n const summaryMatches =\n isJsonObject(plan.summary) &&\n plan.summary.actions === plan.actions.length &&\n plan.summary.save_draft ===\n plan.actions.filter((action) => action.action === 'save_draft').length &&\n plan.summary.delete === plan.actions.filter((action) => action.action === 'delete').length &&\n (plan.summary.update_json_ordered ?? 0) ===\n plan.actions.filter((action) => action.action === 'update_json_ordered').length &&\n (plan.summary.rebuild_derivatives ?? 0) ===\n plan.actions.filter((action) => action.action === 'rebuild_derivatives').length &&\n (plan.summary.atomic_batches ?? 0) === (plan.alias_batches?.length ?? 0) &&\n (plan.summary.scaled_exchanges ?? 0) ===\n (plan.alias_batches?.reduce((sum, batch) => sum + batch.summary.exchanges, 0) ?? 0) &&\n (plan.summary.scaled_amount_fields ?? 0) ===\n (plan.alias_batches?.reduce((sum, batch) => sum + batch.summary.amount_fields, 0) ?? 0) &&\n (plan.summary.unrelated_exchanges_preserved ?? 0) ===\n (plan.alias_batches?.reduce((sum, batch) => sum + batch.summary.unrelated_exchanges, 0) ??\n 0) &&\n plan.summary.protected_rows === plan.protected_rows.length &&\n plan.summary.blockers === plan.blockers.length &&\n Number.isInteger(plan.summary.current_reference_impacts) &&\n plan.summary.current_reference_impacts >= 0 &&\n Number.isInteger(plan.summary.projected_reference_impacts) &&\n plan.summary.projected_reference_impacts >= 0;\n const ready =\n plan.status === 'ready' &&\n plan.blockers.length === 0 &&\n flattenedBlockers.length === 0 &&\n plan.actions.every((action) => action.status === 'ready');\n const blocked =\n plan.status === 'blocked' &&\n plan.blockers.length > 0 &&\n flattenedBlockers.length > 0 &&\n plan.actions.some((action) => action.status === 'blocked');\n if (\n actionIds.size !== plan.actions.length ||\n !summaryMatches ||\n (!ready && !blocked) ||\n sha256Json(plan.blockers) !== sha256Json(flattenedBlockers)\n ) {\n throw new CliError('Maintenance plan status or blocker contract is inconsistent.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n });\n }\n if (plan.operation === 'merge-support-aliases') {\n const batches = plan.alias_batches!;\n const batchActionIds = new Set(batches.flatMap((batch) => batch.action_ids));\n const expectedProfiles = {\n time: {\n factor: '0.00011415525114155251',\n rows: 25,\n flowproperties: 1,\n flows: 10,\n processes: 14,\n exchanges: 20,\n },\n length_time: {\n factor: '1000',\n rows: 27,\n flowproperties: 1,\n flows: 13,\n processes: 13,\n exchanges: 39,\n },\n } as const;\n const validAliasPlan =\n plan.target_mode === 'owner_draft' &&\n batches.length === 2 &&\n plan.artifacts.exchange_rewrite_plan === 'exchange-rewrite-plan.jsonl' &&\n batchActionIds.size === plan.actions.length &&\n batches.reduce((sum, batch) => sum + batch.action_ids.length, 0) === plan.actions.length &&\n batches.reduce((sum, batch) => sum + batch.summary.unrelated_exchanges, 0) === 309 &&\n plan.actions.every(\n (action) =>\n action.action === 'update_json_ordered' &&\n action.batch_id &&\n isJsonObject(action.alias_mutation) &&\n batches.some(\n (batch) =>\n batch.batch_id === action.batch_id && batch.action_ids.includes(action.action_id),\n ),\n ) &&\n batches.every((batch) => {\n const profile = expectedProfiles[batch.dimension];\n const actions = plan.actions.filter((action) => action.batch_id === batch.batch_id);\n const counts = {\n flowproperties: actions.filter((action) => action.table === 'flowproperties').length,\n flows: actions.filter((action) => action.table === 'flows').length,\n processes: actions.filter((action) => action.table === 'processes').length,\n };\n const targetSnapshots = [\n batch.target_snapshots.unitgroup,\n batch.target_snapshots.flowproperty,\n ];\n const sourceSnapshot = batch.target_snapshots.source_unitgroup;\n const supportPayloadsValid = (\n [\n {\n snapshot: batch.target_snapshots.unitgroup,\n table: 'unitgroups' as const,\n id: batch.target.unitgroup.id,\n version: batch.target.unitgroup.version,\n },\n {\n snapshot: batch.target_snapshots.flowproperty,\n table: 'flowproperties' as const,\n id: batch.target.flowproperty.id,\n version: batch.target.flowproperty.version,\n },\n {\n snapshot: sourceSnapshot,\n table: 'unitgroups' as const,\n id: batch.source.unitgroup.id,\n version: batch.source.unitgroup.version,\n },\n ] as const\n ).every((entry) => {\n if (!entry.snapshot?.json_ordered) return plan.status === 'blocked';\n const inspection = inspectMaintenanceSupportPayload({\n table: entry.table,\n payload: entry.snapshot.json_ordered,\n });\n return (\n inspection.identity.id === entry.id && inspection.identity.version === entry.version\n );\n });\n const snapshotsValid = (snapshots: DatasetMaintenanceRowSnapshot[]): boolean =>\n snapshots.every((snapshot) => {\n const remoteRow: DatasetMaintenanceRemoteRow = {\n table: snapshot.table,\n id: snapshot.id,\n version: snapshot.version,\n user_id: snapshot.user_id,\n state_code: snapshot.state_code,\n modified_at: snapshot.modified_at,\n json_ordered: snapshot.json_ordered,\n model_id: snapshot.model_id,\n rule_verification: snapshot.rule_verification,\n };\n const expectedSnapshot = snapshotRemoteRow(remoteRow);\n return (\n snapshot.row_sha256 === expectedSnapshot.row_sha256 &&\n snapshot.payload_sha256 === expectedSnapshot.payload_sha256\n );\n });\n const snapshotIdentityMatches = Boolean(\n batch.target_snapshots.unitgroup?.table === 'unitgroups' &&\n batch.target_snapshots.unitgroup.id === batch.target.unitgroup.id &&\n batch.target_snapshots.unitgroup.version === batch.target.unitgroup.version &&\n batch.target_snapshots.flowproperty?.table === 'flowproperties' &&\n batch.target_snapshots.flowproperty.id === batch.target.flowproperty.id &&\n batch.target_snapshots.flowproperty.version === batch.target.flowproperty.version &&\n sourceSnapshot?.table === 'unitgroups' &&\n sourceSnapshot.id === batch.source.unitgroup.id &&\n sourceSnapshot.version === batch.source.unitgroup.version,\n );\n const mutationsValid = actions.every((action) => {\n const mutation = action.alias_mutation!;\n if (action.table === 'flowproperties') {\n return (\n mutation.kind === 'flowproperty_unitgroup_reference' &&\n action.id === batch.source.flowproperty.id &&\n action.version === batch.source.flowproperty.version\n );\n }\n if (action.table === 'flows') {\n return (\n mutation.kind === 'flow_flowproperty_reference' &&\n mutation.flow_property_internal_id === '1' &&\n mutation.source_flowproperty_id === batch.source.flowproperty.id &&\n mutation.source_flowproperty_version === batch.source.flowproperty.version\n );\n }\n return (\n mutation.kind === 'process_exchange_amounts' &&\n sha256Json(mutation.exchanges) ===\n sha256Json(\n action.exchange_instances!.map((instance) => ({\n index: instance.exchange_index,\n internal_id: instance.data_set_internal_id,\n flow_id: instance.flow_id,\n flow_version: instance.flow_version,\n direction: instance.direction,\n before_exchange_sha256: instance.before_exchange_sha256,\n })),\n )\n );\n });\n const exchangeRewritesValid = batch.exchange_rewrites.every((rewrite) => {\n const action = actions.find((entry) => entry.action_id === rewrite.action_id);\n const instance = action?.exchange_instances?.find(\n (entry) =>\n entry.exchange_index === rewrite.exchange_index &&\n entry.data_set_internal_id === rewrite.data_set_internal_id &&\n entry.flow_id === rewrite.flow_id &&\n entry.flow_version === rewrite.flow_version,\n );\n return Boolean(\n action?.table === 'processes' &&\n instance &&\n rewrite.process_id === action.id &&\n rewrite.process_version === action.version &&\n rewrite.direction === instance.direction &&\n rewrite.before_exchange_sha256 === instance.before_exchange_sha256 &&\n /^[a-f0-9]{64}$/u.test(rewrite.after_exchange_sha256),\n );\n });\n return (\n profile !== undefined &&\n batch.factor === profile.factor &&\n batch.summary.rows === profile.rows &&\n counts.flowproperties === profile.flowproperties &&\n counts.flows === profile.flows &&\n counts.processes === profile.processes &&\n batch.summary.flowproperties === counts.flowproperties &&\n batch.summary.flows === counts.flows &&\n batch.summary.processes === counts.processes &&\n batch.summary.exchanges === profile.exchanges &&\n batch.postconditions.source_unitgroup_incoming_refs === 0 &&\n batch.postconditions.source_flowproperty_flow_refs === 0 &&\n batch.postconditions.target_flow_refs === (batch.dimension === 'time' ? 106 : 32) &&\n batch.postconditions.target_exchange_refs === (batch.dimension === 'time' ? 441 : 3216) &&\n batch.summary.rows === batch.action_ids.length &&\n batch.summary.amount_fields === batch.summary.exchanges * 2 &&\n batch.exchange_rewrites.length === batch.summary.exchanges &&\n snapshotIdentityMatches &&\n supportPayloadsValid &&\n mutationsValid &&\n exchangeRewritesValid &&\n (plan.status === 'blocked' ||\n (targetSnapshots.every(\n (snapshot) =>\n snapshot?.state_code === 0 &&\n snapshot.user_id === plan.account.user_id &&\n Boolean(snapshot.modified_at),\n ) &&\n sourceSnapshot?.state_code === 0 &&\n Boolean(sourceSnapshot.modified_at) &&\n sourceSnapshot.user_id === plan.account.user_id &&\n snapshotsValid([\n ...(targetSnapshots.filter(Boolean) as DatasetMaintenanceRowSnapshot[]),\n sourceSnapshot,\n ]) &&\n batch.conversion_evidence.source_unitgroup_payload_sha256 ===\n sourceSnapshot.payload_sha256 &&\n isJsonObject(batch.conversion_evidence.source_reference_unit) &&\n isJsonObject(batch.conversion_evidence.target_conversion_unit)))\n );\n });\n if (!validAliasPlan) {\n throw new CliError('Maintenance alias plan contract is inconsistent.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n });\n }\n }\n if (plan.operation === 'rebuild-derivatives') {\n const action = plan.actions[0];\n const validDerivativePlan = Boolean(\n plan.target_mode === 'owner_draft' &&\n plan.actions.length === 1 &&\n !plan.alias_batches &&\n plan.artifacts.derivative_baseline === 'derivative-baseline.json' &&\n action?.action === 'rebuild_derivatives' &&\n action.table === 'processes' &&\n sha256Json(action.components) === sha256Json(DERIVATIVE_REBUILD_COMPONENTS) &&\n action.desired_payload === null &&\n action.rollback.strategy === 'none_derivative_only' &&\n (action.status === 'blocked' || validDerivativeSnapshot(action.derivative_before, action)),\n );\n if (!validDerivativePlan) {\n throw new CliError('Maintenance derivative rebuild plan contract is inconsistent.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n });\n }\n } else if (\n plan.actions.some((action) => action.derivative_before !== undefined) ||\n plan.artifacts.derivative_baseline !== undefined\n ) {\n throw new CliError('Non-derivative maintenance plan contains derivative-only fields.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n });\n }\n return plan;\n}\n"]}
1
+ {"version":3,"file":"dataset-maintenance-contract.js","sourceRoot":"","sources":["../../../src/lib/dataset-maintenance-contract.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from 'node:crypto';\nimport { appendFileSync, existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { inspectMaintenanceSupportPayload } from './dataset-maintenance-support-validation.js';\nimport {\n isDatasetMaintenanceSnapshotCompleteness,\n type DatasetMaintenanceSnapshotCompleteness,\n} from './dataset-maintenance-pagination.js';\nimport { CliError } from './errors.js';\n\nexport type JsonObject = Record<string, unknown>;\n\nexport const MAINTENANCE_MUTABLE_TABLES = ['contacts', 'sources', 'flows', 'processes'] as const;\n\nexport const MAINTENANCE_SUPPORT_TABLES = ['unitgroups', 'flowproperties'] as const;\n\nexport const MAINTENANCE_SCAN_TABLES = [\n ...MAINTENANCE_MUTABLE_TABLES,\n 'lifecyclemodels',\n ...MAINTENANCE_SUPPORT_TABLES,\n] as const;\n\nexport type DatasetMaintenanceMutableTable = (typeof MAINTENANCE_MUTABLE_TABLES)[number];\nexport type DatasetMaintenanceSupportTable = (typeof MAINTENANCE_SUPPORT_TABLES)[number];\nexport type DatasetMaintenanceActionTable = DatasetMaintenanceMutableTable | 'flowproperties';\nexport type DatasetMaintenanceScanTable = (typeof MAINTENANCE_SCAN_TABLES)[number];\nexport type DatasetMaintenanceOperation =\n | 'delete'\n | 'retire'\n | 'redo-import'\n | 'repair-references'\n | 'merge-support-aliases'\n | 'rebuild-derivatives';\nexport type DatasetMaintenanceActionKind =\n | 'save_draft'\n | 'delete'\n | 'update_json_ordered'\n | 'rebuild_derivatives';\nexport type DatasetMaintenanceTargetMode = 'owner_draft';\n\nexport const DERIVATIVE_REBUILD_COMPONENTS = ['extracted_md', 'embedding_ft'] as const;\nexport type DatasetMaintenanceDerivativeComponent = (typeof DERIVATIVE_REBUILD_COMPONENTS)[number];\n\nexport type DatasetMaintenanceDerivativeSnapshot = {\n schema_version: 'dataset-derivative-snapshot.v1';\n table: 'processes';\n id: string;\n version: string;\n user_id: string;\n state_code: 0;\n modified_at: string;\n json_sha256: string;\n json_ordered_sha256: string;\n extracted_md_sha256: string | null;\n embedding_ft_sha256: string | null;\n embedding_ft_at: string | null;\n snapshot_sha256: string;\n};\n\nexport type DatasetMaintenanceAliasDimension = 'time' | 'length_time';\n\nexport type DatasetMaintenanceEntityRef = {\n id: string;\n version: string;\n};\n\nexport type DatasetMaintenanceAliasBatch = {\n batch_id: string;\n dimension: DatasetMaintenanceAliasDimension;\n factor: string;\n source: {\n unitgroup: DatasetMaintenanceEntityRef;\n flowproperty: DatasetMaintenanceEntityRef;\n };\n target: {\n unitgroup: DatasetMaintenanceEntityRef;\n flowproperty: DatasetMaintenanceEntityRef;\n };\n};\n\nexport type DatasetMaintenanceExchangeInstance = {\n exchange_index: number;\n data_set_internal_id: string;\n flow_id: string;\n flow_version: string;\n direction: 'Input' | 'Output';\n before_exchange_sha256: string;\n before_mean_amount: string;\n before_resulting_amount: string;\n};\n\nexport type DatasetMaintenanceAliasMutation =\n | { kind: 'flowproperty_unitgroup_reference' }\n | {\n kind: 'flow_flowproperty_reference';\n flow_property_internal_id: string;\n source_flowproperty_id: string;\n source_flowproperty_version: string;\n }\n | {\n kind: 'process_exchange_amounts';\n exchanges: Array<{\n index: number;\n internal_id: string;\n flow_id: string;\n flow_version: string;\n direction: 'Input' | 'Output';\n before_exchange_sha256: string;\n }>;\n };\n\nexport type DatasetMaintenanceScopeAction = {\n action_id: string;\n action: DatasetMaintenanceActionKind;\n table: DatasetMaintenanceActionTable;\n id: string;\n version: string;\n expected_user_id: string;\n expected_state_code: 0;\n reason_code: string;\n reason: string;\n evidence: unknown[];\n batch_id?: string;\n exchange_instances?: DatasetMaintenanceExchangeInstance[];\n desired_payload_path?: string;\n expected_before_sha256?: string;\n components?: DatasetMaintenanceDerivativeComponent[];\n};\n\nexport type DatasetMaintenanceScope = {\n schema_version: 1;\n task_id: string;\n operation: DatasetMaintenanceOperation;\n account: {\n user_id: string;\n email?: string;\n };\n source_import_run_id?: string;\n source_lineage?: unknown;\n target_mode?: DatasetMaintenanceTargetMode;\n alias_batches?: DatasetMaintenanceAliasBatch[];\n actions: DatasetMaintenanceScopeAction[];\n};\n\nexport type DatasetMaintenanceRemoteRow = {\n table: DatasetMaintenanceScanTable;\n id: string;\n version: string;\n user_id: string | null;\n state_code: number | null;\n modified_at: string | null;\n json?: JsonObject | null;\n json_ordered: JsonObject | null;\n model_id: string | null;\n rule_verification: boolean | null;\n};\n\nexport type DatasetMaintenanceRowSnapshot = DatasetMaintenanceRemoteRow & {\n row_sha256: string;\n payload_sha256: string | null;\n};\n\nexport type DatasetMaintenanceBlocker = {\n code: string;\n message: string;\n action_id?: string;\n table?: DatasetMaintenanceScanTable;\n id?: string;\n version?: string;\n details?: unknown;\n};\n\nexport type DatasetMaintenanceProtectedRow = {\n table: DatasetMaintenanceScanTable;\n id: string;\n version: string;\n modified_at: string | null;\n row_sha256: string;\n payload_sha256: string | null;\n reason: 'non_action_visible_row' | 'blocked_action_row';\n};\n\nexport type DatasetMaintenanceReferenceImpact = {\n target_action_id: string;\n target_table: DatasetMaintenanceActionTable;\n target_id: string;\n target_version: string;\n phase: 'current' | 'projected';\n source_table: DatasetMaintenanceScanTable;\n source_id: string;\n source_version: string;\n reference_path: string;\n reference_version: string | null;\n};\n\nexport type DatasetMaintenancePlanAction = DatasetMaintenanceScopeAction & {\n ordinal: number;\n status: 'ready' | 'blocked';\n before: DatasetMaintenanceRowSnapshot | null;\n desired_payload: {\n path: string;\n sha256: string;\n } | null;\n blockers: DatasetMaintenanceBlocker[];\n alias_mutation?: DatasetMaintenanceAliasMutation;\n derivative_before?: DatasetMaintenanceDerivativeSnapshot;\n rollback: {\n strategy:\n | 'save_before_snapshot'\n | 'restore_deleted_before_snapshot'\n | 'restore_atomic_alias_before_snapshot'\n | 'none_derivative_only';\n before_payload_sha256: string | null;\n before_payload: JsonObject | null;\n model_id: string | null;\n rule_verification: boolean | null;\n };\n};\n\nexport type DatasetMaintenanceAliasExchangeRewrite = DatasetMaintenanceExchangeInstance & {\n action_id: string;\n process_id: string;\n process_version: string;\n after_mean_amount: string;\n after_resulting_amount: string;\n after_exchange_sha256: string;\n};\n\nexport type DatasetMaintenanceAliasBatchPlan = DatasetMaintenanceAliasBatch & {\n action_ids: string[];\n target_snapshots: {\n unitgroup: DatasetMaintenanceRowSnapshot | null;\n flowproperty: DatasetMaintenanceRowSnapshot | null;\n source_unitgroup: DatasetMaintenanceRowSnapshot | null;\n };\n conversion_evidence: {\n source_unitgroup_payload_sha256: string | null;\n source_reference_unit: JsonObject | null;\n target_conversion_unit: JsonObject | null;\n };\n exchange_rewrites: DatasetMaintenanceAliasExchangeRewrite[];\n summary: {\n rows: number;\n flowproperties: number;\n flows: number;\n processes: number;\n exchanges: number;\n amount_fields: number;\n unrelated_exchanges: number;\n };\n postconditions: {\n source_unitgroup_incoming_refs: number;\n source_flowproperty_flow_refs: number;\n target_flow_refs: number;\n target_exchange_refs: number;\n };\n};\n\nexport type DatasetMaintenancePlan = {\n schema_version: 1;\n generated_at_utc: string;\n task_id: string;\n operation: DatasetMaintenanceOperation;\n operation_id: string;\n account: {\n user_id: string;\n email: string | null;\n };\n source_import_run_id: string | null;\n source_lineage: unknown;\n target_mode: DatasetMaintenanceTargetMode | null;\n status: 'ready' | 'blocked';\n scope_sha256: string;\n visible_snapshot_sha256: string;\n snapshot_completeness?: DatasetMaintenanceSnapshotCompleteness<DatasetMaintenanceScanTable>;\n projected_reference_sha256: string;\n plan_sha256: string;\n summary: {\n actions: number;\n save_draft: number;\n delete: number;\n update_json_ordered?: number;\n rebuild_derivatives?: number;\n atomic_batches?: number;\n scaled_exchanges?: number;\n scaled_amount_fields?: number;\n unrelated_exchanges_preserved?: number;\n protected_rows: number;\n blockers: number;\n current_reference_impacts: number;\n projected_reference_impacts: number;\n };\n artifacts: {\n maintenance_scope: string;\n rls_visible_snapshot: string;\n protected_rows: string;\n reference_impact_report: string;\n maintenance_plan: string;\n dry_run_report: string;\n payload_dir: string;\n exchange_rewrite_plan?: string;\n derivative_baseline?: string;\n };\n actions: DatasetMaintenancePlanAction[];\n alias_batches?: DatasetMaintenanceAliasBatchPlan[];\n protected_rows: DatasetMaintenanceProtectedRow[];\n blockers: DatasetMaintenanceBlocker[];\n};\n\nexport type DatasetMaintenanceProgressEntry = {\n schema_version: 1;\n plan_sha256: string;\n operation_id: string;\n action_id: string;\n action: DatasetMaintenanceActionKind;\n table: DatasetMaintenanceActionTable;\n id: string;\n version: string;\n reason_code: string;\n audit_context: {\n plan_sha256: string;\n operation_id: string;\n action_id: string;\n reason_code: string;\n source: 'tiangong-lca dataset maintenance apply';\n target_mode?: DatasetMaintenanceTargetMode;\n };\n actor: {\n user_id: string;\n email: string;\n };\n started_at_utc: string;\n ended_at_utc: string;\n before_sha256: string;\n after_sha256: string | null;\n remote_result_sha256: string | null;\n result: 'success' | 'failed';\n error: string | null;\n rollback: DatasetMaintenancePlanAction['rollback'];\n batch_id?: string;\n target_mode?: DatasetMaintenanceTargetMode;\n batch_request_sha256?: string;\n database_audit_id?: string;\n summary_audit_id?: string;\n plan_request_sha256?: string;\n plan_summary_audit_id?: string;\n};\n\nfunction token(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n const normalized = value.trim();\n return normalized || null;\n}\n\nexport function isJsonObject(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nexport function stableJsonValue(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(stableJsonValue);\n }\n if (isJsonObject(value)) {\n return Object.fromEntries(\n Object.keys(value)\n .sort()\n .map((key) => [key, stableJsonValue(value[key])]),\n );\n }\n return value;\n}\n\nexport function stableJsonText(value: unknown): string {\n return JSON.stringify(stableJsonValue(value));\n}\n\nexport function sha256Text(value: string): string {\n return crypto.createHash('sha256').update(value).digest('hex');\n}\n\nexport function sha256Json(value: unknown): string {\n return sha256Text(stableJsonText(value));\n}\n\nexport function snapshotRemoteRow(row: DatasetMaintenanceRemoteRow): DatasetMaintenanceRowSnapshot {\n return {\n ...row,\n row_sha256: sha256Json(row),\n payload_sha256: row.json_ordered ? sha256Json(row.json_ordered) : null,\n };\n}\n\nexport function maintenanceRowKey(row: {\n table: DatasetMaintenanceScanTable;\n id: string;\n version: string;\n}): string {\n return `${row.table}\\u0000${row.id}\\u0000${row.version}`;\n}\n\nfunction requireToken(value: unknown, label: string): string {\n const normalized = token(value);\n if (!normalized) {\n throw new CliError(`Maintenance scope ${label} must be a non-empty string.`, {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n details: { field: label },\n });\n }\n return normalized;\n}\n\nfunction parseEntityRef(value: unknown, label: string): DatasetMaintenanceEntityRef {\n if (!isJsonObject(value)) {\n throw new CliError(`Maintenance scope ${label} must be an object.`, {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n return {\n id: requireToken(value.id, `${label}.id`),\n version: requireToken(value.version, `${label}.version`),\n };\n}\n\nfunction parseAliasBatch(value: unknown, index: number): DatasetMaintenanceAliasBatch {\n const label = `alias_batches[${index}]`;\n if (!isJsonObject(value) || !isJsonObject(value.source) || !isJsonObject(value.target)) {\n throw new CliError(`Maintenance scope ${label} must include source and target objects.`, {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n const dimension = requireToken(value.dimension, `${label}.dimension`);\n const factors: Record<DatasetMaintenanceAliasDimension, string> = {\n time: '0.00011415525114155251',\n length_time: '1000',\n };\n if (!(dimension in factors)) {\n throw new CliError(`Unsupported alias-rewrite dimension: ${dimension}`, {\n code: 'DATASET_MAINTENANCE_ALIAS_DIMENSION_INVALID',\n exitCode: 2,\n });\n }\n const factor = requireToken(value.factor, `${label}.factor`);\n if (factor !== factors[dimension as DatasetMaintenanceAliasDimension]) {\n throw new CliError(`Alias-rewrite factor does not match dimension ${dimension}.`, {\n code: 'DATASET_MAINTENANCE_ALIAS_FACTOR_INVALID',\n exitCode: 2,\n });\n }\n return {\n batch_id: requireToken(value.batch_id, `${label}.batch_id`),\n dimension: dimension as DatasetMaintenanceAliasDimension,\n factor,\n source: {\n unitgroup: parseEntityRef(value.source.unitgroup, `${label}.source.unitgroup`),\n flowproperty: parseEntityRef(value.source.flowproperty, `${label}.source.flowproperty`),\n },\n target: {\n unitgroup: parseEntityRef(value.target.unitgroup, `${label}.target.unitgroup`),\n flowproperty: parseEntityRef(value.target.flowproperty, `${label}.target.flowproperty`),\n },\n };\n}\n\nfunction parseExchangeInstance(\n value: unknown,\n actionIndex: number,\n exchangeIndex: number,\n): DatasetMaintenanceExchangeInstance {\n const label = `actions[${actionIndex}].exchange_instances[${exchangeIndex}]`;\n if (\n !isJsonObject(value) ||\n typeof value.exchange_index !== 'number' ||\n !Number.isInteger(value.exchange_index) ||\n value.exchange_index < 0\n ) {\n throw new CliError(\n `Maintenance scope ${label}.exchange_index must be a non-negative integer.`,\n {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n },\n );\n }\n const beforeExchangeSha256 = requireToken(\n value.before_exchange_sha256,\n `${label}.before_exchange_sha256`,\n );\n if (!/^[a-f0-9]{64}$/u.test(beforeExchangeSha256)) {\n throw new CliError(`Maintenance scope ${label}.before_exchange_sha256 is invalid.`, {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n const direction = requireToken(value.direction, `${label}.direction`);\n if (!['Input', 'Output'].includes(direction)) {\n throw new CliError(`Maintenance scope ${label}.direction must be Input or Output.`, {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n return {\n exchange_index: value.exchange_index as number,\n data_set_internal_id: requireToken(value.data_set_internal_id, `${label}.data_set_internal_id`),\n flow_id: requireToken(value.flow_id, `${label}.flow_id`),\n flow_version: requireToken(value.flow_version, `${label}.flow_version`),\n direction: direction as 'Input' | 'Output',\n before_exchange_sha256: beforeExchangeSha256,\n before_mean_amount: requireToken(value.before_mean_amount, `${label}.before_mean_amount`),\n before_resulting_amount: requireToken(\n value.before_resulting_amount,\n `${label}.before_resulting_amount`,\n ),\n };\n}\n\nfunction parseAction(\n value: unknown,\n index: number,\n accountUserId: string,\n operation: DatasetMaintenanceOperation,\n): DatasetMaintenanceScopeAction {\n if (!isJsonObject(value)) {\n throw new CliError(`Maintenance scope action ${index} must be an object.`, {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n const action = requireToken(value.action, `actions[${index}].action`);\n const table = requireToken(value.table, `actions[${index}].table`);\n if (!['save_draft', 'delete', 'update_json_ordered', 'rebuild_derivatives'].includes(action)) {\n throw new CliError(`Unsupported maintenance action: ${action}`, {\n code: 'DATASET_MAINTENANCE_ACTION_UNSUPPORTED',\n exitCode: 2,\n });\n }\n const aliasAction = action === 'update_json_ordered';\n const derivativeAction = action === 'rebuild_derivatives';\n const allowedTable = derivativeAction\n ? table === 'processes'\n : aliasAction\n ? ['flowproperties', 'flows', 'processes'].includes(table)\n : (MAINTENANCE_MUTABLE_TABLES as readonly string[]).includes(table);\n if (!allowedTable) {\n throw new CliError(\n `Maintenance cannot mutate protected or unsupported dataset table: ${table}`,\n {\n code: 'DATASET_MAINTENANCE_TABLE_PROTECTED',\n exitCode: 2,\n },\n );\n }\n if (\n (operation === 'merge-support-aliases' && !aliasAction) ||\n (operation === 'rebuild-derivatives' && !derivativeAction) ||\n (!['merge-support-aliases', 'rebuild-derivatives'].includes(operation) &&\n (aliasAction || derivativeAction))\n ) {\n throw new CliError(`Maintenance operation ${operation} cannot contain ${action} actions.`, {\n code: 'DATASET_MAINTENANCE_OPERATION_ACTION_MISMATCH',\n exitCode: 2,\n });\n }\n if (value.expected_state_code !== 0) {\n throw new CliError(`Maintenance action ${index} must require expected_state_code=0.`, {\n code: 'DATASET_MAINTENANCE_NON_DRAFT_FORBIDDEN',\n exitCode: 2,\n });\n }\n const expectedUserId = requireToken(value.expected_user_id, `actions[${index}].expected_user_id`);\n if (expectedUserId !== accountUserId) {\n throw new CliError(`Maintenance action ${index} owner does not match scope account.`, {\n code: 'DATASET_MAINTENANCE_SCOPE_OWNER_MISMATCH',\n exitCode: 2,\n });\n }\n if (!Array.isArray(value.evidence)) {\n throw new CliError(`Maintenance action ${index} evidence must be an array.`, {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n const desiredPayloadPath = token(value.desired_payload_path);\n if (action === 'save_draft' && !desiredPayloadPath) {\n throw new CliError(`Maintenance save_draft action ${index} requires desired_payload_path.`, {\n code: 'DATASET_MAINTENANCE_DESIRED_PAYLOAD_REQUIRED',\n exitCode: 2,\n });\n }\n if (action !== 'save_draft' && desiredPayloadPath) {\n throw new CliError(\n `Maintenance ${action} action ${index} cannot include desired_payload_path.`,\n {\n code: 'DATASET_MAINTENANCE_DESIRED_PAYLOAD_FORBIDDEN',\n exitCode: 2,\n },\n );\n }\n const batchId = token(value.batch_id);\n if (aliasAction !== Boolean(batchId)) {\n throw new CliError(\n aliasAction\n ? `Maintenance alias action ${index} requires batch_id.`\n : `Maintenance non-alias action ${index} cannot include batch_id.`,\n {\n code: 'DATASET_MAINTENANCE_ALIAS_BATCH_BINDING_INVALID',\n exitCode: 2,\n },\n );\n }\n const exchangeInstances = Array.isArray(value.exchange_instances)\n ? value.exchange_instances.map((entry, exchangeIndex) =>\n parseExchangeInstance(entry, index, exchangeIndex),\n )\n : [];\n if (\n aliasAction &&\n ((table === 'processes' && exchangeInstances.length === 0) ||\n (table !== 'processes' && exchangeInstances.length > 0))\n ) {\n throw new CliError(\n `Alias action ${index} exchange_instances must be non-empty only for processes.`,\n {\n code: 'DATASET_MAINTENANCE_ALIAS_EXCHANGE_SCOPE_INVALID',\n exitCode: 2,\n },\n );\n }\n if (!aliasAction && 'exchange_instances' in value) {\n throw new CliError(`Maintenance non-alias action ${index} cannot include exchange_instances.`, {\n code: 'DATASET_MAINTENANCE_ALIAS_EXCHANGE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n const components = Array.isArray(value.components)\n ? value.components.map((component, componentIndex) =>\n requireToken(component, `actions[${index}].components[${componentIndex}]`),\n )\n : [];\n if (\n derivativeAction &&\n (components.length !== DERIVATIVE_REBUILD_COMPONENTS.length ||\n components.some(\n (component, componentIndex) => component !== DERIVATIVE_REBUILD_COMPONENTS[componentIndex],\n ))\n ) {\n throw new CliError(\n `Derivative rebuild action ${index} requires components in exact order: ${DERIVATIVE_REBUILD_COMPONENTS.join(', ')}.`,\n {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_COMPONENTS_INVALID',\n exitCode: 2,\n },\n );\n }\n if (!derivativeAction && 'components' in value) {\n throw new CliError(`Maintenance non-derivative action ${index} cannot include components.`, {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_COMPONENTS_INVALID',\n exitCode: 2,\n });\n }\n const exchangeKeys = new Set(\n exchangeInstances.map(\n (entry) => `${entry.exchange_index}\\u0000${entry.data_set_internal_id}\\u0000${entry.flow_id}`,\n ),\n );\n if (exchangeKeys.size !== exchangeInstances.length) {\n throw new CliError(`Alias action ${index} contains duplicate exchange instances.`, {\n code: 'DATASET_MAINTENANCE_ALIAS_EXCHANGE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n const expectedBeforeSha256 = token(value.expected_before_sha256);\n if (expectedBeforeSha256 && !/^[a-f0-9]{64}$/u.test(expectedBeforeSha256)) {\n throw new CliError(`Maintenance action ${index} expected_before_sha256 is invalid.`, {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n\n return {\n action_id: requireToken(value.action_id, `actions[${index}].action_id`),\n action: action as DatasetMaintenanceActionKind,\n table: table as DatasetMaintenanceActionTable,\n id: requireToken(value.id, `actions[${index}].id`),\n version: requireToken(value.version, `actions[${index}].version`),\n expected_user_id: expectedUserId,\n expected_state_code: 0,\n reason_code: requireToken(value.reason_code, `actions[${index}].reason_code`),\n reason: requireToken(value.reason, `actions[${index}].reason`),\n evidence: value.evidence,\n ...(batchId ? { batch_id: batchId } : {}),\n ...(exchangeInstances.length ? { exchange_instances: exchangeInstances } : {}),\n ...(desiredPayloadPath ? { desired_payload_path: desiredPayloadPath } : {}),\n ...(expectedBeforeSha256 ? { expected_before_sha256: expectedBeforeSha256 } : {}),\n ...(derivativeAction ? { components: [...DERIVATIVE_REBUILD_COMPONENTS] } : {}),\n };\n}\n\nexport function parseMaintenanceScope(\n value: unknown,\n expectedOperation?: DatasetMaintenanceOperation,\n): DatasetMaintenanceScope {\n if (!isJsonObject(value) || value.schema_version !== 1 || !isJsonObject(value.account)) {\n throw new CliError('Maintenance scope must use schema_version=1 and include account.', {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n const operation = requireToken(value.operation, 'operation');\n if (\n ![\n 'delete',\n 'retire',\n 'redo-import',\n 'repair-references',\n 'merge-support-aliases',\n 'rebuild-derivatives',\n ].includes(operation)\n ) {\n throw new CliError(`Unsupported maintenance operation: ${operation}`, {\n code: 'DATASET_MAINTENANCE_OPERATION_UNSUPPORTED',\n exitCode: 2,\n });\n }\n if (expectedOperation && operation !== expectedOperation) {\n throw new CliError(\n `Scope operation ${operation} does not match requested operation ${expectedOperation}.`,\n {\n code: 'DATASET_MAINTENANCE_OPERATION_MISMATCH',\n exitCode: 2,\n },\n );\n }\n const userId = requireToken(value.account.user_id, 'account.user_id');\n if (!Array.isArray(value.actions) || value.actions.length === 0) {\n throw new CliError('Maintenance scope actions must be a non-empty array.', {\n code: 'DATASET_MAINTENANCE_SCOPE_INVALID',\n exitCode: 2,\n });\n }\n const actions = value.actions.map((entry, index) =>\n parseAction(entry, index, userId, operation as DatasetMaintenanceOperation),\n );\n const targetMode = token(value.target_mode);\n if (\n (['merge-support-aliases', 'rebuild-derivatives'].includes(operation) &&\n targetMode !== 'owner_draft') ||\n (!['merge-support-aliases', 'rebuild-derivatives'].includes(operation) && targetMode !== null)\n ) {\n throw new CliError(\n 'merge-support-aliases and rebuild-derivatives require target_mode=owner_draft; other operations forbid target_mode.',\n {\n code: 'DATASET_MAINTENANCE_TARGET_MODE_INVALID',\n exitCode: 2,\n details: { operation, target_mode: targetMode },\n },\n );\n }\n const aliasBatches = Array.isArray(value.alias_batches)\n ? value.alias_batches.map(parseAliasBatch)\n : [];\n if (\n (operation === 'merge-support-aliases' && aliasBatches.length !== 2) ||\n (operation !== 'merge-support-aliases' && aliasBatches.length !== 0)\n ) {\n throw new CliError(\n 'merge-support-aliases requires exactly two alias_batches; other operations forbid them.',\n {\n code: 'DATASET_MAINTENANCE_ALIAS_BATCH_SCOPE_INVALID',\n exitCode: 2,\n },\n );\n }\n if (operation === 'rebuild-derivatives' && actions.length !== 1) {\n throw new CliError('rebuild-derivatives requires exactly one action.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_ACTION_COUNT_INVALID',\n exitCode: 2,\n });\n }\n if (aliasBatches.length) {\n const batchIds = new Set(aliasBatches.map((batch) => batch.batch_id));\n const dimensions = new Set(aliasBatches.map((batch) => batch.dimension));\n if (\n batchIds.size !== 2 ||\n dimensions.size !== 2 ||\n !dimensions.has('time') ||\n !dimensions.has('length_time') ||\n actions.some((action) => !action.batch_id || !batchIds.has(action.batch_id))\n ) {\n throw new CliError(\n 'Alias batches and action batch_id bindings are incomplete or duplicate.',\n {\n code: 'DATASET_MAINTENANCE_ALIAS_BATCH_SCOPE_INVALID',\n exitCode: 2,\n },\n );\n }\n }\n const actionIds = new Set<string>();\n const rowKeys = new Set<string>();\n const payloadNames = new Set<string>();\n for (const action of actions) {\n if (actionIds.has(action.action_id)) {\n throw new CliError(`Duplicate maintenance action_id: ${action.action_id}`, {\n code: 'DATASET_MAINTENANCE_ACTION_ID_DUPLICATE',\n exitCode: 2,\n });\n }\n actionIds.add(action.action_id);\n const rowKey = maintenanceRowKey(action);\n if (rowKeys.has(rowKey)) {\n throw new CliError(`Multiple maintenance actions target the same row: ${action.id}`, {\n code: 'DATASET_MAINTENANCE_TARGET_DUPLICATE',\n exitCode: 2,\n });\n }\n rowKeys.add(rowKey);\n const payloadName = safeActionFileName(action.action_id);\n if (payloadNames.has(payloadName)) {\n throw new CliError(`Maintenance action ids collide as payload filenames: ${payloadName}`, {\n code: 'DATASET_MAINTENANCE_ACTION_FILENAME_COLLISION',\n exitCode: 2,\n });\n }\n payloadNames.add(payloadName);\n }\n const email = token(value.account.email);\n const sourceImportRunId = token(value.source_import_run_id);\n return {\n schema_version: 1,\n task_id: requireToken(value.task_id, 'task_id'),\n operation: operation as DatasetMaintenanceOperation,\n account: {\n user_id: userId,\n ...(email ? { email } : {}),\n },\n ...(sourceImportRunId ? { source_import_run_id: sourceImportRunId } : {}),\n ...('source_lineage' in value ? { source_lineage: value.source_lineage } : {}),\n ...(targetMode === 'owner_draft' ? { target_mode: targetMode } : {}),\n ...(aliasBatches.length ? { alias_batches: aliasBatches } : {}),\n actions,\n };\n}\n\nexport function readJsonFile(filePath: string, label: string): unknown {\n const resolved = path.resolve(filePath);\n if (!existsSync(resolved)) {\n throw new CliError(`${label} not found: ${resolved}`, {\n code: 'DATASET_MAINTENANCE_ARTIFACT_NOT_FOUND',\n exitCode: 2,\n });\n }\n try {\n return JSON.parse(readFileSync(resolved, 'utf8'));\n } catch (error) {\n throw new CliError(`${label} is not valid JSON: ${resolved}`, {\n code: 'DATASET_MAINTENANCE_ARTIFACT_INVALID',\n exitCode: 2,\n details: String(error),\n });\n }\n}\n\nfunction writeImmutableText(filePath: string, text: string): string {\n const resolved = path.resolve(filePath);\n if (existsSync(resolved)) {\n if (readFileSync(resolved, 'utf8') === text) {\n return resolved;\n }\n throw new CliError(`Refusing to overwrite immutable maintenance artifact: ${resolved}`, {\n code: 'DATASET_MAINTENANCE_ARTIFACT_IMMUTABLE',\n exitCode: 1,\n });\n }\n mkdirSync(path.dirname(resolved), { recursive: true });\n writeFileSync(resolved, text, { encoding: 'utf8', flag: 'wx' });\n return resolved;\n}\n\nexport function writeImmutableJson(filePath: string, value: unknown): string {\n return writeImmutableText(filePath, `${stableJsonText(value)}\\n`);\n}\n\nexport function writeImmutableJsonLines(filePath: string, values: unknown[]): string {\n const text = values.length ? `${values.map(stableJsonText).join('\\n')}\\n` : '';\n return writeImmutableText(filePath, text);\n}\n\nexport function appendStableJsonLine(filePath: string, value: unknown): string {\n const resolved = path.resolve(filePath);\n mkdirSync(path.dirname(resolved), { recursive: true });\n appendFileSync(resolved, `${stableJsonText(value)}\\n`, 'utf8');\n return resolved;\n}\n\nexport function readJsonLinesIfPresent(filePath: string): unknown[] {\n const resolved = path.resolve(filePath);\n if (!existsSync(resolved)) {\n return [];\n }\n return readFileSync(resolved, 'utf8')\n .split(/\\r?\\n/u)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((line, index) => {\n try {\n return JSON.parse(line);\n } catch (error) {\n throw new CliError(`Invalid maintenance JSONL at ${resolved}:${index + 1}`, {\n code: 'DATASET_MAINTENANCE_ARTIFACT_INVALID',\n exitCode: 1,\n details: String(error),\n });\n }\n });\n}\n\nexport function safeActionFileName(actionId: string): string {\n const safe = actionId.replace(/[^a-zA-Z0-9._-]+/gu, '_').replace(/^_+|_+$/gu, '');\n return safe || sha256Text(actionId).slice(0, 16);\n}\n\nexport function resolveMaintenancePlanArtifactPath(\n planDir: string,\n relativePath: string,\n label: string,\n): string {\n const root = path.resolve(planDir);\n if (!relativePath.trim() || path.isAbsolute(relativePath)) {\n throw new CliError(`${label} must be a relative path inside the maintenance plan directory.`, {\n code: 'DATASET_MAINTENANCE_PLAN_ARTIFACT_PATH_INVALID',\n exitCode: 2,\n details: relativePath,\n });\n }\n const resolved = path.resolve(root, relativePath);\n const withinRoot = path.relative(root, resolved);\n if (!withinRoot || withinRoot === '..' || withinRoot.startsWith(`..${path.sep}`)) {\n throw new CliError(`${label} must stay inside the maintenance plan directory.`, {\n code: 'DATASET_MAINTENANCE_PLAN_ARTIFACT_PATH_INVALID',\n exitCode: 2,\n details: relativePath,\n });\n }\n return resolved;\n}\n\nexport function computePlanSha256(plan: DatasetMaintenancePlan): string {\n const body = { ...plan, plan_sha256: '' };\n return sha256Json(body);\n}\n\nfunction validDerivativeSnapshot(\n value: unknown,\n action: DatasetMaintenancePlanAction,\n): value is DatasetMaintenanceDerivativeSnapshot {\n if (!isJsonObject(value)) return false;\n const requiredHashes = [value.json_sha256, value.json_ordered_sha256, value.snapshot_sha256];\n const nullableHashes = [value.extracted_md_sha256, value.embedding_ft_sha256];\n return Boolean(\n value.schema_version === 'dataset-derivative-snapshot.v1' &&\n value.table === 'processes' &&\n value.id === action.id &&\n value.version === action.version &&\n value.user_id === action.expected_user_id &&\n value.state_code === 0 &&\n value.modified_at === action.before?.modified_at &&\n typeof value.modified_at === 'string' &&\n Number.isFinite(Date.parse(value.modified_at)) &&\n requiredHashes.every((hash) => typeof hash === 'string' && /^[a-f0-9]{64}$/u.test(hash)) &&\n nullableHashes.every(\n (hash) => hash === null || (typeof hash === 'string' && /^[a-f0-9]{64}$/u.test(hash)),\n ) &&\n value.json_sha256 === value.json_ordered_sha256 &&\n (value.embedding_ft_at === null ||\n (typeof value.embedding_ft_at === 'string' &&\n Number.isFinite(Date.parse(value.embedding_ft_at)))),\n );\n}\n\nexport function parseMaintenancePlan(value: unknown): DatasetMaintenancePlan {\n if (\n !isJsonObject(value) ||\n value.schema_version !== 1 ||\n !Array.isArray(value.actions) ||\n !Array.isArray(value.protected_rows) ||\n !Array.isArray(value.blockers) ||\n !isJsonObject(value.account) ||\n !isJsonObject(value.artifacts)\n ) {\n throw new CliError('Maintenance plan is not a valid schema_version=1 plan.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n });\n }\n const plan = value as DatasetMaintenancePlan;\n if (\n plan.snapshot_completeness !== undefined &&\n !isDatasetMaintenanceSnapshotCompleteness(plan.snapshot_completeness, MAINTENANCE_SCAN_TABLES)\n ) {\n throw new CliError('Maintenance plan snapshot completeness proof is invalid.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n });\n }\n const expected = computePlanSha256(plan);\n if (plan.plan_sha256 !== expected) {\n throw new CliError('Maintenance plan hash does not match its canonical contents.', {\n code: 'DATASET_MAINTENANCE_PLAN_HASH_MISMATCH',\n exitCode: 2,\n details: { expected, received: plan.plan_sha256 },\n });\n }\n\n const normalizedScope = parseMaintenanceScope(\n {\n schema_version: 1,\n task_id: plan.task_id,\n operation: plan.operation,\n account: plan.account,\n ...(plan.source_import_run_id ? { source_import_run_id: plan.source_import_run_id } : {}),\n source_lineage: plan.source_lineage,\n ...(plan.target_mode ? { target_mode: plan.target_mode } : {}),\n ...(plan.alias_batches\n ? {\n alias_batches: plan.alias_batches.map((batch) => ({\n batch_id: batch.batch_id,\n dimension: batch.dimension,\n factor: batch.factor,\n source: batch.source,\n target: batch.target,\n })),\n }\n : {}),\n actions: plan.actions,\n },\n plan.operation,\n );\n const actionIds = new Set<string>();\n const ordinals = new Set<number>();\n for (const [index, action] of plan.actions.entries()) {\n const normalizedAction = normalizedScope.actions[index];\n if (\n !normalizedAction ||\n action.action_id !== normalizedAction.action_id ||\n !Number.isInteger(action.ordinal) ||\n action.ordinal < 0 ||\n ordinals.has(action.ordinal) ||\n !['ready', 'blocked'].includes(action.status) ||\n !Array.isArray(action.blockers) ||\n !isJsonObject(action.rollback)\n ) {\n throw new CliError('Maintenance plan contains an invalid action contract.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n details: { index, action_id: action.action_id },\n });\n }\n actionIds.add(action.action_id);\n ordinals.add(action.ordinal);\n if (action.status === 'ready') {\n const before = action.before;\n if (\n !isJsonObject(before) ||\n before.table !== action.table ||\n before.id !== action.id ||\n before.version !== action.version ||\n before.user_id !== action.expected_user_id ||\n before.state_code !== 0 ||\n !isJsonObject(before.json_ordered) ||\n typeof before.row_sha256 !== 'string' ||\n typeof before.payload_sha256 !== 'string' ||\n action.blockers.length > 0\n ) {\n throw new CliError('Ready maintenance plan action has an invalid before snapshot.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n details: { action_id: action.action_id },\n });\n }\n if (action.action === 'update_json_ordered' && !before.modified_at) {\n throw new CliError('Ready alias action requires a frozen modified_at value.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n details: { action_id: action.action_id },\n });\n }\n const remoteRow: DatasetMaintenanceRemoteRow = {\n table: before.table,\n id: before.id,\n version: before.version,\n user_id: before.user_id,\n state_code: before.state_code,\n modified_at: before.modified_at,\n json_ordered: before.json_ordered,\n model_id: before.model_id,\n rule_verification: before.rule_verification,\n };\n const expectedSnapshot = snapshotRemoteRow(remoteRow);\n if (\n before.row_sha256 !== expectedSnapshot.row_sha256 ||\n before.payload_sha256 !== expectedSnapshot.payload_sha256\n ) {\n throw new CliError('Ready maintenance plan action before snapshot hash is invalid.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n details: { action_id: action.action_id },\n });\n }\n const expectedRollbackStrategy =\n action.action === 'save_draft'\n ? 'save_before_snapshot'\n : action.action === 'delete'\n ? 'restore_deleted_before_snapshot'\n : action.action === 'update_json_ordered'\n ? 'restore_atomic_alias_before_snapshot'\n : 'none_derivative_only';\n const derivativeRollback = action.action === 'rebuild_derivatives';\n const rollbackMatches = derivativeRollback\n ? action.rollback.strategy === expectedRollbackStrategy &&\n action.rollback.before_payload_sha256 === null &&\n action.rollback.before_payload === null &&\n action.rollback.model_id === null &&\n action.rollback.rule_verification === null\n : action.rollback.strategy === expectedRollbackStrategy &&\n action.rollback.before_payload_sha256 === before.payload_sha256 &&\n isJsonObject(action.rollback.before_payload) &&\n sha256Json(action.rollback.before_payload) === before.payload_sha256 &&\n action.rollback.model_id === before.model_id &&\n action.rollback.rule_verification === before.rule_verification;\n if (!rollbackMatches) {\n throw new CliError('Ready maintenance plan action rollback snapshot is invalid.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n details: { action_id: action.action_id },\n });\n }\n }\n if (\n (['save_draft', 'update_json_ordered'].includes(action.action) &&\n action.status === 'ready' &&\n (!isJsonObject(action.desired_payload) ||\n typeof action.desired_payload.path !== 'string' ||\n !/^[a-f0-9]{64}$/u.test(String(action.desired_payload.sha256)))) ||\n (!['save_draft', 'update_json_ordered'].includes(action.action) &&\n action.desired_payload !== null)\n ) {\n throw new CliError('Maintenance plan action desired payload contract is invalid.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n details: { action_id: action.action_id },\n });\n }\n }\n const flattenedBlockers = plan.actions.flatMap((action) => action.blockers);\n const summaryMatches =\n isJsonObject(plan.summary) &&\n plan.summary.actions === plan.actions.length &&\n plan.summary.save_draft ===\n plan.actions.filter((action) => action.action === 'save_draft').length &&\n plan.summary.delete === plan.actions.filter((action) => action.action === 'delete').length &&\n (plan.summary.update_json_ordered ?? 0) ===\n plan.actions.filter((action) => action.action === 'update_json_ordered').length &&\n (plan.summary.rebuild_derivatives ?? 0) ===\n plan.actions.filter((action) => action.action === 'rebuild_derivatives').length &&\n (plan.summary.atomic_batches ?? 0) === (plan.alias_batches?.length ?? 0) &&\n (plan.summary.scaled_exchanges ?? 0) ===\n (plan.alias_batches?.reduce((sum, batch) => sum + batch.summary.exchanges, 0) ?? 0) &&\n (plan.summary.scaled_amount_fields ?? 0) ===\n (plan.alias_batches?.reduce((sum, batch) => sum + batch.summary.amount_fields, 0) ?? 0) &&\n (plan.summary.unrelated_exchanges_preserved ?? 0) ===\n (plan.alias_batches?.reduce((sum, batch) => sum + batch.summary.unrelated_exchanges, 0) ??\n 0) &&\n plan.summary.protected_rows === plan.protected_rows.length &&\n plan.summary.blockers === plan.blockers.length &&\n Number.isInteger(plan.summary.current_reference_impacts) &&\n plan.summary.current_reference_impacts >= 0 &&\n Number.isInteger(plan.summary.projected_reference_impacts) &&\n plan.summary.projected_reference_impacts >= 0;\n const ready =\n plan.status === 'ready' &&\n plan.blockers.length === 0 &&\n flattenedBlockers.length === 0 &&\n plan.actions.every((action) => action.status === 'ready');\n const blocked =\n plan.status === 'blocked' &&\n plan.blockers.length > 0 &&\n flattenedBlockers.length > 0 &&\n plan.actions.some((action) => action.status === 'blocked');\n if (\n actionIds.size !== plan.actions.length ||\n !summaryMatches ||\n (!ready && !blocked) ||\n sha256Json(plan.blockers) !== sha256Json(flattenedBlockers)\n ) {\n throw new CliError('Maintenance plan status or blocker contract is inconsistent.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n });\n }\n if (plan.operation === 'merge-support-aliases') {\n const batches = plan.alias_batches!;\n const batchActionIds = new Set(batches.flatMap((batch) => batch.action_ids));\n const expectedProfiles = {\n time: {\n factor: '0.00011415525114155251',\n rows: 25,\n flowproperties: 1,\n flows: 10,\n processes: 14,\n exchanges: 20,\n },\n length_time: {\n factor: '1000',\n rows: 27,\n flowproperties: 1,\n flows: 13,\n processes: 13,\n exchanges: 39,\n },\n } as const;\n const validAliasPlan =\n plan.target_mode === 'owner_draft' &&\n batches.length === 2 &&\n plan.artifacts.exchange_rewrite_plan === 'exchange-rewrite-plan.jsonl' &&\n batchActionIds.size === plan.actions.length &&\n batches.reduce((sum, batch) => sum + batch.action_ids.length, 0) === plan.actions.length &&\n batches.reduce((sum, batch) => sum + batch.summary.unrelated_exchanges, 0) === 309 &&\n plan.actions.every(\n (action) =>\n action.action === 'update_json_ordered' &&\n action.batch_id &&\n isJsonObject(action.alias_mutation) &&\n batches.some(\n (batch) =>\n batch.batch_id === action.batch_id && batch.action_ids.includes(action.action_id),\n ),\n ) &&\n batches.every((batch) => {\n const profile = expectedProfiles[batch.dimension];\n const actions = plan.actions.filter((action) => action.batch_id === batch.batch_id);\n const counts = {\n flowproperties: actions.filter((action) => action.table === 'flowproperties').length,\n flows: actions.filter((action) => action.table === 'flows').length,\n processes: actions.filter((action) => action.table === 'processes').length,\n };\n const targetSnapshots = [\n batch.target_snapshots.unitgroup,\n batch.target_snapshots.flowproperty,\n ];\n const sourceSnapshot = batch.target_snapshots.source_unitgroup;\n const supportPayloadsValid = (\n [\n {\n snapshot: batch.target_snapshots.unitgroup,\n table: 'unitgroups' as const,\n id: batch.target.unitgroup.id,\n version: batch.target.unitgroup.version,\n },\n {\n snapshot: batch.target_snapshots.flowproperty,\n table: 'flowproperties' as const,\n id: batch.target.flowproperty.id,\n version: batch.target.flowproperty.version,\n },\n {\n snapshot: sourceSnapshot,\n table: 'unitgroups' as const,\n id: batch.source.unitgroup.id,\n version: batch.source.unitgroup.version,\n },\n ] as const\n ).every((entry) => {\n if (!entry.snapshot?.json_ordered) return plan.status === 'blocked';\n const inspection = inspectMaintenanceSupportPayload({\n table: entry.table,\n payload: entry.snapshot.json_ordered,\n });\n return (\n inspection.identity.id === entry.id && inspection.identity.version === entry.version\n );\n });\n const snapshotsValid = (snapshots: DatasetMaintenanceRowSnapshot[]): boolean =>\n snapshots.every((snapshot) => {\n const remoteRow: DatasetMaintenanceRemoteRow = {\n table: snapshot.table,\n id: snapshot.id,\n version: snapshot.version,\n user_id: snapshot.user_id,\n state_code: snapshot.state_code,\n modified_at: snapshot.modified_at,\n json_ordered: snapshot.json_ordered,\n model_id: snapshot.model_id,\n rule_verification: snapshot.rule_verification,\n };\n const expectedSnapshot = snapshotRemoteRow(remoteRow);\n return (\n snapshot.row_sha256 === expectedSnapshot.row_sha256 &&\n snapshot.payload_sha256 === expectedSnapshot.payload_sha256\n );\n });\n const snapshotIdentityMatches = Boolean(\n batch.target_snapshots.unitgroup?.table === 'unitgroups' &&\n batch.target_snapshots.unitgroup.id === batch.target.unitgroup.id &&\n batch.target_snapshots.unitgroup.version === batch.target.unitgroup.version &&\n batch.target_snapshots.flowproperty?.table === 'flowproperties' &&\n batch.target_snapshots.flowproperty.id === batch.target.flowproperty.id &&\n batch.target_snapshots.flowproperty.version === batch.target.flowproperty.version &&\n sourceSnapshot?.table === 'unitgroups' &&\n sourceSnapshot.id === batch.source.unitgroup.id &&\n sourceSnapshot.version === batch.source.unitgroup.version,\n );\n const mutationsValid = actions.every((action) => {\n const mutation = action.alias_mutation!;\n if (action.table === 'flowproperties') {\n return (\n mutation.kind === 'flowproperty_unitgroup_reference' &&\n action.id === batch.source.flowproperty.id &&\n action.version === batch.source.flowproperty.version\n );\n }\n if (action.table === 'flows') {\n return (\n mutation.kind === 'flow_flowproperty_reference' &&\n mutation.flow_property_internal_id === '1' &&\n mutation.source_flowproperty_id === batch.source.flowproperty.id &&\n mutation.source_flowproperty_version === batch.source.flowproperty.version\n );\n }\n return (\n mutation.kind === 'process_exchange_amounts' &&\n sha256Json(mutation.exchanges) ===\n sha256Json(\n action.exchange_instances!.map((instance) => ({\n index: instance.exchange_index,\n internal_id: instance.data_set_internal_id,\n flow_id: instance.flow_id,\n flow_version: instance.flow_version,\n direction: instance.direction,\n before_exchange_sha256: instance.before_exchange_sha256,\n })),\n )\n );\n });\n const exchangeRewritesValid = batch.exchange_rewrites.every((rewrite) => {\n const action = actions.find((entry) => entry.action_id === rewrite.action_id);\n const instance = action?.exchange_instances?.find(\n (entry) =>\n entry.exchange_index === rewrite.exchange_index &&\n entry.data_set_internal_id === rewrite.data_set_internal_id &&\n entry.flow_id === rewrite.flow_id &&\n entry.flow_version === rewrite.flow_version,\n );\n return Boolean(\n action?.table === 'processes' &&\n instance &&\n rewrite.process_id === action.id &&\n rewrite.process_version === action.version &&\n rewrite.direction === instance.direction &&\n rewrite.before_exchange_sha256 === instance.before_exchange_sha256 &&\n /^[a-f0-9]{64}$/u.test(rewrite.after_exchange_sha256),\n );\n });\n return (\n profile !== undefined &&\n batch.factor === profile.factor &&\n batch.summary.rows === profile.rows &&\n counts.flowproperties === profile.flowproperties &&\n counts.flows === profile.flows &&\n counts.processes === profile.processes &&\n batch.summary.flowproperties === counts.flowproperties &&\n batch.summary.flows === counts.flows &&\n batch.summary.processes === counts.processes &&\n batch.summary.exchanges === profile.exchanges &&\n batch.postconditions.source_unitgroup_incoming_refs === 0 &&\n batch.postconditions.source_flowproperty_flow_refs === 0 &&\n batch.postconditions.target_flow_refs === (batch.dimension === 'time' ? 106 : 32) &&\n batch.postconditions.target_exchange_refs === (batch.dimension === 'time' ? 441 : 3216) &&\n batch.summary.rows === batch.action_ids.length &&\n batch.summary.amount_fields === batch.summary.exchanges * 2 &&\n batch.exchange_rewrites.length === batch.summary.exchanges &&\n snapshotIdentityMatches &&\n supportPayloadsValid &&\n mutationsValid &&\n exchangeRewritesValid &&\n (plan.status === 'blocked' ||\n (targetSnapshots.every(\n (snapshot) =>\n snapshot?.state_code === 0 &&\n snapshot.user_id === plan.account.user_id &&\n Boolean(snapshot.modified_at),\n ) &&\n sourceSnapshot?.state_code === 0 &&\n Boolean(sourceSnapshot.modified_at) &&\n sourceSnapshot.user_id === plan.account.user_id &&\n snapshotsValid([\n ...(targetSnapshots.filter(Boolean) as DatasetMaintenanceRowSnapshot[]),\n sourceSnapshot,\n ]) &&\n batch.conversion_evidence.source_unitgroup_payload_sha256 ===\n sourceSnapshot.payload_sha256 &&\n isJsonObject(batch.conversion_evidence.source_reference_unit) &&\n isJsonObject(batch.conversion_evidence.target_conversion_unit)))\n );\n });\n if (!validAliasPlan) {\n throw new CliError('Maintenance alias plan contract is inconsistent.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n });\n }\n }\n if (plan.operation === 'rebuild-derivatives') {\n const action = plan.actions[0];\n const validDerivativePlan = Boolean(\n plan.target_mode === 'owner_draft' &&\n plan.actions.length === 1 &&\n !plan.alias_batches &&\n plan.artifacts.derivative_baseline === 'derivative-baseline.json' &&\n action?.action === 'rebuild_derivatives' &&\n action.table === 'processes' &&\n sha256Json(action.components) === sha256Json(DERIVATIVE_REBUILD_COMPONENTS) &&\n action.desired_payload === null &&\n action.rollback.strategy === 'none_derivative_only' &&\n (action.status === 'blocked' || validDerivativeSnapshot(action.derivative_before, action)),\n );\n if (!validDerivativePlan) {\n throw new CliError('Maintenance derivative rebuild plan contract is inconsistent.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n });\n }\n } else if (\n plan.actions.some((action) => action.derivative_before !== undefined) ||\n plan.artifacts.derivative_baseline !== undefined\n ) {\n throw new CliError('Non-derivative maintenance plan contains derivative-only fields.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n });\n }\n return plan;\n}\n"]}
@@ -105,7 +105,6 @@ export function parseDerivativeSnapshotResponse(value, expected) {
105
105
  modified_at: modifiedAt,
106
106
  json_sha256: jsonSha256,
107
107
  json_ordered_sha256: jsonOrderedSha256,
108
- extracted_text_sha256: requiredSha256(body.extracted_text_sha256, 'Derivative snapshot extracted_text_sha256'),
109
108
  extracted_md_sha256: nullableSha256(body.extracted_md_sha256, 'Derivative snapshot extracted_md_sha256'),
110
109
  embedding_ft_sha256: nullableSha256(body.embedding_ft_sha256, 'Derivative snapshot embedding_ft_sha256'),
111
110
  embedding_ft_at: nullableTimestamp(body.embedding_ft_at, 'Derivative snapshot embedding_ft_at'),
@@ -1 +1 @@
1
- {"version":3,"file":"dataset-maintenance-derivatives.js","sourceRoot":"","sources":["../../../src/lib/dataset-maintenance-derivatives.ts"],"names":[],"mappings":"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","sourcesContent":["import { CliError } from './errors.js';\nimport {\n DERIVATIVE_REBUILD_COMPONENTS,\n isJsonObject,\n type DatasetMaintenanceDerivativeSnapshot,\n type DatasetMaintenancePlan,\n type DatasetMaintenancePlanAction,\n type JsonObject,\n} from './dataset-maintenance-contract.js';\n\nexport type DatasetMaintenanceDerivativeRequestStatus =\n | 'queued'\n | 'dispatching'\n | 'markdown_pending'\n | 'embedding_pending'\n | 'completed'\n | 'stale'\n | 'failed';\n\nexport type DatasetMaintenanceDerivativeSubmitProof = {\n schema_version: 'dataset-derivative-rebuild-plan.v1';\n plan_sha256: string;\n operation_id: string;\n target_visibility: 'owner_draft';\n plan_request_sha256: string;\n idempotent_replay: boolean;\n action_count: 1;\n accepted_count: 1;\n summary_audit_id: string;\n request_id: string;\n status: DatasetMaintenanceDerivativeRequestStatus;\n action_request_sha256: string;\n database_audit_id: string;\n};\n\nexport type DatasetMaintenanceDerivativeStatusProof = {\n schema_version: 'dataset-derivative-rebuild-status.v1';\n request_id: string;\n plan_sha256: string;\n operation_id: string;\n action_id: string;\n table: 'processes';\n id: string;\n version: string;\n status: DatasetMaintenanceDerivativeRequestStatus;\n phase: string;\n fence_active: boolean;\n plan_request_sha256: string;\n action_request_sha256: string;\n database_audit_id: string;\n summary_audit_id: string;\n completed_snapshot_sha256: string | null;\n completed_at: string | null;\n error: JsonObject | null;\n};\n\nconst SHA256 = /^[a-f0-9]{64}$/u;\nconst POSITIVE_INTEGER_TEXT = /^[1-9]\\d*$/u;\n\nfunction requiredToken(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim()) {\n throw new CliError(`${label} must be a non-empty string.`, {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n });\n }\n return value.trim();\n}\n\nfunction requiredSha256(value: unknown, label: string): string {\n const normalized = requiredToken(value, label);\n if (!SHA256.test(normalized)) {\n throw new CliError(`${label} must be a lowercase SHA-256 digest.`, {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n });\n }\n return normalized;\n}\n\nfunction nullableSha256(value: unknown, label: string): string | null {\n return value === null ? null : requiredSha256(value, label);\n}\n\nfunction nullableTimestamp(value: unknown, label: string): string | null {\n if (value === null) return null;\n const normalized = requiredToken(value, label);\n if (!Number.isFinite(Date.parse(normalized))) {\n throw new CliError(`${label} must be an ISO timestamp or null.`, {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n });\n }\n return normalized;\n}\n\nfunction requestStatus(value: unknown, label: string): DatasetMaintenanceDerivativeRequestStatus {\n const normalized = requiredToken(value, label);\n const statuses: DatasetMaintenanceDerivativeRequestStatus[] = [\n 'queued',\n 'dispatching',\n 'markdown_pending',\n 'embedding_pending',\n 'completed',\n 'stale',\n 'failed',\n ];\n if (!statuses.includes(normalized as DatasetMaintenanceDerivativeRequestStatus)) {\n throw new CliError(`${label} is not a supported derivative rebuild status.`, {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n });\n }\n return normalized as DatasetMaintenanceDerivativeRequestStatus;\n}\n\nfunction responseBody(value: unknown, command: string): JsonObject {\n if (!isJsonObject(value) || value.ok !== true || value.command !== command) {\n throw new CliError(`${command} returned an invalid response envelope.`, {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n return value;\n}\n\nexport function parseDerivativeSnapshotResponse(\n value: unknown,\n expected: { id: string; version: string; userId: string },\n): DatasetMaintenanceDerivativeSnapshot {\n const body = responseBody(value, 'cmd_dataset_derivative_rebuild_snapshot');\n if (\n body.schema_version !== 'dataset-derivative-snapshot.v1' ||\n body.table !== 'processes' ||\n body.id !== expected.id ||\n body.version !== expected.version ||\n body.user_id !== expected.userId ||\n body.state_code !== 0\n ) {\n throw new CliError('Derivative snapshot identity, owner, state, or schema is invalid.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n details: body,\n });\n }\n const modifiedAt = nullableTimestamp(body.modified_at, 'Derivative snapshot modified_at');\n if (!modifiedAt) {\n throw new CliError('Derivative snapshot modified_at must be non-null.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n });\n }\n const jsonSha256 = requiredSha256(body.json_sha256, 'Derivative snapshot json_sha256');\n const jsonOrderedSha256 = requiredSha256(\n body.json_ordered_sha256,\n 'Derivative snapshot json_ordered_sha256',\n );\n if (jsonSha256 !== jsonOrderedSha256) {\n throw new CliError('Derivative snapshot json and json_ordered hashes must match.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PRIMARY_MISMATCH',\n exitCode: 1,\n details: { json_sha256: jsonSha256, json_ordered_sha256: jsonOrderedSha256 },\n });\n }\n return {\n schema_version: 'dataset-derivative-snapshot.v1',\n table: 'processes',\n id: expected.id,\n version: expected.version,\n user_id: expected.userId,\n state_code: 0,\n modified_at: modifiedAt,\n json_sha256: jsonSha256,\n json_ordered_sha256: jsonOrderedSha256,\n extracted_text_sha256: requiredSha256(\n body.extracted_text_sha256,\n 'Derivative snapshot extracted_text_sha256',\n ),\n extracted_md_sha256: nullableSha256(\n body.extracted_md_sha256,\n 'Derivative snapshot extracted_md_sha256',\n ),\n embedding_ft_sha256: nullableSha256(\n body.embedding_ft_sha256,\n 'Derivative snapshot embedding_ft_sha256',\n ),\n embedding_ft_at: nullableTimestamp(body.embedding_ft_at, 'Derivative snapshot embedding_ft_at'),\n snapshot_sha256: requiredSha256(body.snapshot_sha256, 'Derivative snapshot snapshot_sha256'),\n };\n}\n\nexport function isDerivativeRebuildPlan(plan: DatasetMaintenancePlan): boolean {\n return plan.operation === 'rebuild-derivatives';\n}\n\nexport function derivativePlanAction(plan: DatasetMaintenancePlan): DatasetMaintenancePlanAction {\n const action = plan.actions[0];\n if (\n !isDerivativeRebuildPlan(plan) ||\n plan.target_mode !== 'owner_draft' ||\n plan.actions.length !== 1 ||\n !action ||\n action.action !== 'rebuild_derivatives' ||\n action.table !== 'processes' ||\n !action.derivative_before\n ) {\n throw new CliError('Derivative rebuild plan does not match the fixed V1 contract.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n });\n }\n return action;\n}\n\nexport function buildDerivativePlanRequest(plan: DatasetMaintenancePlan): JsonObject {\n const action = derivativePlanAction(plan);\n const derivativeBefore = action.derivative_before!;\n return {\n schema_version: 'dataset-derivative-rebuild-plan.v1',\n plan_sha256: plan.plan_sha256,\n operation_id: plan.operation_id,\n target_visibility: 'owner_draft',\n actions: [\n {\n action_id: action.action_id,\n action: 'rebuild_derivatives',\n table: 'processes',\n id: action.id,\n version: action.version,\n expected_state_code: 0,\n expected_snapshot_sha256: derivativeBefore.snapshot_sha256,\n components: [...DERIVATIVE_REBUILD_COMPONENTS],\n reason_code: action.reason_code,\n },\n ],\n };\n}\n\nexport function parseDerivativeSubmitResponse(\n value: unknown,\n plan: DatasetMaintenancePlan,\n): DatasetMaintenanceDerivativeSubmitProof {\n const body = responseBody(value, 'cmd_dataset_derivative_rebuild_plan_guarded');\n const status = requestStatus(body.status, 'Derivative submit status');\n if (\n body.schema_version !== 'dataset-derivative-rebuild-plan.v1' ||\n body.plan_sha256 !== plan.plan_sha256 ||\n body.operation_id !== plan.operation_id ||\n body.target_visibility !== 'owner_draft' ||\n body.action_count !== 1 ||\n body.accepted_count !== 1 ||\n typeof body.idempotent_replay !== 'boolean' ||\n status !== 'queued'\n ) {\n throw new CliError('Derivative submit response does not match the approved plan.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n details: body,\n });\n }\n const summaryAuditId = requiredToken(body.summary_audit_id, 'Derivative summary_audit_id');\n const databaseAuditId = requiredToken(body.database_audit_id, 'Derivative database_audit_id');\n if (!POSITIVE_INTEGER_TEXT.test(summaryAuditId) || !POSITIVE_INTEGER_TEXT.test(databaseAuditId)) {\n throw new CliError(\n 'Derivative audit ids must be numeric strings safe from JSON precision loss.',\n {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n },\n );\n }\n return {\n schema_version: 'dataset-derivative-rebuild-plan.v1',\n plan_sha256: plan.plan_sha256,\n operation_id: plan.operation_id,\n target_visibility: 'owner_draft',\n plan_request_sha256: requiredSha256(body.plan_request_sha256, 'Derivative plan_request_sha256'),\n idempotent_replay: body.idempotent_replay as boolean,\n action_count: 1,\n accepted_count: 1,\n summary_audit_id: summaryAuditId,\n request_id: requiredToken(body.request_id, 'Derivative request_id'),\n status,\n action_request_sha256: requiredSha256(\n body.action_request_sha256,\n 'Derivative action_request_sha256',\n ),\n database_audit_id: databaseAuditId,\n };\n}\n\nexport function parseDerivativeStatusResponse(\n value: unknown,\n plan: DatasetMaintenancePlan,\n submit: DatasetMaintenanceDerivativeSubmitProof,\n): DatasetMaintenanceDerivativeStatusProof {\n const action = derivativePlanAction(plan);\n const body = responseBody(value, 'cmd_dataset_derivative_rebuild_read');\n const status = requestStatus(body.status, 'Derivative read status');\n const phase = requiredToken(body.phase, 'Derivative read phase');\n if (\n body.schema_version !== 'dataset-derivative-rebuild-status.v1' ||\n body.request_id !== submit.request_id ||\n body.plan_sha256 !== plan.plan_sha256 ||\n body.operation_id !== plan.operation_id ||\n body.action_id !== action.action_id ||\n body.table !== 'processes' ||\n body.id !== action.id ||\n body.version !== action.version ||\n body.plan_request_sha256 !== submit.plan_request_sha256 ||\n body.action_request_sha256 !== submit.action_request_sha256 ||\n body.database_audit_id !== submit.database_audit_id ||\n body.summary_audit_id !== submit.summary_audit_id\n ) {\n throw new CliError('Derivative status response does not match the accepted request proof.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n details: body,\n });\n }\n const completedSnapshotSha256 =\n body.completed_snapshot_sha256 === null\n ? null\n : requiredSha256(body.completed_snapshot_sha256, 'Derivative completed_snapshot_sha256');\n const completedAt = nullableTimestamp(body.completed_at, 'Derivative completed_at');\n const error = body.error === null ? null : isJsonObject(body.error) ? body.error : undefined;\n if (\n typeof body.fence_active !== 'boolean' ||\n error === undefined ||\n (status === 'completed' &&\n (!completedSnapshotSha256 || !completedAt || error !== null || body.fence_active)) ||\n (status !== 'completed' && (completedSnapshotSha256 !== null || completedAt !== null))\n ) {\n throw new CliError('Derivative status terminal proof is invalid.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n details: body,\n });\n }\n return {\n schema_version: 'dataset-derivative-rebuild-status.v1',\n request_id: submit.request_id,\n plan_sha256: plan.plan_sha256,\n operation_id: plan.operation_id,\n action_id: action.action_id,\n table: 'processes',\n id: action.id,\n version: action.version,\n status,\n phase,\n fence_active: body.fence_active as boolean,\n plan_request_sha256: submit.plan_request_sha256,\n action_request_sha256: submit.action_request_sha256,\n database_audit_id: submit.database_audit_id,\n summary_audit_id: submit.summary_audit_id,\n completed_snapshot_sha256: completedSnapshotSha256,\n completed_at: completedAt,\n error,\n };\n}\n\nexport function derivativeStatusCategory(\n status: DatasetMaintenanceDerivativeRequestStatus,\n): 'pending' | 'passed' | 'failed' {\n if (status === 'completed') return 'passed';\n if (['stale', 'failed'].includes(status)) return 'failed';\n return 'pending';\n}\n"]}
1
+ {"version":3,"file":"dataset-maintenance-derivatives.js","sourceRoot":"","sources":["../../../src/lib/dataset-maintenance-derivatives.ts"],"names":[],"mappings":"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","sourcesContent":["import { CliError } from './errors.js';\nimport {\n DERIVATIVE_REBUILD_COMPONENTS,\n isJsonObject,\n type DatasetMaintenanceDerivativeSnapshot,\n type DatasetMaintenancePlan,\n type DatasetMaintenancePlanAction,\n type JsonObject,\n} from './dataset-maintenance-contract.js';\n\nexport type DatasetMaintenanceDerivativeRequestStatus =\n | 'queued'\n | 'dispatching'\n | 'markdown_pending'\n | 'embedding_pending'\n | 'completed'\n | 'stale'\n | 'failed';\n\nexport type DatasetMaintenanceDerivativeSubmitProof = {\n schema_version: 'dataset-derivative-rebuild-plan.v1';\n plan_sha256: string;\n operation_id: string;\n target_visibility: 'owner_draft';\n plan_request_sha256: string;\n idempotent_replay: boolean;\n action_count: 1;\n accepted_count: 1;\n summary_audit_id: string;\n request_id: string;\n status: DatasetMaintenanceDerivativeRequestStatus;\n action_request_sha256: string;\n database_audit_id: string;\n};\n\nexport type DatasetMaintenanceDerivativeStatusProof = {\n schema_version: 'dataset-derivative-rebuild-status.v1';\n request_id: string;\n plan_sha256: string;\n operation_id: string;\n action_id: string;\n table: 'processes';\n id: string;\n version: string;\n status: DatasetMaintenanceDerivativeRequestStatus;\n phase: string;\n fence_active: boolean;\n plan_request_sha256: string;\n action_request_sha256: string;\n database_audit_id: string;\n summary_audit_id: string;\n completed_snapshot_sha256: string | null;\n completed_at: string | null;\n error: JsonObject | null;\n};\n\nconst SHA256 = /^[a-f0-9]{64}$/u;\nconst POSITIVE_INTEGER_TEXT = /^[1-9]\\d*$/u;\n\nfunction requiredToken(value: unknown, label: string): string {\n if (typeof value !== 'string' || !value.trim()) {\n throw new CliError(`${label} must be a non-empty string.`, {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n });\n }\n return value.trim();\n}\n\nfunction requiredSha256(value: unknown, label: string): string {\n const normalized = requiredToken(value, label);\n if (!SHA256.test(normalized)) {\n throw new CliError(`${label} must be a lowercase SHA-256 digest.`, {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n });\n }\n return normalized;\n}\n\nfunction nullableSha256(value: unknown, label: string): string | null {\n return value === null ? null : requiredSha256(value, label);\n}\n\nfunction nullableTimestamp(value: unknown, label: string): string | null {\n if (value === null) return null;\n const normalized = requiredToken(value, label);\n if (!Number.isFinite(Date.parse(normalized))) {\n throw new CliError(`${label} must be an ISO timestamp or null.`, {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n });\n }\n return normalized;\n}\n\nfunction requestStatus(value: unknown, label: string): DatasetMaintenanceDerivativeRequestStatus {\n const normalized = requiredToken(value, label);\n const statuses: DatasetMaintenanceDerivativeRequestStatus[] = [\n 'queued',\n 'dispatching',\n 'markdown_pending',\n 'embedding_pending',\n 'completed',\n 'stale',\n 'failed',\n ];\n if (!statuses.includes(normalized as DatasetMaintenanceDerivativeRequestStatus)) {\n throw new CliError(`${label} is not a supported derivative rebuild status.`, {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n });\n }\n return normalized as DatasetMaintenanceDerivativeRequestStatus;\n}\n\nfunction responseBody(value: unknown, command: string): JsonObject {\n if (!isJsonObject(value) || value.ok !== true || value.command !== command) {\n throw new CliError(`${command} returned an invalid response envelope.`, {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n details: value,\n });\n }\n return value;\n}\n\nexport function parseDerivativeSnapshotResponse(\n value: unknown,\n expected: { id: string; version: string; userId: string },\n): DatasetMaintenanceDerivativeSnapshot {\n const body = responseBody(value, 'cmd_dataset_derivative_rebuild_snapshot');\n if (\n body.schema_version !== 'dataset-derivative-snapshot.v1' ||\n body.table !== 'processes' ||\n body.id !== expected.id ||\n body.version !== expected.version ||\n body.user_id !== expected.userId ||\n body.state_code !== 0\n ) {\n throw new CliError('Derivative snapshot identity, owner, state, or schema is invalid.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n details: body,\n });\n }\n const modifiedAt = nullableTimestamp(body.modified_at, 'Derivative snapshot modified_at');\n if (!modifiedAt) {\n throw new CliError('Derivative snapshot modified_at must be non-null.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n });\n }\n const jsonSha256 = requiredSha256(body.json_sha256, 'Derivative snapshot json_sha256');\n const jsonOrderedSha256 = requiredSha256(\n body.json_ordered_sha256,\n 'Derivative snapshot json_ordered_sha256',\n );\n if (jsonSha256 !== jsonOrderedSha256) {\n throw new CliError('Derivative snapshot json and json_ordered hashes must match.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PRIMARY_MISMATCH',\n exitCode: 1,\n details: { json_sha256: jsonSha256, json_ordered_sha256: jsonOrderedSha256 },\n });\n }\n return {\n schema_version: 'dataset-derivative-snapshot.v1',\n table: 'processes',\n id: expected.id,\n version: expected.version,\n user_id: expected.userId,\n state_code: 0,\n modified_at: modifiedAt,\n json_sha256: jsonSha256,\n json_ordered_sha256: jsonOrderedSha256,\n extracted_md_sha256: nullableSha256(\n body.extracted_md_sha256,\n 'Derivative snapshot extracted_md_sha256',\n ),\n embedding_ft_sha256: nullableSha256(\n body.embedding_ft_sha256,\n 'Derivative snapshot embedding_ft_sha256',\n ),\n embedding_ft_at: nullableTimestamp(body.embedding_ft_at, 'Derivative snapshot embedding_ft_at'),\n snapshot_sha256: requiredSha256(body.snapshot_sha256, 'Derivative snapshot snapshot_sha256'),\n };\n}\n\nexport function isDerivativeRebuildPlan(plan: DatasetMaintenancePlan): boolean {\n return plan.operation === 'rebuild-derivatives';\n}\n\nexport function derivativePlanAction(plan: DatasetMaintenancePlan): DatasetMaintenancePlanAction {\n const action = plan.actions[0];\n if (\n !isDerivativeRebuildPlan(plan) ||\n plan.target_mode !== 'owner_draft' ||\n plan.actions.length !== 1 ||\n !action ||\n action.action !== 'rebuild_derivatives' ||\n action.table !== 'processes' ||\n !action.derivative_before\n ) {\n throw new CliError('Derivative rebuild plan does not match the fixed V1 contract.', {\n code: 'DATASET_MAINTENANCE_PLAN_INVALID',\n exitCode: 2,\n });\n }\n return action;\n}\n\nexport function buildDerivativePlanRequest(plan: DatasetMaintenancePlan): JsonObject {\n const action = derivativePlanAction(plan);\n const derivativeBefore = action.derivative_before!;\n return {\n schema_version: 'dataset-derivative-rebuild-plan.v1',\n plan_sha256: plan.plan_sha256,\n operation_id: plan.operation_id,\n target_visibility: 'owner_draft',\n actions: [\n {\n action_id: action.action_id,\n action: 'rebuild_derivatives',\n table: 'processes',\n id: action.id,\n version: action.version,\n expected_state_code: 0,\n expected_snapshot_sha256: derivativeBefore.snapshot_sha256,\n components: [...DERIVATIVE_REBUILD_COMPONENTS],\n reason_code: action.reason_code,\n },\n ],\n };\n}\n\nexport function parseDerivativeSubmitResponse(\n value: unknown,\n plan: DatasetMaintenancePlan,\n): DatasetMaintenanceDerivativeSubmitProof {\n const body = responseBody(value, 'cmd_dataset_derivative_rebuild_plan_guarded');\n const status = requestStatus(body.status, 'Derivative submit status');\n if (\n body.schema_version !== 'dataset-derivative-rebuild-plan.v1' ||\n body.plan_sha256 !== plan.plan_sha256 ||\n body.operation_id !== plan.operation_id ||\n body.target_visibility !== 'owner_draft' ||\n body.action_count !== 1 ||\n body.accepted_count !== 1 ||\n typeof body.idempotent_replay !== 'boolean' ||\n status !== 'queued'\n ) {\n throw new CliError('Derivative submit response does not match the approved plan.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n details: body,\n });\n }\n const summaryAuditId = requiredToken(body.summary_audit_id, 'Derivative summary_audit_id');\n const databaseAuditId = requiredToken(body.database_audit_id, 'Derivative database_audit_id');\n if (!POSITIVE_INTEGER_TEXT.test(summaryAuditId) || !POSITIVE_INTEGER_TEXT.test(databaseAuditId)) {\n throw new CliError(\n 'Derivative audit ids must be numeric strings safe from JSON precision loss.',\n {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n },\n );\n }\n return {\n schema_version: 'dataset-derivative-rebuild-plan.v1',\n plan_sha256: plan.plan_sha256,\n operation_id: plan.operation_id,\n target_visibility: 'owner_draft',\n plan_request_sha256: requiredSha256(body.plan_request_sha256, 'Derivative plan_request_sha256'),\n idempotent_replay: body.idempotent_replay as boolean,\n action_count: 1,\n accepted_count: 1,\n summary_audit_id: summaryAuditId,\n request_id: requiredToken(body.request_id, 'Derivative request_id'),\n status,\n action_request_sha256: requiredSha256(\n body.action_request_sha256,\n 'Derivative action_request_sha256',\n ),\n database_audit_id: databaseAuditId,\n };\n}\n\nexport function parseDerivativeStatusResponse(\n value: unknown,\n plan: DatasetMaintenancePlan,\n submit: DatasetMaintenanceDerivativeSubmitProof,\n): DatasetMaintenanceDerivativeStatusProof {\n const action = derivativePlanAction(plan);\n const body = responseBody(value, 'cmd_dataset_derivative_rebuild_read');\n const status = requestStatus(body.status, 'Derivative read status');\n const phase = requiredToken(body.phase, 'Derivative read phase');\n if (\n body.schema_version !== 'dataset-derivative-rebuild-status.v1' ||\n body.request_id !== submit.request_id ||\n body.plan_sha256 !== plan.plan_sha256 ||\n body.operation_id !== plan.operation_id ||\n body.action_id !== action.action_id ||\n body.table !== 'processes' ||\n body.id !== action.id ||\n body.version !== action.version ||\n body.plan_request_sha256 !== submit.plan_request_sha256 ||\n body.action_request_sha256 !== submit.action_request_sha256 ||\n body.database_audit_id !== submit.database_audit_id ||\n body.summary_audit_id !== submit.summary_audit_id\n ) {\n throw new CliError('Derivative status response does not match the accepted request proof.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n details: body,\n });\n }\n const completedSnapshotSha256 =\n body.completed_snapshot_sha256 === null\n ? null\n : requiredSha256(body.completed_snapshot_sha256, 'Derivative completed_snapshot_sha256');\n const completedAt = nullableTimestamp(body.completed_at, 'Derivative completed_at');\n const error = body.error === null ? null : isJsonObject(body.error) ? body.error : undefined;\n if (\n typeof body.fence_active !== 'boolean' ||\n error === undefined ||\n (status === 'completed' &&\n (!completedSnapshotSha256 || !completedAt || error !== null || body.fence_active)) ||\n (status !== 'completed' && (completedSnapshotSha256 !== null || completedAt !== null))\n ) {\n throw new CliError('Derivative status terminal proof is invalid.', {\n code: 'DATASET_MAINTENANCE_DERIVATIVE_PROOF_INVALID',\n exitCode: 1,\n details: body,\n });\n }\n return {\n schema_version: 'dataset-derivative-rebuild-status.v1',\n request_id: submit.request_id,\n plan_sha256: plan.plan_sha256,\n operation_id: plan.operation_id,\n action_id: action.action_id,\n table: 'processes',\n id: action.id,\n version: action.version,\n status,\n phase,\n fence_active: body.fence_active as boolean,\n plan_request_sha256: submit.plan_request_sha256,\n action_request_sha256: submit.action_request_sha256,\n database_audit_id: submit.database_audit_id,\n summary_audit_id: submit.summary_audit_id,\n completed_snapshot_sha256: completedSnapshotSha256,\n completed_at: completedAt,\n error,\n };\n}\n\nexport function derivativeStatusCategory(\n status: DatasetMaintenanceDerivativeRequestStatus,\n): 'pending' | 'passed' | 'failed' {\n if (status === 'completed') return 'passed';\n if (['stale', 'failed'].includes(status)) return 'failed';\n return 'pending';\n}\n"]}
@@ -1,3 +1,4 @@
1
+ // data-api-relations: flowproperties, flows, unitgroups
1
2
  import path from 'node:path';
2
3
  import { existsSync } from 'node:fs';
3
4
  import { computeFlowIdentityCaptureEvidenceSha256, computeFlowIdentityCaptureSha256, parseFlowIdentityCapture, parseFlowIdentityPolicy, parseFlowIdentityReviewLedger, } from './dataset-maintenance-flow-identity-contract.js';