@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.
- package/README.md +154 -30
- package/dist/src/cli.js +2235 -149
- package/dist/src/cli.js.map +1 -1
- package/dist/src/lib/dataset-author.js +100 -0
- package/dist/src/lib/dataset-author.js.map +1 -0
- package/dist/src/lib/dataset-bilingual.js +545 -0
- package/dist/src/lib/dataset-bilingual.js.map +1 -0
- package/dist/src/lib/dataset-contract.js +350 -0
- package/dist/src/lib/dataset-contract.js.map +1 -0
- package/dist/src/lib/dataset-evidence-search.js +636 -0
- package/dist/src/lib/dataset-evidence-search.js.map +1 -0
- package/dist/src/lib/dataset-import-lca.js +171 -0
- package/dist/src/lib/dataset-import-lca.js.map +1 -0
- package/dist/src/lib/dataset-local.js +231 -0
- package/dist/src/lib/dataset-local.js.map +1 -0
- package/dist/src/lib/dataset-references-rewrite.js +214 -0
- package/dist/src/lib/dataset-references-rewrite.js.map +1 -0
- package/dist/src/lib/dataset-remote-refresh.js +166 -0
- package/dist/src/lib/dataset-remote-refresh.js.map +1 -0
- package/dist/src/lib/dataset-remote-verify.js +543 -0
- package/dist/src/lib/dataset-remote-verify.js.map +1 -0
- package/dist/src/lib/dataset-validate.js +247 -0
- package/dist/src/lib/dataset-validate.js.map +1 -0
- package/dist/src/lib/flow-payload-validation.js +51 -0
- package/dist/src/lib/flow-payload-validation.js.map +1 -0
- package/dist/src/lib/flow-publish-reviewed-data.js +16 -0
- package/dist/src/lib/flow-publish-reviewed-data.js.map +1 -1
- package/dist/src/lib/flow-publish-version.js +182 -12
- package/dist/src/lib/flow-publish-version.js.map +1 -1
- package/dist/src/lib/flow-regen-product.js +2 -10
- package/dist/src/lib/flow-regen-product.js.map +1 -1
- package/dist/src/lib/flow-remediate.js +4 -8
- package/dist/src/lib/flow-remediate.js.map +1 -1
- package/dist/src/lib/identity-preflight.js +1021 -0
- package/dist/src/lib/identity-preflight.js.map +1 -0
- package/dist/src/lib/lifecyclemodel-auto-build.js +11 -8
- package/dist/src/lib/lifecyclemodel-auto-build.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-graph.js +248 -0
- package/dist/src/lib/lifecyclemodel-graph.js.map +1 -0
- package/dist/src/lib/lifecyclemodel-publish-build.js +1 -1
- package/dist/src/lib/lifecyclemodel-publish-build.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-save-draft-run.js +245 -0
- package/dist/src/lib/lifecyclemodel-save-draft-run.js.map +1 -0
- package/dist/src/lib/lifecyclemodel-validate-build.js +1 -1
- package/dist/src/lib/lifecyclemodel-validate-build.js.map +1 -1
- package/dist/src/lib/process-auto-build.js +158 -8
- package/dist/src/lib/process-auto-build.js.map +1 -1
- package/dist/src/lib/process-batch-build.js +6 -3
- package/dist/src/lib/process-batch-build.js.map +1 -1
- package/dist/src/lib/process-dedup-review.js +921 -0
- package/dist/src/lib/process-dedup-review.js.map +1 -0
- package/dist/src/lib/process-flow-build-plan.js +1071 -0
- package/dist/src/lib/process-flow-build-plan.js.map +1 -0
- package/dist/src/lib/process-payload-validation.js +57 -0
- package/dist/src/lib/process-payload-validation.js.map +1 -0
- package/dist/src/lib/process-publish-build.js +126 -10
- package/dist/src/lib/process-publish-build.js.map +1 -1
- package/dist/src/lib/process-refresh-references.js +1037 -0
- package/dist/src/lib/process-refresh-references.js.map +1 -0
- package/dist/src/lib/process-required-fields.js +810 -0
- package/dist/src/lib/process-required-fields.js.map +1 -0
- package/dist/src/lib/process-resume-build.js +4 -6
- package/dist/src/lib/process-resume-build.js.map +1 -1
- package/dist/src/lib/process-save-draft-run.js +35 -13
- package/dist/src/lib/process-save-draft-run.js.map +1 -1
- package/dist/src/lib/process-scope-statistics.js +859 -0
- package/dist/src/lib/process-scope-statistics.js.map +1 -0
- package/dist/src/lib/process-verify-rows.js +250 -0
- package/dist/src/lib/process-verify-rows.js.map +1 -0
- package/dist/src/lib/publish.js +101 -1
- package/dist/src/lib/publish.js.map +1 -1
- package/dist/src/lib/remote.js +4 -4
- package/dist/src/lib/remote.js.map +1 -1
- package/dist/src/lib/review-flow.js +58 -0
- package/dist/src/lib/review-flow.js.map +1 -1
- package/dist/src/lib/review-lifecyclemodel.js +2 -2
- package/dist/src/lib/review-lifecyclemodel.js.map +1 -1
- package/dist/src/lib/review-process.js +150 -2
- package/dist/src/lib/review-process.js.map +1 -1
- package/dist/src/lib/runtime-rulesets.js +283 -0
- package/dist/src/lib/runtime-rulesets.js.map +1 -0
- package/dist/src/lib/tidas-sdk-package-validator.js +28 -9
- package/dist/src/lib/tidas-sdk-package-validator.js.map +1 -1
- package/dist/src/lib/tidas-sdk-validation.js +96 -0
- package/dist/src/lib/tidas-sdk-validation.js.map +1 -0
- package/dist/src/lib/user-api-key.js +1 -1
- package/dist/src/lib/user-api-key.js.map +1 -1
- package/package.json +5 -5
- /package/bin/{tiangong.d.ts → tiangong-lca.d.ts} +0 -0
- /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,
|
|
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
|
-
|
|
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,
|
|
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) {
|