@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"identity-preflight.js","sourceRoot":"","sources":["../../../src/lib/identity-preflight.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync, readdirSync, statSync } from 'node:fs';\nimport path from 'node:path';\nimport * as tidasSdk from '@tiangong-lca/tidas-sdk';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { readRuntimeEnv } from './env.js';\nimport { CliError } from './errors.js';\nimport type { FetchLike } from './http.js';\nimport { postJson } from './http.js';\nimport {\n datasetIdentity,\n detectDatasetKind,\n isRecord,\n readDatasetRowsInput,\n unwrapDatasetPayload,\n type DatasetKind,\n type JsonObject,\n} from './dataset-local.js';\nimport { readJsonInput } from './io.js';\nimport { deriveSupabaseFunctionsBaseUrl, requireSupabaseRestRuntime } from './supabase-client.js';\nimport { resolveSupabaseUserSession } from './supabase-session.js';\nimport {\n normalizeIssuePath,\n type SafeParseSchema,\n type SdkValidationFactory,\n validateSchemaWithDeepFallback,\n} from './tidas-sdk-validation.js';\n\ntype IdentityPreflightKind = 'process' | 'flow';\n\nexport type IdentityPreflightDecision =\n | 'reuse'\n | 'update_same_row'\n | 'version_bump'\n | 'create_new'\n | 'block_duplicate'\n | 'manual_review';\n\nexport type IdentityPreflightStatus = 'passed' | 'blocked' | 'needs_review';\n\nexport type IdentityPreflightFinding = {\n code: string;\n severity: 'info' | 'warning' | 'blocker';\n message: string;\n candidate_index?: number;\n};\n\ntype ValidationSummary = {\n status: 'passed' | 'failed' | 'not_applicable';\n validator: string | null;\n issue_count: number;\n issues: Array<{\n path: string;\n message: string;\n code: string;\n }>;\n};\n\ntype IdentityProfile = {\n id: string | null;\n version: string | null;\n state_code: number | null;\n names: string[];\n normalized_names: string[];\n identity_key: string;\n exchange_signature: string[];\n fields: Record<string, string | null | string[]>;\n};\n\nexport type IdentityPreflightCandidateReport = {\n index: number;\n id: string | null;\n version: string | null;\n state_code: number | null;\n identity_key: string;\n match_score: number;\n match_reasons: string[];\n decision_hint: IdentityPreflightDecision | null;\n};\n\nexport type IdentityPreflightCandidateSourceReport = {\n path: string;\n kind: 'embedded_request' | 'file' | 'directory' | 'remote_search';\n row_count: number;\n scanned_files: string[];\n endpoint?: string;\n query?: string;\n filter?: JsonObject | null;\n};\n\nexport type IdentityPreflightReport = {\n schema_version: 1;\n generated_at_utc: string;\n kind: IdentityPreflightKind;\n status: IdentityPreflightStatus;\n decision: IdentityPreflightDecision;\n confidence: 'high' | 'medium' | 'low';\n input_path: string;\n out_dir: string | null;\n target: {\n id: string | null;\n version: string | null;\n identity_key: string;\n exchange_signature: string[];\n schema_validation: ValidationSummary;\n };\n candidates: IdentityPreflightCandidateReport[];\n candidate_sources: IdentityPreflightCandidateSourceReport[];\n findings: IdentityPreflightFinding[];\n blockers: IdentityPreflightFinding[];\n next_action:\n | 'reuse_existing'\n | 'repair_existing_draft'\n | 'prepare_version_update'\n | 'materialize_new_payload'\n | 'stop_duplicate'\n | 'queue_manual_review';\n files: {\n identity_decision: string | null;\n candidates: string | null;\n candidate_sources: string | null;\n };\n};\n\nexport type RunIdentityPreflightOptions = {\n inputPath: string;\n outDir?: string | null;\n rawInput?: unknown;\n candidateInputPaths?: string[];\n remoteCandidateSearch?: boolean;\n remoteQuery?: string | null;\n remoteFilter?: JsonObject | null;\n remoteLimit?: number | null;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n now?: Date;\n schemas?: Partial<Record<IdentityPreflightKind, SafeParseSchema>>;\n};\n\nexport type RunProcessIdentityPreflightOptions = RunIdentityPreflightOptions;\nexport type RunFlowIdentityPreflightOptions = RunIdentityPreflightOptions;\nexport type ProcessIdentityPreflightReport = IdentityPreflightReport & { kind: 'process' };\nexport type FlowIdentityPreflightReport = IdentityPreflightReport & { kind: 'flow' };\n\ntype NormalizedInput = {\n target: JsonObject;\n candidates: JsonObject[];\n candidateInputPaths: string[];\n remoteCandidateSearch: RemoteCandidateSearchConfig;\n};\n\ntype CandidateEvaluation = {\n report: IdentityPreflightCandidateReport;\n findings: IdentityPreflightFinding[];\n};\n\ntype RemoteCandidateSearchConfig = {\n enabled: boolean;\n query: string | null;\n filter: JsonObject | null;\n limit: number | null;\n};\n\ntype RemoteCandidateRead = {\n rows: JsonObject[];\n source: IdentityPreflightCandidateSourceReport;\n};\n\nconst SCHEMA_EXPORTS: Record<IdentityPreflightKind, keyof typeof tidasSdk> = {\n flow: 'FlowSchema' as keyof typeof tidasSdk,\n process: 'ProcessSchema' as keyof typeof tidasSdk,\n};\n\nconst ENTITY_FACTORY_EXPORTS: Record<IdentityPreflightKind, keyof typeof tidasSdk> = {\n flow: 'createFlow' as keyof typeof tidasSdk,\n process: 'createProcess' as keyof typeof tidasSdk,\n};\n\nfunction requiredInputPath(inputPath: string): string {\n const normalized = inputPath.trim();\n if (!normalized) {\n throw new CliError('Missing required --input value.', {\n code: 'IDENTITY_PREFLIGHT_INPUT_REQUIRED',\n exitCode: 2,\n });\n }\n return normalized;\n}\n\nfunction normalizeToRecord(value: unknown, label: string): JsonObject {\n if (!isRecord(value)) {\n throw new CliError(`${label} must be a JSON object.`, {\n code: 'IDENTITY_PREFLIGHT_INVALID_INPUT',\n exitCode: 2,\n });\n }\n return value;\n}\n\nfunction normalizeRows(value: unknown, label: string): JsonObject[] {\n if (value === undefined || value === null) {\n return [];\n }\n const rows = isRecord(value) && Array.isArray(value.rows) ? value.rows : value;\n const normalizedRows = Array.isArray(rows) ? rows : [rows];\n return normalizedRows.map((row, index) => normalizeToRecord(row, `${label}[${index}]`));\n}\n\nfunction normalizePathList(value: unknown, label: string): string[] {\n if (value === undefined || value === null) {\n return [];\n }\n const values = Array.isArray(value) ? value : [value];\n return values.flatMap((entry, index) => {\n if (typeof entry !== 'string') {\n throw new CliError(`${label}[${index}] must be a string path.`, {\n code: 'IDENTITY_PREFLIGHT_INVALID_CANDIDATE_INPUT',\n exitCode: 2,\n });\n }\n return entry\n .split(',')\n .map((pathValue) => pathValue.trim())\n .filter(Boolean);\n });\n}\n\nfunction normalizePositiveInteger(value: unknown, label: string): number | null {\n if (value === undefined || value === null || value === '') {\n return null;\n }\n const parsed = typeof value === 'number' ? value : Number.parseInt(String(value), 10);\n if (!Number.isInteger(parsed) || parsed <= 0) {\n throw new CliError(`Expected ${label} to be a positive integer.`, {\n code: 'IDENTITY_PREFLIGHT_INVALID_REMOTE_LIMIT',\n exitCode: 2,\n });\n }\n return parsed;\n}\n\nfunction normalizeRemoteCandidateSearch(value: unknown): RemoteCandidateSearchConfig {\n if (value === undefined || value === null) {\n return { enabled: false, query: null, filter: null, limit: null };\n }\n if (typeof value === 'boolean') {\n return { enabled: value, query: null, filter: null, limit: null };\n }\n if (!isRecord(value)) {\n throw new CliError('remote_candidate_search must be a boolean or object.', {\n code: 'IDENTITY_PREFLIGHT_INVALID_REMOTE_SEARCH',\n exitCode: 2,\n });\n }\n\n const enabled = value.enabled === undefined ? true : Boolean(value.enabled);\n const query = textValue(value.query) ?? textValue(value.search_query);\n const filter =\n value.filter === undefined || value.filter === null\n ? null\n : normalizeToRecord(value.filter, 'remote_candidate_search.filter');\n return {\n enabled,\n query,\n filter,\n limit: normalizePositiveInteger(value.limit, 'remote_candidate_search.limit'),\n };\n}\n\nfunction pickKindTarget(input: JsonObject, kind: IdentityPreflightKind): unknown {\n if (input.target !== undefined) {\n return input.target;\n }\n if (input.candidate !== undefined) {\n return input.candidate;\n }\n if (kind === 'process' && input.process !== undefined) {\n return input.process;\n }\n if (kind === 'flow' && input.flow !== undefined) {\n return input.flow;\n }\n return input;\n}\n\nfunction normalizePreflightInput(rawInput: unknown, kind: IdentityPreflightKind): NormalizedInput {\n const input = normalizeToRecord(rawInput, 'identity preflight input');\n const target = normalizeToRecord(pickKindTarget(input, kind), 'identity preflight target');\n const candidateGroups = [\n ...normalizeRows(input.candidates, 'candidates'),\n ...normalizeRows(input.existing, 'existing'),\n ...normalizeRows(input.existing_rows, 'existing_rows'),\n ...normalizeRows(input.rows, 'rows'),\n ];\n\n return {\n target,\n candidates: candidateGroups,\n candidateInputPaths: [\n ...normalizePathList(input.candidate_input, 'candidate_input'),\n ...normalizePathList(input.candidate_inputs, 'candidate_inputs'),\n ...normalizePathList(input.candidateInputPaths, 'candidateInputPaths'),\n ...normalizePathList(input.candidate_files, 'candidate_files'),\n ...normalizePathList(input.candidateFiles, 'candidateFiles'),\n ],\n remoteCandidateSearch: normalizeRemoteCandidateSearch(\n input.remote_candidate_search ?? input.remoteCandidateSearch ?? input.remote_candidates,\n ),\n };\n}\n\ninterface CandidateInputStats {\n isFile(): boolean;\n isDirectory(): boolean;\n}\n\nfunction isCandidateDatasetFile(filePath: string): boolean {\n return /\\.(?:json|jsonl)$/iu.test(path.basename(filePath));\n}\n\nfunction throwUnsupportedCandidateInput(resolved: string): never {\n throw new CliError(`Candidate input must be a JSON/JSONL file or directory: ${resolved}`, {\n code: 'IDENTITY_PREFLIGHT_CANDIDATE_INPUT_UNSUPPORTED',\n exitCode: 2,\n });\n}\n\nfunction collectCandidateFilesFromStats(resolved: string, stats: CandidateInputStats): string[] {\n if (stats.isFile()) {\n if (!isCandidateDatasetFile(resolved)) {\n throwUnsupportedCandidateInput(resolved);\n }\n return [resolved];\n }\n if (!stats.isDirectory()) {\n throwUnsupportedCandidateInput(resolved);\n }\n\n const files: string[] = [];\n const visit = (directory: string): void => {\n for (const entry of readdirSync(directory, { withFileTypes: true })) {\n if (entry.name.startsWith('.')) {\n continue;\n }\n const entryPath = path.join(directory, entry.name);\n if (entry.isDirectory()) {\n visit(entryPath);\n } else if (entry.isFile() && isCandidateDatasetFile(entry.name)) {\n files.push(entryPath);\n }\n }\n };\n visit(resolved);\n return files.sort((left, right) => left.localeCompare(right));\n}\n\nfunction collectCandidateFiles(candidatePath: string): string[] {\n const resolved = path.resolve(candidatePath);\n if (!existsSync(resolved)) {\n throw new CliError(`Candidate input not found: ${resolved}`, {\n code: 'IDENTITY_PREFLIGHT_CANDIDATE_INPUT_NOT_FOUND',\n exitCode: 2,\n });\n }\n\n const stats = statSync(resolved);\n return collectCandidateFilesFromStats(resolved, stats);\n}\n\nfunction readCandidateSource(candidatePath: string): {\n rows: JsonObject[];\n source: IdentityPreflightCandidateSourceReport;\n} {\n const resolved = path.resolve(candidatePath);\n const files = collectCandidateFiles(resolved);\n const rows = files.flatMap((file) => readDatasetRowsInput(file));\n const kind = statSync(resolved).isDirectory() ? 'directory' : 'file';\n return {\n rows,\n source: {\n path: resolved,\n kind,\n row_count: rows.length,\n scanned_files: files,\n },\n };\n}\n\nfunction mergeRemoteCandidateSearchConfig(\n inputConfig: RemoteCandidateSearchConfig,\n options: RunIdentityPreflightOptions,\n): RemoteCandidateSearchConfig {\n return {\n enabled: options.remoteCandidateSearch ?? inputConfig.enabled,\n query: options.remoteQuery?.trim() || inputConfig.query,\n filter: options.remoteFilter ?? inputConfig.filter,\n limit: options.remoteLimit ?? inputConfig.limit,\n };\n}\n\nfunction remoteSearchEndpoint(kind: IdentityPreflightKind): string {\n return kind === 'process' ? 'process_hybrid_search' : 'flow_hybrid_search';\n}\n\nfunction defaultRemoteQuery(profile: IdentityProfile): string | null {\n return (\n profile.names[0] ??\n Object.values(profile.fields)\n .flat()\n .find((value): value is string => typeof value === 'string' && value.trim().length > 0) ??\n (profile.identity_key ? profile.identity_key : null)\n );\n}\n\nfunction remoteSearchFilter(\n kind: IdentityPreflightKind,\n profile: IdentityProfile,\n explicitFilter: JsonObject | null,\n): JsonObject | null {\n const filter: JsonObject = explicitFilter ? { ...explicitFilter } : {};\n if (kind === 'flow' && filter.flowType === undefined) {\n const flowType = Array.isArray(profile.fields.type_of_dataset)\n ? profile.fields.type_of_dataset[0]\n : profile.fields.type_of_dataset;\n if (flowType) {\n filter.flowType = flowType;\n }\n }\n return Object.keys(filter).length > 0 ? filter : null;\n}\n\nfunction rowsFromRemoteSearchResponse(value: unknown): JsonObject[] {\n const rows = isRecord(value)\n ? (value.data ?? value.rows ?? value.results ?? value.candidates ?? [])\n : value;\n if (rows === undefined || rows === null) {\n return [];\n }\n return normalizeRows(rows, 'remote search candidates');\n}\n\nasync function readRemoteCandidateSource(\n kind: IdentityPreflightKind,\n targetProfile: IdentityProfile,\n config: RemoteCandidateSearchConfig,\n options: RunIdentityPreflightOptions,\n): Promise<RemoteCandidateRead | null> {\n if (!config.enabled) {\n return null;\n }\n\n const query = config.query ?? defaultRemoteQuery(targetProfile);\n if (!query) {\n throw new CliError('Remote identity candidate search requires a query.', {\n code: 'IDENTITY_PREFLIGHT_REMOTE_QUERY_REQUIRED',\n exitCode: 2,\n });\n }\n\n const runtimeEnv = readRuntimeEnv(options.env ?? process.env);\n const runtime = requireSupabaseRestRuntime(options.env ?? process.env);\n const fetchImpl = options.fetchImpl ?? (fetch as FetchLike);\n const timeoutMs = options.timeoutMs ?? 10_000;\n const endpoint = remoteSearchEndpoint(kind);\n const url = `${deriveSupabaseFunctionsBaseUrl(runtime.apiBaseUrl)}/${endpoint}`;\n const session = await resolveSupabaseUserSession({\n runtime,\n fetchImpl,\n timeoutMs,\n now: options.now,\n });\n const filter = remoteSearchFilter(kind, targetProfile, config.filter);\n const body: JsonObject = {\n query,\n ...(filter ? { filter } : {}),\n ...(config.limit ? { limit: config.limit } : {}),\n };\n const headers: Record<string, string> = {\n Authorization: `Bearer ${session.accessToken}`,\n 'Content-Type': 'application/json',\n };\n if (runtimeEnv.region) {\n headers['x-region'] = runtimeEnv.region;\n }\n\n const response = await postJson({\n url,\n headers,\n body,\n timeoutMs,\n fetchImpl,\n });\n const rows = rowsFromRemoteSearchResponse(response);\n const limitedRows = config.limit ? rows.slice(0, config.limit) : rows;\n return {\n rows: limitedRows,\n source: {\n path: url,\n kind: 'remote_search',\n row_count: limitedRows.length,\n scanned_files: [],\n endpoint,\n query,\n filter,\n },\n };\n}\n\nfunction schemaForKind(\n kind: IdentityPreflightKind,\n schemas: Partial<Record<IdentityPreflightKind, SafeParseSchema>> | undefined,\n): { validator: string; schema: SafeParseSchema; createEntity: SdkValidationFactory | null } {\n if (schemas?.[kind]) {\n return {\n validator: 'injected',\n schema: schemas[kind],\n createEntity: null,\n };\n }\n\n const exportName = SCHEMA_EXPORTS[kind];\n const candidate = (tidasSdk as Record<string, unknown>)[exportName];\n if (\n !candidate ||\n typeof candidate !== 'object' ||\n typeof (candidate as SafeParseSchema).safeParse !== 'function'\n ) {\n throw new CliError(`${String(exportName)} is unavailable in @tiangong-lca/tidas-sdk.`, {\n code: 'IDENTITY_PREFLIGHT_SCHEMA_UNAVAILABLE',\n exitCode: 2,\n details: { kind },\n });\n }\n\n const factoryName = ENTITY_FACTORY_EXPORTS[kind];\n const createEntity = (tidasSdk as Record<string, unknown>)[factoryName];\n return {\n validator: `@tiangong-lca/tidas-sdk/${String(exportName)}`,\n schema: candidate as SafeParseSchema,\n createEntity:\n typeof createEntity === 'function' ? (createEntity as SdkValidationFactory) : null,\n };\n}\n\nfunction validateTargetSchema(\n target: JsonObject,\n kind: IdentityPreflightKind,\n schemas: Partial<Record<IdentityPreflightKind, SafeParseSchema>> | undefined,\n): ValidationSummary {\n const detectedKind = detectDatasetKind(target);\n if (detectedKind && detectedKind !== kind) {\n return {\n status: 'failed',\n validator: null,\n issue_count: 1,\n issues: [\n {\n path: '<root>',\n message: `Expected ${kind} target but detected ${detectedKind}.`,\n code: 'dataset_kind_mismatch',\n },\n ],\n };\n }\n\n if (!detectedKind) {\n return {\n status: 'not_applicable',\n validator: null,\n issue_count: 0,\n issues: [],\n };\n }\n\n const { validator, schema, createEntity } = schemaForKind(kind, schemas);\n const payload = unwrapDatasetPayload(target);\n const outcome = validateSchemaWithDeepFallback(schema, payload, createEntity);\n if (outcome.success) {\n return {\n status: 'passed',\n validator,\n issue_count: 0,\n issues: [],\n };\n }\n\n return {\n status: 'failed',\n validator,\n issue_count: outcome.issues.length,\n issues: outcome.issues.map((issue) => ({\n path: normalizeIssuePath(issue.path),\n message: issue.message ?? 'Validation failed',\n code: issue.code ?? 'custom',\n })),\n };\n}\n\nfunction normalizeText(value: string): string {\n return value\n .normalize('NFKC')\n .trim()\n .toLowerCase()\n .replace(/[^\\p{Letter}\\p{Number}]+/gu, ' ')\n .replace(/\\s+/gu, ' ')\n .trim();\n}\n\nfunction normalizeKey(key: string): string {\n return key\n .split(':')\n .pop()!\n .replace(/[^a-zA-Z0-9]+/gu, '')\n .toLowerCase();\n}\n\nfunction textValue(value: unknown): string | null {\n if (typeof value === 'string') {\n const trimmed = value.trim();\n return trimmed || null;\n }\n if (typeof value === 'number' && Number.isFinite(value)) {\n return String(value);\n }\n return null;\n}\n\nfunction collectText(value: unknown, output: string[] = []): string[] {\n const direct = textValue(value);\n if (direct) {\n output.push(direct);\n return output;\n }\n if (Array.isArray(value)) {\n for (const entry of value) {\n collectText(entry, output);\n }\n return output;\n }\n if (isRecord(value)) {\n if (textValue(value['#text'])) {\n output.push(textValue(value['#text']) as string);\n }\n for (const [key, entry] of Object.entries(value)) {\n if (key === '#text') {\n continue;\n }\n collectText(entry, output);\n }\n }\n return output;\n}\n\nfunction collectValuesByKey(\n value: unknown,\n wantedKeys: Set<string>,\n output: unknown[] = [],\n): unknown[] {\n if (Array.isArray(value)) {\n for (const entry of value) {\n collectValuesByKey(entry, wantedKeys, output);\n }\n return output;\n }\n if (!isRecord(value)) {\n return output;\n }\n for (const [key, entry] of Object.entries(value)) {\n if (wantedKeys.has(normalizeKey(key))) {\n output.push(entry);\n }\n collectValuesByKey(entry, wantedKeys, output);\n }\n return output;\n}\n\nfunction uniqueTexts(values: unknown[]): string[] {\n const normalized = new Map<string, string>();\n for (const value of values) {\n for (const text of collectText(value)) {\n const key = normalizeText(text);\n if (key && !normalized.has(key)) {\n normalized.set(key, text.trim());\n }\n }\n }\n return [...normalized.values()].sort((a, b) => normalizeText(a).localeCompare(normalizeText(b)));\n}\n\nfunction firstUniqueText(...values: unknown[]): string | null {\n return uniqueTexts(values)[0] ?? null;\n}\n\nfunction fieldFromKeys(row: JsonObject, payload: JsonObject, keys: string[]): string | null {\n const wanted = new Set(keys.map(normalizeKey));\n return firstUniqueText(\n ...collectValuesByKey(row, wanted),\n ...collectValuesByKey(payload, wanted),\n );\n}\n\nfunction textListFromKeys(row: JsonObject, payload: JsonObject, keys: string[]): string[] {\n const wanted = new Set(keys.map(normalizeKey));\n return uniqueTexts([...collectValuesByKey(row, wanted), ...collectValuesByKey(payload, wanted)]);\n}\n\nfunction normalizedList(values: string[]): string[] {\n return [...new Set(values.map(normalizeText).filter(Boolean))].sort();\n}\n\nfunction numberOrNull(value: unknown): number | null {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return value;\n }\n if (typeof value === 'string' && value.trim()) {\n const parsed = Number.parseInt(value.trim(), 10);\n return Number.isInteger(parsed) ? parsed : null;\n }\n return null;\n}\n\nfunction collectExchangeLikeRecords(value: unknown, output: JsonObject[] = []): JsonObject[] {\n if (Array.isArray(value)) {\n for (const entry of value) {\n collectExchangeLikeRecords(entry, output);\n }\n return output;\n }\n if (!isRecord(value)) {\n return output;\n }\n\n const keys = new Set(Object.keys(value).map(normalizeKey));\n if (\n keys.has('referencetoflowdataset') ||\n keys.has('flowid') ||\n keys.has('flowuuid') ||\n keys.has('flow') ||\n keys.has('exchangedirection')\n ) {\n output.push(value);\n }\n\n for (const entry of Object.values(value)) {\n collectExchangeLikeRecords(entry, output);\n }\n return output;\n}\n\nfunction exchangeRecordSignature(record: JsonObject): string | null {\n const flowId = fieldFromKeys(record, record, [\n '@refObjectId',\n 'refObjectId',\n 'flow_id',\n 'flowId',\n 'flow_uuid',\n 'flowUuid',\n 'referenceToFlowDataSet',\n ]);\n const direction = fieldFromKeys(record, record, [\n 'exchangeDirection',\n 'direction',\n 'inputGroup',\n 'outputGroup',\n ]);\n const amount = fieldFromKeys(record, record, [\n 'meanAmount',\n 'mean_amount',\n 'resultingAmount',\n 'resulting_amount',\n 'amount',\n 'meanValue',\n ]);\n\n const normalizedFlowId = flowId ? normalizeText(flowId) : '';\n if (!normalizedFlowId) {\n return null;\n }\n return [normalizedFlowId, normalizeText(direction ?? ''), normalizeText(amount ?? '')].join(':');\n}\n\nfunction processExchangeSignature(row: JsonObject, payload: JsonObject): string[] {\n return [\n ...new Set(\n [...collectExchangeLikeRecords(row), ...collectExchangeLikeRecords(payload)]\n .map(exchangeRecordSignature)\n .filter((entry): entry is string => Boolean(entry)),\n ),\n ].sort();\n}\n\nfunction profileDatasetIdentity(\n row: JsonObject,\n payload: JsonObject,\n kind: IdentityPreflightKind,\n): { id: string | null; version: string | null } {\n const detectedKind = detectDatasetKind(row);\n const identity = datasetIdentity(\n row,\n payload,\n detectedKind === kind ? (kind as DatasetKind) : null,\n );\n return {\n id: firstUniqueText(row.id, row.process_id, row.flow_id, row.uuid, identity.id) ?? identity.id,\n version:\n firstUniqueText(row.version, row.dataset_version, identity.version) ?? identity.version,\n };\n}\n\nfunction processProfile(row: JsonObject): IdentityProfile {\n const payload = unwrapDatasetPayload(row);\n const identity = profileDatasetIdentity(row, payload, 'process');\n const names = textListFromKeys(row, payload, [\n 'name',\n 'baseName',\n 'shortDescription',\n 'name_en',\n 'name_zh',\n ]);\n const referenceFlowIds = textListFromKeys(row, payload, [\n 'reference_flow_id',\n 'referenceFlowId',\n 'reference_product_flow',\n 'referenceProductFlow',\n 'referenceToReferenceFlow',\n 'referenceToFlowDataSet',\n '@refObjectId',\n 'refObjectId',\n ]);\n const operation = fieldFromKeys(row, payload, ['operation', 'process_operation']);\n const quantitativeReference = fieldFromKeys(row, payload, [\n 'quantitative_reference',\n 'quantitativeReference',\n 'qref',\n 'referenceToReferenceFlow',\n ]);\n const geography = fieldFromKeys(row, payload, [\n 'geography',\n 'location',\n 'locationOfOperationSupplyOrProduction',\n ]);\n const time = fieldFromKeys(row, payload, [\n 'time',\n 'reference_year',\n 'referenceYear',\n 'timePeriod',\n ]);\n const technologyRoute = fieldFromKeys(row, payload, [\n 'technology_route',\n 'technologyRoute',\n 'technology',\n 'treatmentStandardsRoutes',\n ]);\n const systemBoundary = fieldFromKeys(row, payload, [\n 'system_boundary',\n 'systemBoundary',\n 'boundary',\n ]);\n const providerRole = fieldFromKeys(row, payload, ['provider_role', 'providerRole']);\n const exchangeSignature = processExchangeSignature(row, payload);\n const keyParts = [\n ...normalizedList(names).slice(0, 4),\n ...normalizedList(referenceFlowIds).slice(0, 4),\n normalizeText(operation ?? ''),\n normalizeText(quantitativeReference ?? ''),\n normalizeText(geography ?? ''),\n normalizeText(time ?? ''),\n normalizeText(technologyRoute ?? ''),\n normalizeText(systemBoundary ?? ''),\n normalizeText(providerRole ?? ''),\n exchangeSignature.join(','),\n ].filter(Boolean);\n\n return {\n id: identity.id,\n version: identity.version,\n state_code: numberOrNull(row.state_code ?? row.stateCode),\n names,\n normalized_names: normalizedList(names),\n identity_key: keyParts.join('|'),\n exchange_signature: exchangeSignature,\n fields: {\n reference_flow_ids: referenceFlowIds,\n operation,\n quantitative_reference: quantitativeReference,\n geography,\n time,\n technology_route: technologyRoute,\n system_boundary: systemBoundary,\n provider_role: providerRole,\n },\n };\n}\n\nfunction flowProfile(row: JsonObject): IdentityProfile {\n const payload = unwrapDatasetPayload(row);\n const identity = profileDatasetIdentity(row, payload, 'flow');\n const names = textListFromKeys(row, payload, [\n 'name',\n 'baseName',\n 'shortDescription',\n 'name_en',\n 'name_zh',\n 'synonyms',\n ]);\n const typeOfDataset = fieldFromKeys(row, payload, [\n 'type_of_dataset',\n 'typeOfDataSet',\n 'flow_type',\n 'flowType',\n ]);\n const cas = fieldFromKeys(row, payload, ['CASNumber', 'cas_number', 'cas']);\n const flowProperty = fieldFromKeys(row, payload, [\n 'flow_property',\n 'flowProperty',\n 'referenceToFlowPropertyDataSet',\n 'reference_property',\n 'referenceProperty',\n ]);\n const referenceUnit = fieldFromKeys(row, payload, ['reference_unit', 'referenceUnit', 'unit']);\n const categories = textListFromKeys(row, payload, ['category', 'compartment']);\n const geography = fieldFromKeys(row, payload, [\n 'geography',\n 'location',\n 'market',\n 'mixAndLocationTypes',\n ]);\n const keyParts = [\n normalizeText(typeOfDataset ?? ''),\n ...normalizedList(names).slice(0, 4),\n normalizeText(cas ?? ''),\n normalizeText(flowProperty ?? ''),\n normalizeText(referenceUnit ?? ''),\n ...normalizedList(categories).slice(0, 4),\n normalizeText(geography ?? ''),\n ].filter(Boolean);\n\n return {\n id: identity.id,\n version: identity.version,\n state_code: numberOrNull(row.state_code ?? row.stateCode),\n names,\n normalized_names: normalizedList(names),\n identity_key: keyParts.join('|'),\n exchange_signature: [],\n fields: {\n type_of_dataset: typeOfDataset,\n cas,\n flow_property: flowProperty,\n reference_unit: referenceUnit,\n categories,\n geography,\n },\n };\n}\n\nfunction profileForKind(row: JsonObject, kind: IdentityPreflightKind): IdentityProfile {\n return kind === 'process' ? processProfile(row) : flowProfile(row);\n}\n\nfunction intersects(left: string[], right: string[]): boolean {\n const rightSet = new Set(right);\n return left.some((entry) => rightSet.has(entry));\n}\n\nfunction normalizedFieldValues(value: string | null | string[]): string[] {\n return (Array.isArray(value) ? value : [value])\n .filter((entry): entry is string => typeof entry === 'string')\n .map(normalizeText)\n .filter(Boolean);\n}\n\nfunction sameNonEmptyField(\n left: string | null | string[],\n right: string | null | string[],\n): boolean {\n const leftValues = normalizedFieldValues(left);\n const rightValues = normalizedFieldValues(right);\n return leftValues.length > 0 && rightValues.length > 0 && intersects(leftValues, rightValues);\n}\n\nfunction sameExchangeSignature(left: string[], right: string[]): boolean {\n return left.length > 0 && right.length > 0 && left.join('|') === right.join('|');\n}\n\nfunction hasEquivalentFlowCore(target: IdentityProfile, candidate: IdentityProfile): boolean {\n const hasSameType = sameNonEmptyField(\n target.fields.type_of_dataset,\n candidate.fields.type_of_dataset,\n );\n const hasSameProperty = sameNonEmptyField(\n target.fields.flow_property,\n candidate.fields.flow_property,\n );\n const hasSameUnit = sameNonEmptyField(\n target.fields.reference_unit,\n candidate.fields.reference_unit,\n );\n const hasSameCas = sameNonEmptyField(target.fields.cas, candidate.fields.cas);\n const hasSameCategory = sameNonEmptyField(target.fields.categories, candidate.fields.categories);\n\n return (\n hasSameType &&\n hasSameProperty &&\n hasSameUnit &&\n intersects(target.normalized_names, candidate.normalized_names) &&\n (hasSameCas || hasSameCategory)\n );\n}\n\nfunction candidateEvaluation(\n target: IdentityProfile,\n candidate: IdentityProfile,\n kind: IdentityPreflightKind,\n index: number,\n): CandidateEvaluation {\n const matchReasons: string[] = [];\n let matchScore = 0;\n let decisionHint: IdentityPreflightDecision | null = null;\n\n if (target.id && candidate.id && target.id === candidate.id) {\n matchScore += 100;\n matchReasons.push('same_dataset_id');\n if (candidate.state_code === 0) {\n decisionHint = 'update_same_row';\n } else if (target.version && candidate.version && target.version !== candidate.version) {\n decisionHint = 'version_bump';\n } else {\n decisionHint = 'reuse';\n }\n }\n\n if (\n target.identity_key &&\n candidate.identity_key &&\n target.identity_key === candidate.identity_key\n ) {\n matchScore += 90;\n matchReasons.push('same_identity_key');\n if (!decisionHint) {\n decisionHint = 'block_duplicate';\n }\n }\n\n if (\n kind === 'process' &&\n sameExchangeSignature(target.exchange_signature, candidate.exchange_signature)\n ) {\n matchScore += 40;\n matchReasons.push('same_exchange_signature');\n if (!decisionHint) {\n decisionHint = 'manual_review';\n }\n }\n\n const hasOverlappingName = intersects(target.normalized_names, candidate.normalized_names);\n if (hasOverlappingName) {\n matchScore += 20;\n matchReasons.push('overlapping_name');\n if (!decisionHint) {\n decisionHint = 'manual_review';\n }\n }\n\n const targetReferenceFields = Object.values(target.fields)\n .flat()\n .filter((value): value is string => typeof value === 'string')\n .map(normalizeText)\n .filter(Boolean);\n const candidateReferenceFields = Object.values(candidate.fields)\n .flat()\n .filter((value): value is string => typeof value === 'string')\n .map(normalizeText)\n .filter(Boolean);\n const hasOverlappingIdentityField = intersects(targetReferenceFields, candidateReferenceFields);\n if (hasOverlappingIdentityField) {\n matchScore += 10;\n matchReasons.push('overlapping_identity_field');\n }\n\n if (\n kind === 'process' &&\n decisionHint === 'manual_review' &&\n matchReasons.includes('same_exchange_signature') &&\n hasOverlappingIdentityField\n ) {\n matchScore += 20;\n matchReasons.push('same_exchange_fingerprint');\n decisionHint = 'block_duplicate';\n }\n\n if (\n kind === 'flow' &&\n (decisionHint === null || decisionHint === 'manual_review') &&\n hasEquivalentFlowCore(target, candidate)\n ) {\n matchScore += 70;\n matchReasons.push('equivalent_flow_core_fields');\n decisionHint = 'block_duplicate';\n }\n\n const findings: IdentityPreflightFinding[] = [];\n if (decisionHint === 'block_duplicate') {\n findings.push({\n code: `${kind}_duplicate_candidate`,\n severity: 'blocker',\n message: `Candidate ${index} matches the target identity and should block new ${kind} creation.`,\n candidate_index: index,\n });\n } else if (decisionHint === 'manual_review') {\n findings.push({\n code: `${kind}_manual_review_candidate`,\n severity: 'warning',\n message: `Candidate ${index} is similar enough to require manual review before new ${kind} creation.`,\n candidate_index: index,\n });\n } else if (decisionHint) {\n findings.push({\n code: `${kind}_${decisionHint}`,\n severity: 'info',\n message: `Candidate ${index} supports decision ${decisionHint}.`,\n candidate_index: index,\n });\n }\n\n return {\n report: {\n index,\n id: candidate.id,\n version: candidate.version,\n state_code: candidate.state_code,\n identity_key: candidate.identity_key,\n match_score: matchScore,\n match_reasons: matchReasons,\n decision_hint: decisionHint,\n },\n findings,\n };\n}\n\nfunction chooseDecision(\n evaluations: CandidateEvaluation[],\n validation: ValidationSummary,\n kind: IdentityPreflightKind,\n): {\n decision: IdentityPreflightDecision;\n confidence: 'high' | 'medium' | 'low';\n findings: IdentityPreflightFinding[];\n} {\n const findings = evaluations.flatMap((evaluation) => evaluation.findings);\n if (validation.status === 'failed') {\n return {\n decision: 'manual_review',\n confidence: 'high',\n findings: [\n {\n code: `${kind}_schema_invalid`,\n severity: 'blocker',\n message: `Target ${kind} payload failed schema validation.`,\n },\n ...findings,\n ],\n };\n }\n\n const sorted = [...evaluations].sort(\n (left, right) => right.report.match_score - left.report.match_score,\n );\n const top = sorted[0]?.report;\n if (!top || top.match_score === 0) {\n return {\n decision: 'create_new',\n confidence: 'medium',\n findings: [\n {\n code: `${kind}_no_duplicate_candidate`,\n severity: 'info',\n message: `No duplicate ${kind} candidate matched the target identity.`,\n },\n ...findings,\n ],\n };\n }\n\n if (top.decision_hint === 'block_duplicate') {\n return {\n decision: 'block_duplicate',\n confidence: top.match_score >= 90 ? 'high' : 'medium',\n findings,\n };\n }\n if (\n top.decision_hint === 'reuse' ||\n top.decision_hint === 'update_same_row' ||\n top.decision_hint === 'version_bump'\n ) {\n return {\n decision: top.decision_hint,\n confidence: top.match_score >= 90 ? 'high' : 'medium',\n findings,\n };\n }\n\n return {\n decision: 'manual_review',\n confidence: top.match_score >= 60 ? 'medium' : 'low',\n findings,\n };\n}\n\nfunction statusForDecision(\n decision: IdentityPreflightDecision,\n blockers: IdentityPreflightFinding[],\n): IdentityPreflightStatus {\n if (blockers.length > 0 || decision === 'block_duplicate') {\n return 'blocked';\n }\n if (decision === 'manual_review') {\n return 'needs_review';\n }\n return 'passed';\n}\n\nfunction nextActionForDecision(\n decision: IdentityPreflightDecision,\n): IdentityPreflightReport['next_action'] {\n if (decision === 'reuse') {\n return 'reuse_existing';\n }\n if (decision === 'update_same_row') {\n return 'repair_existing_draft';\n }\n if (decision === 'version_bump') {\n return 'prepare_version_update';\n }\n if (decision === 'block_duplicate') {\n return 'stop_duplicate';\n }\n if (decision === 'manual_review') {\n return 'queue_manual_review';\n }\n return 'materialize_new_payload';\n}\n\nfunction writeArtifacts(\n report: IdentityPreflightReport,\n outDir: string | null | undefined,\n): IdentityPreflightReport['files'] {\n if (!outDir) {\n return {\n identity_decision: null,\n candidates: null,\n candidate_sources: null,\n };\n }\n\n const resolved = path.resolve(outDir);\n const files = {\n identity_decision: path.join(resolved, 'outputs', 'identity-decision.json'),\n candidates: path.join(resolved, 'outputs', 'identity-candidates.jsonl'),\n candidate_sources: path.join(resolved, 'outputs', 'identity-candidate-sources.json'),\n };\n\n writeJsonArtifact(files.identity_decision, { ...report, files });\n writeJsonLinesArtifact(files.candidates, report.candidates);\n writeJsonArtifact(files.candidate_sources, report.candidate_sources);\n return files;\n}\n\nexport async function runIdentityPreflight(\n kind: IdentityPreflightKind,\n options: RunIdentityPreflightOptions,\n): Promise<IdentityPreflightReport> {\n const inputPath = requiredInputPath(options.inputPath);\n const normalizedInput = normalizePreflightInput(\n options.rawInput ?? readJsonInput(inputPath),\n kind,\n );\n const targetProfile = profileForKind(normalizedInput.target, kind);\n const remoteCandidateSearch = mergeRemoteCandidateSearchConfig(\n normalizedInput.remoteCandidateSearch,\n options,\n );\n const candidateSourceReads = [\n ...normalizedInput.candidateInputPaths,\n ...(options.candidateInputPaths ?? []),\n ].map(readCandidateSource);\n const remoteCandidateRead = await readRemoteCandidateSource(\n kind,\n targetProfile,\n remoteCandidateSearch,\n options,\n );\n const candidateSources: IdentityPreflightCandidateSourceReport[] = [\n ...(normalizedInput.candidates.length > 0\n ? [\n {\n path: path.resolve(inputPath),\n kind: 'embedded_request' as const,\n row_count: normalizedInput.candidates.length,\n scanned_files: [],\n },\n ]\n : []),\n ...candidateSourceReads.map((entry) => entry.source),\n ...(remoteCandidateRead ? [remoteCandidateRead.source] : []),\n ];\n const candidates = [\n ...normalizedInput.candidates,\n ...candidateSourceReads.flatMap((entry) => entry.rows),\n ...(remoteCandidateRead?.rows ?? []),\n ];\n const validation = validateTargetSchema(normalizedInput.target, kind, options.schemas);\n const evaluations = candidates.map((candidate, index) =>\n candidateEvaluation(targetProfile, profileForKind(candidate, kind), kind, index),\n );\n const decision = chooseDecision(evaluations, validation, kind);\n const blockers = decision.findings.filter((finding) => finding.severity === 'blocker');\n\n const baseReport: IdentityPreflightReport = {\n schema_version: 1,\n generated_at_utc: (options.now ?? new Date()).toISOString(),\n kind,\n status: statusForDecision(decision.decision, blockers),\n decision: decision.decision,\n confidence: decision.confidence,\n input_path: path.resolve(inputPath),\n out_dir: options.outDir ? path.resolve(options.outDir) : null,\n target: {\n id: targetProfile.id,\n version: targetProfile.version,\n identity_key: targetProfile.identity_key,\n exchange_signature: targetProfile.exchange_signature,\n schema_validation: validation,\n },\n candidates: evaluations.map((evaluation) => evaluation.report),\n candidate_sources: candidateSources,\n findings: decision.findings,\n blockers,\n next_action: nextActionForDecision(decision.decision),\n files: {\n identity_decision: null,\n candidates: null,\n candidate_sources: null,\n },\n };\n\n const files = writeArtifacts(baseReport, options.outDir);\n return {\n ...baseReport,\n files,\n };\n}\n\nexport async function runProcessIdentityPreflight(\n options: RunProcessIdentityPreflightOptions,\n): Promise<ProcessIdentityPreflightReport> {\n return (await runIdentityPreflight('process', options)) as ProcessIdentityPreflightReport;\n}\n\nexport async function runFlowIdentityPreflight(\n options: RunFlowIdentityPreflightOptions,\n): Promise<FlowIdentityPreflightReport> {\n return (await runIdentityPreflight('flow', options)) as FlowIdentityPreflightReport;\n}\n\nexport const __testInternals = {\n normalizePreflightInput,\n schemaForKind,\n entityFactoryExports: ENTITY_FACTORY_EXPORTS,\n processProfile,\n flowProfile,\n candidateEvaluation,\n chooseDecision,\n collectCandidateFilesFromStats,\n readCandidateSource,\n defaultRemoteQuery,\n normalizeRemoteCandidateSearch,\n remoteSearchFilter,\n rowsFromRemoteSearchResponse,\n};\n"]}
@@ -302,7 +302,7 @@ function normalizeLocalRuns(value, requestDir) {
302
302
  });
