@tiangong-lca/cli 0.0.6 → 0.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (90) hide show
  1. package/README.md +154 -30
  2. package/dist/src/cli.js +2235 -149
  3. package/dist/src/cli.js.map +1 -1
  4. package/dist/src/lib/dataset-author.js +100 -0
  5. package/dist/src/lib/dataset-author.js.map +1 -0
  6. package/dist/src/lib/dataset-bilingual.js +545 -0
  7. package/dist/src/lib/dataset-bilingual.js.map +1 -0
  8. package/dist/src/lib/dataset-contract.js +350 -0
  9. package/dist/src/lib/dataset-contract.js.map +1 -0
  10. package/dist/src/lib/dataset-evidence-search.js +636 -0
  11. package/dist/src/lib/dataset-evidence-search.js.map +1 -0
  12. package/dist/src/lib/dataset-import-lca.js +171 -0
  13. package/dist/src/lib/dataset-import-lca.js.map +1 -0
  14. package/dist/src/lib/dataset-local.js +231 -0
  15. package/dist/src/lib/dataset-local.js.map +1 -0
  16. package/dist/src/lib/dataset-references-rewrite.js +214 -0
  17. package/dist/src/lib/dataset-references-rewrite.js.map +1 -0
  18. package/dist/src/lib/dataset-remote-refresh.js +166 -0
  19. package/dist/src/lib/dataset-remote-refresh.js.map +1 -0
  20. package/dist/src/lib/dataset-remote-verify.js +543 -0
  21. package/dist/src/lib/dataset-remote-verify.js.map +1 -0
  22. package/dist/src/lib/dataset-validate.js +247 -0
  23. package/dist/src/lib/dataset-validate.js.map +1 -0
  24. package/dist/src/lib/flow-payload-validation.js +51 -0
  25. package/dist/src/lib/flow-payload-validation.js.map +1 -0
  26. package/dist/src/lib/flow-publish-reviewed-data.js +16 -0
  27. package/dist/src/lib/flow-publish-reviewed-data.js.map +1 -1
  28. package/dist/src/lib/flow-publish-version.js +182 -12
  29. package/dist/src/lib/flow-publish-version.js.map +1 -1
  30. package/dist/src/lib/flow-regen-product.js +2 -10
  31. package/dist/src/lib/flow-regen-product.js.map +1 -1
  32. package/dist/src/lib/flow-remediate.js +4 -8
  33. package/dist/src/lib/flow-remediate.js.map +1 -1
  34. package/dist/src/lib/identity-preflight.js +1021 -0
  35. package/dist/src/lib/identity-preflight.js.map +1 -0
  36. package/dist/src/lib/lifecyclemodel-auto-build.js +11 -8
  37. package/dist/src/lib/lifecyclemodel-auto-build.js.map +1 -1
  38. package/dist/src/lib/lifecyclemodel-graph.js +248 -0
  39. package/dist/src/lib/lifecyclemodel-graph.js.map +1 -0
  40. package/dist/src/lib/lifecyclemodel-publish-build.js +1 -1
  41. package/dist/src/lib/lifecyclemodel-publish-build.js.map +1 -1
  42. package/dist/src/lib/lifecyclemodel-save-draft-run.js +245 -0
  43. package/dist/src/lib/lifecyclemodel-save-draft-run.js.map +1 -0
  44. package/dist/src/lib/lifecyclemodel-validate-build.js +1 -1
  45. package/dist/src/lib/lifecyclemodel-validate-build.js.map +1 -1
  46. package/dist/src/lib/process-auto-build.js +158 -8
  47. package/dist/src/lib/process-auto-build.js.map +1 -1
  48. package/dist/src/lib/process-batch-build.js +6 -3
  49. package/dist/src/lib/process-batch-build.js.map +1 -1
  50. package/dist/src/lib/process-dedup-review.js +921 -0
  51. package/dist/src/lib/process-dedup-review.js.map +1 -0
  52. package/dist/src/lib/process-flow-build-plan.js +1071 -0
  53. package/dist/src/lib/process-flow-build-plan.js.map +1 -0
  54. package/dist/src/lib/process-payload-validation.js +57 -0
  55. package/dist/src/lib/process-payload-validation.js.map +1 -0
  56. package/dist/src/lib/process-publish-build.js +126 -10
  57. package/dist/src/lib/process-publish-build.js.map +1 -1
  58. package/dist/src/lib/process-refresh-references.js +1037 -0
  59. package/dist/src/lib/process-refresh-references.js.map +1 -0
  60. package/dist/src/lib/process-required-fields.js +810 -0
  61. package/dist/src/lib/process-required-fields.js.map +1 -0
  62. package/dist/src/lib/process-resume-build.js +4 -6
  63. package/dist/src/lib/process-resume-build.js.map +1 -1
  64. package/dist/src/lib/process-save-draft-run.js +35 -13
  65. package/dist/src/lib/process-save-draft-run.js.map +1 -1
  66. package/dist/src/lib/process-scope-statistics.js +859 -0
  67. package/dist/src/lib/process-scope-statistics.js.map +1 -0
  68. package/dist/src/lib/process-verify-rows.js +250 -0
  69. package/dist/src/lib/process-verify-rows.js.map +1 -0
  70. package/dist/src/lib/publish.js +101 -1
  71. package/dist/src/lib/publish.js.map +1 -1
  72. package/dist/src/lib/remote.js +4 -4
  73. package/dist/src/lib/remote.js.map +1 -1
  74. package/dist/src/lib/review-flow.js +58 -0
  75. package/dist/src/lib/review-flow.js.map +1 -1
  76. package/dist/src/lib/review-lifecyclemodel.js +2 -2
  77. package/dist/src/lib/review-lifecyclemodel.js.map +1 -1
  78. package/dist/src/lib/review-process.js +150 -2
  79. package/dist/src/lib/review-process.js.map +1 -1
  80. package/dist/src/lib/runtime-rulesets.js +283 -0
  81. package/dist/src/lib/runtime-rulesets.js.map +1 -0
  82. package/dist/src/lib/tidas-sdk-package-validator.js +28 -9
  83. package/dist/src/lib/tidas-sdk-package-validator.js.map +1 -1
  84. package/dist/src/lib/tidas-sdk-validation.js +96 -0
  85. package/dist/src/lib/tidas-sdk-validation.js.map +1 -0
  86. package/dist/src/lib/user-api-key.js +1 -1
  87. package/dist/src/lib/user-api-key.js.map +1 -1
  88. package/package.json +5 -5
  89. /package/bin/{tiangong.d.ts → tiangong-lca.d.ts} +0 -0
  90. /package/bin/{tiangong.js → tiangong-lca.js} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"flow-remediate.js","sourceRoot":"","sources":["../../../src/lib/flow-remediate.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact, writeTextArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport {\n coerceText,\n deepGet,\n isRecord,\n loadRowsFromFile,\n normalizeText,\n type JsonRecord,\n} from './flow-governance.js';\n\nconst CONTACT_UUID = 'f4b4c314-8c4c-4c83-968f-5b3c7724f6a8';\nconst CONTACT_VERSION = '01.00.000';\nconst COMPLIANCE_SOURCE_UUID = 'd92a1a12-2545-49e2-a585-55c259997756';\nconst COMPLIANCE_SOURCE_VERSION = '20.20.002';\nconst ILCD_FORMAT_SOURCE_UUID = 'a97a0155-0234-4b87-b4ce-a45da52f2a40';\nconst ILCD_FORMAT_SOURCE_VERSION = '03.00.003';\nconst DEFAULT_MASS_FLOW_PROPERTY_UUID = '93a60a56-a3c8-11da-a746-0800200b9a66';\nconst DEFAULT_MASS_FLOW_PROPERTY_VERSION = '03.00.003';\nconst DEFAULT_MASS_FLOW_PROPERTY_NAME = 'Mass';\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/u;\nconst VERSION_QUERY_RE = /([?&]version=)(\\d+\\.\\d+\\.\\d+)/u;\nconst LOCAL_URI_VERSION_RE = /_(\\d+\\.\\d+\\.\\d+)\\.xml$/u;\nconst LEGACY_OUTPUT_PREFIX = 'flows_tidas_sdk_plus_classification';\nconst GENERIC_MASS_HINTS = new Set([\n 'flow property for kg',\n 'flow property for kilogram',\n 'flow property for kilograms',\n 'kg',\n 'kilogram',\n 'kilograms',\n 'mass',\n 'mass flow',\n 'mass flow kg',\n]);\n\ntype FlowValidationIssue = {\n validator: 'tidas_sdk';\n path: string;\n message: string;\n code: string;\n};\n\ntype FlowRemediationAuditRow = {\n id: unknown;\n user_id: unknown;\n state_code: unknown;\n version_before: string;\n version_after: string;\n valid_after_remediation: boolean;\n applied_fixes: string[];\n original_reason: unknown[];\n final_reason: FlowValidationIssue[];\n};\n\ntype FlowRemediationRowResult = {\n row: JsonRecord;\n valid: boolean;\n appliedFixes: string[];\n finalReasons: FlowValidationIssue[];\n versionBefore: string;\n versionAfter: string;\n};\n\ntype FlowValidationResult =\n | {\n success: true;\n }\n | {\n success: false;\n issues: FlowValidationIssue[];\n };\n\ntype FlowSdkValidationEntity = {\n validate?: () => unknown;\n};\n\ntype FlowSdkModule = {\n createFlow?: (\n data?: unknown,\n validationConfig?: {\n mode?: 'strict' | 'weak' | 'ignore';\n throwOnError?: boolean;\n deepValidation?: boolean;\n },\n ) => FlowSdkValidationEntity;\n};\n\ntype FlowRemediationFiles = {\n allRemediated: string;\n readyForMcp: string;\n residualManualQueue: string;\n audit: string;\n report: string;\n prompt: string;\n};\n\nexport type FlowRemediationReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_local_flow_remediation';\n input_file: string;\n out_dir: string;\n counts: {\n input_rows: number;\n state_code_0_rows: number;\n state_code_100_rows: number;\n remediated_rows: number;\n ready_for_mcp_rows: number;\n residual_manual_rows: number;\n };\n applied_fix_counts: Record<string, number>;\n residual_manual_ids: string[];\n validation_backend: 'tidas_sdk';\n files: {\n all_remediated: string;\n ready_for_mcp: string;\n residual_manual_queue: string;\n audit: string;\n prompt: string;\n report: string;\n };\n};\n\nexport type RunFlowRemediateOptions = {\n inputFile: string;\n outDir: string;\n};\n\ntype FlowRemediationDeps = {\n loadSdkModule?: () => FlowSdkModule & { location?: string };\n now?: () => Date;\n};\n\ntype FlowPropertyDescriptor = {\n uuid: string;\n name: string;\n version: string;\n};\n\nfunction build_sdk_candidates(): string[] {\n return ['@tiangong-lca/tidas-sdk/core'];\n}\n\nfunction resolve_sdk_module_from_candidates(\n requireFn: NodeJS.Require,\n candidates: string[],\n): FlowSdkModule & { location: string } {\n const details: string[] = [];\n for (const candidate of candidates) {\n try {\n const loaded = requireFn(candidate) as FlowSdkModule;\n if (typeof loaded.createFlow === 'function') {\n return {\n ...loaded,\n location: candidate,\n };\n }\n details.push(`Candidate missing createFlow export: ${candidate}`);\n } catch (error) {\n details.push(`Failed to load ${candidate}: ${String(error)}`);\n }\n }\n\n throw new CliError('Unable to resolve the local tidas-sdk flow factory.', {\n code: 'FLOW_REMEDIATE_SDK_NOT_FOUND',\n exitCode: 2,\n details,\n });\n}\n\nfunction resolve_local_sdk_module(): FlowSdkModule & { location: string } {\n return resolve_sdk_module_from_candidates(createRequire(import.meta.url), build_sdk_candidates());\n}\n\nfunction assert_input_file(inputFile: string): string {\n if (!inputFile) {\n throw new CliError('Missing required --input-file value.', {\n code: 'FLOW_REMEDIATE_INPUT_REQUIRED',\n exitCode: 2,\n });\n }\n\n const resolved = path.resolve(inputFile);\n if (!existsSync(resolved)) {\n throw new CliError(`Flow remediation input file not found: ${resolved}`, {\n code: 'FLOW_REMEDIATE_INPUT_NOT_FOUND',\n exitCode: 2,\n });\n }\n\n return resolved;\n}\n\nfunction assert_out_dir(outDir: string): string {\n if (!outDir) {\n throw new CliError('Missing required --out-dir value.', {\n code: 'FLOW_REMEDIATE_OUT_DIR_REQUIRED',\n exitCode: 2,\n });\n }\n return path.resolve(outDir);\n}\n\nfunction build_output_files(outDir: string): FlowRemediationFiles {\n return {\n allRemediated: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remediated_all.jsonl`),\n readyForMcp: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remediated_ready_for_mcp.jsonl`),\n residualManualQueue: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_residual_manual_queue.jsonl`),\n audit: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remediation_audit.jsonl`),\n report: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remediation_report.json`),\n prompt: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_residual_manual_queue_prompt.md`),\n };\n}\n\nfunction build_local_dataset_uri(datasetKind: string, uuidValue: string, version: string): string {\n if (!uuidValue) {\n return '';\n }\n\n const folderMap: Record<string, string> = {\n process: 'processes',\n 'process data set': 'processes',\n flow: 'flows',\n 'flow data set': 'flows',\n source: 'sources',\n 'source data set': 'sources',\n contact: 'contacts',\n 'contact data set': 'contacts',\n 'flow property data set': 'flowproperties',\n };\n const kind = datasetKind.trim().toLowerCase();\n const folder = folderMap[kind] ?? 'datasets';\n const versionText = version.trim() || '01.01.000';\n return `../${folder}/${uuidValue}_${versionText}.xml`;\n}\n\nfunction build_dataset_format_reference(): JsonRecord {\n return {\n '@refObjectId': ILCD_FORMAT_SOURCE_UUID,\n '@type': 'source data set',\n '@uri': build_local_dataset_uri('source', ILCD_FORMAT_SOURCE_UUID, ILCD_FORMAT_SOURCE_VERSION),\n '@version': ILCD_FORMAT_SOURCE_VERSION,\n 'common:shortDescription': [{ '@xml:lang': 'en', '#text': 'ILCD format' }],\n };\n}\n\nfunction normalize_multilang_entries(value: unknown): JsonRecord[] | null {\n if (typeof value === 'string') {\n const text = value.trim();\n return text ? [{ '@xml:lang': 'en', '#text': text }] : null;\n }\n\n if (Array.isArray(value)) {\n const entries = value.flatMap((item) => normalize_multilang_entries(item) ?? []);\n return entries.length ? entries : null;\n }\n\n if (!isRecord(value)) {\n return null;\n }\n\n const text = coerceText(value['#text']);\n if (!text) {\n return null;\n }\n\n return [\n {\n '@xml:lang': coerceText(value['@xml:lang']) || 'en',\n '#text': text,\n },\n ];\n}\n\nfunction first_text(value: unknown, fallback = ''): string {\n const normalized = normalize_multilang_entries(value);\n return normalized?.[0]?.['#text'] ? String(normalized[0]['#text']) : fallback;\n}\n\nfunction normalize_multilang_field(container: JsonRecord, key: string, fixes: string[]): void {\n if (!(key in container)) {\n return;\n }\n const normalized = normalize_multilang_entries(container[key]);\n if (!normalized) {\n delete container[key];\n fixes.push(`remove_empty_multilang:${key}`);\n return;\n }\n if (JSON.stringify(container[key]) !== JSON.stringify(normalized)) {\n container[key] = normalized;\n fixes.push(`normalize_multilang:${key}`);\n }\n}\n\nfunction normalize_name_block(dataSetInfo: JsonRecord, fixes: string[]): void {\n const nameBlock = isRecord(dataSetInfo.name) ? dataSetInfo.name : null;\n if (!nameBlock) {\n return;\n }\n\n for (const key of [\n 'baseName',\n 'flowProperties',\n 'mixAndLocationTypes',\n 'treatmentStandardsRoutes',\n ]) {\n if (!(key in nameBlock)) {\n continue;\n }\n const normalized = normalize_multilang_entries(nameBlock[key]);\n if (!normalized) {\n delete nameBlock[key];\n fixes.push(`remove_empty_name_field:${key}`);\n continue;\n }\n if (JSON.stringify(nameBlock[key]) !== JSON.stringify(normalized)) {\n nameBlock[key] = normalized;\n fixes.push(`normalize_name_field:${key}`);\n }\n }\n}\n\nfunction bump_ilcd_version(version: string): string {\n const parts = version.split('.');\n const numbers = [0, 0, 0].map((_, index) => {\n const raw = parts[index];\n const parsed = raw ? Number.parseInt(raw, 10) : 0;\n return Number.isInteger(parsed) ? parsed : 0;\n });\n numbers[2] += 1;\n return `${numbers[0].toString().padStart(2, '0')}.${numbers[1].toString().padStart(2, '0')}.${numbers[2]\n .toString()\n .padStart(3, '0')}`;\n}\n\nfunction version_from_uri(uri: string): string {\n const text = uri.trim();\n if (!text) {\n return '';\n }\n const localMatch = text.match(LOCAL_URI_VERSION_RE);\n if (localMatch) {\n return localMatch[1] as string;\n }\n const queryMatch = text.match(VERSION_QUERY_RE);\n return queryMatch?.[2] ?? '';\n}\n\nfunction normalize_reference_block(\n ref: unknown,\n defaultType: string,\n shortDescriptionFallback: string,\n): JsonRecord | null {\n if (!isRecord(ref)) {\n return null;\n }\n const refObjectId = coerceText(ref['@refObjectId']).toLowerCase();\n if (!refObjectId) {\n return null;\n }\n\n const refType = coerceText(ref['@type']) || defaultType;\n const version =\n coerceText(ref['@version']) ||\n version_from_uri(coerceText(ref['@uri'])) ||\n (refObjectId === ILCD_FORMAT_SOURCE_UUID\n ? ILCD_FORMAT_SOURCE_VERSION\n : refObjectId === COMPLIANCE_SOURCE_UUID\n ? COMPLIANCE_SOURCE_VERSION\n : '');\n const shortDescription =\n normalize_multilang_entries(ref['common:shortDescription']) ??\n (shortDescriptionFallback ? [{ '@xml:lang': 'en', '#text': shortDescriptionFallback }] : null);\n\n const result: JsonRecord = {\n '@type': refType,\n '@refObjectId': refObjectId,\n '@uri': version\n ? build_local_dataset_uri(refType, refObjectId, version)\n : coerceText(ref['@uri']),\n };\n if (version) {\n result['@version'] = version;\n }\n if (shortDescription) {\n result['common:shortDescription'] = shortDescription;\n }\n return result;\n}\n\nfunction canonical_contact_reference(): JsonRecord {\n return {\n '@type': 'contact data set',\n '@refObjectId': CONTACT_UUID,\n '@uri': build_local_dataset_uri('contact data set', CONTACT_UUID, CONTACT_VERSION),\n '@version': CONTACT_VERSION,\n 'common:shortDescription': [\n { '@xml:lang': 'en', '#text': 'Tiangong LCA Data Working Group' },\n { '@xml:lang': 'zh', '#text': '天工LCA数据团队' },\n ],\n };\n}\n\nfunction canonical_compliance_block(): JsonRecord {\n return {\n 'common:referenceToComplianceSystem': {\n '@refObjectId': COMPLIANCE_SOURCE_UUID,\n '@type': 'source data set',\n '@uri': build_local_dataset_uri(\n 'source data set',\n COMPLIANCE_SOURCE_UUID,\n COMPLIANCE_SOURCE_VERSION,\n ),\n '@version': COMPLIANCE_SOURCE_VERSION,\n 'common:shortDescription': [\n { '@xml:lang': 'en', '#text': 'ILCD Data Network - Entry-level' },\n ],\n },\n 'common:approvalOfOverallCompliance': 'Fully compliant',\n };\n}\n\nfunction normalize_hint_text(value: unknown): string {\n return normalizeText(first_text(value));\n}\n\nfunction infer_flow_property_descriptor_from_hint(value: unknown): FlowPropertyDescriptor | null {\n const normalized = normalize_hint_text(value);\n if (!normalized) {\n return null;\n }\n\n if (\n GENERIC_MASS_HINTS.has(normalized) ||\n (normalized.startsWith('flow property for ') && /\\b(kg|kilogram|kilograms)\\b/u.test(normalized))\n ) {\n return {\n uuid: DEFAULT_MASS_FLOW_PROPERTY_UUID,\n name: DEFAULT_MASS_FLOW_PROPERTY_NAME,\n version: DEFAULT_MASS_FLOW_PROPERTY_VERSION,\n };\n }\n\n return null;\n}\n\nfunction build_flow_property_item(\n descriptor: FlowPropertyDescriptor,\n internalId: string,\n meanValue: string,\n): JsonRecord {\n return {\n '@dataSetInternalID': internalId,\n meanValue,\n referenceToFlowPropertyDataSet: {\n '@type': 'flow property data set',\n '@refObjectId': descriptor.uuid,\n '@uri': build_local_dataset_uri(\n 'flow property data set',\n descriptor.uuid,\n descriptor.version,\n ),\n '@version': descriptor.version,\n 'common:shortDescription': [{ '@xml:lang': 'en', '#text': descriptor.name }],\n },\n };\n}\n\nfunction normalize_flow_properties(\n dataset: JsonRecord,\n fixes: string[],\n): { items: JsonRecord[]; unresolved: FlowValidationIssue[] } {\n const flowPropertiesBlock = isRecord(dataset.flowProperties) ? dataset.flowProperties : {};\n dataset.flowProperties = flowPropertiesBlock;\n const rawItems = flowPropertiesBlock.flowProperty;\n const items = Array.isArray(rawItems) ? rawItems : rawItems ? [rawItems] : [];\n const normalizedItems: JsonRecord[] = [];\n const unresolved: FlowValidationIssue[] = [];\n let repairedUnknownUuid = false;\n let filledMissingUuid = false;\n let usedDefaultMassFallback = false;\n\n for (let index = 0; index < items.length; index += 1) {\n const item = items[index];\n if (!isRecord(item)) {\n unresolved.push({\n validator: 'tidas_sdk',\n path: 'flowDataSet.flowProperties.flowProperty',\n message: 'flowProperty item is not an object',\n code: 'unsupported_item_type',\n });\n continue;\n }\n\n const reference = isRecord(item.referenceToFlowPropertyDataSet)\n ? item.referenceToFlowPropertyDataSet\n : null;\n const hint = reference?.['common:shortDescription'] ?? reference;\n const internalId = coerceText(item['@dataSetInternalID']) || String(index);\n const meanValue = coerceText(item.meanValue) || '1.0';\n const refUuid = coerceText(reference?.['@refObjectId']).toLowerCase();\n const refVersion =\n coerceText(reference?.['@version']) || version_from_uri(coerceText(reference?.['@uri']));\n let descriptor: FlowPropertyDescriptor | null;\n\n if (refUuid && UUID_RE.test(refUuid)) {\n descriptor = {\n uuid: refUuid,\n name: first_text(hint, DEFAULT_MASS_FLOW_PROPERTY_NAME),\n version:\n refVersion ||\n (refUuid === DEFAULT_MASS_FLOW_PROPERTY_UUID\n ? DEFAULT_MASS_FLOW_PROPERTY_VERSION\n : '01.01.000'),\n };\n } else {\n descriptor = infer_flow_property_descriptor_from_hint(hint);\n if (descriptor) {\n if (refUuid) {\n repairedUnknownUuid = true;\n } else {\n filledMissingUuid = true;\n }\n }\n }\n\n if (!descriptor) {\n unresolved.push({\n validator: 'tidas_sdk',\n path: 'flowDataSet.flowProperties.flowProperty.referenceToFlowPropertyDataSet.@refObjectId',\n message: refUuid\n ? `Unknown flow property UUID: ${refUuid}`\n : 'Unable to infer flow property UUID from the reference block',\n code: 'unknown_flow_property_uuid',\n });\n continue;\n }\n\n normalizedItems.push(build_flow_property_item(descriptor, internalId, meanValue));\n }\n\n if (!normalizedItems.length) {\n if (!items.length) {\n normalizedItems.push(\n build_flow_property_item(\n {\n uuid: DEFAULT_MASS_FLOW_PROPERTY_UUID,\n name: DEFAULT_MASS_FLOW_PROPERTY_NAME,\n version: DEFAULT_MASS_FLOW_PROPERTY_VERSION,\n },\n '0',\n '1.0',\n ),\n );\n usedDefaultMassFallback = true;\n } else {\n delete flowPropertiesBlock.flowProperty;\n return { items: [], unresolved };\n }\n }\n\n flowPropertiesBlock.flowProperty =\n normalizedItems.length === 1 ? normalizedItems[0] : normalizedItems;\n fixes.push('normalize_flow_properties');\n if (repairedUnknownUuid) {\n fixes.push('repair_unknown_flow_property_uuid_from_short_description');\n }\n if (filledMissingUuid) {\n fixes.push('fill_missing_flow_property_uuid_from_short_description');\n }\n if (usedDefaultMassFallback) {\n fixes.push('set_default_mass_flow_property');\n }\n return { items: normalizedItems, unresolved };\n}\n\nfunction normalize_quantitative_reference(\n dataset: JsonRecord,\n normalizedFlowProperties: JsonRecord[],\n fixes: string[],\n unresolved: FlowValidationIssue[],\n): void {\n const flowInformation = isRecord(dataset.flowInformation) ? dataset.flowInformation : {};\n dataset.flowInformation = flowInformation;\n const quantitativeReference = isRecord(flowInformation.quantitativeReference)\n ? flowInformation.quantitativeReference\n : {};\n flowInformation.quantitativeReference = quantitativeReference;\n\n if (!normalizedFlowProperties.length) {\n unresolved.push({\n validator: 'tidas_sdk',\n path: 'flowDataSet.flowInformation.quantitativeReference.referenceToReferenceFlowProperty',\n message:\n 'Cannot infer referenceToReferenceFlowProperty without any valid flowProperty entries',\n code: 'missing_flow_properties',\n });\n return;\n }\n\n const allowedIds = new Set(\n normalizedFlowProperties\n .map((item) => coerceText(item['@dataSetInternalID']))\n .filter((value) => value.length > 0),\n );\n const current = coerceText(quantitativeReference.referenceToReferenceFlowProperty);\n if (!allowedIds.has(current)) {\n quantitativeReference.referenceToReferenceFlowProperty = coerceText(\n normalizedFlowProperties[0]?.['@dataSetInternalID'],\n );\n fixes.push('set_reference_to_reference_flow_property');\n }\n}\n\nfunction normalize_technology_multilang_fields(dataset: JsonRecord, fixes: string[]): void {\n const technology = deepGet(dataset, ['flowInformation', 'technology']);\n if (!isRecord(technology)) {\n return;\n }\n normalize_multilang_field(technology, 'technologicalApplicability', fixes);\n}\n\nfunction normalize_technical_specification(dataset: JsonRecord, fixes: string[]): void {\n const technology = deepGet(dataset, ['flowInformation', 'technology']);\n if (!isRecord(technology) || !('referenceToTechnicalSpecification' in technology)) {\n return;\n }\n const normalized = normalize_reference_block(\n technology.referenceToTechnicalSpecification,\n 'source data set',\n first_text(technology.referenceToTechnicalSpecification),\n );\n if (!normalized) {\n delete technology.referenceToTechnicalSpecification;\n fixes.push('remove_invalid_reference_to_technical_specification');\n return;\n }\n if (JSON.stringify(technology.referenceToTechnicalSpecification) !== JSON.stringify(normalized)) {\n technology.referenceToTechnicalSpecification = normalized;\n fixes.push('normalize_reference_to_technical_specification');\n }\n}\n\nfunction update_permanent_dataset_uri(uriValue: unknown, targetVersion: string): unknown {\n const uri = coerceText(uriValue);\n if (!uri) {\n return uriValue;\n }\n if (VERSION_QUERY_RE.test(uri)) {\n return uri.replace(VERSION_QUERY_RE, `$1${targetVersion}`);\n }\n return uriValue;\n}\n\nfunction parse_validation_error(error: unknown): FlowValidationIssue[] {\n if (isRecord(error) && Array.isArray(error.issues)) {\n const issues = error.issues.filter(isRecord).map((issue) => {\n const pathValue = Array.isArray(issue.path)\n ? issue.path.map((part) => String(part)).join('.')\n : '<exception>';\n return {\n validator: 'tidas_sdk' as const,\n path: pathValue || '<exception>',\n message: coerceText(issue.message) || String(error),\n code: coerceText(issue.code) || 'validation_error',\n };\n });\n if (issues.length) {\n return issues;\n }\n }\n\n return [\n {\n validator: 'tidas_sdk',\n path: '<exception>',\n message: String(error),\n code: 'exception',\n },\n ];\n}\n\nfunction validate_flow_payload(\n payload: JsonRecord,\n deps: FlowRemediationDeps,\n): FlowValidationResult {\n const sdkModule = (deps.loadSdkModule ?? resolve_local_sdk_module)();\n if (typeof sdkModule.createFlow !== 'function') {\n throw new CliError('Resolved tidas-sdk core module does not expose createFlow.', {\n code: 'FLOW_REMEDIATE_SDK_INVALID',\n exitCode: 2,\n details: sdkModule.location ?? null,\n });\n }\n\n try {\n const entity = sdkModule.createFlow(payload, {\n mode: 'strict',\n throwOnError: false,\n deepValidation: true,\n });\n if (!entity || typeof entity.validate !== 'function') {\n throw new CliError('Resolved tidas-sdk flow entity does not expose validate().', {\n code: 'FLOW_REMEDIATE_SDK_INVALID',\n exitCode: 2,\n details: sdkModule.location ?? null,\n });\n }\n const result = entity.validate();\n if (isRecord(result) && result.success === true) {\n return { success: true };\n }\n return {\n success: false,\n issues: parse_validation_error(isRecord(result) ? result.error : result),\n };\n } catch (error) {\n if (error instanceof CliError) {\n throw error;\n }\n return {\n success: false,\n issues: parse_validation_error(error),\n };\n }\n}\n\nfunction remediate_row(row: JsonRecord, deps: FlowRemediationDeps): FlowRemediationRowResult {\n const working = JSON.parse(JSON.stringify(row)) as JsonRecord;\n const payload = isRecord(working.json_ordered) ? working.json_ordered : null;\n const flowDataSet = isRecord(payload?.flowDataSet) ? payload.flowDataSet : null;\n\n if (!payload || !flowDataSet) {\n return {\n row: working,\n valid: false,\n appliedFixes: [],\n finalReasons: [\n {\n validator: 'tidas_sdk',\n path: 'json_ordered.flowDataSet',\n message: 'Missing flowDataSet payload',\n code: 'missing_flow_dataset',\n },\n ],\n versionBefore: '',\n versionAfter: '',\n };\n }\n\n const fixes: string[] = [];\n const residualUnresolved: FlowValidationIssue[] = [];\n const flowInformation = isRecord(flowDataSet.flowInformation) ? flowDataSet.flowInformation : {};\n flowDataSet.flowInformation = flowInformation;\n const dataSetInformation = isRecord(flowInformation.dataSetInformation)\n ? flowInformation.dataSetInformation\n : {};\n flowInformation.dataSetInformation = dataSetInformation;\n\n normalize_name_block(dataSetInformation, fixes);\n for (const key of [\n 'common:synonyms',\n 'common:generalComment',\n 'common:shortDescription',\n 'common:name',\n 'common:shortName',\n ]) {\n normalize_multilang_field(dataSetInformation, key, fixes);\n }\n if (isRecord(dataSetInformation['common:other'])) {\n delete dataSetInformation['common:other'];\n fixes.push('remove_common_other_object');\n }\n if (dataSetInformation.CASNumber === '') {\n delete dataSetInformation.CASNumber;\n fixes.push('remove_empty_cas_number');\n }\n\n const administrativeInformation = isRecord(flowDataSet.administrativeInformation)\n ? flowDataSet.administrativeInformation\n : {};\n flowDataSet.administrativeInformation = administrativeInformation;\n const dataEntryBy = isRecord(administrativeInformation.dataEntryBy)\n ? administrativeInformation.dataEntryBy\n : {};\n administrativeInformation.dataEntryBy = dataEntryBy;\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n administrativeInformation.publicationAndOwnership = publicationAndOwnership;\n\n const formatReference = build_dataset_format_reference();\n if (\n JSON.stringify(dataEntryBy['common:referenceToDataSetFormat']) !==\n JSON.stringify(formatReference)\n ) {\n dataEntryBy['common:referenceToDataSetFormat'] = formatReference;\n fixes.push('set_reference_to_dataset_format');\n }\n\n const contactReference = canonical_contact_reference();\n if (\n JSON.stringify(dataEntryBy['common:referenceToPersonOrEntityEnteringTheData']) !==\n JSON.stringify(contactReference)\n ) {\n dataEntryBy['common:referenceToPersonOrEntityEnteringTheData'] = contactReference;\n fixes.push('set_reference_to_person_or_entity_entering_the_data');\n }\n if (\n JSON.stringify(publicationAndOwnership['common:referenceToOwnershipOfDataSet']) !==\n JSON.stringify(contactReference)\n ) {\n publicationAndOwnership['common:referenceToOwnershipOfDataSet'] = contactReference;\n fixes.push('set_reference_to_ownership_of_dataset');\n }\n\n const modellingAndValidation = isRecord(flowDataSet.modellingAndValidation)\n ? flowDataSet.modellingAndValidation\n : {};\n flowDataSet.modellingAndValidation = modellingAndValidation;\n const complianceDeclarations = isRecord(modellingAndValidation.complianceDeclarations)\n ? modellingAndValidation.complianceDeclarations\n : {};\n modellingAndValidation.complianceDeclarations = complianceDeclarations;\n const complianceBlock = canonical_compliance_block();\n if (JSON.stringify(complianceDeclarations.compliance) !== JSON.stringify(complianceBlock)) {\n complianceDeclarations.compliance = complianceBlock;\n fixes.push('set_compliance_block');\n }\n\n const flowProperties = normalize_flow_properties(flowDataSet, fixes);\n residualUnresolved.push(...flowProperties.unresolved);\n normalize_quantitative_reference(flowDataSet, flowProperties.items, fixes, residualUnresolved);\n normalize_technology_multilang_fields(flowDataSet, fixes);\n normalize_technical_specification(flowDataSet, fixes);\n\n const flowUuid =\n coerceText(dataSetInformation['common:UUID']) || coerceText(working.id) || 'unknown-flow';\n if (!coerceText(publicationAndOwnership['common:dataSetVersion'])) {\n publicationAndOwnership['common:dataSetVersion'] = '01.01.000';\n }\n\n const versionBefore = coerceText(publicationAndOwnership['common:dataSetVersion']);\n let versionAfter = versionBefore;\n const stateCode = Number.parseInt(coerceText(working.state_code) || '0', 10) || 0;\n\n if (stateCode === 100) {\n versionAfter = bump_ilcd_version(versionBefore);\n if (versionAfter !== versionBefore) {\n publicationAndOwnership['common:dataSetVersion'] = versionAfter;\n fixes.push('bump_dataset_version');\n publicationAndOwnership['common:referenceToPrecedingDataSetVersion'] = {\n '@type': 'flow data set',\n '@refObjectId': flowUuid,\n '@uri': build_local_dataset_uri('flow data set', flowUuid, versionBefore),\n '@version': versionBefore,\n 'common:shortDescription': [\n {\n '@xml:lang': 'en',\n '#text': first_text(deepGet(dataSetInformation, ['name', 'baseName']), flowUuid),\n },\n ],\n };\n fixes.push('set_reference_to_preceding_dataset_version');\n const permanentUri = update_permanent_dataset_uri(\n publicationAndOwnership['common:permanentDataSetURI'],\n versionAfter,\n );\n if (permanentUri !== publicationAndOwnership['common:permanentDataSetURI']) {\n publicationAndOwnership['common:permanentDataSetURI'] = permanentUri;\n fixes.push('update_permanent_dataset_uri_version');\n }\n if ('version' in working) {\n working.version = versionAfter;\n }\n }\n } else if (\n isRecord(publicationAndOwnership['common:referenceToPrecedingDataSetVersion']) &&\n !Object.keys(publicationAndOwnership['common:referenceToPrecedingDataSetVersion'] as JsonRecord)\n .length\n ) {\n delete publicationAndOwnership['common:referenceToPrecedingDataSetVersion'];\n fixes.push('remove_empty_reference_to_preceding_dataset_version');\n }\n\n const validation = validate_flow_payload(payload, deps);\n const finalReasons =\n validation.success === true\n ? residualUnresolved\n : [...residualUnresolved, ...validation.issues];\n\n working.json_ordered = payload;\n working.reason = finalReasons;\n\n return {\n row: working,\n valid: finalReasons.length === 0,\n appliedFixes: fixes,\n finalReasons,\n versionBefore,\n versionAfter,\n };\n}\n\nfunction build_prompt(manualRows: JsonRecord[], manualFile: string, promptFile: string): string {\n if (!manualRows.length) {\n return `本轮 deterministic remediation 之后,residual manual queue 为 0。\n\n输入文件:\n\\`${manualFile}\\`\n\n结果:\n1. 当前没有需要再交给 OpenClaw 手工修复的 flow。\n2. 可直接对 ready-for-MCP 文件执行后续批量处理。\n3. 如果后续换了新的输入批次,再重新生成 residual manual queue prompt。\n`;\n }\n\n const queueIds = manualRows\n .map((row) => coerceText(row.id))\n .filter((value) => value.length > 0)\n .map((value) => `- \\`${value}\\``)\n .join('\\n');\n const outputFile = path.join(\n path.dirname(promptFile),\n `${LEGACY_OUTPUT_PREFIX}_residual_manual_fixed.jsonl`,\n );\n const stillInvalidFile = path.join(\n path.dirname(promptFile),\n `${LEGACY_OUTPUT_PREFIX}_residual_manual_still_invalid.jsonl`,\n );\n\n return `你现在要处理 residual manual queue 中 deterministic remediator 之后仍未通过 tidas-sdk 本地校验的 flow。\n\n输入文件:\n\\`${manualFile}\\`\n\n输出文件:\n\\`${outputFile}\\`\n\n执行要求:\n1. 只修改每条记录里的 json_ordered.flowDataSet,保留外层 envelope key:id、user_id、json_ordered、reason、state_code。\n2. 保持相同 UUID,不要改 id。\n3. state_code=0 的 flow 保持当前 common:dataSetVersion 不变。\n4. state_code=100 的 flow 已经完成 deterministic version bump,并已补 common:referenceToPrecedingDataSetVersion;除非绝对必要,不要再次 bump version。\n5. 优先补齐合法的 flowProperties.flowProperty 和 flowInformation.quantitativeReference.referenceToReferenceFlowProperty,让数据先通过本地 TIDAS SDK 校验。\n6. 不要无故重写 classification、命名、comment;如果必须改,改动最小,并在结果里保留必要说明。\n7. 每条输出仍按一行一个 JSON object 的 JSONL 形式写入。\n8. 修复成功的行把 reason 置为 [];如果仍无法修复,单独另存并写明残留原因。\n\n当前 residual manual queue 共 ${manualRows.length} 条:\n${queueIds || '- None'}\n\n建议步骤:\n1. 逐条读取 reason 和 json_ordered.flowDataSet。\n2. 先判断缺失的是 flowProperties 本体,还是只有 quantitative reference 丢失。\n3. 能从现有 classificationInformation、baseName、flow type、name.flowProperties 推断合法 flow property 的,补成最小合法块。\n4. 每改完一条都本地验证一次 TIDAS SDK。\n5. 把通过校验的 patched row 写到 \\`${outputFile}\\`。\n\n如果你还要保留未解决项,另写一个旁路文件:\n\\`${stillInvalidFile}\\`\n`;\n}\n\nexport async function runFlowRemediate(\n options: RunFlowRemediateOptions,\n deps: FlowRemediationDeps = {},\n): Promise<FlowRemediationReport> {\n const inputFile = assert_input_file(options.inputFile);\n const outDir = assert_out_dir(options.outDir);\n const rows = loadRowsFromFile(inputFile);\n const files = build_output_files(outDir);\n const now = deps.now ?? (() => new Date());\n\n const remediatedRows: JsonRecord[] = [];\n const validRows: JsonRecord[] = [];\n const manualRows: JsonRecord[] = [];\n const auditRows: FlowRemediationAuditRow[] = [];\n const appliedFixCounts: Record<string, number> = {};\n\n for (const row of rows) {\n const result = remediate_row(row, deps);\n remediatedRows.push(result.row);\n if (result.valid) {\n validRows.push(result.row);\n } else {\n manualRows.push(result.row);\n }\n\n result.appliedFixes.forEach((fix) => {\n appliedFixCounts[fix] = (appliedFixCounts[fix] ?? 0) + 1;\n });\n\n auditRows.push({\n id: row.id,\n user_id: row.user_id,\n state_code: row.state_code,\n version_before: result.versionBefore,\n version_after: result.versionAfter,\n valid_after_remediation: result.valid,\n applied_fixes: result.appliedFixes,\n original_reason: Array.isArray(row.reason) ? row.reason : [],\n final_reason: result.finalReasons,\n });\n }\n\n writeJsonLinesArtifact(files.allRemediated, remediatedRows);\n writeJsonLinesArtifact(files.readyForMcp, validRows);\n writeJsonLinesArtifact(files.residualManualQueue, manualRows);\n writeJsonLinesArtifact(files.audit, auditRows);\n writeTextArtifact(\n files.prompt,\n build_prompt(manualRows, files.residualManualQueue, files.prompt),\n );\n\n const report: FlowRemediationReport = {\n schema_version: 1,\n generated_at_utc: now().toISOString(),\n status: 'completed_local_flow_remediation',\n input_file: inputFile,\n out_dir: outDir,\n counts: {\n input_rows: rows.length,\n state_code_0_rows: rows.filter(\n (row) => Number.parseInt(coerceText(row.state_code) || '0', 10) === 0,\n ).length,\n state_code_100_rows: rows.filter(\n (row) => Number.parseInt(coerceText(row.state_code) || '0', 10) === 100,\n ).length,\n remediated_rows: remediatedRows.length,\n ready_for_mcp_rows: validRows.length,\n residual_manual_rows: manualRows.length,\n },\n applied_fix_counts: Object.fromEntries(\n Object.entries(appliedFixCounts).sort(([left], [right]) => left.localeCompare(right)),\n ),\n residual_manual_ids: manualRows\n .map((row) => coerceText(row.id))\n .filter((value) => value.length > 0),\n validation_backend: 'tidas_sdk',\n files: {\n all_remediated: files.allRemediated,\n ready_for_mcp: files.readyForMcp,\n residual_manual_queue: files.residualManualQueue,\n audit: files.audit,\n prompt: files.prompt,\n report: files.report,\n },\n };\n\n writeJsonArtifact(files.report, report);\n return report;\n}\n\nexport const __testInternals = {\n assert_input_file,\n assert_out_dir,\n build_dataset_format_reference,\n build_flow_property_item,\n build_output_files,\n build_prompt,\n build_local_dataset_uri,\n bump_ilcd_version,\n canonical_compliance_block,\n canonical_contact_reference,\n infer_flow_property_descriptor_from_hint,\n normalize_flow_properties,\n normalize_multilang_entries,\n normalize_multilang_field,\n normalize_name_block,\n normalize_quantitative_reference,\n normalize_reference_block,\n parse_validation_error,\n remediate_row,\n resolve_sdk_module_from_candidates,\n update_permanent_dataset_uri,\n validate_flow_payload,\n version_from_uri,\n};\n"]}
