@tiangong-lca/cli 0.0.6 → 0.0.8

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 (90) hide show
  1. package/README.md +154 -30
  2. package/dist/src/cli.js +2235 -149
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/lib/dataset-author.js +100 -0
  5. package/dist/src/lib/dataset-author.js.map +1 -0
  6. package/dist/src/lib/dataset-bilingual.js +545 -0
  7. package/dist/src/lib/dataset-bilingual.js.map +1 -0
  8. package/dist/src/lib/dataset-contract.js +350 -0
  9. package/dist/src/lib/dataset-contract.js.map +1 -0
  10. package/dist/src/lib/dataset-evidence-search.js +636 -0
  11. package/dist/src/lib/dataset-evidence-search.js.map +1 -0
  12. package/dist/src/lib/dataset-import-lca.js +171 -0
  13. package/dist/src/lib/dataset-import-lca.js.map +1 -0
  14. package/dist/src/lib/dataset-local.js +231 -0
  15. package/dist/src/lib/dataset-local.js.map +1 -0
  16. package/dist/src/lib/dataset-references-rewrite.js +214 -0
  17. package/dist/src/lib/dataset-references-rewrite.js.map +1 -0
  18. package/dist/src/lib/dataset-remote-refresh.js +166 -0
  19. package/dist/src/lib/dataset-remote-refresh.js.map +1 -0
  20. package/dist/src/lib/dataset-remote-verify.js +543 -0
  21. package/dist/src/lib/dataset-remote-verify.js.map +1 -0
  22. package/dist/src/lib/dataset-validate.js +247 -0
  23. package/dist/src/lib/dataset-validate.js.map +1 -0
  24. package/dist/src/lib/flow-payload-validation.js +51 -0
  25. package/dist/src/lib/flow-payload-validation.js.map +1 -0
  26. package/dist/src/lib/flow-publish-reviewed-data.js +16 -0
  27. package/dist/src/lib/flow-publish-reviewed-data.js.map +1 -1
  28. package/dist/src/lib/flow-publish-version.js +182 -12
  29. package/dist/src/lib/flow-publish-version.js.map +1 -1
  30. package/dist/src/lib/flow-regen-product.js +2 -10
  31. package/dist/src/lib/flow-regen-product.js.map +1 -1
  32. package/dist/src/lib/flow-remediate.js +4 -8
  33. package/dist/src/lib/flow-remediate.js.map +1 -1
  34. package/dist/src/lib/identity-preflight.js +1021 -0
  35. package/dist/src/lib/identity-preflight.js.map +1 -0
  36. package/dist/src/lib/lifecyclemodel-auto-build.js +11 -8
  37. package/dist/src/lib/lifecyclemodel-auto-build.js.map +1 -1
  38. package/dist/src/lib/lifecyclemodel-graph.js +248 -0
  39. package/dist/src/lib/lifecyclemodel-graph.js.map +1 -0
  40. package/dist/src/lib/lifecyclemodel-publish-build.js +1 -1
  41. package/dist/src/lib/lifecyclemodel-publish-build.js.map +1 -1
  42. package/dist/src/lib/lifecyclemodel-save-draft-run.js +245 -0
  43. package/dist/src/lib/lifecyclemodel-save-draft-run.js.map +1 -0
  44. package/dist/src/lib/lifecyclemodel-validate-build.js +1 -1
  45. package/dist/src/lib/lifecyclemodel-validate-build.js.map +1 -1
  46. package/dist/src/lib/process-auto-build.js +158 -8
  47. package/dist/src/lib/process-auto-build.js.map +1 -1
  48. package/dist/src/lib/process-batch-build.js +6 -3
  49. package/dist/src/lib/process-batch-build.js.map +1 -1
  50. package/dist/src/lib/process-dedup-review.js +921 -0
  51. package/dist/src/lib/process-dedup-review.js.map +1 -0
  52. package/dist/src/lib/process-flow-build-plan.js +1071 -0
  53. package/dist/src/lib/process-flow-build-plan.js.map +1 -0
  54. package/dist/src/lib/process-payload-validation.js +57 -0
  55. package/dist/src/lib/process-payload-validation.js.map +1 -0
  56. package/dist/src/lib/process-publish-build.js +126 -10
  57. package/dist/src/lib/process-publish-build.js.map +1 -1
  58. package/dist/src/lib/process-refresh-references.js +1037 -0
  59. package/dist/src/lib/process-refresh-references.js.map +1 -0
  60. package/dist/src/lib/process-required-fields.js +810 -0
  61. package/dist/src/lib/process-required-fields.js.map +1 -0
  62. package/dist/src/lib/process-resume-build.js +4 -6
  63. package/dist/src/lib/process-resume-build.js.map +1 -1
  64. package/dist/src/lib/process-save-draft-run.js +35 -13
  65. package/dist/src/lib/process-save-draft-run.js.map +1 -1
  66. package/dist/src/lib/process-scope-statistics.js +859 -0
  67. package/dist/src/lib/process-scope-statistics.js.map +1 -0
  68. package/dist/src/lib/process-verify-rows.js +250 -0
  69. package/dist/src/lib/process-verify-rows.js.map +1 -0
  70. package/dist/src/lib/publish.js +101 -1
  71. package/dist/src/lib/publish.js.map +1 -1
  72. package/dist/src/lib/remote.js +4 -4
  73. package/dist/src/lib/remote.js.map +1 -1
  74. package/dist/src/lib/review-flow.js +58 -0
  75. package/dist/src/lib/review-flow.js.map +1 -1
  76. package/dist/src/lib/review-lifecyclemodel.js +2 -2
  77. package/dist/src/lib/review-lifecyclemodel.js.map +1 -1
  78. package/dist/src/lib/review-process.js +150 -2
  79. package/dist/src/lib/review-process.js.map +1 -1
  80. package/dist/src/lib/runtime-rulesets.js +283 -0
  81. package/dist/src/lib/runtime-rulesets.js.map +1 -0
  82. package/dist/src/lib/tidas-sdk-package-validator.js +28 -9
  83. package/dist/src/lib/tidas-sdk-package-validator.js.map +1 -1
  84. package/dist/src/lib/tidas-sdk-validation.js +96 -0
  85. package/dist/src/lib/tidas-sdk-validation.js.map +1 -0
  86. package/dist/src/lib/user-api-key.js +1 -1
  87. package/dist/src/lib/user-api-key.js.map +1 -1
  88. package/package.json +5 -5
  89. /package/bin/{tiangong.d.ts → tiangong-lca.d.ts} +0 -0
  90. /package/bin/{tiangong.js → tiangong-lca.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/lib/publish.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'node:path';\nimport { CliError } from './errors.js';\nimport { writeJsonArtifact } from './artifacts.js';\nimport type { FetchLike } from './http.js';\nimport { readJsonInput } from './io.js';\nimport {\n syncLifecyclemodelBundleRecord,\n type LifecyclemodelPublishMetadata,\n} from './lifecyclemodel-bundle-save.js';\nimport { syncStateAwareProcessRecord } from './process-save-draft.js';\nimport { buildRunId, resolveRunLayout } from './run.js';\nimport {\n hasSupabaseRestRuntime,\n syncSupabaseJsonOrderedRecord,\n type SupabaseJsonOrderedTable,\n type SupabaseJsonOrderedWriteMode,\n} from './supabase-json-ordered-write.js';\n\ntype JsonObject = Record<string, unknown>;\n\nconst DEFAULT_MAX_ATTEMPTS = 5;\nconst DEFAULT_RETRY_DELAY_SECONDS = 2.0;\nconst DEFAULT_DATASET_VERSION = '01.01.000';\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction ensure_list(value: unknown): unknown[] {\n if (value === undefined || value === null) {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n}\n\nfunction first_non_empty(...values: unknown[]): string | null {\n for (const value of values) {\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n }\n return null;\n}\n\nfunction to_positive_integer(value: unknown, defaultValue: number): number {\n if (value === undefined || value === null || value === '') {\n return defaultValue;\n }\n const parsed =\n typeof value === 'number'\n ? value\n : typeof value === 'string'\n ? Number.parseInt(value, 10)\n : Number.NaN;\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new CliError('Publish request expected a positive integer value.', {\n code: 'PUBLISH_INVALID_INTEGER',\n exitCode: 2,\n details: value,\n });\n }\n return parsed;\n}\n\nfunction to_non_negative_number(value: unknown, defaultValue: number): number {\n if (value === undefined || value === null || value === '') {\n return defaultValue;\n }\n const parsed =\n typeof value === 'number' ? value : typeof value === 'string' ? Number(value) : Number.NaN;\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new CliError('Publish request expected a non-negative number value.', {\n code: 'PUBLISH_INVALID_NUMBER',\n exitCode: 2,\n details: value,\n });\n }\n return parsed;\n}\n\nfunction to_boolean(value: unknown, defaultValue: boolean): boolean {\n return value === undefined ? defaultValue : Boolean(value);\n}\n\nfunction resolve_path(baseDir: string, value: string): string {\n return path.resolve(baseDir, value);\n}\n\nfunction load_json_object(filePath: string): JsonObject {\n const value = readJsonInput(filePath);\n if (!isRecord(value)) {\n throw new CliError(`Expected JSON object input: ${filePath}`, {\n code: 'PUBLISH_INPUT_NOT_OBJECT',\n exitCode: 2,\n });\n }\n return value;\n}\n\nfunction default_out_dir(baseDir: string, commit: boolean, now: Date = new Date()): string {\n const runId = buildRunId({\n namespace: 'publish',\n operation: commit ? 'commit' : 'dry_run',\n now,\n });\n return resolveRunLayout(path.join(baseDir, 'artifacts'), 'publish', runId).runRoot;\n}\n\nfunction serialize_error(error: unknown): { message: string } {\n if (error instanceof Error) {\n return { message: error.message };\n }\n return { message: String(error) };\n}\n\nexport type PublishDatasetEntry =\n | string\n | {\n file?: string;\n path?: string;\n json_ordered?: JsonObject;\n jsonOrdered?: JsonObject;\n payload?: JsonObject;\n [key: string]: unknown;\n };\n\nexport type PublishProcessBuildRunEntry =\n | string\n | {\n run_id?: string;\n run_root?: string;\n exports_dir?: string;\n [key: string]: unknown;\n };\n\nexport type PublishCollectedOrigin = {\n source: 'bundle' | 'input';\n base_dir: string;\n bundle_path: string | null;\n};\n\nexport type PublishCollectedDatasetEntry = {\n entry: PublishDatasetEntry;\n origin: PublishCollectedOrigin;\n};\n\nexport type PublishCollectedProcessBuildRunEntry = {\n entry: PublishProcessBuildRunEntry;\n origin: PublishCollectedOrigin;\n};\n\nexport type PublishCollectedRelationEntry = {\n entry: unknown;\n origin: PublishCollectedOrigin;\n};\n\nexport type PublishRequest = {\n inputs: {\n bundle_paths: string[];\n lifecyclemodels: PublishDatasetEntry[];\n processes: PublishDatasetEntry[];\n sources: PublishDatasetEntry[];\n relations: unknown[];\n process_build_runs: PublishProcessBuildRunEntry[];\n };\n publish: {\n commit: boolean;\n publish_lifecyclemodels: boolean;\n publish_processes: boolean;\n publish_sources: boolean;\n publish_relations: boolean;\n publish_process_build_runs: boolean;\n relation_mode: 'local_manifest_only';\n max_attempts: number;\n retry_delay_seconds: number;\n process_build_forward_args: string[];\n };\n out_dir: string;\n};\n\nexport type PublishCollectedInputs = {\n bundle_paths: string[];\n lifecyclemodels: PublishCollectedDatasetEntry[];\n processes: PublishCollectedDatasetEntry[];\n sources: PublishCollectedDatasetEntry[];\n relations: PublishCollectedRelationEntry[];\n process_build_runs: PublishCollectedProcessBuildRunEntry[];\n};\n\nexport type DatasetPublishExecutorArgs = {\n table: 'lifecyclemodels' | 'processes' | 'sources';\n id: string;\n version: string;\n payload: JsonObject;\n metadata?: LifecyclemodelPublishMetadata | null;\n source: 'bundle' | 'input';\n bundle_path: string | null;\n publish: PublishRequest['publish'];\n};\n\nexport type ProcessBuildRunPublishExecutorArgs = {\n run_id: string;\n entry: PublishProcessBuildRunEntry;\n source: 'bundle' | 'input';\n bundle_path: string | null;\n forward_args: string[];\n publish: PublishRequest['publish'];\n};\n\nexport type PublishExecutors = {\n lifecyclemodels?: (args: DatasetPublishExecutorArgs) => Promise<unknown> | unknown;\n processes?: (args: DatasetPublishExecutorArgs) => Promise<unknown> | unknown;\n sources?: (args: DatasetPublishExecutorArgs) => Promise<unknown> | unknown;\n process_build_runs?: (args: ProcessBuildRunPublishExecutorArgs) => Promise<unknown> | unknown;\n};\n\nexport type PublishDatasetReport = {\n table: 'lifecyclemodels' | 'processes' | 'sources';\n id: string | null;\n version: string | null;\n status:\n | 'prepared'\n | 'executed'\n | 'deferred_no_executor'\n | 'deferred_projection_payload'\n | 'failed';\n source: 'bundle' | 'input';\n bundle_path: string | null;\n reason?: string;\n execution?: unknown;\n error?: { message: string };\n};\n\nexport type PublishProcessBuildRunReport = {\n run_id: string;\n status: 'prepared' | 'executed' | 'deferred_no_executor' | 'failed';\n source: 'bundle' | 'input';\n bundle_path: string | null;\n forward_args: string[];\n execution?: unknown;\n error?: { message: string };\n};\n\nexport type PublishRelationManifest = {\n generated_at_utc: string;\n relation_mode: 'local_manifest_only';\n status: 'prepared_local_relation_manifest';\n relations: unknown[];\n};\n\nexport type PublishReport = {\n generated_at_utc: string;\n request_path: string;\n out_dir: string;\n commit: boolean;\n status: 'completed' | 'completed_with_failures';\n counts: {\n bundle_paths: number;\n lifecyclemodels: number;\n processes: number;\n sources: number;\n relations: number;\n process_build_runs: number;\n executed: number;\n deferred: number;\n failed: number;\n };\n files: {\n normalized_request: string;\n collected_inputs: string;\n relation_manifest: string;\n publish_report: string;\n };\n lifecyclemodels: PublishDatasetReport[];\n processes: PublishDatasetReport[];\n sources: PublishDatasetReport[];\n process_build_runs: PublishProcessBuildRunReport[];\n relations: PublishRelationManifest;\n};\n\nexport type RunPublishOptions = {\n inputPath: string;\n rawRequest?: unknown;\n outDir?: string | null;\n commit?: boolean | null;\n executors?: PublishExecutors;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n now?: Date;\n};\n\ntype PreparedPublishDatasetReport = PublishDatasetReport & {\n id: string;\n version: string;\n};\n\ntype NormalizePublishRequestOptions = {\n requestPath: string;\n outDirOverride?: string;\n commitOverride?: boolean;\n now?: Date;\n};\n\ntype PublishRequestOptions = {\n commit: boolean;\n executor:\n | PublishExecutors['lifecyclemodels']\n | PublishExecutors['processes']\n | PublishExecutors['sources']\n | undefined;\n publish: PublishRequest['publish'];\n};\n\ntype LoadedLifecyclemodelPublishEntry = {\n payload: JsonObject;\n metadata: LifecyclemodelPublishMetadata | null;\n};\n\nfunction extract_lifecyclemodel_identity(payload: JsonObject): [string, string] {\n const root = isRecord(payload.lifeCycleModelDataSet) ? payload.lifeCycleModelDataSet : payload;\n const lifeCycleModelInformation = isRecord(root.lifeCycleModelInformation)\n ? root.lifeCycleModelInformation\n : {};\n const dataSetInformation = isRecord(lifeCycleModelInformation.dataSetInformation)\n ? lifeCycleModelInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const datasetId = first_non_empty(payload['@id'], payload.id, dataSetInformation['common:UUID']);\n const version = first_non_empty(\n payload['@version'],\n payload.version,\n publicationAndOwnership['common:dataSetVersion'],\n DEFAULT_DATASET_VERSION,\n )!;\n if (!datasetId) {\n throw new CliError('Lifecycle model payload missing @id/id.', {\n code: 'PUBLISH_LIFECYCLEMODEL_ID_MISSING',\n exitCode: 2,\n });\n }\n return [datasetId, version];\n}\n\nfunction extract_process_identity(payload: JsonObject): [string, string] {\n const root = isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n const processInformation = isRecord(root.processInformation) ? root.processInformation : {};\n const dataSetInformation = isRecord(processInformation.dataSetInformation)\n ? processInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const datasetId = first_non_empty(dataSetInformation['common:UUID']);\n const version = first_non_empty(\n publicationAndOwnership['common:dataSetVersion'],\n DEFAULT_DATASET_VERSION,\n )!;\n if (!datasetId) {\n throw new CliError(\n 'Process payload missing processInformation.dataSetInformation.common:UUID.',\n {\n code: 'PUBLISH_PROCESS_ID_MISSING',\n exitCode: 2,\n },\n );\n }\n return [datasetId, version];\n}\n\nfunction extract_source_identity(payload: JsonObject): [string, string] {\n const root = isRecord(payload.sourceDataSet) ? payload.sourceDataSet : payload;\n const sourceInformation = isRecord(root.sourceInformation) ? root.sourceInformation : {};\n const dataSetInformation = isRecord(sourceInformation.dataSetInformation)\n ? sourceInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const datasetId = first_non_empty(dataSetInformation['common:UUID']);\n const version = first_non_empty(\n publicationAndOwnership['common:dataSetVersion'],\n DEFAULT_DATASET_VERSION,\n )!;\n if (!datasetId) {\n throw new CliError('Source payload missing sourceInformation.dataSetInformation.common:UUID.', {\n code: 'PUBLISH_SOURCE_ID_MISSING',\n exitCode: 2,\n });\n }\n return [datasetId, version];\n}\n\nfunction load_dataset_entry(entry: PublishDatasetEntry, baseDir: string): JsonObject {\n const source = load_dataset_entry_source(entry, baseDir);\n if (isRecord(source)) {\n for (const key of ['json_ordered', 'jsonOrdered', 'payload'] as const) {\n const candidate = source[key];\n if (isRecord(candidate)) {\n return candidate;\n }\n }\n }\n\n return source;\n}\n\nfunction load_dataset_entry_source(entry: PublishDatasetEntry, baseDir: string): JsonObject {\n if (isRecord(entry)) {\n const fileValue = first_non_empty(entry.file, entry.path);\n if (fileValue) {\n return load_json_object(resolve_path(baseDir, fileValue));\n }\n return entry;\n }\n\n if (typeof entry === 'string' && entry.trim()) {\n return load_json_object(resolve_path(baseDir, entry));\n }\n\n throw new CliError('Unsupported dataset entry in publish request.', {\n code: 'PUBLISH_UNSUPPORTED_DATASET_ENTRY',\n exitCode: 2,\n details: entry,\n });\n}\n\nfunction load_lifecyclemodel_publish_entry(\n entry: PublishDatasetEntry,\n baseDir: string,\n): LoadedLifecyclemodelPublishEntry {\n const source = load_dataset_entry_source(entry, baseDir);\n const payload = load_dataset_entry(entry, baseDir);\n const metadata: LifecyclemodelPublishMetadata = {};\n const jsonTg = isRecord(source.json_tg)\n ? source.json_tg\n : isRecord(source.jsonTg)\n ? source.jsonTg\n : null;\n if (jsonTg) {\n metadata.json_tg = jsonTg;\n }\n\n const processMutations = source.processMutations ?? source.process_mutations;\n if (Array.isArray(processMutations)) {\n metadata.processMutations = processMutations as JsonObject[];\n }\n\n const ruleVerification =\n typeof source.ruleVerification === 'boolean'\n ? source.ruleVerification\n : typeof source.rule_verification === 'boolean'\n ? source.rule_verification\n : undefined;\n if (typeof ruleVerification === 'boolean') {\n metadata.ruleVerification = ruleVerification;\n }\n\n return {\n payload,\n metadata: Object.keys(metadata).length > 0 ? metadata : null,\n };\n}\n\nfunction push_collected_entries<T>(\n target: Array<{ entry: T; origin: PublishCollectedOrigin }>,\n entries: unknown[],\n origin: PublishCollectedOrigin,\n): void {\n for (const entry of entries) {\n target.push({ entry: entry as T, origin });\n }\n}\n\nexport function normalizePublishRequest(\n raw: unknown,\n options: NormalizePublishRequestOptions,\n): PublishRequest {\n if (!isRecord(raw)) {\n throw new CliError('Publish request must be a JSON object.', {\n code: 'PUBLISH_REQUEST_NOT_OBJECT',\n exitCode: 2,\n });\n }\n\n const requestDir = path.dirname(options.requestPath);\n const inputs = isRecord(raw.inputs) ? raw.inputs : {};\n const publish = isRecord(raw.publish) ? raw.publish : {};\n const commit =\n options.commitOverride === undefined\n ? to_boolean(publish.commit, false)\n : options.commitOverride;\n const outDirValue = first_non_empty(options.outDirOverride, raw.out_dir, raw.output_dir);\n const outDir = outDirValue\n ? resolve_path(requestDir, outDirValue)\n : default_out_dir(requestDir, commit, options.now);\n const relationMode = first_non_empty(publish.relation_mode, 'local_manifest_only');\n\n if (relationMode !== 'local_manifest_only') {\n throw new CliError(\"publish.relation_mode only supports 'local_manifest_only'.\", {\n code: 'PUBLISH_UNSUPPORTED_RELATION_MODE',\n exitCode: 2,\n details: relationMode,\n });\n }\n\n return {\n inputs: {\n bundle_paths: ensure_list(inputs.bundle_paths)\n .map((value) => String(value).trim())\n .filter(Boolean)\n .map((value) => resolve_path(requestDir, value)),\n lifecyclemodels: ensure_list(inputs.lifecyclemodels) as PublishDatasetEntry[],\n processes: ensure_list(inputs.processes) as PublishDatasetEntry[],\n sources: ensure_list(inputs.sources) as PublishDatasetEntry[],\n relations: ensure_list(inputs.relations),\n process_build_runs: ensure_list(inputs.process_build_runs) as PublishProcessBuildRunEntry[],\n },\n publish: {\n commit,\n publish_lifecyclemodels: to_boolean(publish.publish_lifecyclemodels, true),\n publish_processes: to_boolean(publish.publish_processes, true),\n publish_sources: to_boolean(publish.publish_sources, true),\n publish_relations: to_boolean(publish.publish_relations, true),\n publish_process_build_runs: to_boolean(publish.publish_process_build_runs, true),\n relation_mode: 'local_manifest_only',\n max_attempts: to_positive_integer(publish.max_attempts, DEFAULT_MAX_ATTEMPTS),\n retry_delay_seconds: to_non_negative_number(\n publish.retry_delay_seconds,\n DEFAULT_RETRY_DELAY_SECONDS,\n ),\n process_build_forward_args: ensure_list(publish.process_build_forward_args)\n .map((value) => String(value).trim())\n .filter(Boolean),\n },\n out_dir: outDir,\n };\n}\n\nexport function collectPublishInputs(\n normalized: PublishRequest,\n requestBaseDir: string,\n): PublishCollectedInputs {\n const collected: PublishCollectedInputs = {\n bundle_paths: [...normalized.inputs.bundle_paths],\n lifecyclemodels: [],\n processes: [],\n sources: [],\n relations: [],\n process_build_runs: [],\n };\n\n for (const bundlePath of normalized.inputs.bundle_paths) {\n const bundle = load_json_object(bundlePath);\n const origin: PublishCollectedOrigin = {\n source: 'bundle',\n base_dir: path.dirname(bundlePath),\n bundle_path: bundlePath,\n };\n push_collected_entries<PublishDatasetEntry>(\n collected.lifecyclemodels,\n ensure_list(bundle.lifecyclemodels),\n origin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.processes,\n [...ensure_list(bundle.projected_processes), ...ensure_list(bundle.processes)],\n origin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.sources,\n ensure_list(bundle.sources),\n origin,\n );\n push_collected_entries(\n collected.relations,\n [...ensure_list(bundle.resulting_process_relations), ...ensure_list(bundle.relations)],\n origin,\n );\n push_collected_entries<PublishProcessBuildRunEntry>(\n collected.process_build_runs,\n ensure_list(bundle.process_build_runs),\n origin,\n );\n }\n\n const directOrigin: PublishCollectedOrigin = {\n source: 'input',\n base_dir: requestBaseDir,\n bundle_path: null,\n };\n\n push_collected_entries<PublishDatasetEntry>(\n collected.lifecyclemodels,\n normalized.inputs.lifecyclemodels,\n directOrigin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.processes,\n normalized.inputs.processes,\n directOrigin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.sources,\n normalized.inputs.sources,\n directOrigin,\n );\n push_collected_entries(collected.relations, normalized.inputs.relations, directOrigin);\n push_collected_entries<PublishProcessBuildRunEntry>(\n collected.process_build_runs,\n normalized.inputs.process_build_runs,\n directOrigin,\n );\n\n return collected;\n}\n\nasync function maybe_execute_dataset(\n report: PreparedPublishDatasetReport,\n payload: JsonObject,\n options: PublishRequestOptions & {\n table: 'lifecyclemodels' | 'processes' | 'sources';\n metadata?: LifecyclemodelPublishMetadata | null;\n },\n): Promise<PublishDatasetReport> {\n if (!options.commit) {\n return report;\n }\n\n if (!options.executor) {\n report.status = 'deferred_no_executor';\n return report;\n }\n\n try {\n report.execution = await options.executor({\n table: options.table,\n id: report.id,\n version: report.version,\n payload,\n metadata: options.metadata,\n source: report.source,\n bundle_path: report.bundle_path,\n publish: options.publish,\n });\n report.status = 'executed';\n } catch (error) {\n report.status = 'failed';\n report.error = serialize_error(error);\n }\n\n return report;\n}\n\nasync function publish_lifecyclemodels(\n entries: PublishCollectedDatasetEntry[],\n options: PublishRequestOptions,\n): Promise<PublishDatasetReport[]> {\n const reports: PublishDatasetReport[] = [];\n for (const item of entries) {\n const loaded = load_lifecyclemodel_publish_entry(item.entry, item.origin.base_dir);\n const payload = loaded.payload;\n const [datasetId, version] = extract_lifecyclemodel_identity(payload);\n const report: PreparedPublishDatasetReport = {\n table: 'lifecyclemodels',\n id: datasetId,\n version,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n };\n reports.push(\n await maybe_execute_dataset(report, payload, {\n ...options,\n table: 'lifecyclemodels',\n executor: options.executor,\n metadata: loaded.metadata,\n }),\n );\n }\n return reports;\n}\n\nasync function publish_processes(\n entries: PublishCollectedDatasetEntry[],\n options: PublishRequestOptions,\n): Promise<PublishDatasetReport[]> {\n const reports: PublishDatasetReport[] = [];\n for (const item of entries) {\n const payload = load_dataset_entry(item.entry, item.origin.base_dir);\n try {\n const [datasetId, version] = extract_process_identity(payload);\n const report: PreparedPublishDatasetReport = {\n table: 'processes',\n id: datasetId,\n version,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n };\n reports.push(\n await maybe_execute_dataset(report, payload, {\n ...options,\n table: 'processes',\n executor: options.executor,\n }),\n );\n } catch (error) {\n const report: PublishDatasetReport = {\n table: 'processes',\n id: first_non_empty(payload['@id'], payload.id),\n version: first_non_empty(payload['@version'], payload.version, DEFAULT_DATASET_VERSION),\n status: 'deferred_projection_payload',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n reason:\n error instanceof CliError && error.code === 'PUBLISH_PROCESS_ID_MISSING'\n ? 'Payload is not a canonical processDataSet wrapper; keep it in the publish bundle until a projection-to-process adapter exists.'\n : serialize_error(error).message,\n };\n reports.push(report);\n }\n }\n return reports;\n}\n\nasync function publish_sources(\n entries: PublishCollectedDatasetEntry[],\n options: PublishRequestOptions,\n): Promise<PublishDatasetReport[]> {\n const reports: PublishDatasetReport[] = [];\n for (const item of entries) {\n const payload = load_dataset_entry(item.entry, item.origin.base_dir);\n const [datasetId, version] = extract_source_identity(payload);\n const report: PreparedPublishDatasetReport = {\n table: 'sources',\n id: datasetId,\n version,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n };\n reports.push(\n await maybe_execute_dataset(report, payload, {\n ...options,\n table: 'sources',\n executor: options.executor,\n }),\n );\n }\n return reports;\n}\n\nasync function publish_process_build_runs(\n entries: PublishCollectedProcessBuildRunEntry[],\n options: {\n commit: boolean;\n executor: PublishExecutors['process_build_runs'];\n publish: PublishRequest['publish'];\n },\n): Promise<PublishProcessBuildRunReport[]> {\n const reports: PublishProcessBuildRunReport[] = [];\n for (const item of entries) {\n const runId =\n typeof item.entry === 'string' ? item.entry.trim() : first_non_empty(item.entry.run_id);\n\n if (!runId) {\n throw new CliError('process_build_run entry missing run_id.', {\n code: 'PUBLISH_PROCESS_BUILD_RUN_ID_MISSING',\n exitCode: 2,\n details: item.entry,\n });\n }\n\n const report: PublishProcessBuildRunReport = {\n run_id: runId,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n forward_args: [...options.publish.process_build_forward_args],\n };\n\n if (!options.commit) {\n reports.push(report);\n continue;\n }\n\n if (!options.executor) {\n report.status = 'deferred_no_executor';\n reports.push(report);\n continue;\n }\n\n try {\n report.execution = await options.executor({\n run_id: runId,\n entry: item.entry,\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n forward_args: [...options.publish.process_build_forward_args],\n publish: options.publish,\n });\n report.status = 'executed';\n } catch (error) {\n report.status = 'failed';\n report.error = serialize_error(error);\n }\n\n reports.push(report);\n }\n return reports;\n}\n\nfunction build_relation_manifest(\n relations: PublishCollectedRelationEntry[],\n publish: PublishRequest['publish'],\n now: Date,\n): PublishRelationManifest {\n return {\n generated_at_utc: now.toISOString(),\n relation_mode: publish.relation_mode,\n status: 'prepared_local_relation_manifest',\n relations: publish.publish_relations ? relations.map((item) => item.entry) : [],\n };\n}\n\nfunction table_write_mode_for_publish(): SupabaseJsonOrderedWriteMode {\n return 'upsert_current_version';\n}\n\nfunction build_default_dataset_executor(options: {\n table: SupabaseJsonOrderedTable;\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs?: number;\n}) {\n return async (args: DatasetPublishExecutorArgs): Promise<unknown> => {\n if (options.table === 'processes') {\n return syncStateAwareProcessRecord({\n id: args.id,\n version: args.version,\n payload: args.payload,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n audit: {\n command: 'tiangong publish run',\n source: args.source,\n bundle_path: args.bundle_path,\n },\n });\n }\n\n if (options.table === 'lifecyclemodels') {\n return syncLifecyclemodelBundleRecord({\n id: args.id,\n version: args.version,\n payload: args.payload,\n metadata: args.metadata ?? null,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n }\n\n return syncSupabaseJsonOrderedRecord({\n table: options.table,\n id: args.id,\n version: args.version,\n payload: args.payload,\n writeMode: table_write_mode_for_publish(),\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n };\n}\n\nfunction resolve_dataset_executors(options: RunPublishOptions): PublishExecutors {\n const explicit = options.executors ?? {};\n const env = options.env;\n const fetchImpl = options.fetchImpl;\n\n if (!env || !fetchImpl || !hasSupabaseRestRuntime(env)) {\n return explicit;\n }\n\n return {\n lifecyclemodels:\n explicit.lifecyclemodels ??\n build_default_dataset_executor({\n table: 'lifecyclemodels',\n env,\n fetchImpl,\n timeoutMs: options.timeoutMs,\n }),\n processes:\n explicit.processes ??\n build_default_dataset_executor({\n table: 'processes',\n env,\n fetchImpl,\n timeoutMs: options.timeoutMs,\n }),\n sources:\n explicit.sources ??\n build_default_dataset_executor({\n table: 'sources',\n env,\n fetchImpl,\n timeoutMs: options.timeoutMs,\n }),\n process_build_runs: explicit.process_build_runs,\n };\n}\n\nexport async function runPublish(options: RunPublishOptions): Promise<PublishReport> {\n const requestPath = path.resolve(options.inputPath);\n const requestDir = path.dirname(requestPath);\n const raw = options.rawRequest ?? readJsonInput(requestPath);\n const normalized = normalizePublishRequest(raw, {\n requestPath,\n outDirOverride: options.outDir ?? undefined,\n commitOverride: options.commit ?? undefined,\n now: options.now,\n });\n const collected = collectPublishInputs(normalized, requestDir);\n const now = options.now ?? new Date();\n const outDir = normalized.out_dir;\n const executors = resolve_dataset_executors(options);\n\n const files = {\n normalized_request: path.join(outDir, 'normalized-request.json'),\n collected_inputs: path.join(outDir, 'collected-inputs.json'),\n relation_manifest: path.join(outDir, 'relation-manifest.json'),\n publish_report: path.join(outDir, 'publish-report.json'),\n };\n\n writeJsonArtifact(files.normalized_request, normalized);\n writeJsonArtifact(files.collected_inputs, collected);\n\n const lifecyclemodels = normalized.publish.publish_lifecyclemodels\n ? await publish_lifecyclemodels(collected.lifecyclemodels, {\n commit: normalized.publish.commit,\n executor: executors.lifecyclemodels,\n publish: normalized.publish,\n })\n : [];\n const processes = normalized.publish.publish_processes\n ? await publish_processes(collected.processes, {\n commit: normalized.publish.commit,\n executor: executors.processes,\n publish: normalized.publish,\n })\n : [];\n const sources = normalized.publish.publish_sources\n ? await publish_sources(collected.sources, {\n commit: normalized.publish.commit,\n executor: executors.sources,\n publish: normalized.publish,\n })\n : [];\n const processBuildRuns = normalized.publish.publish_process_build_runs\n ? await publish_process_build_runs(collected.process_build_runs, {\n commit: normalized.publish.commit,\n executor: executors.process_build_runs,\n publish: normalized.publish,\n })\n : [];\n const relations = build_relation_manifest(collected.relations, normalized.publish, now);\n\n writeJsonArtifact(files.relation_manifest, relations);\n\n const publishEntries = [...lifecyclemodels, ...processes, ...sources, ...processBuildRuns];\n const failed = publishEntries.filter((item) => item.status === 'failed').length;\n const executed = publishEntries.filter((item) => item.status === 'executed').length;\n const deferred = publishEntries.filter((item) => item.status.startsWith('deferred')).length;\n\n const report: PublishReport = {\n generated_at_utc: now.toISOString(),\n request_path: requestPath,\n out_dir: outDir,\n commit: normalized.publish.commit,\n status: failed > 0 ? 'completed_with_failures' : 'completed',\n counts: {\n bundle_paths: collected.bundle_paths.length,\n lifecyclemodels: lifecyclemodels.length,\n processes: processes.length,\n sources: sources.length,\n relations: relations.relations.length,\n process_build_runs: processBuildRuns.length,\n executed,\n deferred,\n failed,\n },\n files,\n lifecyclemodels,\n processes,\n sources,\n process_build_runs: processBuildRuns,\n relations,\n };\n\n writeJsonArtifact(files.publish_report, report);\n return report;\n}\n"]}
1
+ {"version":3,"file":"publish.js","sourceRoot":"","sources":["../../../src/lib/publish.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'node:path';\nimport { CliError } from './errors.js';\nimport { writeJsonArtifact } from './artifacts.js';\nimport type { FetchLike } from './http.js';\nimport { readJsonInput } from './io.js';\nimport {\n syncLifecyclemodelBundleRecord,\n type LifecyclemodelPublishMetadata,\n} from './lifecyclemodel-bundle-save.js';\nimport {\n summarizeProcessPayloadValidation,\n validateProcessPayload,\n type ProcessPayloadValidationResult,\n} from './process-payload-validation.js';\nimport { syncStateAwareProcessRecord } from './process-save-draft.js';\nimport { buildRunId, resolveRunLayout } from './run.js';\nimport { getRuntimeRuleset } from './runtime-rulesets.js';\nimport {\n hasSupabaseRestRuntime,\n syncSupabaseJsonOrderedRecord,\n type SupabaseJsonOrderedTable,\n type SupabaseJsonOrderedWriteMode,\n} from './supabase-json-ordered-write.js';\n\ntype JsonObject = Record<string, unknown>;\n\nconst DEFAULT_MAX_ATTEMPTS = 5;\nconst DEFAULT_RETRY_DELAY_SECONDS = 2.0;\nconst DEFAULT_DATASET_VERSION = '01.01.000';\nconst PUBLISH_VERIFICATION_RULESET_ID = 'publish-run/default';\nconst PUBLISH_VERIFICATION_RULESET_VERSION = '1';\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction ensure_list(value: unknown): unknown[] {\n if (value === undefined || value === null) {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n}\n\nfunction first_non_empty(...values: unknown[]): string | null {\n for (const value of values) {\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n }\n return null;\n}\n\nfunction to_positive_integer(value: unknown, defaultValue: number): number {\n if (value === undefined || value === null || value === '') {\n return defaultValue;\n }\n const parsed =\n typeof value === 'number'\n ? value\n : typeof value === 'string'\n ? Number.parseInt(value, 10)\n : Number.NaN;\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new CliError('Publish request expected a positive integer value.', {\n code: 'PUBLISH_INVALID_INTEGER',\n exitCode: 2,\n details: value,\n });\n }\n return parsed;\n}\n\nfunction to_non_negative_number(value: unknown, defaultValue: number): number {\n if (value === undefined || value === null || value === '') {\n return defaultValue;\n }\n const parsed =\n typeof value === 'number' ? value : typeof value === 'string' ? Number(value) : Number.NaN;\n if (!Number.isFinite(parsed) || parsed < 0) {\n throw new CliError('Publish request expected a non-negative number value.', {\n code: 'PUBLISH_INVALID_NUMBER',\n exitCode: 2,\n details: value,\n });\n }\n return parsed;\n}\n\nfunction to_boolean(value: unknown, defaultValue: boolean): boolean {\n return value === undefined ? defaultValue : Boolean(value);\n}\n\nfunction resolve_path(baseDir: string, value: string): string {\n return path.resolve(baseDir, value);\n}\n\nfunction load_json_object(filePath: string): JsonObject {\n const value = readJsonInput(filePath);\n if (!isRecord(value)) {\n throw new CliError(`Expected JSON object input: ${filePath}`, {\n code: 'PUBLISH_INPUT_NOT_OBJECT',\n exitCode: 2,\n });\n }\n return value;\n}\n\nfunction default_out_dir(baseDir: string, commit: boolean, now: Date = new Date()): string {\n const runId = buildRunId({\n namespace: 'publish',\n operation: commit ? 'commit' : 'dry_run',\n now,\n });\n return resolveRunLayout(path.join(baseDir, 'artifacts'), 'publish', runId).runRoot;\n}\n\nfunction serialize_error(error: unknown): { message: string } {\n if (error instanceof Error) {\n return { message: error.message };\n }\n return { message: String(error) };\n}\n\nexport type PublishDatasetEntry =\n | string\n | {\n file?: string;\n path?: string;\n json_ordered?: JsonObject;\n jsonOrdered?: JsonObject;\n payload?: JsonObject;\n [key: string]: unknown;\n };\n\nexport type PublishProcessBuildRunEntry =\n | string\n | {\n run_id?: string;\n run_root?: string;\n exports_dir?: string;\n [key: string]: unknown;\n };\n\nexport type PublishCollectedOrigin = {\n source: 'bundle' | 'input';\n base_dir: string;\n bundle_path: string | null;\n};\n\nexport type PublishCollectedDatasetEntry = {\n entry: PublishDatasetEntry;\n origin: PublishCollectedOrigin;\n};\n\nexport type PublishCollectedProcessBuildRunEntry = {\n entry: PublishProcessBuildRunEntry;\n origin: PublishCollectedOrigin;\n};\n\nexport type PublishCollectedRelationEntry = {\n entry: unknown;\n origin: PublishCollectedOrigin;\n};\n\nexport type PublishRequest = {\n inputs: {\n bundle_paths: string[];\n lifecyclemodels: PublishDatasetEntry[];\n processes: PublishDatasetEntry[];\n sources: PublishDatasetEntry[];\n relations: unknown[];\n process_build_runs: PublishProcessBuildRunEntry[];\n };\n publish: {\n commit: boolean;\n publish_lifecyclemodels: boolean;\n publish_processes: boolean;\n publish_sources: boolean;\n publish_relations: boolean;\n publish_process_build_runs: boolean;\n relation_mode: 'local_manifest_only';\n max_attempts: number;\n retry_delay_seconds: number;\n process_build_forward_args: string[];\n };\n out_dir: string;\n};\n\nexport type PublishCollectedInputs = {\n bundle_paths: string[];\n lifecyclemodels: PublishCollectedDatasetEntry[];\n processes: PublishCollectedDatasetEntry[];\n sources: PublishCollectedDatasetEntry[];\n relations: PublishCollectedRelationEntry[];\n process_build_runs: PublishCollectedProcessBuildRunEntry[];\n};\n\nexport type DatasetPublishExecutorArgs = {\n table: 'lifecyclemodels' | 'processes' | 'sources';\n id: string;\n version: string;\n payload: JsonObject;\n metadata?: LifecyclemodelPublishMetadata | null;\n source: 'bundle' | 'input';\n bundle_path: string | null;\n publish: PublishRequest['publish'];\n};\n\nexport type ProcessBuildRunPublishExecutorArgs = {\n run_id: string;\n entry: PublishProcessBuildRunEntry;\n source: 'bundle' | 'input';\n bundle_path: string | null;\n forward_args: string[];\n publish: PublishRequest['publish'];\n};\n\nexport type PublishExecutors = {\n lifecyclemodels?: (args: DatasetPublishExecutorArgs) => Promise<unknown> | unknown;\n processes?: (args: DatasetPublishExecutorArgs) => Promise<unknown> | unknown;\n sources?: (args: DatasetPublishExecutorArgs) => Promise<unknown> | unknown;\n process_build_runs?: (args: ProcessBuildRunPublishExecutorArgs) => Promise<unknown> | unknown;\n};\n\nexport type PublishDatasetReport = {\n table: 'lifecyclemodels' | 'processes' | 'sources';\n id: string | null;\n version: string | null;\n status:\n | 'prepared'\n | 'executed'\n | 'deferred_no_executor'\n | 'deferred_projection_payload'\n | 'failed';\n source: 'bundle' | 'input';\n bundle_path: string | null;\n reason?: string;\n validation?: ProcessPayloadValidationResult;\n execution?: unknown;\n error?: { message: string };\n};\n\nexport type PublishProcessBuildRunReport = {\n run_id: string;\n status: 'prepared' | 'executed' | 'deferred_no_executor' | 'failed';\n source: 'bundle' | 'input';\n bundle_path: string | null;\n forward_args: string[];\n execution?: unknown;\n error?: { message: string };\n};\n\nexport type PublishRelationManifest = {\n generated_at_utc: string;\n relation_mode: 'local_manifest_only';\n status: 'prepared_local_relation_manifest';\n relations: unknown[];\n};\n\nexport type PublishVerificationFinding = {\n code: string;\n severity: 'warning' | 'blocker';\n message: string;\n table: 'lifecyclemodels' | 'processes' | 'sources' | 'process_build_runs';\n id: string | null;\n version: string | null;\n path?: string;\n bundle_path?: string | null;\n};\n\nexport type PublishVerificationReport = {\n schema_version: 1;\n generated_at_utc: string;\n command: 'publish run';\n status: 'passed' | 'blocked';\n ruleset_id: string;\n ruleset_version: string;\n ruleset_source_version: string;\n ruleset_rule_ids: string[];\n commit: boolean;\n findings: PublishVerificationFinding[];\n blockers: PublishVerificationFinding[];\n next_action: 'ready_for_commit_or_publish' | 'fix_blockers';\n counts: {\n findings: number;\n blockers: number;\n failed: number;\n deferred: number;\n executed: number;\n };\n};\n\nexport type PublishReport = {\n generated_at_utc: string;\n request_path: string;\n out_dir: string;\n commit: boolean;\n status: 'completed' | 'completed_with_failures';\n counts: {\n bundle_paths: number;\n lifecyclemodels: number;\n processes: number;\n sources: number;\n relations: number;\n process_build_runs: number;\n executed: number;\n deferred: number;\n failed: number;\n };\n files: {\n normalized_request: string;\n collected_inputs: string;\n relation_manifest: string;\n verification_report: string;\n publish_report: string;\n };\n verification: PublishVerificationReport;\n lifecyclemodels: PublishDatasetReport[];\n processes: PublishDatasetReport[];\n sources: PublishDatasetReport[];\n process_build_runs: PublishProcessBuildRunReport[];\n relations: PublishRelationManifest;\n};\n\nexport type RunPublishOptions = {\n inputPath: string;\n rawRequest?: unknown;\n outDir?: string | null;\n commit?: boolean | null;\n executors?: PublishExecutors;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n now?: Date;\n validateProcessPayloadImpl?: (payload: JsonObject) => ProcessPayloadValidationResult;\n};\n\ntype PreparedPublishDatasetReport = PublishDatasetReport & {\n id: string;\n version: string;\n};\n\ntype NormalizePublishRequestOptions = {\n requestPath: string;\n outDirOverride?: string;\n commitOverride?: boolean;\n now?: Date;\n};\n\ntype PublishRequestOptions = {\n commit: boolean;\n executor:\n | PublishExecutors['lifecyclemodels']\n | PublishExecutors['processes']\n | PublishExecutors['sources']\n | undefined;\n publish: PublishRequest['publish'];\n};\n\ntype ProcessPublishRequestOptions = PublishRequestOptions & {\n validateProcessPayloadImpl?: (payload: JsonObject) => ProcessPayloadValidationResult;\n};\n\ntype LoadedLifecyclemodelPublishEntry = {\n payload: JsonObject;\n metadata: LifecyclemodelPublishMetadata | null;\n};\n\nfunction extract_lifecyclemodel_identity(payload: JsonObject): [string, string] {\n const root = isRecord(payload.lifeCycleModelDataSet) ? payload.lifeCycleModelDataSet : payload;\n const lifeCycleModelInformation = isRecord(root.lifeCycleModelInformation)\n ? root.lifeCycleModelInformation\n : {};\n const dataSetInformation = isRecord(lifeCycleModelInformation.dataSetInformation)\n ? lifeCycleModelInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const datasetId = first_non_empty(payload['@id'], payload.id, dataSetInformation['common:UUID']);\n const version = first_non_empty(\n payload['@version'],\n payload.version,\n publicationAndOwnership['common:dataSetVersion'],\n DEFAULT_DATASET_VERSION,\n )!;\n if (!datasetId) {\n throw new CliError('Lifecycle model payload missing @id/id.', {\n code: 'PUBLISH_LIFECYCLEMODEL_ID_MISSING',\n exitCode: 2,\n });\n }\n return [datasetId, version];\n}\n\nfunction extract_process_identity(payload: JsonObject): [string, string] {\n const root = isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n const processInformation = isRecord(root.processInformation) ? root.processInformation : {};\n const dataSetInformation = isRecord(processInformation.dataSetInformation)\n ? processInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const datasetId = first_non_empty(dataSetInformation['common:UUID']);\n const version = first_non_empty(\n publicationAndOwnership['common:dataSetVersion'],\n DEFAULT_DATASET_VERSION,\n )!;\n if (!datasetId) {\n throw new CliError(\n 'Process payload missing processInformation.dataSetInformation.common:UUID.',\n {\n code: 'PUBLISH_PROCESS_ID_MISSING',\n exitCode: 2,\n },\n );\n }\n return [datasetId, version];\n}\n\nfunction extract_source_identity(payload: JsonObject): [string, string] {\n const root = isRecord(payload.sourceDataSet) ? payload.sourceDataSet : payload;\n const sourceInformation = isRecord(root.sourceInformation) ? root.sourceInformation : {};\n const dataSetInformation = isRecord(sourceInformation.dataSetInformation)\n ? sourceInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const datasetId = first_non_empty(dataSetInformation['common:UUID']);\n const version = first_non_empty(\n publicationAndOwnership['common:dataSetVersion'],\n DEFAULT_DATASET_VERSION,\n )!;\n if (!datasetId) {\n throw new CliError('Source payload missing sourceInformation.dataSetInformation.common:UUID.', {\n code: 'PUBLISH_SOURCE_ID_MISSING',\n exitCode: 2,\n });\n }\n return [datasetId, version];\n}\n\nfunction load_dataset_entry(entry: PublishDatasetEntry, baseDir: string): JsonObject {\n const source = load_dataset_entry_source(entry, baseDir);\n if (isRecord(source)) {\n for (const key of ['json_ordered', 'jsonOrdered', 'payload'] as const) {\n const candidate = source[key];\n if (isRecord(candidate)) {\n return candidate;\n }\n }\n }\n\n return source;\n}\n\nfunction load_dataset_entry_source(entry: PublishDatasetEntry, baseDir: string): JsonObject {\n if (isRecord(entry)) {\n const fileValue = first_non_empty(entry.file, entry.path);\n if (fileValue) {\n return load_json_object(resolve_path(baseDir, fileValue));\n }\n return entry;\n }\n\n if (typeof entry === 'string' && entry.trim()) {\n return load_json_object(resolve_path(baseDir, entry));\n }\n\n throw new CliError('Unsupported dataset entry in publish request.', {\n code: 'PUBLISH_UNSUPPORTED_DATASET_ENTRY',\n exitCode: 2,\n details: entry,\n });\n}\n\nfunction load_lifecyclemodel_publish_entry(\n entry: PublishDatasetEntry,\n baseDir: string,\n): LoadedLifecyclemodelPublishEntry {\n const source = load_dataset_entry_source(entry, baseDir);\n const payload = load_dataset_entry(entry, baseDir);\n const metadata: LifecyclemodelPublishMetadata = {};\n const jsonTg = isRecord(source.json_tg)\n ? source.json_tg\n : isRecord(source.jsonTg)\n ? source.jsonTg\n : null;\n if (jsonTg) {\n metadata.json_tg = jsonTg;\n }\n\n const processMutations = source.processMutations ?? source.process_mutations;\n if (Array.isArray(processMutations)) {\n metadata.processMutations = processMutations as JsonObject[];\n }\n\n const ruleVerification =\n typeof source.ruleVerification === 'boolean'\n ? source.ruleVerification\n : typeof source.rule_verification === 'boolean'\n ? source.rule_verification\n : undefined;\n if (typeof ruleVerification === 'boolean') {\n metadata.ruleVerification = ruleVerification;\n }\n\n return {\n payload,\n metadata: Object.keys(metadata).length > 0 ? metadata : null,\n };\n}\n\nfunction push_collected_entries<T>(\n target: Array<{ entry: T; origin: PublishCollectedOrigin }>,\n entries: unknown[],\n origin: PublishCollectedOrigin,\n): void {\n for (const entry of entries) {\n target.push({ entry: entry as T, origin });\n }\n}\n\nexport function normalizePublishRequest(\n raw: unknown,\n options: NormalizePublishRequestOptions,\n): PublishRequest {\n if (!isRecord(raw)) {\n throw new CliError('Publish request must be a JSON object.', {\n code: 'PUBLISH_REQUEST_NOT_OBJECT',\n exitCode: 2,\n });\n }\n\n const requestDir = path.dirname(options.requestPath);\n const inputs = isRecord(raw.inputs) ? raw.inputs : {};\n const publish = isRecord(raw.publish) ? raw.publish : {};\n const commit =\n options.commitOverride === undefined\n ? to_boolean(publish.commit, false)\n : options.commitOverride;\n const outDirValue = first_non_empty(options.outDirOverride, raw.out_dir, raw.output_dir);\n const outDir = outDirValue\n ? resolve_path(requestDir, outDirValue)\n : default_out_dir(requestDir, commit, options.now);\n const relationMode = first_non_empty(publish.relation_mode, 'local_manifest_only');\n\n if (relationMode !== 'local_manifest_only') {\n throw new CliError(\"publish.relation_mode only supports 'local_manifest_only'.\", {\n code: 'PUBLISH_UNSUPPORTED_RELATION_MODE',\n exitCode: 2,\n details: relationMode,\n });\n }\n\n return {\n inputs: {\n bundle_paths: ensure_list(inputs.bundle_paths)\n .map((value) => String(value).trim())\n .filter(Boolean)\n .map((value) => resolve_path(requestDir, value)),\n lifecyclemodels: ensure_list(inputs.lifecyclemodels) as PublishDatasetEntry[],\n processes: ensure_list(inputs.processes) as PublishDatasetEntry[],\n sources: ensure_list(inputs.sources) as PublishDatasetEntry[],\n relations: ensure_list(inputs.relations),\n process_build_runs: ensure_list(inputs.process_build_runs) as PublishProcessBuildRunEntry[],\n },\n publish: {\n commit,\n publish_lifecyclemodels: to_boolean(publish.publish_lifecyclemodels, true),\n publish_processes: to_boolean(publish.publish_processes, true),\n publish_sources: to_boolean(publish.publish_sources, true),\n publish_relations: to_boolean(publish.publish_relations, true),\n publish_process_build_runs: to_boolean(publish.publish_process_build_runs, true),\n relation_mode: 'local_manifest_only',\n max_attempts: to_positive_integer(publish.max_attempts, DEFAULT_MAX_ATTEMPTS),\n retry_delay_seconds: to_non_negative_number(\n publish.retry_delay_seconds,\n DEFAULT_RETRY_DELAY_SECONDS,\n ),\n process_build_forward_args: ensure_list(publish.process_build_forward_args)\n .map((value) => String(value).trim())\n .filter(Boolean),\n },\n out_dir: outDir,\n };\n}\n\nexport function collectPublishInputs(\n normalized: PublishRequest,\n requestBaseDir: string,\n): PublishCollectedInputs {\n const collected: PublishCollectedInputs = {\n bundle_paths: [...normalized.inputs.bundle_paths],\n lifecyclemodels: [],\n processes: [],\n sources: [],\n relations: [],\n process_build_runs: [],\n };\n\n for (const bundlePath of normalized.inputs.bundle_paths) {\n const bundle = load_json_object(bundlePath);\n const origin: PublishCollectedOrigin = {\n source: 'bundle',\n base_dir: path.dirname(bundlePath),\n bundle_path: bundlePath,\n };\n push_collected_entries<PublishDatasetEntry>(\n collected.lifecyclemodels,\n ensure_list(bundle.lifecyclemodels),\n origin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.processes,\n [...ensure_list(bundle.projected_processes), ...ensure_list(bundle.processes)],\n origin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.sources,\n ensure_list(bundle.sources),\n origin,\n );\n push_collected_entries(\n collected.relations,\n [...ensure_list(bundle.resulting_process_relations), ...ensure_list(bundle.relations)],\n origin,\n );\n push_collected_entries<PublishProcessBuildRunEntry>(\n collected.process_build_runs,\n ensure_list(bundle.process_build_runs),\n origin,\n );\n }\n\n const directOrigin: PublishCollectedOrigin = {\n source: 'input',\n base_dir: requestBaseDir,\n bundle_path: null,\n };\n\n push_collected_entries<PublishDatasetEntry>(\n collected.lifecyclemodels,\n normalized.inputs.lifecyclemodels,\n directOrigin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.processes,\n normalized.inputs.processes,\n directOrigin,\n );\n push_collected_entries<PublishDatasetEntry>(\n collected.sources,\n normalized.inputs.sources,\n directOrigin,\n );\n push_collected_entries(collected.relations, normalized.inputs.relations, directOrigin);\n push_collected_entries<PublishProcessBuildRunEntry>(\n collected.process_build_runs,\n normalized.inputs.process_build_runs,\n directOrigin,\n );\n\n return collected;\n}\n\nasync function maybe_execute_dataset(\n report: PreparedPublishDatasetReport,\n payload: JsonObject,\n options: PublishRequestOptions & {\n table: 'lifecyclemodels' | 'processes' | 'sources';\n metadata?: LifecyclemodelPublishMetadata | null;\n },\n): Promise<PublishDatasetReport> {\n if (!options.commit) {\n return report;\n }\n\n if (!options.executor) {\n report.status = 'deferred_no_executor';\n return report;\n }\n\n try {\n report.execution = await options.executor({\n table: options.table,\n id: report.id,\n version: report.version,\n payload,\n metadata: options.metadata,\n source: report.source,\n bundle_path: report.bundle_path,\n publish: options.publish,\n });\n report.status = 'executed';\n } catch (error) {\n report.status = 'failed';\n report.error = serialize_error(error);\n }\n\n return report;\n}\n\nasync function publish_lifecyclemodels(\n entries: PublishCollectedDatasetEntry[],\n options: PublishRequestOptions,\n): Promise<PublishDatasetReport[]> {\n const reports: PublishDatasetReport[] = [];\n for (const item of entries) {\n const loaded = load_lifecyclemodel_publish_entry(item.entry, item.origin.base_dir);\n const payload = loaded.payload;\n const [datasetId, version] = extract_lifecyclemodel_identity(payload);\n const report: PreparedPublishDatasetReport = {\n table: 'lifecyclemodels',\n id: datasetId,\n version,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n };\n reports.push(\n await maybe_execute_dataset(report, payload, {\n ...options,\n table: 'lifecyclemodels',\n executor: options.executor,\n metadata: loaded.metadata,\n }),\n );\n }\n return reports;\n}\n\nasync function publish_processes(\n entries: PublishCollectedDatasetEntry[],\n options: ProcessPublishRequestOptions,\n): Promise<PublishDatasetReport[]> {\n const reports: PublishDatasetReport[] = [];\n const validate = options.validateProcessPayloadImpl ?? validateProcessPayload;\n for (const item of entries) {\n const payload = load_dataset_entry(item.entry, item.origin.base_dir);\n try {\n const [datasetId, version] = extract_process_identity(payload);\n const validation = validate(payload);\n if (!validation.ok) {\n reports.push({\n table: 'processes',\n id: datasetId,\n version,\n status: 'failed',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n validation,\n error: {\n message: summarizeProcessPayloadValidation(validation),\n },\n });\n continue;\n }\n\n const report: PreparedPublishDatasetReport = {\n table: 'processes',\n id: datasetId,\n version,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n validation,\n };\n reports.push(\n await maybe_execute_dataset(report, payload, {\n ...options,\n table: 'processes',\n executor: options.executor,\n }),\n );\n } catch (error) {\n const report: PublishDatasetReport = {\n table: 'processes',\n id: first_non_empty(payload['@id'], payload.id),\n version: first_non_empty(payload['@version'], payload.version, DEFAULT_DATASET_VERSION),\n status: 'deferred_projection_payload',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n reason:\n error instanceof CliError && error.code === 'PUBLISH_PROCESS_ID_MISSING'\n ? 'Payload is not a canonical processDataSet wrapper; keep it in the publish bundle until a projection-to-process adapter exists.'\n : serialize_error(error).message,\n };\n reports.push(report);\n }\n }\n return reports;\n}\n\nasync function publish_sources(\n entries: PublishCollectedDatasetEntry[],\n options: PublishRequestOptions,\n): Promise<PublishDatasetReport[]> {\n const reports: PublishDatasetReport[] = [];\n for (const item of entries) {\n const payload = load_dataset_entry(item.entry, item.origin.base_dir);\n const [datasetId, version] = extract_source_identity(payload);\n const report: PreparedPublishDatasetReport = {\n table: 'sources',\n id: datasetId,\n version,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n };\n reports.push(\n await maybe_execute_dataset(report, payload, {\n ...options,\n table: 'sources',\n executor: options.executor,\n }),\n );\n }\n return reports;\n}\n\nasync function publish_process_build_runs(\n entries: PublishCollectedProcessBuildRunEntry[],\n options: {\n commit: boolean;\n executor: PublishExecutors['process_build_runs'];\n publish: PublishRequest['publish'];\n },\n): Promise<PublishProcessBuildRunReport[]> {\n const reports: PublishProcessBuildRunReport[] = [];\n for (const item of entries) {\n const runId =\n typeof item.entry === 'string' ? item.entry.trim() : first_non_empty(item.entry.run_id);\n\n if (!runId) {\n throw new CliError('process_build_run entry missing run_id.', {\n code: 'PUBLISH_PROCESS_BUILD_RUN_ID_MISSING',\n exitCode: 2,\n details: item.entry,\n });\n }\n\n const report: PublishProcessBuildRunReport = {\n run_id: runId,\n status: 'prepared',\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n forward_args: [...options.publish.process_build_forward_args],\n };\n\n if (!options.commit) {\n reports.push(report);\n continue;\n }\n\n if (!options.executor) {\n report.status = 'deferred_no_executor';\n reports.push(report);\n continue;\n }\n\n try {\n report.execution = await options.executor({\n run_id: runId,\n entry: item.entry,\n source: item.origin.source,\n bundle_path: item.origin.bundle_path,\n forward_args: [...options.publish.process_build_forward_args],\n publish: options.publish,\n });\n report.status = 'executed';\n } catch (error) {\n report.status = 'failed';\n report.error = serialize_error(error);\n }\n\n reports.push(report);\n }\n return reports;\n}\n\nfunction build_relation_manifest(\n relations: PublishCollectedRelationEntry[],\n publish: PublishRequest['publish'],\n now: Date,\n): PublishRelationManifest {\n return {\n generated_at_utc: now.toISOString(),\n relation_mode: publish.relation_mode,\n status: 'prepared_local_relation_manifest',\n relations: publish.publish_relations ? relations.map((item) => item.entry) : [],\n };\n}\n\nfunction table_write_mode_for_publish(): SupabaseJsonOrderedWriteMode {\n return 'upsert_current_version';\n}\n\nfunction build_default_dataset_executor(options: {\n table: SupabaseJsonOrderedTable;\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs?: number;\n}) {\n return async (args: DatasetPublishExecutorArgs): Promise<unknown> => {\n if (options.table === 'processes') {\n return syncStateAwareProcessRecord({\n id: args.id,\n version: args.version,\n payload: args.payload,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n audit: {\n command: 'tiangong-lca publish run',\n source: args.source,\n bundle_path: args.bundle_path,\n },\n });\n }\n\n if (options.table === 'lifecyclemodels') {\n return syncLifecyclemodelBundleRecord({\n id: args.id,\n version: args.version,\n payload: args.payload,\n metadata: args.metadata ?? null,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n }\n\n return syncSupabaseJsonOrderedRecord({\n table: options.table,\n id: args.id,\n version: args.version,\n payload: args.payload,\n writeMode: table_write_mode_for_publish(),\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n };\n}\n\nfunction resolve_dataset_executors(options: RunPublishOptions): PublishExecutors {\n const explicit = options.executors ?? {};\n const env = options.env;\n const fetchImpl = options.fetchImpl;\n\n if (!env || !fetchImpl || !hasSupabaseRestRuntime(env)) {\n return explicit;\n }\n\n return {\n lifecyclemodels:\n explicit.lifecyclemodels ??\n build_default_dataset_executor({\n table: 'lifecyclemodels',\n env,\n fetchImpl,\n timeoutMs: options.timeoutMs,\n }),\n processes:\n explicit.processes ??\n build_default_dataset_executor({\n table: 'processes',\n env,\n fetchImpl,\n timeoutMs: options.timeoutMs,\n }),\n sources:\n explicit.sources ??\n build_default_dataset_executor({\n table: 'sources',\n env,\n fetchImpl,\n timeoutMs: options.timeoutMs,\n }),\n process_build_runs: explicit.process_build_runs,\n };\n}\n\nfunction dataset_failure_finding(\n report: PublishDatasetReport,\n fallbackCode: string,\n): PublishVerificationFinding {\n const validationIssue = report.validation?.ok === false ? report.validation.issues[0] : null;\n return {\n code: validationIssue?.code ?? fallbackCode,\n severity: 'blocker',\n message:\n validationIssue?.message ??\n report.error?.message ??\n report.reason ??\n 'Publish dataset failed.',\n table: report.table,\n id: report.id,\n version: report.version,\n ...(validationIssue?.path ? { path: validationIssue.path } : {}),\n ...(report.bundle_path !== undefined ? { bundle_path: report.bundle_path } : {}),\n };\n}\n\nfunction process_build_run_failure_finding(\n report: PublishProcessBuildRunReport,\n): PublishVerificationFinding {\n return {\n code: 'process_build_run_publish_failed',\n severity: 'blocker',\n message: report.error?.message ?? 'Process build run publish failed.',\n table: 'process_build_runs',\n id: report.run_id,\n version: null,\n bundle_path: report.bundle_path,\n };\n}\n\nfunction build_publish_verification_report(options: {\n now: Date;\n commit: boolean;\n failed: number;\n deferred: number;\n executed: number;\n lifecyclemodels: PublishDatasetReport[];\n processes: PublishDatasetReport[];\n sources: PublishDatasetReport[];\n processBuildRuns: PublishProcessBuildRunReport[];\n}): PublishVerificationReport {\n const ruleset = getRuntimeRuleset('publish-run/default');\n const datasetFindings = [\n ...options.lifecyclemodels,\n ...options.processes,\n ...options.sources,\n ].flatMap((report) =>\n report.status === 'failed'\n ? [dataset_failure_finding(report, `${report.table}_publish_failed`)]\n : [],\n );\n const processBuildRunFindings = options.processBuildRuns.flatMap((report) =>\n report.status === 'failed' ? [process_build_run_failure_finding(report)] : [],\n );\n const blockers = [...datasetFindings, ...processBuildRunFindings];\n\n return {\n schema_version: 1,\n generated_at_utc: options.now.toISOString(),\n command: 'publish run',\n status: blockers.length > 0 ? 'blocked' : 'passed',\n ruleset_id: PUBLISH_VERIFICATION_RULESET_ID,\n ruleset_version: PUBLISH_VERIFICATION_RULESET_VERSION,\n ruleset_source_version: ruleset.source_version,\n ruleset_rule_ids: ruleset.rule_ids,\n commit: options.commit,\n findings: blockers,\n blockers,\n next_action: blockers.length > 0 ? 'fix_blockers' : 'ready_for_commit_or_publish',\n counts: {\n findings: blockers.length,\n blockers: blockers.length,\n failed: options.failed,\n deferred: options.deferred,\n executed: options.executed,\n },\n };\n}\n\nexport async function runPublish(options: RunPublishOptions): Promise<PublishReport> {\n const requestPath = path.resolve(options.inputPath);\n const requestDir = path.dirname(requestPath);\n const raw = options.rawRequest ?? readJsonInput(requestPath);\n const normalized = normalizePublishRequest(raw, {\n requestPath,\n outDirOverride: options.outDir ?? undefined,\n commitOverride: options.commit ?? undefined,\n now: options.now,\n });\n const collected = collectPublishInputs(normalized, requestDir);\n const now = options.now ?? new Date();\n const outDir = normalized.out_dir;\n const executors = resolve_dataset_executors(options);\n\n const files = {\n normalized_request: path.join(outDir, 'normalized-request.json'),\n collected_inputs: path.join(outDir, 'collected-inputs.json'),\n relation_manifest: path.join(outDir, 'relation-manifest.json'),\n verification_report: path.join(outDir, 'verification-report.json'),\n publish_report: path.join(outDir, 'publish-report.json'),\n };\n\n writeJsonArtifact(files.normalized_request, normalized);\n writeJsonArtifact(files.collected_inputs, collected);\n\n const lifecyclemodels = normalized.publish.publish_lifecyclemodels\n ? await publish_lifecyclemodels(collected.lifecyclemodels, {\n commit: normalized.publish.commit,\n executor: executors.lifecyclemodels,\n publish: normalized.publish,\n })\n : [];\n const processes = normalized.publish.publish_processes\n ? await publish_processes(collected.processes, {\n commit: normalized.publish.commit,\n executor: executors.processes,\n publish: normalized.publish,\n validateProcessPayloadImpl: options.validateProcessPayloadImpl,\n })\n : [];\n const sources = normalized.publish.publish_sources\n ? await publish_sources(collected.sources, {\n commit: normalized.publish.commit,\n executor: executors.sources,\n publish: normalized.publish,\n })\n : [];\n const processBuildRuns = normalized.publish.publish_process_build_runs\n ? await publish_process_build_runs(collected.process_build_runs, {\n commit: normalized.publish.commit,\n executor: executors.process_build_runs,\n publish: normalized.publish,\n })\n : [];\n const relations = build_relation_manifest(collected.relations, normalized.publish, now);\n\n writeJsonArtifact(files.relation_manifest, relations);\n\n const publishEntries = [...lifecyclemodels, ...processes, ...sources, ...processBuildRuns];\n const failed = publishEntries.filter((item) => item.status === 'failed').length;\n const executed = publishEntries.filter((item) => item.status === 'executed').length;\n const deferred = publishEntries.filter((item) => item.status.startsWith('deferred')).length;\n const verification = build_publish_verification_report({\n now,\n commit: normalized.publish.commit,\n failed,\n deferred,\n executed,\n lifecyclemodels,\n processes,\n sources,\n processBuildRuns,\n });\n\n const report: PublishReport = {\n generated_at_utc: now.toISOString(),\n request_path: requestPath,\n out_dir: outDir,\n commit: normalized.publish.commit,\n status: failed > 0 ? 'completed_with_failures' : 'completed',\n counts: {\n bundle_paths: collected.bundle_paths.length,\n lifecyclemodels: lifecyclemodels.length,\n processes: processes.length,\n sources: sources.length,\n relations: relations.relations.length,\n process_build_runs: processBuildRuns.length,\n executed,\n deferred,\n failed,\n },\n files,\n verification,\n lifecyclemodels,\n processes,\n sources,\n process_build_runs: processBuildRuns,\n relations,\n };\n\n writeJsonArtifact(files.verification_report, verification);\n writeJsonArtifact(files.publish_report, report);\n return report;\n}\n\nexport const __testInternals = {\n build_publish_verification_report,\n};\n"]}
@@ -8,22 +8,22 @@ const REMOTE_COMMANDS = {
8
8
  'search:flow': {
9
9
  endpoint: 'flow_hybrid_search',
10
10
  includeRegion: true,
11
- help: 'tiangong search flow --input ./request.json [--dry-run] [--json]',
11
+ help: 'tiangong-lca search flow --input ./request.json [--dry-run] [--json]',
12
12
  },
13
13
  'search:process': {
14
14
  endpoint: 'process_hybrid_search',
15
15
  includeRegion: true,
16
- help: 'tiangong search process --input ./request.json [--dry-run] [--json]',
16
+ help: 'tiangong-lca search process --input ./request.json [--dry-run] [--json]',
17
17
  },
18
18
  'search:lifecyclemodel': {
19
19
  endpoint: 'lifecyclemodel_hybrid_search',
20
20
  includeRegion: true,
21
- help: 'tiangong search lifecyclemodel --input ./request.json [--dry-run] [--json]',
21
+ help: 'tiangong-lca search lifecyclemodel --input ./request.json [--dry-run] [--json]',
22
22
  },
23
23
  'admin:embedding-run': {
24
24
  endpoint: 'embedding_ft',
25
25
  includeRegion: false,
26
- help: 'tiangong admin embedding-run --input ./jobs.json [--dry-run] [--json]',
26
+ help: 'tiangong-lca admin embedding-run --input ./jobs.json [--dry-run] [--json]',
27
27
  },
28
28
  };
29
29
  function buildUrl(baseUrl, endpoint) {
@@ -1 +1 @@
1
- {"version":3,"file":"remote.js","sourceRoot":"","sources":["../../../src/lib/remote.ts"],"names":[],"mappings":"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","sourcesContent":["import { CliError } from './errors.js';\nimport { readRuntimeEnv } from './env.js';\nimport type { FetchLike } from './http.js';\nimport { postJson } from './http.js';\nimport { readJsonInput, stringifyJson } from './io.js';\nimport { deriveSupabaseFunctionsBaseUrl, requireSupabaseRestRuntime } from './supabase-client.js';\nimport { resolveSupabaseUserSession } from './supabase-session.js';\n\ntype RemoteCommandSpec = {\n endpoint: string;\n includeRegion: boolean;\n help: string;\n};\n\nconst REMOTE_COMMANDS: Record<string, RemoteCommandSpec> = {\n 'search:flow': {\n endpoint: 'flow_hybrid_search',\n includeRegion: true,\n help: 'tiangong search flow --input ./request.json [--dry-run] [--json]',\n },\n 'search:process': {\n endpoint: 'process_hybrid_search',\n includeRegion: true,\n help: 'tiangong search process --input ./request.json [--dry-run] [--json]',\n },\n 'search:lifecyclemodel': {\n endpoint: 'lifecyclemodel_hybrid_search',\n includeRegion: true,\n help: 'tiangong search lifecyclemodel --input ./request.json [--dry-run] [--json]',\n },\n 'admin:embedding-run': {\n endpoint: 'embedding_ft',\n includeRegion: false,\n help: 'tiangong admin embedding-run --input ./jobs.json [--dry-run] [--json]',\n },\n};\n\nexport type RemoteCommandOptions = {\n commandKey: keyof typeof REMOTE_COMMANDS;\n inputPath: string;\n env: NodeJS.ProcessEnv;\n timeoutMs: number;\n dryRun: boolean;\n compactJson: boolean;\n fetchImpl: FetchLike;\n};\n\nfunction buildUrl(baseUrl: string, endpoint: string): string {\n return `${deriveSupabaseFunctionsBaseUrl(baseUrl)}/${endpoint}`;\n}\n\nfunction buildHeaders(\n accessToken: string,\n includeRegion: boolean,\n region: string | null,\n): Record<string, string> {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${accessToken}`,\n 'Content-Type': 'application/json',\n };\n if (includeRegion && region) {\n headers['x-region'] = region;\n }\n return headers;\n}\n\nexport async function executeRemoteCommand(options: RemoteCommandOptions): Promise<string> {\n const spec = REMOTE_COMMANDS[options.commandKey];\n if (!spec) {\n throw new CliError(`Unsupported remote command: ${options.commandKey}`, {\n code: 'UNSUPPORTED_REMOTE_COMMAND',\n exitCode: 2,\n });\n }\n\n const runtimeEnv = readRuntimeEnv(options.env);\n const runtime = requireSupabaseRestRuntime(options.env);\n const body = readJsonInput(options.inputPath);\n const url = buildUrl(runtime.apiBaseUrl, spec.endpoint);\n\n if (options.dryRun) {\n const dryRunHeaders = buildHeaders('****', spec.includeRegion, runtimeEnv.region);\n return stringifyJson(\n {\n dryRun: true,\n request: {\n method: 'POST',\n url,\n headers: {\n ...dryRunHeaders,\n },\n inputPath: options.inputPath,\n body,\n timeoutMs: options.timeoutMs,\n },\n },\n options.compactJson,\n );\n }\n\n const session = await resolveSupabaseUserSession({\n runtime,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n const headers = buildHeaders(session.accessToken, spec.includeRegion, runtimeEnv.region);\n const response = await postJson({\n url,\n headers,\n body,\n timeoutMs: options.timeoutMs,\n fetchImpl: options.fetchImpl,\n });\n return stringifyJson(response, options.compactJson);\n}\n\nexport function getRemoteCommandHelp(commandKey: keyof typeof REMOTE_COMMANDS): string {\n return REMOTE_COMMANDS[commandKey].help;\n}\n"]}
1
+ {"version":3,"file":"remote.js","sourceRoot":"","sources":["../../../src/lib/remote.ts"],"names":[],"mappings":"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","sourcesContent":["import { CliError } from './errors.js';\nimport { readRuntimeEnv } from './env.js';\nimport type { FetchLike } from './http.js';\nimport { postJson } from './http.js';\nimport { readJsonInput, stringifyJson } from './io.js';\nimport { deriveSupabaseFunctionsBaseUrl, requireSupabaseRestRuntime } from './supabase-client.js';\nimport { resolveSupabaseUserSession } from './supabase-session.js';\n\ntype RemoteCommandSpec = {\n endpoint: string;\n includeRegion: boolean;\n help: string;\n};\n\nconst REMOTE_COMMANDS: Record<string, RemoteCommandSpec> = {\n 'search:flow': {\n endpoint: 'flow_hybrid_search',\n includeRegion: true,\n help: 'tiangong-lca search flow --input ./request.json [--dry-run] [--json]',\n },\n 'search:process': {\n endpoint: 'process_hybrid_search',\n includeRegion: true,\n help: 'tiangong-lca search process --input ./request.json [--dry-run] [--json]',\n },\n 'search:lifecyclemodel': {\n endpoint: 'lifecyclemodel_hybrid_search',\n includeRegion: true,\n help: 'tiangong-lca search lifecyclemodel --input ./request.json [--dry-run] [--json]',\n },\n 'admin:embedding-run': {\n endpoint: 'embedding_ft',\n includeRegion: false,\n help: 'tiangong-lca admin embedding-run --input ./jobs.json [--dry-run] [--json]',\n },\n};\n\nexport type RemoteCommandOptions = {\n commandKey: keyof typeof REMOTE_COMMANDS;\n inputPath: string;\n env: NodeJS.ProcessEnv;\n timeoutMs: number;\n dryRun: boolean;\n compactJson: boolean;\n fetchImpl: FetchLike;\n};\n\nfunction buildUrl(baseUrl: string, endpoint: string): string {\n return `${deriveSupabaseFunctionsBaseUrl(baseUrl)}/${endpoint}`;\n}\n\nfunction buildHeaders(\n accessToken: string,\n includeRegion: boolean,\n region: string | null,\n): Record<string, string> {\n const headers: Record<string, string> = {\n Authorization: `Bearer ${accessToken}`,\n 'Content-Type': 'application/json',\n };\n if (includeRegion && region) {\n headers['x-region'] = region;\n }\n return headers;\n}\n\nexport async function executeRemoteCommand(options: RemoteCommandOptions): Promise<string> {\n const spec = REMOTE_COMMANDS[options.commandKey];\n if (!spec) {\n throw new CliError(`Unsupported remote command: ${options.commandKey}`, {\n code: 'UNSUPPORTED_REMOTE_COMMAND',\n exitCode: 2,\n });\n }\n\n const runtimeEnv = readRuntimeEnv(options.env);\n const runtime = requireSupabaseRestRuntime(options.env);\n const body = readJsonInput(options.inputPath);\n const url = buildUrl(runtime.apiBaseUrl, spec.endpoint);\n\n if (options.dryRun) {\n const dryRunHeaders = buildHeaders('****', spec.includeRegion, runtimeEnv.region);\n return stringifyJson(\n {\n dryRun: true,\n request: {\n method: 'POST',\n url,\n headers: {\n ...dryRunHeaders,\n },\n inputPath: options.inputPath,\n body,\n timeoutMs: options.timeoutMs,\n },\n },\n options.compactJson,\n );\n }\n\n const session = await resolveSupabaseUserSession({\n runtime,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n });\n const headers = buildHeaders(session.accessToken, spec.includeRegion, runtimeEnv.region);\n const response = await postJson({\n url,\n headers,\n body,\n timeoutMs: options.timeoutMs,\n fetchImpl: options.fetchImpl,\n });\n return stringifyJson(response, options.compactJson);\n}\n\nexport function getRemoteCommandHelp(commandKey: keyof typeof REMOTE_COMMANDS): string {\n return REMOTE_COMMANDS[commandKey].help;\n}\n"]}
@@ -4,6 +4,7 @@ import { writeJsonArtifact, writeJsonLinesArtifact, writeTextArtifact } from './
4
4
  import { CliError } from './errors.js';
5
5
  import { coerceText, deepGet, extractFlowRecord, flowDatasetFromRow, isRecord, listify, loadRowsFromFile, normalizeText, } from './flow-governance.js';
6
6
  import { invokeLlm, readLlmRuntimeEnv } from './llm.js';
7
+ import { getRuntimeRuleset, isRuntimeRuleBlocker, resolveRuntimeRuleId, } from './runtime-rulesets.js';
7
8
  const UUID_RE = /[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[0-9a-fA-F]{12}/u;
8
9
  function walkStrings(node) {
9
10
  if (typeof node === 'string') {
@@ -213,11 +214,14 @@ function computeSimilarity(left, right) {
213
214
  return intersection / Math.max(leftTokens.size, rightTokens.size);
214
215
  }
215
216
  function createRuleFinding(flowUuidValue, baseVersion, severity, ruleId, message, options) {
217
+ const ruleset = getRuntimeRuleset('flow-authoring/strict');
216
218
  return {
217
219
  flow_uuid: flowUuidValue,
218
220
  base_version: baseVersion,
219
221
  severity,
220
222
  rule_id: ruleId,
223
+ ruleset_id: ruleset.id,
224
+ methodology_rule_id: resolveRuntimeRuleId(ruleset.id, ruleId),
221
225
  message,
222
226
  fixability: options?.fixability ?? 'manual',
223
227
  source: 'rule',
@@ -226,6 +230,30 @@ function createRuleFinding(flowUuidValue, baseVersion, severity, ruleId, message
226
230
  ...(options?.action ? { action: options.action } : {}),
227
231
  };
228
232
  }
233
+ function flowRulesetGate(findings) {
234
+ const ruleset = getRuntimeRuleset('flow-authoring/strict');
235
+ const blockers = findings.filter((finding) => finding.severity === 'error' ||
236
+ finding.severity === 'blocker' ||
237
+ isRuntimeRuleBlocker(finding.methodology_rule_id));
238
+ const status = blockers.length > 0 ? 'blocked' : findings.length > 0 ? 'needs_review' : 'passed';
239
+ return {
240
+ status,
241
+ ruleset_id: ruleset.id,
242
+ ruleset_version: ruleset.version,
243
+ ruleset_source_version: ruleset.source_version,
244
+ ruleset_rule_ids: ruleset.rule_ids,
245
+ counts: {
246
+ findings: findings.length,
247
+ blockers: blockers.length,
248
+ },
249
+ blockers,
250
+ next_action: status === 'blocked'
251
+ ? 'fix_blockers'
252
+ : status === 'needs_review'
253
+ ? 'review_findings'
254
+ : 'continue',
255
+ };
256
+ }
229
257
  function applyMethodologyChecks(flow, flowUuidValue, baseVersion, ruleSource) {
230
258
  const findings = [];
231
259
  const allowedTypes = new Set(['elementary flow', 'product flow', 'waste flow']);
@@ -679,6 +707,17 @@ function ruleCounts(rows) {
679
707
  });
680
708
  return Object.fromEntries(Object.entries(counts).sort(([left], [right]) => left.localeCompare(right)));
681
709
  }
710
+ function methodologyRuleCounts(rows) {
711
+ const counts = {};
712
+ rows.forEach((row) => {
713
+ const key = coerceText(row.methodology_rule_id);
714
+ if (!key) {
715
+ return;
716
+ }
717
+ counts[key] = (counts[key] ?? 0) + 1;
718
+ });
719
+ return Object.fromEntries(Object.entries(counts).sort(([left], [right]) => left.localeCompare(right)));
720
+ }
682
721
  function readJsonObject(filePath) {
683
722
  try {
684
723
  const parsed = JSON.parse(readFileSync(filePath, 'utf8'));
@@ -982,12 +1021,14 @@ export async function runFlowReview(options) {
982
1021
  batch_results: llmRun.batch_results,
983
1022
  };
984
1023
  const mergedFindings = [...ruleFindings, ...llmRun.llmFindings];
1024
+ const rulesetGate = flowRulesetGate(ruleFindings);
985
1025
  const savedSummaries = flowSummaries.map((summary) => stripInternalSummaryFields(summary));
986
1026
  const now = options.now ?? (() => new Date());
987
1027
  const reviewInputSummaryPath = path.join(outDir, 'review-input-summary.json');
988
1028
  const ruleFindingsPath = path.join(outDir, 'rule_findings.jsonl');
989
1029
  const llmFindingsPath = path.join(outDir, 'llm_findings.jsonl');
990
1030
  const findingsPath = path.join(outDir, 'findings.jsonl');
1031
+ const rulesetGatePath = path.join(outDir, 'flow-review-ruleset-gate.json');
991
1032
  const flowSummariesPath = path.join(outDir, 'flow_summaries.jsonl');
992
1033
  const similarityPairsPath = path.join(outDir, 'similarity_pairs.jsonl');
993
1034
  const summaryPath = path.join(outDir, 'flow_review_summary.json');
@@ -999,6 +1040,7 @@ export async function runFlowReview(options) {
999
1040
  writeJsonLinesArtifact(ruleFindingsPath, ruleFindings);
1000
1041
  writeJsonLinesArtifact(llmFindingsPath, llmRun.llmFindings);
1001
1042
  writeJsonLinesArtifact(findingsPath, mergedFindings);
1043
+ writeJsonArtifact(rulesetGatePath, rulesetGate);
1002
1044
  writeJsonLinesArtifact(flowSummariesPath, savedSummaries);
1003
1045
  writeJsonLinesArtifact(similarityPairsPath, similarity.pairs);
1004
1046
  const report = {
@@ -1010,6 +1052,10 @@ export async function runFlowReview(options) {
1010
1052
  input_mode: resolvedInput.inputMode,
1011
1053
  effective_flows_dir: resolvedInput.effectiveFlowsDir,
1012
1054
  logic_version: options.logicVersion?.trim() || 'flow-v1.0-cli',
1055
+ ruleset_id: rulesetGate.ruleset_id,
1056
+ ruleset_version: rulesetGate.ruleset_version,
1057
+ ruleset_source_version: rulesetGate.ruleset_source_version,
1058
+ ruleset_rule_ids: rulesetGate.ruleset_rule_ids,
1013
1059
  flow_count: flowSummaries.length,
1014
1060
  similarity_threshold: options.similarityThreshold ?? 0.92,
1015
1061
  methodology_rule_source: methodologyRuleSource,
@@ -1018,8 +1064,11 @@ export async function runFlowReview(options) {
1018
1064
  rule_finding_count: ruleFindings.length,
1019
1065
  llm_finding_count: llmRun.llmFindings.length,
1020
1066
  finding_count: mergedFindings.length,
1067
+ blocker_count: rulesetGate.counts.blockers,
1021
1068
  severity_counts: severityCounts(mergedFindings),
1022
1069
  rule_counts: ruleCounts(ruleFindings),
1070
+ methodology_rule_counts: methodologyRuleCounts(ruleFindings),
1071
+ ruleset_gate: rulesetGate,
1023
1072
  llm: llmResult,
1024
1073
  files: {
1025
1074
  review_input_summary: reviewInputSummaryPath,
@@ -1027,6 +1076,7 @@ export async function runFlowReview(options) {
1027
1076
  rule_findings: ruleFindingsPath,
1028
1077
  llm_findings: llmFindingsPath,
1029
1078
  findings: findingsPath,
1079
+ ruleset_gate: rulesetGatePath,
1030
1080
  flow_summaries: flowSummariesPath,
1031
1081
  similarity_pairs: similarityPairsPath,
1032
1082
  summary: summaryPath,
@@ -1044,11 +1094,17 @@ export async function runFlowReview(options) {
1044
1094
  reference_context_mode: report.reference_context_mode,
1045
1095
  similarity_threshold: report.similarity_threshold,
1046
1096
  methodology_rule_source: report.methodology_rule_source,
1097
+ ruleset_id: report.ruleset_id,
1098
+ ruleset_version: report.ruleset_version,
1099
+ ruleset_source_version: report.ruleset_source_version,
1100
+ ruleset_rule_ids: report.ruleset_rule_ids,
1101
+ ruleset_gate: report.ruleset_gate,
1047
1102
  rule_finding_count: report.rule_finding_count,
1048
1103
  llm_finding_count: report.llm_finding_count,
1049
1104
  finding_count: report.finding_count,
1050
1105
  severity_counts: report.severity_counts,
1051
1106
  rule_counts: report.rule_counts,
1107
+ methodology_rule_counts: report.methodology_rule_counts,
1052
1108
  llm: report.llm,
1053
1109
  });
1054
1110
  writeTextArtifact(reviewZhPath, renderZhReview({
@@ -1103,6 +1159,8 @@ export const __testInternals = {
1103
1159
  renderZhReview,
1104
1160
  resolveReviewInput,
1105
1161
  runOptionalLlmReview,
1162
+ flowRulesetGate,
1163
+ methodologyRuleCounts,
1106
1164
  ruleCounts,
1107
1165
  severityCounts,
1108
1166
  walkStrings,