303
303
  return normalized;
304
304
  }
305
- function resolveRunRoot(requestDir, runId, outDirOverride, requestOutDir) {
305
+ function resolveRunRoot(requestDir, outDirOverride, requestOutDir) {
306
306
  const override = nonEmptyString(outDirOverride);
307
307
  if (override) {
308
308
  return path.resolve(requestDir, override);
@@ -311,7 +311,10 @@ function resolveRunRoot(requestDir, runId, outDirOverride, requestOutDir) {
311
311
  if (requestValue) {
312
312
  return path.resolve(requestDir, requestValue);
313
313
  }
314
- return path.join(requestDir, 'artifacts', 'lifecyclemodel_auto_build', runId);
314
+ throw new CliError('Missing required lifecyclemodel auto-build run root. Provide --out-dir or request.out_dir.', {
315
+ code: 'LIFECYCLEMODEL_AUTO_BUILD_RUN_ROOT_REQUIRED',
316
+ exitCode: 2,
317
+ });
315
318
  }
316
319
  function buildLayout(runRoot, runId) {
317
320
  const collectionDir = path.dirname(runRoot);
@@ -369,7 +372,7 @@ export function normalizeLifecyclemodelAutoBuildRequest(input, options) {
369
372
  const requestDir = path.dirname(requestPath);
370
373
  const mergedManifest = deepMerge(DEFAULT_MANIFEST, request);
371
374
  if (mergedManifest.allow_remote_write === true) {
372
- throw new CliError('allow_remote_write=true is not supported by tiangong lifecyclemodel auto-build. Keep the run read-only.', {
375
+ throw new CliError('allow_remote_write=true is not supported by tiangong-lca lifecyclemodel auto-build. Keep the run read-only.', {
373
376
  code: 'LIFECYCLEMODEL_AUTO_BUILD_REMOTE_WRITE_UNSUPPORTED',
374
377
  exitCode: 2,
375
378
  });
@@ -387,7 +390,7 @@ export function normalizeLifecyclemodelAutoBuildRequest(input, options) {
387
390
  schema_version: 1,
388
391
  request_path: requestPath,
389
392
  run_id: runId,
390
- run_root: resolveRunRoot(requestDir, runId, options.outDir, request.out_dir),
393
+ run_root: resolveRunRoot(requestDir, options.outDir, request.out_dir),
391
394
  manifest: mergedManifest,
392
395
  local_runs: normalizeLocalRuns(mergedManifest.local_runs, requestDir),
393
396
  };
@@ -505,12 +508,12 @@ function buildPlan(normalized, layout, now) {
505
508
  {
506
509
  name: 'validate',
507
510
  mode: 'deferred',
508
- description: 'Deferred to tiangong lifecyclemodel validate-build.',
511
+ description: 'Deferred to tiangong-lca lifecyclemodel validate-build.',
509
512
  },
510
513
  {
511
514
  name: 'publish',
512
515
  mode: 'deferred',
513
- description: 'Deferred to tiangong lifecyclemodel publish-build.',
516
+ description: 'Deferred to tiangong-lca lifecyclemodel publish-build.',
514
517
  },
515
518
  ],
516
519
  local_runs: normalized.local_runs,
@@ -1214,8 +1217,8 @@ function buildNextActions(layout) {
1214
1217
  return [
1215
1218
  `inspect: ${layout.runPlanPath}`,
1216
1219
  `inspect: ${layout.modelsDir}`,
1217
- `run: tiangong lifecyclemodel validate-build --run-dir ${layout.runRoot}`,
1218
- `run: tiangong lifecyclemodel publish-build --run-dir ${layout.runRoot}`,
1220
+ `run: tiangong-lca lifecyclemodel validate-build --run-dir ${layout.runRoot}`,
1221
+ `run: tiangong-lca lifecyclemodel publish-build --run-dir ${layout.runRoot}`,
1219
1222
  ];
1220
1223
  }
1221
1224
  function buildReport(normalized, layout, localBuildReports, now) {