1
+ {"version":3,"file":"flow-remediate.js","sourceRoot":"","sources":["../../../src/lib/flow-remediate.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from 'node:fs';\nimport { createRequire } from 'node:module';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact, writeTextArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport {\n coerceText,\n deepGet,\n isRecord,\n loadRowsFromFile,\n normalizeText,\n type JsonRecord,\n} from './flow-governance.js';\nimport {\n type SdkValidationEntity,\n validateEntityWithDeepFallback,\n} from './tidas-sdk-validation.js';\n\nconst CONTACT_UUID = 'f4b4c314-8c4c-4c83-968f-5b3c7724f6a8';\nconst CONTACT_VERSION = '01.00.000';\nconst COMPLIANCE_SOURCE_UUID = 'd92a1a12-2545-49e2-a585-55c259997756';\nconst COMPLIANCE_SOURCE_VERSION = '20.20.002';\nconst ILCD_FORMAT_SOURCE_UUID = 'a97a0155-0234-4b87-b4ce-a45da52f2a40';\nconst ILCD_FORMAT_SOURCE_VERSION = '03.00.003';\nconst DEFAULT_MASS_FLOW_PROPERTY_UUID = '93a60a56-a3c8-11da-a746-0800200b9a66';\nconst DEFAULT_MASS_FLOW_PROPERTY_VERSION = '03.00.003';\nconst DEFAULT_MASS_FLOW_PROPERTY_NAME = 'Mass';\nconst UUID_RE = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/u;\nconst VERSION_QUERY_RE = /([?&]version=)(\\d+\\.\\d+\\.\\d+)/u;\nconst LOCAL_URI_VERSION_RE = /_(\\d+\\.\\d+\\.\\d+)\\.xml$/u;\nconst LEGACY_OUTPUT_PREFIX = 'flows_tidas_sdk_plus_classification';\nconst GENERIC_MASS_HINTS = new Set([\n 'flow property for kg',\n 'flow property for kilogram',\n 'flow property for kilograms',\n 'kg',\n 'kilogram',\n 'kilograms',\n 'mass',\n 'mass flow',\n 'mass flow kg',\n]);\n\ntype FlowValidationIssue = {\n validator: 'tidas_sdk';\n path: string;\n message: string;\n code: string;\n};\n\ntype FlowRemediationAuditRow = {\n id: unknown;\n user_id: unknown;\n state_code: unknown;\n version_before: string;\n version_after: string;\n valid_after_remediation: boolean;\n applied_fixes: string[];\n original_reason: unknown[];\n final_reason: FlowValidationIssue[];\n};\n\ntype FlowRemediationRowResult = {\n row: JsonRecord;\n valid: boolean;\n appliedFixes: string[];\n finalReasons: FlowValidationIssue[];\n versionBefore: string;\n versionAfter: string;\n};\n\ntype FlowValidationResult =\n | {\n success: true;\n }\n | {\n success: false;\n issues: FlowValidationIssue[];\n };\n\ntype FlowSdkModule = {\n createFlow?: (\n data?: unknown,\n validationConfig?: {\n mode?: 'strict' | 'weak' | 'ignore';\n throwOnError?: boolean;\n deepValidation?: boolean;\n },\n ) => SdkValidationEntity;\n};\n\ntype FlowRemediationFiles = {\n allRemediated: string;\n readyForMcp: string;\n residualManualQueue: string;\n audit: string;\n report: string;\n prompt: string;\n};\n\nexport type FlowRemediationReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_local_flow_remediation';\n input_file: string;\n out_dir: string;\n counts: {\n input_rows: number;\n state_code_0_rows: number;\n state_code_100_rows: number;\n remediated_rows: number;\n ready_for_mcp_rows: number;\n residual_manual_rows: number;\n };\n applied_fix_counts: Record<string, number>;\n residual_manual_ids: string[];\n validation_backend: 'tidas_sdk';\n files: {\n all_remediated: string;\n ready_for_mcp: string;\n residual_manual_queue: string;\n audit: string;\n prompt: string;\n report: string;\n };\n};\n\nexport type RunFlowRemediateOptions = {\n inputFile: string;\n outDir: string;\n};\n\ntype FlowRemediationDeps = {\n loadSdkModule?: () => FlowSdkModule & { location?: string };\n now?: () => Date;\n};\n\ntype FlowPropertyDescriptor = {\n uuid: string;\n name: string;\n version: string;\n};\n\nfunction build_sdk_candidates(): string[] {\n return ['@tiangong-lca/tidas-sdk/core'];\n}\n\nfunction resolve_sdk_module_from_candidates(\n requireFn: NodeJS.Require,\n candidates: string[],\n): FlowSdkModule & { location: string } {\n const details: string[] = [];\n for (const candidate of candidates) {\n try {\n const loaded = requireFn(candidate) as FlowSdkModule;\n if (typeof loaded.createFlow === 'function') {\n return {\n ...loaded,\n location: candidate,\n };\n }\n details.push(`Candidate missing createFlow export: ${candidate}`);\n } catch (error) {\n details.push(`Failed to load ${candidate}: ${String(error)}`);\n }\n }\n\n throw new CliError('Unable to resolve the local tidas-sdk flow factory.', {\n code: 'FLOW_REMEDIATE_SDK_NOT_FOUND',\n exitCode: 2,\n details,\n });\n}\n\nfunction resolve_local_sdk_module(): FlowSdkModule & { location: string } {\n return resolve_sdk_module_from_candidates(createRequire(import.meta.url), build_sdk_candidates());\n}\n\nfunction assert_input_file(inputFile: string): string {\n if (!inputFile) {\n throw new CliError('Missing required --input-file value.', {\n code: 'FLOW_REMEDIATE_INPUT_REQUIRED',\n exitCode: 2,\n });\n }\n\n const resolved = path.resolve(inputFile);\n if (!existsSync(resolved)) {\n throw new CliError(`Flow remediation input file not found: ${resolved}`, {\n code: 'FLOW_REMEDIATE_INPUT_NOT_FOUND',\n exitCode: 2,\n });\n }\n\n return resolved;\n}\n\nfunction assert_out_dir(outDir: string): string {\n if (!outDir) {\n throw new CliError('Missing required --out-dir value.', {\n code: 'FLOW_REMEDIATE_OUT_DIR_REQUIRED',\n exitCode: 2,\n });\n }\n return path.resolve(outDir);\n}\n\nfunction build_output_files(outDir: string): FlowRemediationFiles {\n return {\n allRemediated: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remediated_all.jsonl`),\n readyForMcp: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remediated_ready_for_mcp.jsonl`),\n residualManualQueue: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_residual_manual_queue.jsonl`),\n audit: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remediation_audit.jsonl`),\n report: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remediation_report.json`),\n prompt: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_residual_manual_queue_prompt.md`),\n };\n}\n\nfunction build_local_dataset_uri(datasetKind: string, uuidValue: string, version: string): string {\n if (!uuidValue) {\n return '';\n }\n\n const folderMap: Record<string, string> = {\n process: 'processes',\n 'process data set': 'processes',\n flow: 'flows',\n 'flow data set': 'flows',\n source: 'sources',\n 'source data set': 'sources',\n contact: 'contacts',\n 'contact data set': 'contacts',\n 'flow property data set': 'flowproperties',\n };\n const kind = datasetKind.trim().toLowerCase();\n const folder = folderMap[kind] ?? 'datasets';\n const versionText = version.trim() || '01.01.000';\n return `../${folder}/${uuidValue}_${versionText}.xml`;\n}\n\nfunction build_dataset_format_reference(): JsonRecord {\n return {\n '@refObjectId': ILCD_FORMAT_SOURCE_UUID,\n '@type': 'source data set',\n '@uri': build_local_dataset_uri('source', ILCD_FORMAT_SOURCE_UUID, ILCD_FORMAT_SOURCE_VERSION),\n '@version': ILCD_FORMAT_SOURCE_VERSION,\n 'common:shortDescription': [{ '@xml:lang': 'en', '#text': 'ILCD format' }],\n };\n}\n\nfunction normalize_multilang_entries(value: unknown): JsonRecord[] | null {\n if (typeof value === 'string') {\n const text = value.trim();\n return text ? [{ '@xml:lang': 'en', '#text': text }] : null;\n }\n\n if (Array.isArray(value)) {\n const entries = value.flatMap((item) => normalize_multilang_entries(item) ?? []);\n return entries.length ? entries : null;\n }\n\n if (!isRecord(value)) {\n return null;\n }\n\n const text = coerceText(value['#text']);\n if (!text) {\n return null;\n }\n\n return [\n {\n '@xml:lang': coerceText(value['@xml:lang']) || 'en',\n '#text': text,\n },\n ];\n}\n\nfunction first_text(value: unknown, fallback = ''): string {\n const normalized = normalize_multilang_entries(value);\n return normalized?.[0]?.['#text'] ? String(normalized[0]['#text']) : fallback;\n}\n\nfunction normalize_multilang_field(container: JsonRecord, key: string, fixes: string[]): void {\n if (!(key in container)) {\n return;\n }\n const normalized = normalize_multilang_entries(container[key]);\n if (!normalized) {\n delete container[key];\n fixes.push(`remove_empty_multilang:${key}`);\n return;\n }\n if (JSON.stringify(container[key]) !== JSON.stringify(normalized)) {\n container[key] = normalized;\n fixes.push(`normalize_multilang:${key}`);\n }\n}\n\nfunction normalize_name_block(dataSetInfo: JsonRecord, fixes: string[]): void {\n const nameBlock = isRecord(dataSetInfo.name) ? dataSetInfo.name : null;\n if (!nameBlock) {\n return;\n }\n\n for (const key of [\n 'baseName',\n 'flowProperties',\n 'mixAndLocationTypes',\n 'treatmentStandardsRoutes',\n ]) {\n if (!(key in nameBlock)) {\n continue;\n }\n const normalized = normalize_multilang_entries(nameBlock[key]);\n if (!normalized) {\n delete nameBlock[key];\n fixes.push(`remove_empty_name_field:${key}`);\n continue;\n }\n if (JSON.stringify(nameBlock[key]) !== JSON.stringify(normalized)) {\n nameBlock[key] = normalized;\n fixes.push(`normalize_name_field:${key}`);\n }\n }\n}\n\nfunction bump_ilcd_version(version: string): string {\n const parts = version.split('.');\n const numbers = [0, 0, 0].map((_, index) => {\n const raw = parts[index];\n const parsed = raw ? Number.parseInt(raw, 10) : 0;\n return Number.isInteger(parsed) ? parsed : 0;\n });\n numbers[2] += 1;\n return `${numbers[0].toString().padStart(2, '0')}.${numbers[1].toString().padStart(2, '0')}.${numbers[2]\n .toString()\n .padStart(3, '0')}`;\n}\n\nfunction version_from_uri(uri: string): string {\n const text = uri.trim();\n if (!text) {\n return '';\n }\n const localMatch = text.match(LOCAL_URI_VERSION_RE);\n if (localMatch) {\n return localMatch[1] as string;\n }\n const queryMatch = text.match(VERSION_QUERY_RE);\n return queryMatch?.[2] ?? '';\n}\n\nfunction normalize_reference_block(\n ref: unknown,\n defaultType: string,\n shortDescriptionFallback: string,\n): JsonRecord | null {\n if (!isRecord(ref)) {\n return null;\n }\n const refObjectId = coerceText(ref['@refObjectId']).toLowerCase();\n if (!refObjectId) {\n return null;\n }\n\n const refType = coerceText(ref['@type']) || defaultType;\n const version =\n coerceText(ref['@version']) ||\n version_from_uri(coerceText(ref['@uri'])) ||\n (refObjectId === ILCD_FORMAT_SOURCE_UUID\n ? ILCD_FORMAT_SOURCE_VERSION\n : refObjectId === COMPLIANCE_SOURCE_UUID\n ? COMPLIANCE_SOURCE_VERSION\n : '');\n const shortDescription =\n normalize_multilang_entries(ref['common:shortDescription']) ??\n (shortDescriptionFallback ? [{ '@xml:lang': 'en', '#text': shortDescriptionFallback }] : null);\n\n const result: JsonRecord = {\n '@type': refType,\n '@refObjectId': refObjectId,\n '@uri': version\n ? build_local_dataset_uri(refType, refObjectId, version)\n : coerceText(ref['@uri']),\n };\n if (version) {\n result['@version'] = version;\n }\n if (shortDescription) {\n result['common:shortDescription'] = shortDescription;\n }\n return result;\n}\n\nfunction canonical_contact_reference(): JsonRecord {\n return {\n '@type': 'contact data set',\n '@refObjectId': CONTACT_UUID,\n '@uri': build_local_dataset_uri('contact data set', CONTACT_UUID, CONTACT_VERSION),\n '@version': CONTACT_VERSION,\n 'common:shortDescription': [\n { '@xml:lang': 'en', '#text': 'Tiangong LCA Data Working Group' },\n { '@xml:lang': 'zh', '#text': '天工LCA数据团队' },\n ],\n };\n}\n\nfunction canonical_compliance_block(): JsonRecord {\n return {\n 'common:referenceToComplianceSystem': {\n '@refObjectId': COMPLIANCE_SOURCE_UUID,\n '@type': 'source data set',\n '@uri': build_local_dataset_uri(\n 'source data set',\n COMPLIANCE_SOURCE_UUID,\n COMPLIANCE_SOURCE_VERSION,\n ),\n '@version': COMPLIANCE_SOURCE_VERSION,\n 'common:shortDescription': [\n { '@xml:lang': 'en', '#text': 'ILCD Data Network - Entry-level' },\n ],\n },\n 'common:approvalOfOverallCompliance': 'Fully compliant',\n };\n}\n\nfunction normalize_hint_text(value: unknown): string {\n return normalizeText(first_text(value));\n}\n\nfunction infer_flow_property_descriptor_from_hint(value: unknown): FlowPropertyDescriptor | null {\n const normalized = normalize_hint_text(value);\n if (!normalized) {\n return null;\n }\n\n if (\n GENERIC_MASS_HINTS.has(normalized) ||\n (normalized.startsWith('flow property for ') && /\\b(kg|kilogram|kilograms)\\b/u.test(normalized))\n ) {\n return {\n uuid: DEFAULT_MASS_FLOW_PROPERTY_UUID,\n name: DEFAULT_MASS_FLOW_PROPERTY_NAME,\n version: DEFAULT_MASS_FLOW_PROPERTY_VERSION,\n };\n }\n\n return null;\n}\n\nfunction build_flow_property_item(\n descriptor: FlowPropertyDescriptor,\n internalId: string,\n meanValue: string,\n): JsonRecord {\n return {\n '@dataSetInternalID': internalId,\n meanValue,\n referenceToFlowPropertyDataSet: {\n '@type': 'flow property data set',\n '@refObjectId': descriptor.uuid,\n '@uri': build_local_dataset_uri(\n 'flow property data set',\n descriptor.uuid,\n descriptor.version,\n ),\n '@version': descriptor.version,\n 'common:shortDescription': [{ '@xml:lang': 'en', '#text': descriptor.name }],\n },\n };\n}\n\nfunction normalize_flow_properties(\n dataset: JsonRecord,\n fixes: string[],\n): { items: JsonRecord[]; unresolved: FlowValidationIssue[] } {\n const flowPropertiesBlock = isRecord(dataset.flowProperties) ? dataset.flowProperties : {};\n dataset.flowProperties = flowPropertiesBlock;\n const rawItems = flowPropertiesBlock.flowProperty;\n const items = Array.isArray(rawItems) ? rawItems : rawItems ? [rawItems] : [];\n const normalizedItems: JsonRecord[] = [];\n const unresolved: FlowValidationIssue[] = [];\n let repairedUnknownUuid = false;\n let filledMissingUuid = false;\n let usedDefaultMassFallback = false;\n\n for (let index = 0; index < items.length; index += 1) {\n const item = items[index];\n if (!isRecord(item)) {\n unresolved.push({\n validator: 'tidas_sdk',\n path: 'flowDataSet.flowProperties.flowProperty',\n message: 'flowProperty item is not an object',\n code: 'unsupported_item_type',\n });\n continue;\n }\n\n const reference = isRecord(item.referenceToFlowPropertyDataSet)\n ? item.referenceToFlowPropertyDataSet\n : null;\n const hint = reference?.['common:shortDescription'] ?? reference;\n const internalId = coerceText(item['@dataSetInternalID']) || String(index);\n const meanValue = coerceText(item.meanValue) || '1.0';\n const refUuid = coerceText(reference?.['@refObjectId']).toLowerCase();\n const refVersion =\n coerceText(reference?.['@version']) || version_from_uri(coerceText(reference?.['@uri']));\n let descriptor: FlowPropertyDescriptor | null;\n\n if (refUuid && UUID_RE.test(refUuid)) {\n descriptor = {\n uuid: refUuid,\n name: first_text(hint, DEFAULT_MASS_FLOW_PROPERTY_NAME),\n version:\n refVersion ||\n (refUuid === DEFAULT_MASS_FLOW_PROPERTY_UUID\n ? DEFAULT_MASS_FLOW_PROPERTY_VERSION\n : '01.01.000'),\n };\n } else {\n descriptor = infer_flow_property_descriptor_from_hint(hint);\n if (descriptor) {\n if (refUuid) {\n repairedUnknownUuid = true;\n } else {\n filledMissingUuid = true;\n }\n }\n }\n\n if (!descriptor) {\n unresolved.push({\n validator: 'tidas_sdk',\n path: 'flowDataSet.flowProperties.flowProperty.referenceToFlowPropertyDataSet.@refObjectId',\n message: refUuid\n ? `Unknown flow property UUID: ${refUuid}`\n : 'Unable to infer flow property UUID from the reference block',\n code: 'unknown_flow_property_uuid',\n });\n continue;\n }\n\n normalizedItems.push(build_flow_property_item(descriptor, internalId, meanValue));\n }\n\n if (!normalizedItems.length) {\n if (!items.length) {\n normalizedItems.push(\n build_flow_property_item(\n {\n uuid: DEFAULT_MASS_FLOW_PROPERTY_UUID,\n name: DEFAULT_MASS_FLOW_PROPERTY_NAME,\n version: DEFAULT_MASS_FLOW_PROPERTY_VERSION,\n },\n '0',\n '1.0',\n ),\n );\n usedDefaultMassFallback = true;\n } else {\n delete flowPropertiesBlock.flowProperty;\n return { items: [], unresolved };\n }\n }\n\n flowPropertiesBlock.flowProperty =\n normalizedItems.length === 1 ? normalizedItems[0] : normalizedItems;\n fixes.push('normalize_flow_properties');\n if (repairedUnknownUuid) {\n fixes.push('repair_unknown_flow_property_uuid_from_short_description');\n }\n if (filledMissingUuid) {\n fixes.push('fill_missing_flow_property_uuid_from_short_description');\n }\n if (usedDefaultMassFallback) {\n fixes.push('set_default_mass_flow_property');\n }\n return { items: normalizedItems, unresolved };\n}\n\nfunction normalize_quantitative_reference(\n dataset: JsonRecord,\n normalizedFlowProperties: JsonRecord[],\n fixes: string[],\n unresolved: FlowValidationIssue[],\n): void {\n const flowInformation = isRecord(dataset.flowInformation) ? dataset.flowInformation : {};\n dataset.flowInformation = flowInformation;\n const quantitativeReference = isRecord(flowInformation.quantitativeReference)\n ? flowInformation.quantitativeReference\n : {};\n flowInformation.quantitativeReference = quantitativeReference;\n\n if (!normalizedFlowProperties.length) {\n unresolved.push({\n validator: 'tidas_sdk',\n path: 'flowDataSet.flowInformation.quantitativeReference.referenceToReferenceFlowProperty',\n message:\n 'Cannot infer referenceToReferenceFlowProperty without any valid flowProperty entries',\n code: 'missing_flow_properties',\n });\n return;\n }\n\n const allowedIds = new Set(\n normalizedFlowProperties\n .map((item) => coerceText(item['@dataSetInternalID']))\n .filter((value) => value.length > 0),\n );\n const current = coerceText(quantitativeReference.referenceToReferenceFlowProperty);\n if (!allowedIds.has(current)) {\n quantitativeReference.referenceToReferenceFlowProperty = coerceText(\n normalizedFlowProperties[0]?.['@dataSetInternalID'],\n );\n fixes.push('set_reference_to_reference_flow_property');\n }\n}\n\nfunction normalize_technology_multilang_fields(dataset: JsonRecord, fixes: string[]): void {\n const technology = deepGet(dataset, ['flowInformation', 'technology']);\n if (!isRecord(technology)) {\n return;\n }\n normalize_multilang_field(technology, 'technologicalApplicability', fixes);\n}\n\nfunction normalize_technical_specification(dataset: JsonRecord, fixes: string[]): void {\n const technology = deepGet(dataset, ['flowInformation', 'technology']);\n if (!isRecord(technology) || !('referenceToTechnicalSpecification' in technology)) {\n return;\n }\n const normalized = normalize_reference_block(\n technology.referenceToTechnicalSpecification,\n 'source data set',\n first_text(technology.referenceToTechnicalSpecification),\n );\n if (!normalized) {\n delete technology.referenceToTechnicalSpecification;\n fixes.push('remove_invalid_reference_to_technical_specification');\n return;\n }\n if (JSON.stringify(technology.referenceToTechnicalSpecification) !== JSON.stringify(normalized)) {\n technology.referenceToTechnicalSpecification = normalized;\n fixes.push('normalize_reference_to_technical_specification');\n }\n}\n\nfunction update_permanent_dataset_uri(uriValue: unknown, targetVersion: string): unknown {\n const uri = coerceText(uriValue);\n if (!uri) {\n return uriValue;\n }\n if (VERSION_QUERY_RE.test(uri)) {\n return uri.replace(VERSION_QUERY_RE, `$1${targetVersion}`);\n }\n return uriValue;\n}\n\nfunction parse_validation_error(error: unknown): FlowValidationIssue[] {\n if (isRecord(error) && Array.isArray(error.issues)) {\n const issues = error.issues.filter(isRecord).map((issue) => {\n const pathValue = Array.isArray(issue.path)\n ? issue.path.map((part) => String(part)).join('.')\n : '<exception>';\n return {\n validator: 'tidas_sdk' as const,\n path: pathValue || '<exception>',\n message: coerceText(issue.message) || String(error),\n code: coerceText(issue.code) || 'validation_error',\n };\n });\n if (issues.length) {\n return issues;\n }\n }\n\n return [\n {\n validator: 'tidas_sdk',\n path: '<exception>',\n message: String(error),\n code: 'exception',\n },\n ];\n}\n\nfunction validate_flow_payload(\n payload: JsonRecord,\n deps: FlowRemediationDeps,\n): FlowValidationResult {\n const sdkModule = (deps.loadSdkModule ?? resolve_local_sdk_module)();\n if (typeof sdkModule.createFlow !== 'function') {\n throw new CliError('Resolved tidas-sdk core module does not expose createFlow.', {\n code: 'FLOW_REMEDIATE_SDK_INVALID',\n exitCode: 2,\n details: sdkModule.location ?? null,\n });\n }\n\n try {\n const result = validateEntityWithDeepFallback(payload, sdkModule.createFlow);\n if (!result) {\n throw new CliError(\n 'Resolved tidas-sdk flow entity does not expose validateEnhanced() or validate().',\n {\n code: 'FLOW_REMEDIATE_SDK_INVALID',\n exitCode: 2,\n details: sdkModule.location ?? null,\n },\n );\n }\n if (isRecord(result) && result.success === true) {\n return { success: true };\n }\n return {\n success: false,\n issues: parse_validation_error(isRecord(result) ? result.error : result),\n };\n } catch (error) {\n if (error instanceof CliError) {\n throw error;\n }\n return {\n success: false,\n issues: parse_validation_error(error),\n };\n }\n}\n\nfunction remediate_row(row: JsonRecord, deps: FlowRemediationDeps): FlowRemediationRowResult {\n const working = JSON.parse(JSON.stringify(row)) as JsonRecord;\n const payload = isRecord(working.json_ordered) ? working.json_ordered : null;\n const flowDataSet = isRecord(payload?.flowDataSet) ? payload.flowDataSet : null;\n\n if (!payload || !flowDataSet) {\n return {\n row: working,\n valid: false,\n appliedFixes: [],\n finalReasons: [\n {\n validator: 'tidas_sdk',\n path: 'json_ordered.flowDataSet',\n message: 'Missing flowDataSet payload',\n code: 'missing_flow_dataset',\n },\n ],\n versionBefore: '',\n versionAfter: '',\n };\n }\n\n const fixes: string[] = [];\n const residualUnresolved: FlowValidationIssue[] = [];\n const flowInformation = isRecord(flowDataSet.flowInformation) ? flowDataSet.flowInformation : {};\n flowDataSet.flowInformation = flowInformation;\n const dataSetInformation = isRecord(flowInformation.dataSetInformation)\n ? flowInformation.dataSetInformation\n : {};\n flowInformation.dataSetInformation = dataSetInformation;\n\n normalize_name_block(dataSetInformation, fixes);\n for (const key of [\n 'common:synonyms',\n 'common:generalComment',\n 'common:shortDescription',\n 'common:name',\n 'common:shortName',\n ]) {\n normalize_multilang_field(dataSetInformation, key, fixes);\n }\n if (isRecord(dataSetInformation['common:other'])) {\n delete dataSetInformation['common:other'];\n fixes.push('remove_common_other_object');\n }\n if (dataSetInformation.CASNumber === '') {\n delete dataSetInformation.CASNumber;\n fixes.push('remove_empty_cas_number');\n }\n\n const administrativeInformation = isRecord(flowDataSet.administrativeInformation)\n ? flowDataSet.administrativeInformation\n : {};\n flowDataSet.administrativeInformation = administrativeInformation;\n const dataEntryBy = isRecord(administrativeInformation.dataEntryBy)\n ? administrativeInformation.dataEntryBy\n : {};\n administrativeInformation.dataEntryBy = dataEntryBy;\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n administrativeInformation.publicationAndOwnership = publicationAndOwnership;\n\n const formatReference = build_dataset_format_reference();\n if (\n JSON.stringify(dataEntryBy['common:referenceToDataSetFormat']) !==\n JSON.stringify(formatReference)\n ) {\n dataEntryBy['common:referenceToDataSetFormat'] = formatReference;\n fixes.push('set_reference_to_dataset_format');\n }\n\n const contactReference = canonical_contact_reference();\n if (\n JSON.stringify(dataEntryBy['common:referenceToPersonOrEntityEnteringTheData']) !==\n JSON.stringify(contactReference)\n ) {\n dataEntryBy['common:referenceToPersonOrEntityEnteringTheData'] = contactReference;\n fixes.push('set_reference_to_person_or_entity_entering_the_data');\n }\n if (\n JSON.stringify(publicationAndOwnership['common:referenceToOwnershipOfDataSet']) !==\n JSON.stringify(contactReference)\n ) {\n publicationAndOwnership['common:referenceToOwnershipOfDataSet'] = contactReference;\n fixes.push('set_reference_to_ownership_of_dataset');\n }\n\n const modellingAndValidation = isRecord(flowDataSet.modellingAndValidation)\n ? flowDataSet.modellingAndValidation\n : {};\n flowDataSet.modellingAndValidation = modellingAndValidation;\n const complianceDeclarations = isRecord(modellingAndValidation.complianceDeclarations)\n ? modellingAndValidation.complianceDeclarations\n : {};\n modellingAndValidation.complianceDeclarations = complianceDeclarations;\n const complianceBlock = canonical_compliance_block();\n if (JSON.stringify(complianceDeclarations.compliance) !== JSON.stringify(complianceBlock)) {\n complianceDeclarations.compliance = complianceBlock;\n fixes.push('set_compliance_block');\n }\n\n const flowProperties = normalize_flow_properties(flowDataSet, fixes);\n residualUnresolved.push(...flowProperties.unresolved);\n normalize_quantitative_reference(flowDataSet, flowProperties.items, fixes, residualUnresolved);\n normalize_technology_multilang_fields(flowDataSet, fixes);\n normalize_technical_specification(flowDataSet, fixes);\n\n const flowUuid =\n coerceText(dataSetInformation['common:UUID']) || coerceText(working.id) || 'unknown-flow';\n if (!coerceText(publicationAndOwnership['common:dataSetVersion'])) {\n publicationAndOwnership['common:dataSetVersion'] = '01.01.000';\n }\n\n const versionBefore = coerceText(publicationAndOwnership['common:dataSetVersion']);\n let versionAfter = versionBefore;\n const stateCode = Number.parseInt(coerceText(working.state_code) || '0', 10) || 0;\n\n if (stateCode === 100) {\n versionAfter = bump_ilcd_version(versionBefore);\n if (versionAfter !== versionBefore) {\n publicationAndOwnership['common:dataSetVersion'] = versionAfter;\n fixes.push('bump_dataset_version');\n publicationAndOwnership['common:referenceToPrecedingDataSetVersion'] = {\n '@type': 'flow data set',\n '@refObjectId': flowUuid,\n '@uri': build_local_dataset_uri('flow data set', flowUuid, versionBefore),\n '@version': versionBefore,\n 'common:shortDescription': [\n {\n '@xml:lang': 'en',\n '#text': first_text(deepGet(dataSetInformation, ['name', 'baseName']), flowUuid),\n },\n ],\n };\n fixes.push('set_reference_to_preceding_dataset_version');\n const permanentUri = update_permanent_dataset_uri(\n publicationAndOwnership['common:permanentDataSetURI'],\n versionAfter,\n );\n if (permanentUri !== publicationAndOwnership['common:permanentDataSetURI']) {\n publicationAndOwnership['common:permanentDataSetURI'] = permanentUri;\n fixes.push('update_permanent_dataset_uri_version');\n }\n if ('version' in working) {\n working.version = versionAfter;\n }\n }\n } else if (\n isRecord(publicationAndOwnership['common:referenceToPrecedingDataSetVersion']) &&\n !Object.keys(publicationAndOwnership['common:referenceToPrecedingDataSetVersion'] as JsonRecord)\n .length\n ) {\n delete publicationAndOwnership['common:referenceToPrecedingDataSetVersion'];\n fixes.push('remove_empty_reference_to_preceding_dataset_version');\n }\n\n const validation = validate_flow_payload(payload, deps);\n const finalReasons =\n validation.success === true\n ? residualUnresolved\n : [...residualUnresolved, ...validation.issues];\n\n working.json_ordered = payload;\n working.reason = finalReasons;\n\n return {\n row: working,\n valid: finalReasons.length === 0,\n appliedFixes: fixes,\n finalReasons,\n versionBefore,\n versionAfter,\n };\n}\n\nfunction build_prompt(manualRows: JsonRecord[], manualFile: string, promptFile: string): string {\n if (!manualRows.length) {\n return `本轮 deterministic remediation 之后,residual manual queue 为 0。\n\n输入文件:\n\\`${manualFile}\\`\n\n结果:\n1. 当前没有需要再交给 OpenClaw 手工修复的 flow。\n2. 可直接对 ready-for-MCP 文件执行后续批量处理。\n3. 如果后续换了新的输入批次,再重新生成 residual manual queue prompt。\n`;\n }\n\n const queueIds = manualRows\n .map((row) => coerceText(row.id))\n .filter((value) => value.length > 0)\n .map((value) => `- \\`${value}\\``)\n .join('\\n');\n const outputFile = path.join(\n path.dirname(promptFile),\n `${LEGACY_OUTPUT_PREFIX}_residual_manual_fixed.jsonl`,\n );\n const stillInvalidFile = path.join(\n path.dirname(promptFile),\n `${LEGACY_OUTPUT_PREFIX}_residual_manual_still_invalid.jsonl`,\n );\n\n return `你现在要处理 residual manual queue 中 deterministic remediator 之后仍未通过 tidas-sdk 本地校验的 flow。\n\n输入文件:\n\\`${manualFile}\\`\n\n输出文件:\n\\`${outputFile}\\`\n\n执行要求:\n1. 只修改每条记录里的 json_ordered.flowDataSet,保留外层 envelope key:id、user_id、json_ordered、reason、state_code。\n2. 保持相同 UUID,不要改 id。\n3. state_code=0 的 flow 保持当前 common:dataSetVersion 不变。\n4. state_code=100 的 flow 已经完成 deterministic version bump,并已补 common:referenceToPrecedingDataSetVersion;除非绝对必要,不要再次 bump version。\n5. 优先补齐合法的 flowProperties.flowProperty 和 flowInformation.quantitativeReference.referenceToReferenceFlowProperty,让数据先通过本地 TIDAS SDK 校验。\n6. 不要无故重写 classification、命名、comment;如果必须改,改动最小,并在结果里保留必要说明。\n7. 每条输出仍按一行一个 JSON object 的 JSONL 形式写入。\n8. 修复成功的行把 reason 置为 [];如果仍无法修复,单独另存并写明残留原因。\n\n当前 residual manual queue 共 ${manualRows.length} 条:\n${queueIds || '- None'}\n\n建议步骤:\n1. 逐条读取 reason 和 json_ordered.flowDataSet。\n2. 先判断缺失的是 flowProperties 本体,还是只有 quantitative reference 丢失。\n3. 能从现有 classificationInformation、baseName、flow type、name.flowProperties 推断合法 flow property 的,补成最小合法块。\n4. 每改完一条都本地验证一次 TIDAS SDK。\n5. 把通过校验的 patched row 写到 \\`${outputFile}\\`。\n\n如果你还要保留未解决项,另写一个旁路文件:\n\\`${stillInvalidFile}\\`\n`;\n}\n\nexport async function runFlowRemediate(\n options: RunFlowRemediateOptions,\n deps: FlowRemediationDeps = {},\n): Promise<FlowRemediationReport> {\n const inputFile = assert_input_file(options.inputFile);\n const outDir = assert_out_dir(options.outDir);\n const rows = loadRowsFromFile(inputFile);\n const files = build_output_files(outDir);\n const now = deps.now ?? (() => new Date());\n\n const remediatedRows: JsonRecord[] = [];\n const validRows: JsonRecord[] = [];\n const manualRows: JsonRecord[] = [];\n const auditRows: FlowRemediationAuditRow[] = [];\n const appliedFixCounts: Record<string, number> = {};\n\n for (const row of rows) {\n const result = remediate_row(row, deps);\n remediatedRows.push(result.row);\n if (result.valid) {\n validRows.push(result.row);\n } else {\n manualRows.push(result.row);\n }\n\n result.appliedFixes.forEach((fix) => {\n appliedFixCounts[fix] = (appliedFixCounts[fix] ?? 0) + 1;\n });\n\n auditRows.push({\n id: row.id,\n user_id: row.user_id,\n state_code: row.state_code,\n version_before: result.versionBefore,\n version_after: result.versionAfter,\n valid_after_remediation: result.valid,\n applied_fixes: result.appliedFixes,\n original_reason: Array.isArray(row.reason) ? row.reason : [],\n final_reason: result.finalReasons,\n });\n }\n\n writeJsonLinesArtifact(files.allRemediated, remediatedRows);\n writeJsonLinesArtifact(files.readyForMcp, validRows);\n writeJsonLinesArtifact(files.residualManualQueue, manualRows);\n writeJsonLinesArtifact(files.audit, auditRows);\n writeTextArtifact(\n files.prompt,\n build_prompt(manualRows, files.residualManualQueue, files.prompt),\n );\n\n const report: FlowRemediationReport = {\n schema_version: 1,\n generated_at_utc: now().toISOString(),\n status: 'completed_local_flow_remediation',\n input_file: inputFile,\n out_dir: outDir,\n counts: {\n input_rows: rows.length,\n state_code_0_rows: rows.filter(\n (row) => Number.parseInt(coerceText(row.state_code) || '0', 10) === 0,\n ).length,\n state_code_100_rows: rows.filter(\n (row) => Number.parseInt(coerceText(row.state_code) || '0', 10) === 100,\n ).length,\n remediated_rows: remediatedRows.length,\n ready_for_mcp_rows: validRows.length,\n residual_manual_rows: manualRows.length,\n },\n applied_fix_counts: Object.fromEntries(\n Object.entries(appliedFixCounts).sort(([left], [right]) => left.localeCompare(right)),\n ),\n residual_manual_ids: manualRows\n .map((row) => coerceText(row.id))\n .filter((value) => value.length > 0),\n validation_backend: 'tidas_sdk',\n files: {\n all_remediated: files.allRemediated,\n ready_for_mcp: files.readyForMcp,\n residual_manual_queue: files.residualManualQueue,\n audit: files.audit,\n prompt: files.prompt,\n report: files.report,\n },\n };\n\n writeJsonArtifact(files.report, report);\n return report;\n}\n\nexport const __testInternals = {\n assert_input_file,\n assert_out_dir,\n build_dataset_format_reference,\n build_flow_property_item,\n build_output_files,\n build_prompt,\n build_local_dataset_uri,\n bump_ilcd_version,\n canonical_compliance_block,\n canonical_contact_reference,\n infer_flow_property_descriptor_from_hint,\n normalize_flow_properties,\n normalize_multilang_entries,\n normalize_multilang_field,\n normalize_name_block,\n normalize_quantitative_reference,\n normalize_reference_block,\n parse_validation_error,\n remediate_row,\n resolve_sdk_module_from_candidates,\n update_permanent_dataset_uri,\n validate_flow_payload,\n version_from_uri,\n};\n"]}