@tiangong-lca/cli 0.0.11 → 0.0.13

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 (60) hide show
  1. package/README.md +18 -7
  2. package/assets/tidas-schemas/tidas_contacts.json +312 -0
  3. package/assets/tidas-schemas/tidas_contacts_category.json +126 -0
  4. package/assets/tidas-schemas/tidas_data_types.json +359 -0
  5. package/assets/tidas-schemas/tidas_flowproperties.json +303 -0
  6. package/assets/tidas-schemas/tidas_flowproperties_category.json +61 -0
  7. package/assets/tidas-schemas/tidas_flows.json +809 -0
  8. package/assets/tidas-schemas/tidas_flows_elementary_category.json +720 -0
  9. package/assets/tidas-schemas/tidas_flows_product_category.json +59623 -0
  10. package/assets/tidas-schemas/tidas_lciamethods.json +1326 -0
  11. package/assets/tidas-schemas/tidas_lciamethods_category.json +685 -0
  12. package/assets/tidas-schemas/tidas_lifecyclemodels.json +1374 -0
  13. package/assets/tidas-schemas/tidas_locations_category.json +2593 -0
  14. package/assets/tidas-schemas/tidas_processes.json +1646 -0
  15. package/assets/tidas-schemas/tidas_processes_category.json +10795 -0
  16. package/assets/tidas-schemas/tidas_sources.json +228 -0
  17. package/assets/tidas-schemas/tidas_sources_category.json +100 -0
  18. package/assets/tidas-schemas/tidas_unitgroups.json +338 -0
  19. package/assets/tidas-schemas/tidas_unitgroups_category.json +61 -0
  20. package/dist/src/cli.js +847 -13
  21. package/dist/src/cli.js.map +1 -1
  22. package/dist/src/lib/dataset-classification.js +947 -0
  23. package/dist/src/lib/dataset-classification.js.map +1 -0
  24. package/dist/src/lib/dataset-command.js +11 -0
  25. package/dist/src/lib/dataset-command.js.map +1 -1
  26. package/dist/src/lib/dataset-contract.js +2 -0
  27. package/dist/src/lib/dataset-contract.js.map +1 -1
  28. package/dist/src/lib/dataset-curation-queue.js +359 -2
  29. package/dist/src/lib/dataset-curation-queue.js.map +1 -1
  30. package/dist/src/lib/dataset-import-lca.js +18 -0
  31. package/dist/src/lib/dataset-import-lca.js.map +1 -1
  32. package/dist/src/lib/dataset-local.js +94 -1
  33. package/dist/src/lib/dataset-local.js.map +1 -1
  34. package/dist/src/lib/dataset-maintenance-clear-account.js +506 -0
  35. package/dist/src/lib/dataset-maintenance-clear-account.js.map +1 -0
  36. package/dist/src/lib/dataset-patch.js +797 -0
  37. package/dist/src/lib/dataset-patch.js.map +1 -0
  38. package/dist/src/lib/dataset-remote-verify.js +188 -3
  39. package/dist/src/lib/dataset-remote-verify.js.map +1 -1
  40. package/dist/src/lib/dataset-save-draft-run.js +725 -0
  41. package/dist/src/lib/dataset-save-draft-run.js.map +1 -0
  42. package/dist/src/lib/dataset-validate.js +32 -2
  43. package/dist/src/lib/dataset-validate.js.map +1 -1
  44. package/dist/src/lib/flow-publish-version.js +7 -2
  45. package/dist/src/lib/flow-publish-version.js.map +1 -1
  46. package/dist/src/lib/flow-qa.js +8 -0
  47. package/dist/src/lib/flow-qa.js.map +1 -1
  48. package/dist/src/lib/identity-preflight.js +895 -117
  49. package/dist/src/lib/identity-preflight.js.map +1 -1
  50. package/dist/src/lib/lifecyclemodel-qa.js +159 -34
  51. package/dist/src/lib/lifecyclemodel-qa.js.map +1 -1
  52. package/dist/src/lib/process-required-fields.js +62 -12
  53. package/dist/src/lib/process-required-fields.js.map +1 -1
  54. package/dist/src/lib/process-save-draft-run.js +10 -0
  55. package/dist/src/lib/process-save-draft-run.js.map +1 -1
  56. package/dist/src/lib/process-save-draft.js +59 -3
  57. package/dist/src/lib/process-save-draft.js.map +1 -1
  58. package/dist/src/lib/supabase-client.js +19 -8
  59. package/dist/src/lib/supabase-client.js.map +1 -1
  60. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"process-required-fields.js","sourceRoot":"","sources":["../../../src/lib/process-required-fields.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport {\n cloneJson,\n datasetRoot,\n firstNonEmpty,\n isRecord,\n materializeDatasetRows,\n type DatasetRowInput,\n type JsonObject,\n} from './dataset-local.js';\n\nconst ANNUAL_SUPPLY_FIELD =\n 'processDataSet.modellingAndValidation.dataSourcesTreatmentAndRepresentativeness.annualSupplyOrProductionVolume';\nconst ANNUAL_SUPPLY_ROOT_FIELD =\n 'modellingAndValidation.dataSourcesTreatmentAndRepresentativeness.annualSupplyOrProductionVolume';\nconst NUMERIC_TEXT_WITH_SUFFIX_PATTERN = /^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([Ee][+-]?\\d+)?\\s+\\S.*$/u;\nconst ANNUAL_PERIOD_PATTERN =\n /(?:\\/\\s*(?:year|yr|a)\\b|\\bper\\s+(?:year|annum)\\b|\\/\\s*年|每年|年度|年供应|年产)/iu;\nconst ANNUAL_UNAVAILABLE_PATTERN =\n /\\b(?:source\\s+)?(?:production\\s+)?volume\\s+(?:unavailable|unknown|not\\s+available)\\b/iu;\nconst CJK_TEXT_PATTERN = /[\\p{Script=Han}]/u;\nconst NET_CALORIFIC_VALUE_ID = '93a60a56-a3c8-11da-a746-0800200c9a66';\nconst DEFAULT_COMPLIANCE_SYSTEM = {\n '@refObjectId': 'c84c4185-d1b0-44fc-823e-d2ec630c7906',\n '@type': 'source data set',\n '@uri': 'https://tiangong.earth/datasets/c84c4185-d1b0-44fc-823e-d2ec630c7906',\n '@version': '00.00.001',\n 'common:shortDescription': {\n '@xml:lang': 'en',\n '#text': 'Environmental Footprint (EF) 3.1',\n },\n} as const;\nconst DEFAULT_COMPLIANCE_DECLARATION = {\n 'common:referenceToComplianceSystem': DEFAULT_COMPLIANCE_SYSTEM,\n 'common:approvalOfOverallCompliance': 'Not defined',\n 'common:nomenclatureCompliance': 'Not defined',\n 'common:methodologicalCompliance': 'Not defined',\n 'common:reviewCompliance': 'Not defined',\n 'common:documentationCompliance': 'Not defined',\n 'common:qualityCompliance': 'Not defined',\n} as const;\nconst REQUIRED_COMPLIANCE_FIELDS = [\n 'common:approvalOfOverallCompliance',\n 'common:nomenclatureCompliance',\n 'common:methodologicalCompliance',\n 'common:reviewCompliance',\n 'common:documentationCompliance',\n 'common:qualityCompliance',\n] as const;\n\ntype AnnualSupplyStatus = 'existing' | 'completed' | 'blocked' | 'skipped';\n\nexport type ProcessRequiredFieldIssue = {\n code: string;\n message: string;\n path: string;\n};\n\nexport type ProcessRequiredFieldCompletion = {\n field_path: string;\n source: 'existing' | 'evidence' | 'placeholder_repair' | 'required_structure_repair';\n value: Array<{ '#text': string; '@xml:lang': string }>;\n amount: string | null;\n unit: string | null;\n reference_exchange_internal_id: string | null;\n basis: string;\n};\n\nexport type ProcessRequiredFieldsRowReport = {\n index: number;\n id: string | null;\n version: string | null;\n type: string | null;\n status: AnnualSupplyStatus;\n issues: ProcessRequiredFieldIssue[];\n completions: ProcessRequiredFieldCompletion[];\n};\n\nexport type ProcessRequiredFieldsReport = {\n generated_at_utc: string;\n input_path: string;\n out_path: string;\n out_dir: string | null;\n status: 'completed' | 'completed_with_blockers';\n default_unit: string;\n counts: {\n total: number;\n processes: number;\n completed: number;\n existing: number;\n blocked: number;\n skipped: number;\n };\n files: {\n output_rows: string;\n report: string | null;\n evidence: string | null;\n };\n rows: ProcessRequiredFieldsRowReport[];\n};\n\nexport type RunProcessRequiredFieldsCompleteOptions = {\n inputPath: string;\n outPath: string;\n outDir?: string | null;\n defaultUnit?: string | null;\n flowInputPath?: string | null;\n rawInput?: unknown;\n rawFlowInput?: unknown;\n now?: Date;\n};\n\ntype CompletionContext = {\n defaultUnit: string;\n flowUnitById?: Map<string, string>;\n};\n\ntype AnnualSupplyEvidenceValue = {\n value: Array<{ '#text': string; '@xml:lang': string }>;\n amount: string;\n unit: string;\n basis: string;\n};\n\nfunction normalizeUnit(value: string | null | undefined): string {\n const token = value?.trim();\n return token || 'unit';\n}\n\nfunction sourceLanguageForText(value: string, fallback = 'en'): string {\n return CJK_TEXT_PATTERN.test(value) ? 'zh' : fallback;\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 asList(value: unknown): unknown[] {\n if (Array.isArray(value)) {\n return value;\n }\n return value === undefined || value === null ? [] : [value];\n}\n\nfunction valueAtPath(root: unknown, pathExpression: string): unknown {\n let current = root;\n for (const segment of pathExpression.split('.')) {\n if (!isRecord(current)) {\n return undefined;\n }\n current = current[segment];\n }\n return current;\n}\n\nfunction annualSupplyItems(value: unknown): Array<{ '#text': string; '@xml:lang': string }> {\n return asList(value).filter((item): item is { '#text': string; '@xml:lang': string } => {\n return (\n isRecord(item) && typeof item['#text'] === 'string' && typeof item['@xml:lang'] === 'string'\n );\n });\n}\n\nfunction isValidAnnualSupplyVolume(value: unknown): boolean {\n const items = annualSupplyItems(value);\n return (\n items.length > 0 &&\n items.every((item) => {\n const text = item['#text'].trim();\n return (\n !ANNUAL_UNAVAILABLE_PATTERN.test(text) &&\n NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(text) &&\n ANNUAL_PERIOD_PATTERN.test(text)\n );\n })\n );\n}\n\nfunction isValidReview(value: unknown): boolean {\n return asList(value).some((item) => isRecord(item) && Boolean(firstNonEmpty(item['@type'])));\n}\n\nfunction isValidComplianceDeclaration(value: unknown): boolean {\n return asList(value).some((item) => {\n if (!isRecord(item)) {\n return false;\n }\n const complianceSystem = isRecord(item['common:referenceToComplianceSystem'])\n ? item['common:referenceToComplianceSystem']\n : {};\n return (\n Boolean(firstNonEmpty(complianceSystem['@refObjectId'])) &&\n REQUIRED_COMPLIANCE_FIELDS.every((field) => Boolean(firstNonEmpty(item[field])))\n );\n });\n}\n\nexport function collectProcessRequiredFieldIssues(\n payload: JsonObject,\n): ProcessRequiredFieldIssue[] {\n const root = datasetRoot(payload, 'process');\n const modelling = isRecord(root.modellingAndValidation) ? root.modellingAndValidation : {};\n const dataSources = isRecord(modelling.dataSourcesTreatmentAndRepresentativeness)\n ? modelling.dataSourcesTreatmentAndRepresentativeness\n : null;\n if (!dataSources) {\n return [\n {\n code: 'process_data_sources_treatment_missing',\n message: 'Process payload must include dataSourcesTreatmentAndRepresentativeness.',\n path: 'processDataSet.modellingAndValidation.dataSourcesTreatmentAndRepresentativeness',\n },\n ];\n }\n\n const issues: ProcessRequiredFieldIssue[] = [];\n const validation = isRecord(modelling.validation) ? modelling.validation : {};\n if (!isValidReview(validation.review)) {\n issues.push({\n code: 'process_validation_review_missing',\n message: 'Process payload must include modellingAndValidation.validation.review.',\n path: 'processDataSet.modellingAndValidation.validation.review',\n });\n }\n\n const complianceDeclarations = isRecord(modelling.complianceDeclarations)\n ? modelling.complianceDeclarations\n : {};\n if (!isValidComplianceDeclaration(complianceDeclarations.compliance)) {\n issues.push({\n code: 'process_compliance_declaration_missing',\n message:\n 'Process payload must include modellingAndValidation.complianceDeclarations.compliance.',\n path: 'processDataSet.modellingAndValidation.complianceDeclarations.compliance',\n });\n }\n\n const annualSupply = dataSources.annualSupplyOrProductionVolume;\n if (isValidAnnualSupplyVolume(annualSupply)) {\n return issues;\n }\n\n const items = annualSupplyItems(annualSupply);\n if (items.length === 0) {\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_missing',\n message:\n 'Process payload must include annualSupplyOrProductionVolume as numeric text with a unit or context suffix.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n }\n\n if (items.some((item) => ANNUAL_UNAVAILABLE_PATTERN.test(item['#text'].trim()))) {\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_missing',\n message:\n 'Process payload must include annualSupplyOrProductionVolume as numeric text with a unit or context suffix.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n }\n\n if (\n items.every((item) => NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(item['#text'].trim())) &&\n items.some((item) => !ANNUAL_PERIOD_PATTERN.test(item['#text'].trim()))\n ) {\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_not_annualized',\n message:\n 'annualSupplyOrProductionVolume must express an annualized amount such as \"3.6 MJ/year\" or \"3.6 MJ/年\", not a reference-flow description.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n }\n\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_invalid',\n message:\n 'annualSupplyOrProductionVolume must start with a real number followed by a unit or context suffix.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n}\n\nfunction issuePath(pathSegments: Array<string | number>): string {\n return pathSegments.length > 0 ? pathSegments.map(String).join('.') : '<root>';\n}\n\nfunction collectPlaceholderIssuesFromValue(\n value: unknown,\n pathSegments: Array<string | number>,\n issues: ProcessRequiredFieldIssue[],\n): void {\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (\n (pathSegments.at(-1) === 'common:referenceYear' && normalized === '9999') ||\n normalized.includes('tidas_import_placeholder') ||\n normalized.includes('tidas_import_trace_v1') ||\n normalized.includes('not declared in source package') ||\n normalized.includes('source package metadata not declared') ||\n normalized === '<null>' ||\n /(^|[\\s\"'`])(?:\\/users\\/|\\/home\\/|[a-z]:\\\\)/iu.test(value) ||\n normalized.includes('placeholder.example') ||\n normalized.includes('pending confirmation') ||\n /00000000-0000-0000-0000-0000000000[0-9a-f]{2}/u.test(normalized)\n ) {\n issues.push({\n code: 'process_placeholder_content',\n message:\n 'Process payload contains placeholder or pending-confirmation content that must be replaced before save or publish.',\n path: issuePath(pathSegments),\n });\n }\n return;\n }\n\n if (typeof value === 'number') {\n if (pathSegments.at(-1) === 'common:referenceYear' && value === 9999) {\n issues.push({\n code: 'process_placeholder_content',\n message:\n 'Process payload contains placeholder or pending-confirmation content that must be replaced before save or publish.',\n path: issuePath(pathSegments),\n });\n }\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item, index) =>\n collectPlaceholderIssuesFromValue(item, [...pathSegments, index], issues),\n );\n return;\n }\n\n if (isRecord(value)) {\n for (const [key, child] of Object.entries(value)) {\n collectPlaceholderIssuesFromValue(child, [...pathSegments, key], issues);\n }\n }\n}\n\nexport function collectProcessPlaceholderIssues(payload: JsonObject): ProcessRequiredFieldIssue[] {\n const root = datasetRoot(payload, 'process');\n const issues: ProcessRequiredFieldIssue[] = [];\n collectPlaceholderIssuesFromValue(root, ['processDataSet'], issues);\n return issues;\n}\n\nfunction hasPlaceholderContent(value: unknown): boolean {\n const issues: ProcessRequiredFieldIssue[] = [];\n collectPlaceholderIssuesFromValue(value, [], issues);\n return issues.length > 0;\n}\n\nfunction removePlaceholderField(\n parent: JsonObject,\n key: string,\n fieldPath: string,\n completions: ProcessRequiredFieldCompletion[],\n): void {\n if (!hasPlaceholderContent(parent[key])) {\n return;\n }\n delete parent[key];\n completions.push({\n field_path: fieldPath,\n source: 'placeholder_repair',\n value: [],\n amount: null,\n unit: null,\n reference_exchange_internal_id: null,\n basis:\n 'Removed placeholder review metadata because the dataset is marked Not reviewed and no completed review evidence is present.',\n });\n}\n\nfunction repairPlaceholderReviewMetadata(root: JsonObject): ProcessRequiredFieldCompletion[] {\n const modelling = isRecord(root.modellingAndValidation) ? root.modellingAndValidation : {};\n const validation = isRecord(modelling.validation) ? modelling.validation : null;\n if (!validation) {\n return [];\n }\n\n const completions: ProcessRequiredFieldCompletion[] = [];\n const validationPath = 'processDataSet.modellingAndValidation.validation';\n for (const key of [\n 'reviewDetails',\n 'common:reviewDetails',\n 'common:referenceToCompleteReviewReport',\n 'common:referenceToNameOfReviewerAndInstitution',\n ]) {\n removePlaceholderField(validation, key, `${validationPath}.${key}`, completions);\n }\n\n if (isRecord(validation.review)) {\n const reviewPath = `${validationPath}.review`;\n for (const key of [\n 'reviewDetails',\n 'common:reviewDetails',\n 'common:referenceToCompleteReviewReport',\n 'common:referenceToNameOfReviewerAndInstitution',\n ]) {\n removePlaceholderField(validation.review, key, `${reviewPath}.${key}`, completions);\n }\n }\n\n return completions;\n}\n\nfunction addRequiredStructureCompletion(\n completions: ProcessRequiredFieldCompletion[],\n fieldPath: string,\n basis: string,\n): void {\n completions.push({\n field_path: fieldPath,\n source: 'required_structure_repair',\n value: [],\n amount: null,\n unit: null,\n reference_exchange_internal_id: null,\n basis,\n });\n}\n\nfunction repairRequiredProcessStructures(root: JsonObject): ProcessRequiredFieldCompletion[] {\n const completions: ProcessRequiredFieldCompletion[] = [];\n if (!isRecord(root.modellingAndValidation)) {\n root.modellingAndValidation = {};\n }\n const modelling = root.modellingAndValidation as JsonObject;\n\n if (!isRecord(modelling.validation)) {\n modelling.validation = {};\n }\n const validation = modelling.validation as JsonObject;\n if (!isValidReview(validation.review)) {\n validation.review = {\n '@type': 'Not reviewed',\n };\n addRequiredStructureCompletion(\n completions,\n 'processDataSet.modellingAndValidation.validation.review',\n 'Inserted a conservative Not reviewed marker because UI roundtrip or source data omitted the required validation.review structure.',\n );\n }\n\n if (!isRecord(modelling.complianceDeclarations)) {\n modelling.complianceDeclarations = {};\n }\n const complianceDeclarations = modelling.complianceDeclarations as JsonObject;\n if (!isValidComplianceDeclaration(complianceDeclarations.compliance)) {\n complianceDeclarations.compliance = cloneJson(DEFAULT_COMPLIANCE_DECLARATION);\n addRequiredStructureCompletion(\n completions,\n 'processDataSet.modellingAndValidation.complianceDeclarations.compliance',\n 'Inserted a conservative Not defined compliance declaration against EF 3.1 because UI roundtrip or source data omitted the required compliance structure.',\n );\n }\n\n return completions;\n}\n\nfunction processRootForMutation(payload: JsonObject): JsonObject {\n if (isRecord(payload.processDataSet)) {\n return payload.processDataSet;\n }\n return payload;\n}\n\nfunction selectReferenceExchange(root: JsonObject): JsonObject | null {\n const exchangesRoot = isRecord(root.exchanges) ? root.exchanges : {};\n const exchanges = asList(exchangesRoot.exchange).filter(isRecord);\n const processInfo = isRecord(root.processInformation) ? root.processInformation : {};\n const quantitativeReference = isRecord(processInfo.quantitativeReference)\n ? processInfo.quantitativeReference\n : {};\n const referenceId = firstNonEmpty(quantitativeReference.referenceToReferenceFlow);\n\n const byReferenceId = referenceId\n ? exchanges.find((exchange) => firstNonEmpty(exchange['@dataSetInternalID']) === referenceId)\n : null;\n if (byReferenceId) {\n return byReferenceId;\n }\n\n return (\n exchanges.find((exchange) => exchange.quantitativeReference === true) ??\n exchanges.find(\n (exchange) => String(exchange.exchangeDirection ?? '').toLowerCase() === 'output',\n ) ??\n null\n );\n}\n\nfunction localizedTextIncludes(value: unknown, pattern: RegExp): boolean {\n return annualSupplyItems(value).some((item) => pattern.test(item['#text']));\n}\n\nfunction inferSpecificUnitFromFlowPayload(payload: JsonObject): string | null {\n const root = datasetRoot(payload, 'flow');\n const flowPropertiesRoot = isRecord(root.flowProperties) ? root.flowProperties : {};\n const flowProperties = asList(flowPropertiesRoot.flowProperty).filter(isRecord);\n for (const flowProperty of flowProperties) {\n const direct = firstNonEmpty(\n flowProperty.unit,\n flowProperty.referenceUnit,\n flowProperty.flowUnit,\n );\n if (direct) {\n return direct;\n }\n\n const flowPropertyRef = isRecord(flowProperty.referenceToFlowPropertyDataSet)\n ? flowProperty.referenceToFlowPropertyDataSet\n : {};\n const flowPropertyId = firstNonEmpty(flowPropertyRef['@refObjectId']);\n const flowPropertyText = flowPropertyRef['common:shortDescription'];\n if (\n flowPropertyId === NET_CALORIFIC_VALUE_ID ||\n localizedTextIncludes(flowPropertyText, /Net calorific|净热值/u)\n ) {\n return 'MJ';\n }\n }\n\n const flowInformation = isRecord(root.flowInformation) ? root.flowInformation : {};\n const dataSetInformation = isRecord(flowInformation.dataSetInformation)\n ? flowInformation.dataSetInformation\n : {};\n const classificationInformation = isRecord(dataSetInformation.classificationInformation)\n ? dataSetInformation.classificationInformation\n : {};\n const classification = isRecord(classificationInformation['common:classification'])\n ? classificationInformation['common:classification']\n : {};\n const classificationClasses = classification['common:class'];\n if (\n localizedTextIncludes(classificationClasses, /Electrical energy|electricity|交流电|电力|电能/iu)\n ) {\n return 'MJ';\n }\n\n return null;\n}\n\nfunction buildFlowUnitIndex(\n flowRows: DatasetRowInput[],\n fallbackUnit: string,\n): Map<string, string> {\n const index = new Map<string, string>();\n for (const row of flowRows) {\n if (row.kind !== 'flow' || !row.id) {\n continue;\n }\n const inferred = inferSpecificUnitFromFlowPayload(row.payload);\n if (inferred && inferred !== fallbackUnit) {\n index.set(row.id, inferred);\n }\n }\n return index;\n}\n\nfunction inferUnitFromReferenceExchange(\n exchange: JsonObject,\n fallbackOrContext: string | CompletionContext,\n): string {\n const context =\n typeof fallbackOrContext === 'string' ? { defaultUnit: fallbackOrContext } : fallbackOrContext;\n const fallbackUnit = context.defaultUnit;\n const flowRef = isRecord(exchange.referenceToFlowDataSet) ? exchange.referenceToFlowDataSet : {};\n const refObjectId = firstNonEmpty(flowRef['@refObjectId']);\n if (refObjectId) {\n const indexedUnit = context.flowUnitById?.get(refObjectId);\n if (indexedUnit) {\n return indexedUnit;\n }\n }\n\n const direct = firstNonEmpty(exchange.unit, exchange.referenceUnit, exchange.flowUnit);\n if (direct) {\n return direct;\n }\n\n const shortDescriptions = flowRef['common:shortDescription'];\n if (\n localizedTextIncludes(\n shortDescriptions,\n /MJ|net calorific|lower calorific|Electrical energy|electricity|净热值|低位发热|交流电|电力|电能/iu,\n )\n ) {\n return 'MJ';\n }\n\n const flowProperty = isRecord(exchange.flowProperty) ? exchange.flowProperty : {};\n const flowPropertyRef = isRecord(flowProperty.referenceToFlowPropertyDataSet)\n ? flowProperty.referenceToFlowPropertyDataSet\n : {};\n const flowPropertyId = firstNonEmpty(flowPropertyRef['@refObjectId']);\n const flowPropertyText = flowPropertyRef['common:shortDescription'];\n if (\n refObjectId === NET_CALORIFIC_VALUE_ID ||\n flowPropertyId === NET_CALORIFIC_VALUE_ID ||\n localizedTextIncludes(flowPropertyText, /Net calorific|净热值/u)\n ) {\n return 'MJ';\n }\n\n return fallbackUnit;\n}\n\nfunction buildAnnualSupplyValue(\n amount: string,\n unit: string,\n): Array<{\n '#text': string;\n '@xml:lang': string;\n}> {\n return [{ '@xml:lang': 'en', '#text': `${amount} ${unit}/year` }];\n}\n\nfunction annualSupplyTextParts(value: string): { amount: string; unit: string } | null {\n const match = /^\\s*([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[Ee][+-]?\\d+)?)\\s+(\\S.*)$/u.exec(value);\n return match ? { amount: match[1] as string, unit: (match[2] as string).trim() } : null;\n}\n\nfunction annualSupplyValueFromText(value: string): AnnualSupplyEvidenceValue | null {\n const text = value.trim();\n if (!NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(text) || !ANNUAL_PERIOD_PATTERN.test(text)) {\n return null;\n }\n const parts = annualSupplyTextParts(text) as { amount: string; unit: string };\n return {\n value: [{ '@xml:lang': sourceLanguageForText(text), '#text': text }],\n amount: parts.amount,\n unit: parts.unit,\n basis: 'Evidence provided a complete annual supply / production volume text value.',\n };\n}\n\nfunction normalizeAnnualSupplyEvidenceValue(\n candidate: unknown,\n context: CompletionContext,\n): AnnualSupplyEvidenceValue | null {\n if (typeof candidate === 'string') {\n return annualSupplyValueFromText(candidate);\n }\n\n if (typeof candidate === 'number' && Number.isFinite(candidate)) {\n const amount = String(candidate);\n return {\n value: buildAnnualSupplyValue(amount, context.defaultUnit),\n amount,\n unit: context.defaultUnit,\n basis:\n 'Evidence provided a numeric annual supply / production volume; the configured default unit was applied.',\n };\n }\n\n if (isValidAnnualSupplyVolume(candidate)) {\n const value = [\n annualSupplyItems(candidate).map((item) => ({\n '@xml:lang': item['@xml:lang'],\n '#text': item['#text'].trim(),\n }))[0]!,\n ];\n const parts = annualSupplyTextParts(value[0]!['#text']) as { amount: string; unit: string };\n return {\n value,\n amount: parts.amount,\n unit: parts.unit,\n basis:\n 'Evidence provided a validated source-language annual supply / production volume value.',\n };\n }\n\n if (!isRecord(candidate)) {\n return null;\n }\n\n for (const key of [\n 'value',\n 'text',\n 'value_text',\n 'valueText',\n 'annualSupplyOrProductionVolume',\n 'annual_supply_or_production_volume',\n ]) {\n const nested = normalizeAnnualSupplyEvidenceValue(candidate[key], context);\n if (nested) {\n return nested;\n }\n }\n\n const preferredLanguage = textValue(\n candidate.source_language ??\n candidate.sourceLanguage ??\n candidate.lang ??\n candidate['@xml:lang'],\n )?.toLowerCase();\n const english = textValue(candidate.en ?? candidate.english);\n const chinese = textValue(candidate.zh ?? candidate.chinese ?? candidate['zh-CN']);\n const localized = [\n english ? { '@xml:lang': 'en', '#text': english } : null,\n chinese ? { '@xml:lang': 'zh', '#text': chinese } : null,\n ].filter((item): item is { '#text': string; '@xml:lang': string } => Boolean(item));\n if (localized.length > 0 && isValidAnnualSupplyVolume(localized)) {\n const selected =\n localized.find((item) => item['@xml:lang'].toLowerCase() === preferredLanguage) ??\n localized[0]!;\n const value = [selected];\n const parts = annualSupplyTextParts(selected['#text']) as {\n amount: string;\n unit: string;\n };\n return {\n value,\n amount: parts.amount,\n unit: parts.unit,\n basis: 'Evidence provided a language-specific annual supply / production volume text value.',\n };\n }\n\n const amount = textValue(candidate.amount ?? candidate.value_amount ?? candidate.valueAmount);\n const unit = normalizeUnit(\n textValue(\n candidate.unit ?? candidate.uom ?? candidate.reference_unit ?? candidate.referenceUnit,\n ) ?? context.defaultUnit,\n );\n if (amount) {\n return {\n value: buildAnnualSupplyValue(amount, unit),\n amount,\n unit,\n basis:\n 'Evidence provided annual supply / production volume amount and unit as structured fields.',\n };\n }\n\n return null;\n}\n\nfunction isAnnualSupplyEvidencePath(pathExpression: string | null): boolean {\n if (!pathExpression) {\n return false;\n }\n return (\n pathExpression === ANNUAL_SUPPLY_FIELD ||\n pathExpression === ANNUAL_SUPPLY_ROOT_FIELD ||\n pathExpression.endsWith(`.${ANNUAL_SUPPLY_ROOT_FIELD}`) ||\n pathExpression.endsWith('.annualSupplyOrProductionVolume')\n );\n}\n\nfunction fieldPathFromEvidenceEntry(entry: JsonObject): string | null {\n return firstNonEmpty(\n entry.field_path,\n entry.fieldPath,\n entry.path,\n entry.field,\n entry.target_path,\n entry.targetPath,\n );\n}\n\nfunction findAnnualSupplyEvidenceEntry(\n container: unknown,\n context: CompletionContext,\n): AnnualSupplyEvidenceValue | null {\n if (!isRecord(container)) {\n return null;\n }\n\n const directPath = fieldPathFromEvidenceEntry(container);\n if (isAnnualSupplyEvidencePath(directPath)) {\n const directValue = normalizeAnnualSupplyEvidenceValue(container, context);\n if (directValue) {\n return directValue;\n }\n }\n\n for (const key of [\n 'field_values',\n 'fieldValues',\n 'field_bindings',\n 'fieldBindings',\n 'bindings',\n ]) {\n const entries = asList(container[key]).filter(isRecord);\n for (const entry of entries) {\n if (!isAnnualSupplyEvidencePath(fieldPathFromEvidenceEntry(entry))) {\n continue;\n }\n const value = normalizeAnnualSupplyEvidenceValue(entry, context);\n if (value) {\n return value;\n }\n }\n }\n\n return null;\n}\n\nfunction findAnnualSupplyEvidenceValue(\n row: JsonObject,\n payload: JsonObject,\n context: CompletionContext,\n): AnnualSupplyEvidenceValue | null {\n const explicitPaths = [\n 'annualSupplyOrProductionVolume',\n 'annual_supply_or_production_volume',\n 'required_fields.annualSupplyOrProductionVolume',\n 'requiredFields.annualSupplyOrProductionVolume',\n 'authoring.required_fields.annualSupplyOrProductionVolume',\n 'authoring.requiredFields.annualSupplyOrProductionVolume',\n 'process_authoring.required_fields.annualSupplyOrProductionVolume',\n 'processAuthoring.requiredFields.annualSupplyOrProductionVolume',\n ];\n for (const source of [row, payload]) {\n for (const explicitPath of explicitPaths) {\n const value = normalizeAnnualSupplyEvidenceValue(valueAtPath(source, explicitPath), context);\n if (value) {\n return value;\n }\n }\n }\n\n const evidencePaths = [\n 'evidence_manifest',\n 'evidenceManifest',\n 'authoring_evidence',\n 'authoringEvidence',\n 'process_authoring.evidence_manifest',\n 'processAuthoring.evidenceManifest',\n ];\n for (const source of [row, payload]) {\n for (const evidencePath of evidencePaths) {\n const value = findAnnualSupplyEvidenceEntry(valueAtPath(source, evidencePath), context);\n if (value) {\n return value;\n }\n }\n }\n\n return null;\n}\n\nfunction ensureDataSources(root: JsonObject): JsonObject {\n if (!isRecord(root.modellingAndValidation)) {\n root.modellingAndValidation = {};\n }\n const modelling = root.modellingAndValidation as JsonObject;\n if (!isRecord(modelling.dataSourcesTreatmentAndRepresentativeness)) {\n modelling.dataSourcesTreatmentAndRepresentativeness = {};\n }\n return modelling.dataSourcesTreatmentAndRepresentativeness as JsonObject;\n}\n\nfunction cloneRowWithPayload(row: DatasetRowInput): { row: JsonObject; payload: JsonObject } {\n const clonedRow = cloneJson(row.row);\n if (isRecord(clonedRow.json_ordered)) {\n return { row: clonedRow, payload: clonedRow.json_ordered };\n }\n if (isRecord(clonedRow.jsonOrdered)) {\n return { row: clonedRow, payload: clonedRow.jsonOrdered };\n }\n if (isRecord(clonedRow.json)) {\n return { row: clonedRow, payload: clonedRow.json };\n }\n if (isRecord(clonedRow.payload)) {\n return { row: clonedRow, payload: clonedRow.payload };\n }\n if (isRecord(clonedRow.process)) {\n return { row: clonedRow, payload: clonedRow.process };\n }\n return { row: clonedRow, payload: clonedRow };\n}\n\nfunction completeProcessRow(\n row: DatasetRowInput,\n context: CompletionContext,\n): { row: JsonObject; report: ProcessRequiredFieldsRowReport } {\n const { row: clonedRow, payload } = cloneRowWithPayload(row);\n if (row.kind !== 'process') {\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'skipped',\n issues: [],\n completions: [],\n },\n };\n }\n\n const root = processRootForMutation(payload);\n const placeholderCompletions = repairPlaceholderReviewMetadata(root);\n const requiredStructureCompletions = repairRequiredProcessStructures(root);\n const repairCompletions = [...placeholderCompletions, ...requiredStructureCompletions];\n const existingIssues = collectProcessRequiredFieldIssues(payload);\n const placeholderIssues = collectProcessPlaceholderIssues(payload);\n\n if (existingIssues.length === 0 && placeholderIssues.length === 0) {\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: repairCompletions.length > 0 ? 'completed' : 'existing',\n issues: [],\n completions: repairCompletions,\n },\n };\n }\n\n if (placeholderIssues.length > 0) {\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'blocked',\n issues: [...existingIssues, ...placeholderIssues],\n completions: repairCompletions,\n },\n };\n }\n\n const evidenceValue = findAnnualSupplyEvidenceValue(clonedRow, payload, context);\n if (evidenceValue) {\n const dataSources = ensureDataSources(root);\n dataSources.annualSupplyOrProductionVolume = evidenceValue.value;\n const completion: ProcessRequiredFieldCompletion = {\n field_path: ANNUAL_SUPPLY_FIELD,\n source: 'evidence',\n value: evidenceValue.value,\n amount: evidenceValue.amount,\n unit: evidenceValue.unit,\n reference_exchange_internal_id: null,\n basis: evidenceValue.basis,\n };\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'completed',\n issues: [],\n completions: [...repairCompletions, completion],\n },\n };\n }\n\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'blocked',\n issues: [\n ...existingIssues,\n {\n code: 'annual_supply_evidence_missing',\n message:\n 'Could not complete annualSupplyOrProductionVolume because no source evidence value was provided.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ],\n completions: repairCompletions,\n },\n };\n}\n\nfunction buildFiles(outPath: string, outDir: string | null): ProcessRequiredFieldsReport['files'] {\n if (!outDir) {\n return {\n output_rows: path.resolve(outPath),\n report: null,\n evidence: null,\n };\n }\n const resolved = path.resolve(outDir);\n return {\n output_rows: path.resolve(outPath),\n report: path.join(resolved, 'outputs', 'process-required-fields-report.json'),\n evidence: path.join(resolved, 'outputs', 'process-required-fields-evidence.jsonl'),\n };\n}\n\nfunction requireOutputPath(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new CliError('Missing required --out value.', {\n code: 'PROCESS_REQUIRED_FIELDS_OUT_REQUIRED',\n exitCode: 2,\n });\n }\n return trimmed;\n}\n\nexport async function runProcessRequiredFieldsComplete(\n options: RunProcessRequiredFieldsCompleteOptions,\n): Promise<ProcessRequiredFieldsReport> {\n const outPath = requireOutputPath(options.outPath);\n const outDir = options.outDir?.trim() ? options.outDir.trim() : null;\n const defaultUnit = normalizeUnit(options.defaultUnit);\n const rows = materializeDatasetRows(options.inputPath, options.rawInput);\n const flowRows = options.flowInputPath?.trim()\n ? materializeDatasetRows(options.flowInputPath, options.rawFlowInput)\n : [];\n const flowUnitById = buildFlowUnitIndex(flowRows, defaultUnit);\n const completed = rows.map((row) => completeProcessRow(row, { defaultUnit, flowUnitById }));\n const rowReports = completed.map((item) => item.report);\n const files = buildFiles(outPath, outDir);\n const blockers = rowReports.filter((row) => row.status === 'blocked');\n\n const report: ProcessRequiredFieldsReport = {\n generated_at_utc: (options.now ?? new Date()).toISOString(),\n input_path: path.resolve(options.inputPath),\n out_path: path.resolve(outPath),\n out_dir: outDir ? path.resolve(outDir) : null,\n status: blockers.length > 0 ? 'completed_with_blockers' : 'completed',\n default_unit: defaultUnit,\n counts: {\n total: rowReports.length,\n processes: rowReports.filter((row) => row.type === 'process').length,\n completed: rowReports.filter((row) => row.status === 'completed').length,\n existing: rowReports.filter((row) => row.status === 'existing').length,\n blocked: blockers.length,\n skipped: rowReports.filter((row) => row.status === 'skipped').length,\n },\n files,\n rows: rowReports,\n };\n\n writeJsonLinesArtifact(\n files.output_rows,\n completed.map((item) => item.row),\n );\n if (files.report) {\n writeJsonArtifact(files.report, report);\n }\n if (files.evidence) {\n writeJsonLinesArtifact(\n files.evidence,\n rowReports.flatMap((row) =>\n row.completions.map((completion) => ({\n row_index: row.index,\n dataset_id: row.id,\n dataset_version: row.version,\n ...completion,\n })),\n ),\n );\n }\n\n return report;\n}\n\nexport const __testInternals = {\n ANNUAL_SUPPLY_ROOT_FIELD,\n annualSupplyTextParts,\n annualSupplyValueFromText,\n cloneRowWithPayload,\n collectProcessRequiredFieldIssues,\n completeProcessRow,\n ensureDataSources,\n fieldPathFromEvidenceEntry,\n findAnnualSupplyEvidenceValue,\n findAnnualSupplyEvidenceEntry,\n buildFlowUnitIndex,\n inferUnitFromReferenceExchange,\n inferSpecificUnitFromFlowPayload,\n issuePath,\n isAnnualSupplyEvidencePath,\n isValidComplianceDeclaration,\n isValidAnnualSupplyVolume,\n isValidReview,\n normalizeAnnualSupplyEvidenceValue,\n repairRequiredProcessStructures,\n requireOutputPath,\n selectReferenceExchange,\n textValue,\n valueAtPath,\n};\n"]}
1
+ {"version":3,"file":"process-required-fields.js","sourceRoot":"","sources":["../../../src/lib/process-required-fields.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport {\n cloneJson,\n datasetRoot,\n firstNonEmpty,\n isRecord,\n materializeDatasetRows,\n type DatasetRowInput,\n type JsonObject,\n} from './dataset-local.js';\n\nconst ANNUAL_SUPPLY_FIELD =\n 'processDataSet.modellingAndValidation.dataSourcesTreatmentAndRepresentativeness.annualSupplyOrProductionVolume';\nconst ANNUAL_SUPPLY_ROOT_FIELD =\n 'modellingAndValidation.dataSourcesTreatmentAndRepresentativeness.annualSupplyOrProductionVolume';\nconst DATA_SOURCES_TREATMENT_FIELD =\n 'processDataSet.modellingAndValidation.dataSourcesTreatmentAndRepresentativeness';\nconst ANNUAL_SUPPLY_MISSING_DATA_SENTINEL_TEXT = '9999 missing-data-sentinel/year';\nconst NUMERIC_TEXT_WITH_SUFFIX_PATTERN = /^[+-]?(\\d+(\\.\\d*)?|\\.\\d+)([Ee][+-]?\\d+)?\\s+\\S.*$/u;\nconst ANNUAL_PERIOD_PATTERN =\n /(?:\\/\\s*(?:year|yr|a)\\b|\\bper\\s+(?:year|annum)\\b|\\/\\s*年|每年|年度|年供应|年产)/iu;\nconst ANNUAL_UNAVAILABLE_PATTERN =\n /\\b(?:source\\s+)?(?:production\\s+)?volume\\s+(?:unavailable|unknown|not\\s+available)\\b/iu;\nconst CJK_TEXT_PATTERN = /[\\p{Script=Han}]/u;\nconst NET_CALORIFIC_VALUE_ID = '93a60a56-a3c8-11da-a746-0800200c9a66';\nconst DEFAULT_COMPLIANCE_SYSTEM = {\n '@refObjectId': 'c84c4185-d1b0-44fc-823e-d2ec630c7906',\n '@type': 'source data set',\n '@uri': 'https://tiangong.earth/datasets/c84c4185-d1b0-44fc-823e-d2ec630c7906',\n '@version': '00.00.001',\n 'common:shortDescription': {\n '@xml:lang': 'en',\n '#text': 'Environmental Footprint (EF) 3.1',\n },\n} as const;\nconst DEFAULT_COMPLIANCE_DECLARATION = {\n 'common:referenceToComplianceSystem': DEFAULT_COMPLIANCE_SYSTEM,\n 'common:approvalOfOverallCompliance': 'Not defined',\n 'common:nomenclatureCompliance': 'Not defined',\n 'common:methodologicalCompliance': 'Not defined',\n 'common:reviewCompliance': 'Not defined',\n 'common:documentationCompliance': 'Not defined',\n 'common:qualityCompliance': 'Not defined',\n} as const;\nconst REQUIRED_COMPLIANCE_FIELDS = [\n 'common:approvalOfOverallCompliance',\n 'common:nomenclatureCompliance',\n 'common:methodologicalCompliance',\n 'common:reviewCompliance',\n 'common:documentationCompliance',\n 'common:qualityCompliance',\n] as const;\n\ntype AnnualSupplyStatus = 'existing' | 'completed' | 'blocked' | 'skipped';\n\nexport type ProcessRequiredFieldIssue = {\n code: string;\n message: string;\n path: string;\n};\n\nexport type ProcessRequiredFieldCompletion = {\n field_path: string;\n source:\n | 'existing'\n | 'evidence'\n | 'missing_data_sentinel'\n | 'placeholder_repair'\n | 'required_structure_repair';\n value: Array<{ '#text': string; '@xml:lang': string }>;\n amount: string | null;\n unit: string | null;\n reference_exchange_internal_id: string | null;\n basis: string;\n};\n\nexport type ProcessRequiredFieldsRowReport = {\n index: number;\n id: string | null;\n version: string | null;\n type: string | null;\n status: AnnualSupplyStatus;\n issues: ProcessRequiredFieldIssue[];\n completions: ProcessRequiredFieldCompletion[];\n};\n\nexport type ProcessRequiredFieldsReport = {\n generated_at_utc: string;\n input_path: string;\n out_path: string;\n out_dir: string | null;\n status: 'completed' | 'completed_with_blockers';\n default_unit: string;\n counts: {\n total: number;\n processes: number;\n completed: number;\n existing: number;\n blocked: number;\n skipped: number;\n };\n files: {\n output_rows: string;\n report: string | null;\n evidence: string | null;\n };\n rows: ProcessRequiredFieldsRowReport[];\n};\n\nexport type RunProcessRequiredFieldsCompleteOptions = {\n inputPath: string;\n outPath: string;\n outDir?: string | null;\n defaultUnit?: string | null;\n flowInputPath?: string | null;\n rawInput?: unknown;\n rawFlowInput?: unknown;\n now?: Date;\n};\n\ntype CompletionContext = {\n defaultUnit: string;\n flowUnitById?: Map<string, string>;\n};\n\ntype AnnualSupplyEvidenceValue = {\n value: Array<{ '#text': string; '@xml:lang': string }>;\n amount: string;\n unit: string;\n basis: string;\n};\n\nfunction normalizeUnit(value: string | null | undefined): string {\n const token = value?.trim();\n return token || 'unit';\n}\n\nfunction sourceLanguageForText(value: string, fallback = 'en'): string {\n return CJK_TEXT_PATTERN.test(value) ? 'zh' : fallback;\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 asList(value: unknown): unknown[] {\n if (Array.isArray(value)) {\n return value;\n }\n return value === undefined || value === null ? [] : [value];\n}\n\nfunction valueAtPath(root: unknown, pathExpression: string): unknown {\n let current = root;\n for (const segment of pathExpression.split('.')) {\n if (!isRecord(current)) {\n return undefined;\n }\n current = current[segment];\n }\n return current;\n}\n\nfunction annualSupplyItems(value: unknown): Array<{ '#text': string; '@xml:lang': string }> {\n return asList(value).filter((item): item is { '#text': string; '@xml:lang': string } => {\n return (\n isRecord(item) && typeof item['#text'] === 'string' && typeof item['@xml:lang'] === 'string'\n );\n });\n}\n\nfunction isValidAnnualSupplyVolume(value: unknown): boolean {\n const items = annualSupplyItems(value);\n return (\n items.length > 0 &&\n items.every((item) => {\n const text = item['#text'].trim();\n return (\n !ANNUAL_UNAVAILABLE_PATTERN.test(text) &&\n NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(text) &&\n ANNUAL_PERIOD_PATTERN.test(text)\n );\n })\n );\n}\n\nfunction unresolvedTraceEntries(root: JsonObject): JsonObject[] {\n const dataSetInformation = isRecord(root.processInformation)\n ? isRecord(root.processInformation.dataSetInformation)\n ? root.processInformation.dataSetInformation\n : {}\n : {};\n const commonOther = isRecord(dataSetInformation['common:other'])\n ? dataSetInformation['common:other']\n : {};\n return asList(commonOther['tiangongfoundry:unresolvedTrace']).filter((item): item is JsonObject =>\n isRecord(item),\n );\n}\n\nfunction hasDeferredAnnualSupplyTrace(root: JsonObject): boolean {\n return unresolvedTraceEntries(root).some((entry) => {\n const actionItemCode = firstNonEmpty(entry.action_item_code, entry.actionItemCode, entry.code);\n const blockedPath = firstNonEmpty(\n entry.blocked_path,\n entry.blockedPath,\n entry.field_path,\n entry.fieldPath,\n entry.path,\n );\n const status = firstNonEmpty(entry.status, entry.decision_status, entry.decisionStatus);\n return (\n (actionItemCode === 'annual_supply_or_production_volume_invalid' ||\n actionItemCode === 'annual_supply_or_production_volume_missing' ||\n actionItemCode === 'invalid_format' ||\n blockedPath === ANNUAL_SUPPLY_FIELD ||\n blockedPath === ANNUAL_SUPPLY_ROOT_FIELD ||\n blockedPath?.endsWith('.annualSupplyOrProductionVolume') === true) &&\n (status === 'unresolved_deferred' ||\n status === 'deferred_to_common_other' ||\n status === 'needs_followup')\n );\n });\n}\n\nfunction isValidReview(value: unknown): boolean {\n return asList(value).some((item) => isRecord(item) && Boolean(firstNonEmpty(item['@type'])));\n}\n\nfunction isValidComplianceDeclaration(value: unknown): boolean {\n return asList(value).some((item) => {\n if (!isRecord(item)) {\n return false;\n }\n const complianceSystem = isRecord(item['common:referenceToComplianceSystem'])\n ? item['common:referenceToComplianceSystem']\n : {};\n return (\n Boolean(firstNonEmpty(complianceSystem['@refObjectId'])) &&\n REQUIRED_COMPLIANCE_FIELDS.every((field) => Boolean(firstNonEmpty(item[field])))\n );\n });\n}\n\nexport function collectProcessRequiredFieldIssues(\n payload: JsonObject,\n): ProcessRequiredFieldIssue[] {\n const root = datasetRoot(payload, 'process');\n const modelling = isRecord(root.modellingAndValidation) ? root.modellingAndValidation : {};\n const dataSources = isRecord(modelling.dataSourcesTreatmentAndRepresentativeness)\n ? modelling.dataSourcesTreatmentAndRepresentativeness\n : null;\n const annualSupplyDeferredToTrace = hasDeferredAnnualSupplyTrace(root);\n const dataSourcesDeferredToTrace = !dataSources && annualSupplyDeferredToTrace;\n if (!dataSources && !dataSourcesDeferredToTrace) {\n return [\n {\n code: 'process_data_sources_treatment_missing',\n message: 'Process payload must include dataSourcesTreatmentAndRepresentativeness.',\n path: DATA_SOURCES_TREATMENT_FIELD,\n },\n ];\n }\n\n const issues: ProcessRequiredFieldIssue[] = [];\n const validation = isRecord(modelling.validation) ? modelling.validation : {};\n if (!isValidReview(validation.review)) {\n issues.push({\n code: 'process_validation_review_missing',\n message: 'Process payload must include modellingAndValidation.validation.review.',\n path: 'processDataSet.modellingAndValidation.validation.review',\n });\n }\n\n const complianceDeclarations = isRecord(modelling.complianceDeclarations)\n ? modelling.complianceDeclarations\n : {};\n if (!isValidComplianceDeclaration(complianceDeclarations.compliance)) {\n issues.push({\n code: 'process_compliance_declaration_missing',\n message:\n 'Process payload must include modellingAndValidation.complianceDeclarations.compliance.',\n path: 'processDataSet.modellingAndValidation.complianceDeclarations.compliance',\n });\n }\n\n if (dataSourcesDeferredToTrace) {\n return issues;\n }\n\n const annualSupply = dataSources!.annualSupplyOrProductionVolume;\n if (isValidAnnualSupplyVolume(annualSupply)) {\n return issues;\n }\n\n const items = annualSupplyItems(annualSupply);\n if (items.length === 0 && annualSupplyDeferredToTrace) {\n return issues;\n }\n\n if (items.length === 0) {\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_missing',\n message:\n 'Process payload must include annualSupplyOrProductionVolume as numeric text with a unit or context suffix.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n }\n\n if (items.some((item) => ANNUAL_UNAVAILABLE_PATTERN.test(item['#text'].trim()))) {\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_missing',\n message:\n 'Process payload must include annualSupplyOrProductionVolume as numeric text with a unit or context suffix.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n }\n\n if (\n items.every((item) => NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(item['#text'].trim())) &&\n items.some((item) => !ANNUAL_PERIOD_PATTERN.test(item['#text'].trim()))\n ) {\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_not_annualized',\n message:\n 'annualSupplyOrProductionVolume must express an annualized amount such as \"3.6 MJ/year\" or \"3.6 MJ/年\", not a reference-flow description.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n }\n\n return [\n ...issues,\n {\n code: 'annual_supply_or_production_volume_invalid',\n message:\n 'annualSupplyOrProductionVolume must start with a real number followed by a unit or context suffix.',\n path: ANNUAL_SUPPLY_FIELD,\n },\n ];\n}\n\nfunction issuePath(pathSegments: Array<string | number>): string {\n return pathSegments.length > 0 ? pathSegments.map(String).join('.') : '<root>';\n}\n\nfunction collectPlaceholderIssuesFromValue(\n value: unknown,\n pathSegments: Array<string | number>,\n issues: ProcessRequiredFieldIssue[],\n): void {\n if (typeof value === 'string') {\n const normalized = value.trim().toLowerCase();\n if (\n (pathSegments.at(-1) === 'common:referenceYear' && normalized === '9999') ||\n normalized.includes('tidas_import_placeholder') ||\n normalized.includes('tidas_import_trace_v1') ||\n normalized.includes('not declared in source package') ||\n normalized.includes('source package metadata not declared') ||\n normalized === '<null>' ||\n /(^|[\\s\"'`])(?:\\/users\\/|\\/home\\/|[a-z]:\\\\)/iu.test(value) ||\n normalized.includes('placeholder.example') ||\n normalized.includes('pending confirmation') ||\n /00000000-0000-0000-0000-0000000000[0-9a-f]{2}/u.test(normalized)\n ) {\n issues.push({\n code: 'process_placeholder_content',\n message:\n 'Process payload contains placeholder or pending-confirmation content that must be replaced before save or publish.',\n path: issuePath(pathSegments),\n });\n }\n return;\n }\n\n if (typeof value === 'number') {\n if (pathSegments.at(-1) === 'common:referenceYear' && value === 9999) {\n issues.push({\n code: 'process_placeholder_content',\n message:\n 'Process payload contains placeholder or pending-confirmation content that must be replaced before save or publish.',\n path: issuePath(pathSegments),\n });\n }\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item, index) =>\n collectPlaceholderIssuesFromValue(item, [...pathSegments, index], issues),\n );\n return;\n }\n\n if (isRecord(value)) {\n for (const [key, child] of Object.entries(value)) {\n collectPlaceholderIssuesFromValue(child, [...pathSegments, key], issues);\n }\n }\n}\n\nexport function collectProcessPlaceholderIssues(payload: JsonObject): ProcessRequiredFieldIssue[] {\n const root = datasetRoot(payload, 'process');\n const issues: ProcessRequiredFieldIssue[] = [];\n collectPlaceholderIssuesFromValue(root, ['processDataSet'], issues);\n return issues;\n}\n\nfunction hasPlaceholderContent(value: unknown): boolean {\n const issues: ProcessRequiredFieldIssue[] = [];\n collectPlaceholderIssuesFromValue(value, [], issues);\n return issues.length > 0;\n}\n\nfunction removePlaceholderField(\n parent: JsonObject,\n key: string,\n fieldPath: string,\n completions: ProcessRequiredFieldCompletion[],\n): void {\n if (!hasPlaceholderContent(parent[key])) {\n return;\n }\n delete parent[key];\n completions.push({\n field_path: fieldPath,\n source: 'placeholder_repair',\n value: [],\n amount: null,\n unit: null,\n reference_exchange_internal_id: null,\n basis:\n 'Removed placeholder review metadata because the dataset is marked Not reviewed and no completed review evidence is present.',\n });\n}\n\nfunction repairPlaceholderReviewMetadata(root: JsonObject): ProcessRequiredFieldCompletion[] {\n const modelling = isRecord(root.modellingAndValidation) ? root.modellingAndValidation : {};\n const validation = isRecord(modelling.validation) ? modelling.validation : null;\n if (!validation) {\n return [];\n }\n\n const completions: ProcessRequiredFieldCompletion[] = [];\n const validationPath = 'processDataSet.modellingAndValidation.validation';\n for (const key of [\n 'reviewDetails',\n 'common:reviewDetails',\n 'common:referenceToCompleteReviewReport',\n 'common:referenceToNameOfReviewerAndInstitution',\n ]) {\n removePlaceholderField(validation, key, `${validationPath}.${key}`, completions);\n }\n\n if (isRecord(validation.review)) {\n const reviewPath = `${validationPath}.review`;\n for (const key of [\n 'reviewDetails',\n 'common:reviewDetails',\n 'common:referenceToCompleteReviewReport',\n 'common:referenceToNameOfReviewerAndInstitution',\n ]) {\n removePlaceholderField(validation.review, key, `${reviewPath}.${key}`, completions);\n }\n }\n\n return completions;\n}\n\nfunction addRequiredStructureCompletion(\n completions: ProcessRequiredFieldCompletion[],\n fieldPath: string,\n basis: string,\n): void {\n completions.push({\n field_path: fieldPath,\n source: 'required_structure_repair',\n value: [],\n amount: null,\n unit: null,\n reference_exchange_internal_id: null,\n basis,\n });\n}\n\nfunction repairRequiredProcessStructures(root: JsonObject): ProcessRequiredFieldCompletion[] {\n const completions: ProcessRequiredFieldCompletion[] = [];\n if (!isRecord(root.modellingAndValidation)) {\n root.modellingAndValidation = {};\n }\n const modelling = root.modellingAndValidation as JsonObject;\n\n if (!isRecord(modelling.validation)) {\n modelling.validation = {};\n }\n const validation = modelling.validation as JsonObject;\n if (!isValidReview(validation.review)) {\n validation.review = {\n '@type': 'Not reviewed',\n };\n addRequiredStructureCompletion(\n completions,\n 'processDataSet.modellingAndValidation.validation.review',\n 'Inserted a conservative Not reviewed marker because UI roundtrip or source data omitted the required validation.review structure.',\n );\n }\n\n if (!isRecord(modelling.complianceDeclarations)) {\n modelling.complianceDeclarations = {};\n }\n const complianceDeclarations = modelling.complianceDeclarations as JsonObject;\n if (!isValidComplianceDeclaration(complianceDeclarations.compliance)) {\n complianceDeclarations.compliance = cloneJson(DEFAULT_COMPLIANCE_DECLARATION);\n addRequiredStructureCompletion(\n completions,\n 'processDataSet.modellingAndValidation.complianceDeclarations.compliance',\n 'Inserted a conservative Not defined compliance declaration against EF 3.1 because UI roundtrip or source data omitted the required compliance structure.',\n );\n }\n\n return completions;\n}\n\nfunction processRootForMutation(payload: JsonObject): JsonObject {\n if (isRecord(payload.processDataSet)) {\n return payload.processDataSet;\n }\n return payload;\n}\n\nfunction selectReferenceExchange(root: JsonObject): JsonObject | null {\n const exchangesRoot = isRecord(root.exchanges) ? root.exchanges : {};\n const exchanges = asList(exchangesRoot.exchange).filter(isRecord);\n const processInfo = isRecord(root.processInformation) ? root.processInformation : {};\n const quantitativeReference = isRecord(processInfo.quantitativeReference)\n ? processInfo.quantitativeReference\n : {};\n const referenceId = firstNonEmpty(quantitativeReference.referenceToReferenceFlow);\n\n const byReferenceId = referenceId\n ? exchanges.find((exchange) => firstNonEmpty(exchange['@dataSetInternalID']) === referenceId)\n : null;\n if (byReferenceId) {\n return byReferenceId;\n }\n\n return (\n exchanges.find((exchange) => exchange.quantitativeReference === true) ??\n exchanges.find(\n (exchange) => String(exchange.exchangeDirection ?? '').toLowerCase() === 'output',\n ) ??\n null\n );\n}\n\nfunction localizedTextIncludes(value: unknown, pattern: RegExp): boolean {\n return annualSupplyItems(value).some((item) => pattern.test(item['#text']));\n}\n\nfunction inferSpecificUnitFromFlowPayload(payload: JsonObject): string | null {\n const root = datasetRoot(payload, 'flow');\n const flowPropertiesRoot = isRecord(root.flowProperties) ? root.flowProperties : {};\n const flowProperties = asList(flowPropertiesRoot.flowProperty).filter(isRecord);\n for (const flowProperty of flowProperties) {\n const direct = firstNonEmpty(\n flowProperty.unit,\n flowProperty.referenceUnit,\n flowProperty.flowUnit,\n );\n if (direct) {\n return direct;\n }\n\n const flowPropertyRef = isRecord(flowProperty.referenceToFlowPropertyDataSet)\n ? flowProperty.referenceToFlowPropertyDataSet\n : {};\n const flowPropertyId = firstNonEmpty(flowPropertyRef['@refObjectId']);\n const flowPropertyText = flowPropertyRef['common:shortDescription'];\n if (\n flowPropertyId === NET_CALORIFIC_VALUE_ID ||\n localizedTextIncludes(flowPropertyText, /Net calorific|净热值/u)\n ) {\n return 'MJ';\n }\n }\n\n const flowInformation = isRecord(root.flowInformation) ? root.flowInformation : {};\n const dataSetInformation = isRecord(flowInformation.dataSetInformation)\n ? flowInformation.dataSetInformation\n : {};\n const classificationInformation = isRecord(dataSetInformation.classificationInformation)\n ? dataSetInformation.classificationInformation\n : {};\n const classification = isRecord(classificationInformation['common:classification'])\n ? classificationInformation['common:classification']\n : {};\n const classificationClasses = classification['common:class'];\n if (\n localizedTextIncludes(classificationClasses, /Electrical energy|electricity|交流电|电力|电能/iu)\n ) {\n return 'MJ';\n }\n\n return null;\n}\n\nfunction buildFlowUnitIndex(\n flowRows: DatasetRowInput[],\n fallbackUnit: string,\n): Map<string, string> {\n const index = new Map<string, string>();\n for (const row of flowRows) {\n if (row.kind !== 'flow' || !row.id) {\n continue;\n }\n const inferred = inferSpecificUnitFromFlowPayload(row.payload);\n if (inferred && inferred !== fallbackUnit) {\n index.set(row.id, inferred);\n }\n }\n return index;\n}\n\nfunction inferUnitFromReferenceExchange(\n exchange: JsonObject,\n fallbackOrContext: string | CompletionContext,\n): string {\n const context =\n typeof fallbackOrContext === 'string' ? { defaultUnit: fallbackOrContext } : fallbackOrContext;\n const fallbackUnit = context.defaultUnit;\n const flowRef = isRecord(exchange.referenceToFlowDataSet) ? exchange.referenceToFlowDataSet : {};\n const refObjectId = firstNonEmpty(flowRef['@refObjectId']);\n if (refObjectId) {\n const indexedUnit = context.flowUnitById?.get(refObjectId);\n if (indexedUnit) {\n return indexedUnit;\n }\n }\n\n const direct = firstNonEmpty(exchange.unit, exchange.referenceUnit, exchange.flowUnit);\n if (direct) {\n return direct;\n }\n\n const shortDescriptions = flowRef['common:shortDescription'];\n if (\n localizedTextIncludes(\n shortDescriptions,\n /MJ|net calorific|lower calorific|Electrical energy|electricity|净热值|低位发热|交流电|电力|电能/iu,\n )\n ) {\n return 'MJ';\n }\n\n const flowProperty = isRecord(exchange.flowProperty) ? exchange.flowProperty : {};\n const flowPropertyRef = isRecord(flowProperty.referenceToFlowPropertyDataSet)\n ? flowProperty.referenceToFlowPropertyDataSet\n : {};\n const flowPropertyId = firstNonEmpty(flowPropertyRef['@refObjectId']);\n const flowPropertyText = flowPropertyRef['common:shortDescription'];\n if (\n refObjectId === NET_CALORIFIC_VALUE_ID ||\n flowPropertyId === NET_CALORIFIC_VALUE_ID ||\n localizedTextIncludes(flowPropertyText, /Net calorific|净热值/u)\n ) {\n return 'MJ';\n }\n\n return fallbackUnit;\n}\n\nfunction buildAnnualSupplyValue(\n amount: string,\n unit: string,\n): Array<{\n '#text': string;\n '@xml:lang': string;\n}> {\n return [{ '@xml:lang': 'en', '#text': `${amount} ${unit}/year` }];\n}\n\nfunction annualSupplyTextParts(value: string): { amount: string; unit: string } | null {\n const match = /^\\s*([+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[Ee][+-]?\\d+)?)\\s+(\\S.*)$/u.exec(value);\n return match ? { amount: match[1] as string, unit: (match[2] as string).trim() } : null;\n}\n\nfunction annualSupplyValueFromText(value: string): AnnualSupplyEvidenceValue | null {\n const text = value.trim();\n if (!NUMERIC_TEXT_WITH_SUFFIX_PATTERN.test(text) || !ANNUAL_PERIOD_PATTERN.test(text)) {\n return null;\n }\n const parts = annualSupplyTextParts(text) as { amount: string; unit: string };\n return {\n value: [{ '@xml:lang': sourceLanguageForText(text), '#text': text }],\n amount: parts.amount,\n unit: parts.unit,\n basis: 'Evidence provided a complete annual supply / production volume text value.',\n };\n}\n\nfunction normalizeAnnualSupplyEvidenceValue(\n candidate: unknown,\n context: CompletionContext,\n): AnnualSupplyEvidenceValue | null {\n if (typeof candidate === 'string') {\n return annualSupplyValueFromText(candidate);\n }\n\n if (typeof candidate === 'number' && Number.isFinite(candidate)) {\n const amount = String(candidate);\n return {\n value: buildAnnualSupplyValue(amount, context.defaultUnit),\n amount,\n unit: context.defaultUnit,\n basis:\n 'Evidence provided a numeric annual supply / production volume; the configured default unit was applied.',\n };\n }\n\n if (isValidAnnualSupplyVolume(candidate)) {\n const value = [\n annualSupplyItems(candidate).map((item) => ({\n '@xml:lang': item['@xml:lang'],\n '#text': item['#text'].trim(),\n }))[0]!,\n ];\n const parts = annualSupplyTextParts(value[0]!['#text']) as { amount: string; unit: string };\n return {\n value,\n amount: parts.amount,\n unit: parts.unit,\n basis:\n 'Evidence provided a validated source-language annual supply / production volume value.',\n };\n }\n\n if (!isRecord(candidate)) {\n return null;\n }\n\n for (const key of [\n 'value',\n 'text',\n 'value_text',\n 'valueText',\n 'annualSupplyOrProductionVolume',\n 'annual_supply_or_production_volume',\n ]) {\n const nested = normalizeAnnualSupplyEvidenceValue(candidate[key], context);\n if (nested) {\n return nested;\n }\n }\n\n const preferredLanguage = textValue(\n candidate.source_language ??\n candidate.sourceLanguage ??\n candidate.lang ??\n candidate['@xml:lang'],\n )?.toLowerCase();\n const english = textValue(candidate.en ?? candidate.english);\n const chinese = textValue(candidate.zh ?? candidate.chinese ?? candidate['zh-CN']);\n const localized = [\n english ? { '@xml:lang': 'en', '#text': english } : null,\n chinese ? { '@xml:lang': 'zh', '#text': chinese } : null,\n ].filter((item): item is { '#text': string; '@xml:lang': string } => Boolean(item));\n if (localized.length > 0 && isValidAnnualSupplyVolume(localized)) {\n const selected =\n localized.find((item) => item['@xml:lang'].toLowerCase() === preferredLanguage) ??\n localized[0]!;\n const value = [selected];\n const parts = annualSupplyTextParts(selected['#text']) as {\n amount: string;\n unit: string;\n };\n return {\n value,\n amount: parts.amount,\n unit: parts.unit,\n basis: 'Evidence provided a language-specific annual supply / production volume text value.',\n };\n }\n\n const amount = textValue(candidate.amount ?? candidate.value_amount ?? candidate.valueAmount);\n const unit = normalizeUnit(\n textValue(\n candidate.unit ?? candidate.uom ?? candidate.reference_unit ?? candidate.referenceUnit,\n ) ?? context.defaultUnit,\n );\n if (amount) {\n return {\n value: buildAnnualSupplyValue(amount, unit),\n amount,\n unit,\n basis:\n 'Evidence provided annual supply / production volume amount and unit as structured fields.',\n };\n }\n\n return null;\n}\n\nfunction isAnnualSupplyEvidencePath(pathExpression: string | null): boolean {\n if (!pathExpression) {\n return false;\n }\n return (\n pathExpression === ANNUAL_SUPPLY_FIELD ||\n pathExpression === ANNUAL_SUPPLY_ROOT_FIELD ||\n pathExpression.endsWith(`.${ANNUAL_SUPPLY_ROOT_FIELD}`) ||\n pathExpression.endsWith('.annualSupplyOrProductionVolume')\n );\n}\n\nfunction fieldPathFromEvidenceEntry(entry: JsonObject): string | null {\n return firstNonEmpty(\n entry.field_path,\n entry.fieldPath,\n entry.path,\n entry.field,\n entry.target_path,\n entry.targetPath,\n );\n}\n\nfunction findAnnualSupplyEvidenceEntry(\n container: unknown,\n context: CompletionContext,\n): AnnualSupplyEvidenceValue | null {\n if (!isRecord(container)) {\n return null;\n }\n\n const directPath = fieldPathFromEvidenceEntry(container);\n if (isAnnualSupplyEvidencePath(directPath)) {\n const directValue = normalizeAnnualSupplyEvidenceValue(container, context);\n if (directValue) {\n return directValue;\n }\n }\n\n for (const key of [\n 'field_values',\n 'fieldValues',\n 'field_bindings',\n 'fieldBindings',\n 'bindings',\n ]) {\n const entries = asList(container[key]).filter(isRecord);\n for (const entry of entries) {\n if (!isAnnualSupplyEvidencePath(fieldPathFromEvidenceEntry(entry))) {\n continue;\n }\n const value = normalizeAnnualSupplyEvidenceValue(entry, context);\n if (value) {\n return value;\n }\n }\n }\n\n return null;\n}\n\nfunction findAnnualSupplyEvidenceValue(\n row: JsonObject,\n payload: JsonObject,\n context: CompletionContext,\n): AnnualSupplyEvidenceValue | null {\n const explicitPaths = [\n 'annualSupplyOrProductionVolume',\n 'annual_supply_or_production_volume',\n 'required_fields.annualSupplyOrProductionVolume',\n 'requiredFields.annualSupplyOrProductionVolume',\n 'authoring.required_fields.annualSupplyOrProductionVolume',\n 'authoring.requiredFields.annualSupplyOrProductionVolume',\n 'process_authoring.required_fields.annualSupplyOrProductionVolume',\n 'processAuthoring.requiredFields.annualSupplyOrProductionVolume',\n ];\n for (const source of [row, payload]) {\n for (const explicitPath of explicitPaths) {\n const value = normalizeAnnualSupplyEvidenceValue(valueAtPath(source, explicitPath), context);\n if (value) {\n return value;\n }\n }\n }\n\n const evidencePaths = [\n 'evidence_manifest',\n 'evidenceManifest',\n 'authoring_evidence',\n 'authoringEvidence',\n 'process_authoring.evidence_manifest',\n 'processAuthoring.evidenceManifest',\n ];\n for (const source of [row, payload]) {\n for (const evidencePath of evidencePaths) {\n const value = findAnnualSupplyEvidenceEntry(valueAtPath(source, evidencePath), context);\n if (value) {\n return value;\n }\n }\n }\n\n return null;\n}\n\nfunction ensureDataSources(root: JsonObject): JsonObject {\n if (!isRecord(root.modellingAndValidation)) {\n root.modellingAndValidation = {};\n }\n const modelling = root.modellingAndValidation as JsonObject;\n if (!isRecord(modelling.dataSourcesTreatmentAndRepresentativeness)) {\n modelling.dataSourcesTreatmentAndRepresentativeness = {};\n }\n return modelling.dataSourcesTreatmentAndRepresentativeness as JsonObject;\n}\n\nfunction annualSupplyMissingDataSentinelValue(): Array<{ '#text': string; '@xml:lang': string }> {\n return [{ '@xml:lang': 'en', '#text': ANNUAL_SUPPLY_MISSING_DATA_SENTINEL_TEXT }];\n}\n\nfunction annualSupplyMissingDataSentinelCompletion(): ProcessRequiredFieldCompletion {\n return {\n field_path: ANNUAL_SUPPLY_FIELD,\n source: 'missing_data_sentinel',\n value: annualSupplyMissingDataSentinelValue(),\n amount: '9999',\n unit: 'missing-data-sentinel/year',\n reference_exchange_internal_id: null,\n basis:\n 'No source annual supply or production volume evidence was available; Foundry policy uses an intentionally non-physical 9999 sentinel so database-side follow-up can bulk-locate and replace it later.',\n };\n}\n\nfunction cloneRowWithPayload(row: DatasetRowInput): { row: JsonObject; payload: JsonObject } {\n const clonedRow = cloneJson(row.row);\n if (isRecord(clonedRow.json_ordered)) {\n return { row: clonedRow, payload: clonedRow.json_ordered };\n }\n if (isRecord(clonedRow.jsonOrdered)) {\n return { row: clonedRow, payload: clonedRow.jsonOrdered };\n }\n if (isRecord(clonedRow.json)) {\n return { row: clonedRow, payload: clonedRow.json };\n }\n if (isRecord(clonedRow.payload)) {\n return { row: clonedRow, payload: clonedRow.payload };\n }\n if (isRecord(clonedRow.process)) {\n return { row: clonedRow, payload: clonedRow.process };\n }\n return { row: clonedRow, payload: clonedRow };\n}\n\nfunction completeProcessRow(\n row: DatasetRowInput,\n context: CompletionContext,\n): { row: JsonObject; report: ProcessRequiredFieldsRowReport } {\n const { row: clonedRow, payload } = cloneRowWithPayload(row);\n if (row.kind !== 'process') {\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'skipped',\n issues: [],\n completions: [],\n },\n };\n }\n\n const root = processRootForMutation(payload);\n const placeholderCompletions = repairPlaceholderReviewMetadata(root);\n const requiredStructureCompletions = repairRequiredProcessStructures(root);\n const repairCompletions = [...placeholderCompletions, ...requiredStructureCompletions];\n const existingIssues = collectProcessRequiredFieldIssues(payload);\n const placeholderIssues = collectProcessPlaceholderIssues(payload);\n\n if (existingIssues.length === 0 && placeholderIssues.length === 0) {\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: repairCompletions.length > 0 ? 'completed' : 'existing',\n issues: [],\n completions: repairCompletions,\n },\n };\n }\n\n if (placeholderIssues.length > 0) {\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'blocked',\n issues: [...existingIssues, ...placeholderIssues],\n completions: repairCompletions,\n },\n };\n }\n\n const evidenceValue = findAnnualSupplyEvidenceValue(clonedRow, payload, context);\n if (evidenceValue) {\n const dataSources = ensureDataSources(root);\n dataSources.annualSupplyOrProductionVolume = evidenceValue.value;\n const completion: ProcessRequiredFieldCompletion = {\n field_path: ANNUAL_SUPPLY_FIELD,\n source: 'evidence',\n value: evidenceValue.value,\n amount: evidenceValue.amount,\n unit: evidenceValue.unit,\n reference_exchange_internal_id: null,\n basis: evidenceValue.basis,\n };\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'completed',\n issues: [],\n completions: [...repairCompletions, completion],\n },\n };\n }\n\n const dataSources = ensureDataSources(root);\n const completion = annualSupplyMissingDataSentinelCompletion();\n dataSources.annualSupplyOrProductionVolume = completion.value;\n return {\n row: clonedRow,\n report: {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'completed',\n issues: [],\n completions: [...repairCompletions, completion],\n },\n };\n}\n\nfunction buildFiles(outPath: string, outDir: string | null): ProcessRequiredFieldsReport['files'] {\n if (!outDir) {\n return {\n output_rows: path.resolve(outPath),\n report: null,\n evidence: null,\n };\n }\n const resolved = path.resolve(outDir);\n return {\n output_rows: path.resolve(outPath),\n report: path.join(resolved, 'outputs', 'process-required-fields-report.json'),\n evidence: path.join(resolved, 'outputs', 'process-required-fields-evidence.jsonl'),\n };\n}\n\nfunction requireOutputPath(value: string): string {\n const trimmed = value.trim();\n if (!trimmed) {\n throw new CliError('Missing required --out value.', {\n code: 'PROCESS_REQUIRED_FIELDS_OUT_REQUIRED',\n exitCode: 2,\n });\n }\n return trimmed;\n}\n\nexport async function runProcessRequiredFieldsComplete(\n options: RunProcessRequiredFieldsCompleteOptions,\n): Promise<ProcessRequiredFieldsReport> {\n const outPath = requireOutputPath(options.outPath);\n const outDir = options.outDir?.trim() ? options.outDir.trim() : null;\n const defaultUnit = normalizeUnit(options.defaultUnit);\n const rows = materializeDatasetRows(options.inputPath, options.rawInput);\n const flowRows = options.flowInputPath?.trim()\n ? materializeDatasetRows(options.flowInputPath, options.rawFlowInput)\n : [];\n const flowUnitById = buildFlowUnitIndex(flowRows, defaultUnit);\n const completed = rows.map((row) => completeProcessRow(row, { defaultUnit, flowUnitById }));\n const rowReports = completed.map((item) => item.report);\n const files = buildFiles(outPath, outDir);\n const blockers = rowReports.filter((row) => row.status === 'blocked');\n\n const report: ProcessRequiredFieldsReport = {\n generated_at_utc: (options.now ?? new Date()).toISOString(),\n input_path: path.resolve(options.inputPath),\n out_path: path.resolve(outPath),\n out_dir: outDir ? path.resolve(outDir) : null,\n status: blockers.length > 0 ? 'completed_with_blockers' : 'completed',\n default_unit: defaultUnit,\n counts: {\n total: rowReports.length,\n processes: rowReports.filter((row) => row.type === 'process').length,\n completed: rowReports.filter((row) => row.status === 'completed').length,\n existing: rowReports.filter((row) => row.status === 'existing').length,\n blocked: blockers.length,\n skipped: rowReports.filter((row) => row.status === 'skipped').length,\n },\n files,\n rows: rowReports,\n };\n\n writeJsonLinesArtifact(\n files.output_rows,\n completed.map((item) => item.row),\n );\n if (files.report) {\n writeJsonArtifact(files.report, report);\n }\n if (files.evidence) {\n writeJsonLinesArtifact(\n files.evidence,\n rowReports.flatMap((row) =>\n row.completions.map((completion) => ({\n row_index: row.index,\n dataset_id: row.id,\n dataset_version: row.version,\n ...completion,\n })),\n ),\n );\n }\n\n return report;\n}\n\nexport const __testInternals = {\n ANNUAL_SUPPLY_MISSING_DATA_SENTINEL_TEXT,\n ANNUAL_SUPPLY_ROOT_FIELD,\n annualSupplyMissingDataSentinelValue,\n annualSupplyTextParts,\n annualSupplyValueFromText,\n cloneRowWithPayload,\n collectProcessRequiredFieldIssues,\n completeProcessRow,\n ensureDataSources,\n fieldPathFromEvidenceEntry,\n hasDeferredAnnualSupplyTrace,\n findAnnualSupplyEvidenceValue,\n findAnnualSupplyEvidenceEntry,\n buildFlowUnitIndex,\n inferUnitFromReferenceExchange,\n inferSpecificUnitFromFlowPayload,\n issuePath,\n isAnnualSupplyEvidencePath,\n isValidComplianceDeclaration,\n isValidAnnualSupplyVolume,\n isValidReview,\n normalizeAnnualSupplyEvidenceValue,\n repairRequiredProcessStructures,\n requireOutputPath,\n selectReferenceExchange,\n textValue,\n valueAtPath,\n};\n"]}
@@ -266,6 +266,7 @@ export async function runProcessSaveDraft(options) {
266
266
  const now = options.now ?? new Date();
267
267
  const inputPath = path.resolve(options.inputPath);
268
268
  const commit = options.commit === true;
269
+ const targetUserId = first_non_empty(options.targetUserId);
269
270
  const rawInput = options.rawInput ?? readStructuredInput(inputPath);
270
271
  const validateProcessPayloadImpl = options.validateProcessPayloadImpl ?? validateProcessPayload;
271
272
  const prepared = prepareProcessSaveDraftInput(inputPath, rawInput, commit, now, validateProcessPayloadImpl);
@@ -307,10 +308,12 @@ export async function runProcessSaveDraft(options) {
307
308
  env: options.env,
308
309
  fetchImpl: options.fetchImpl,
309
310
  timeoutMs: options.timeoutMs,
311
+ targetUserId,
310
312
  audit: {
311
313
  command: 'tiangong-lca process save-draft',
312
314
  source: candidate.source,
313
315
  bundle_path: candidate.bundle_path,
316
+ target_user_id: targetUserId,
314
317
  },
315
318
  });
316
319
  report.status = 'executed';
@@ -331,6 +334,13 @@ export async function runProcessSaveDraft(options) {
331
334
  out_dir: outDir,
332
335
  commit,
333
336
  mode: commit ? 'commit' : 'dry_run',
337
+ target_user_id: targetUserId,
338
+ account_guard: {
339
+ target_user_id_required: Boolean(targetUserId),
340
+ target_user_id: targetUserId,
341
+ commit_account_binding: 'current_cli_auth_session',
342
+ post_write_verify_required: Boolean(targetUserId),
343
+ },
334
344
  status: failedReports.length > 0 ? 'completed_with_failures' : 'completed',
335
345
  counts: {
336
346
  selected: prepared.processes.length,
@@ -1 +1 @@
1
- {"version":3,"file":"process-save-draft-run.js","sourceRoot":"","sources":["../../../src/lib/process-save-draft-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EACL,iCAAiC,EACjC,sBAAsB,GAEvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,oBAAoB,EACpB,uBAAuB,GAGxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,2BAA2B,GAE5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAIxD,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,eAAe,CAAC,GAAG,MAAiB;IAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,OAAe,EAAE,KAAa;IAClD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAiB;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,QAAQ,CAAC,yBAAyB,QAAQ,EAAE,EAAE;YACtD,IAAI,EAAE,iBAAiB;YACvB,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC;SAClC,KAAK,CAAC,QAAQ,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;YAC3C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,QAAQ,CAChB,6CAA6C,QAAQ,UAAU,KAAK,GAAG,CAAC,GAAG,EAC3E;oBACE,IAAI,EAAE,yBAAyB;oBAC/B,QAAQ,EAAE,CAAC;iBACZ,CACF,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;gBAC9B,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,6CAA6C,KAAK,GAAG,CAAC,KAAK,QAAQ,EAAE,EAAE;gBACxF,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,mBAAmB,CAAC,SAAiB;IAC5C,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC/C,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC;QAC/B,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,CAAC,QAAQ,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,IAAI,YAAY,IAAI,KAAK,CAAC,CACzF,CAAC;AACJ,CAAC;AAED,SAAS,kCAAkC,CAAC,KAAc,EAAE,OAAe;IACzE,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,KAAK,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,CAAU,EAAE,CAAC;YACjF,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACxB,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,QAAQ,CAAC,+BAA+B,QAAQ,EAAE,EAAE;oBAC5D,IAAI,EAAE,qCAAqC;oBAC3C,QAAQ,EAAE,CAAC;iBACZ,CAAC,CAAC;YACL,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,QAAQ,CAAC,+BAA+B,QAAQ,EAAE,EAAE;gBAC5D,IAAI,EAAE,qCAAqC;gBAC3C,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,IAAI,QAAQ,CAAC,+CAA+C,EAAE;QAClE,IAAI,EAAE,sCAAsC;QAC5C,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAmB;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC;IACjF,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,MAAM,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,kBAAkB,CAAC;QACxE,CAAC,CAAC,kBAAkB,CAAC,kBAAkB;QACvC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,yBAAyB,GAAG,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC;QACxE,CAAC,CAAC,IAAI,CAAC,yBAAyB;QAChC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,uBAAuB,GAAG,QAAQ,CAAC,yBAAyB,CAAC,uBAAuB,CAAC;QACzF,CAAC,CAAC,yBAAyB,CAAC,uBAAuB;QACnD,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,SAAS,GAAG,eAAe,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,eAAe,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,EAAE,WAAW,CAAE,CAAC;IAEhG,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAChB,4EAA4E,EAC5E;YACE,IAAI,EAAE,4BAA4B;YAClC,QAAQ,EAAE,CAAC;SACZ,CACF,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAe;IAC5C,IAAI,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC,YAAY,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAmED,SAAS,oBAAoB,CAC3B,OAAmB,EACnB,MAA8B,EAC9B,UAAyB,EACzB,0BAAmF;IAEnF,IAAI,CAAC;QACH,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;YACnB,OAAO;gBACL,EAAE;gBACF,OAAO;gBACP,MAAM;gBACN,WAAW,EAAE,UAAU;gBACvB,OAAO;gBACP,UAAU;gBACV,KAAK,EAAE;oBACL,OAAO,EAAE,iCAAiC,CAAC,UAAU,CAAC;iBACvD;aACF,CAAC;QACJ,CAAC;QACD,OAAO;YACL,EAAE;YACF,OAAO;YACP,MAAM;YACN,WAAW,EAAE,UAAU;YACvB,OAAO;YACP,UAAU;SACX,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;YAC/C,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC;YAC3E,MAAM;YACN,WAAW,EAAE,UAAU;YACvB,OAAO;YACP,KAAK,EACH,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,4BAA4B;gBACtE,CAAC,CAAC;oBACE,OAAO,EACL,iHAAiH;iBACpH;gBACH,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC;SAC7B,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,MAA8B;IAC7D,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AACzD,CAAC;AAED,SAAS,yBAAyB,CAChC,KAAmC,EACnC,0BAAmF;IAEnF,OAAO,oBAAoB,CACzB,kCAAkC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EACtE,uBAAuB,CAAC,KAAK,CAAC,MAAM,CAAC,EACrC,KAAK,CAAC,MAAM,CAAC,WAAW,EACxB,0BAA0B,CAC3B,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,SAAiB,EACjB,QAAiB,EACjB,0BAAmF;IAEnF,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7D,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAC7C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,QAAQ,CAChB,0DAA0D,SAAS,WAAW,KAAK,GAAG,EACtF;gBACE,IAAI,EAAE,gCAAgC;gBACtC,QAAQ,EAAE,CAAC;aACZ,CACF,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,SAAS,EAAE,WAAW;QACtB,eAAe,EAAE;YACf,UAAU,EAAE,WAAW;YACvB,UAAU,EAAE,SAAS;YACrB,SAAS,EAAE,cAAc,CAAC,MAAM;SACjC;QACD,SAAS,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACpC,oBAAoB,CAClB,qBAAqB,CAAC,GAAG,CAAC,EAC1B,WAAW,EACX,IAAI,EACJ,0BAA0B,CAC3B,CACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CACjC,SAAiB,EACjB,QAAiB,EACjB,MAAe,EACf,GAAS,EACT,0BAAmF;IAEnF,MAAM,UAAU,GAAG,uBAAuB,CAAC,QAAQ,EAAE;QACnD,WAAW,EAAE,SAAS;QACtB,cAAc,EAAE,MAAM;QACtB,GAAG;KACJ,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAE5E,OAAO;QACL,SAAS,EAAE,iBAAiB;QAC5B,eAAe,EAAE,UAAU;QAC3B,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC3C,yBAAyB,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAC7D;KACF,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B,CACnC,SAAiB,EACjB,QAAiB,EACjB,MAAe,EACf,GAAS,EACT,0BAAmF;IAEnF,OAAO,uBAAuB,CAAC,QAAQ,CAAC;QACtC,CAAC,CAAC,0BAA0B,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,0BAA0B,CAAC;QAC1F,CAAC,CAAC,oBAAoB,CAAC,SAAS,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,aAAa,CAAC,SAAiB,EAAE,MAAe,EAAE,GAAS;IAClE,MAAM,KAAK,GAAG,UAAU,CAAC;QACvB,SAAS,EAAE,oBAAoB;QAC/B,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QACxC,GAAG;KACJ,CAAC,CAAC;IACH,OAAO,gBAAgB,CACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,EAC/C,oBAAoB,EACpB,KAAK,CACN,CAAC,OAAO,CAAC;AACZ,CAAC;AAED,SAAS,aAAa,CACpB,SAAiB,EACjB,MAAiC,EACjC,MAAe,EACf,GAAS;IAET,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;IACjE,OAAO;QACL,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,uBAAuB,CAAC;QACtE,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC;QACpE,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC;QACtD,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC;QACtD,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAoC;IAC5D,OAAO;QACL,EAAE,EAAE,SAAS,CAAC,EAAE;QAChB,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAmC;IAEnC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC;IACvC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACpE,MAAM,0BAA0B,GAAG,OAAO,CAAC,0BAA0B,IAAI,sBAAsB,CAAC;IAChG,MAAM,QAAQ,GAAG,4BAA4B,CAC3C,SAAS,EACT,QAAQ,EACR,MAAM,EACN,GAAG,EACH,0BAA0B,CAC3B,CAAC;IACF,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAI,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,QAAQ,CAAC,oEAAoE,EAAE;YACvF,IAAI,EAAE,qCAAqC;YAC3C,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,CAAC,KAAK,CAAC,gBAAgB,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IACpE,sBAAsB,CAAC,KAAK,CAAC,kBAAkB,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAE3F,MAAM,OAAO,GAAoC,EAAE,CAAC;IACpD,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAkC;YAC5C,EAAE,EAAE,SAAS,CAAC,EAAE;YAChB,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,WAAW,EAAE,SAAS,CAAC,WAAW;YAClC,MAAM,EAAE,UAAU;YAClB,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtE,CAAC;QAEF,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;YACzB,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,CAAC,SAAS,GAAG,MAAM,2BAA2B,CAAC;gBACnD,EAAE,EAAE,SAAS,CAAC,EAAG;gBACjB,OAAO,EAAE,SAAS,CAAC,OAAQ;gBAC3B,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,GAAG,EAAE,OAAO,CAAC,GAAI;gBACjB,SAAS,EAAE,OAAO,CAAC,SAAU;gBAC7B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,KAAK,EAAE;oBACL,OAAO,EAAE,iCAAiC;oBAC1C,MAAM,EAAE,SAAS,CAAC,MAAM;oBACxB,WAAW,EAAE,SAAS,CAAC,WAAW;iBACnC;aACF,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;YACzB,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IAC7E,sBAAsB,CAAC,KAAK,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACtD,sBAAsB,CAAC,KAAK,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IAE5D,MAAM,MAAM,GAA2B;QACrC,gBAAgB,EAAE,GAAG,CAAC,WAAW,EAAE;QACnC,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,QAAQ,CAAC,SAAS;QAC9B,OAAO,EAAE,MAAM;QACf,MAAM;QACN,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QACnC,MAAM,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,WAAW;QAC1E,MAAM,EAAE;YACN,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM;YACnC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM;YACvE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM;YACvE,MAAM,EAAE,aAAa,CAAC,MAAM;SAC7B;QACD,KAAK;QACL,SAAS,EAAE,OAAO;KACnB,CAAC;IAEF,iBAAiB,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport type { FetchLike } from './http.js';\nimport { readJsonInput } from './io.js';\nimport {\n summarizeProcessPayloadValidation,\n validateProcessPayload,\n type ProcessPayloadValidationResult,\n} from './process-payload-validation.js';\nimport {\n collectPublishInputs,\n normalizePublishRequest,\n type PublishCollectedDatasetEntry,\n type PublishCollectedOrigin,\n} from './publish.js';\nimport {\n syncStateAwareProcessRecord,\n type ProcessStateAwareWriteResult,\n} from './process-save-draft.js';\nimport { buildRunId, resolveRunLayout } from './run.js';\n\ntype JsonObject = Record<string, unknown>;\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction first_non_empty(...values: unknown[]): string | null {\n for (const value of values) {\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n }\n return null;\n}\n\nfunction resolve_path(baseDir: string, value: string): string {\n return path.resolve(baseDir, value);\n}\n\nfunction serialize_error(error: unknown): { message: string } {\n if (error instanceof Error) {\n return { message: error.message };\n }\n return { message: String(error) };\n}\n\nfunction readJsonLinesInput(inputPath: string): JsonObject[] {\n const resolved = path.resolve(inputPath);\n if (!existsSync(resolved)) {\n throw new CliError(`Input file not found: ${resolved}`, {\n code: 'INPUT_NOT_FOUND',\n exitCode: 2,\n });\n }\n\n return readFileSync(resolved, 'utf8')\n .split(/\\r?\\n/u)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((line, index) => {\n try {\n const parsed = JSON.parse(line) as unknown;\n if (!isRecord(parsed)) {\n throw new CliError(\n `Expected JSON object rows in JSONL input: ${resolved} (line ${index + 1})`,\n {\n code: 'INPUT_INVALID_JSONL_ROW',\n exitCode: 2,\n },\n );\n }\n return parsed;\n } catch (error) {\n if (error instanceof CliError) {\n throw error;\n }\n throw new CliError(`Input file contains invalid JSONL at line ${index + 1}: ${resolved}`, {\n code: 'INPUT_INVALID_JSONL',\n exitCode: 2,\n details: String(error),\n });\n }\n });\n}\n\nfunction readStructuredInput(inputPath: string): unknown {\n return inputPath.toLowerCase().endsWith('.jsonl')\n ? readJsonLinesInput(inputPath)\n : readJsonInput(inputPath);\n}\n\nfunction looksLikePublishRequest(value: unknown): boolean {\n return (\n isRecord(value) &&\n ('inputs' in value || 'publish' in value || 'out_dir' in value || 'output_dir' in value)\n );\n}\n\nfunction loadProcessPayloadFromDatasetEntry(entry: unknown, baseDir: string): JsonObject {\n if (isRecord(entry)) {\n for (const key of ['json_ordered', 'jsonOrdered', 'payload', 'process'] as const) {\n const candidate = entry[key];\n if (isRecord(candidate)) {\n return candidate;\n }\n }\n\n const fileValue = first_non_empty(entry.file, entry.path);\n if (fileValue) {\n const filePath = resolve_path(baseDir, fileValue);\n const loaded = readJsonInput(filePath);\n if (!isRecord(loaded)) {\n throw new CliError(`Expected JSON object input: ${filePath}`, {\n code: 'PROCESS_SAVE_DRAFT_INPUT_NOT_OBJECT',\n exitCode: 2,\n });\n }\n return loaded;\n }\n\n return entry;\n }\n\n if (typeof entry === 'string' && entry.trim()) {\n const filePath = resolve_path(baseDir, entry);\n const loaded = readJsonInput(filePath);\n if (!isRecord(loaded)) {\n throw new CliError(`Expected JSON object input: ${filePath}`, {\n code: 'PROCESS_SAVE_DRAFT_INPUT_NOT_OBJECT',\n exitCode: 2,\n });\n }\n return loaded;\n }\n\n throw new CliError('Unsupported process save-draft dataset entry.', {\n code: 'PROCESS_SAVE_DRAFT_UNSUPPORTED_ENTRY',\n exitCode: 2,\n details: entry,\n });\n}\n\nfunction extractProcessIdentity(payload: JsonObject): [string, string] {\n const root = isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n const processInformation = isRecord(root.processInformation) ? root.processInformation : {};\n const dataSetInformation = isRecord(processInformation.dataSetInformation)\n ? processInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const datasetId = first_non_empty(dataSetInformation['common:UUID']);\n const version = first_non_empty(publicationAndOwnership['common:dataSetVersion'], '01.01.000')!;\n\n if (!datasetId) {\n throw new CliError(\n 'Process payload missing processInformation.dataSetInformation.common:UUID.',\n {\n code: 'PUBLISH_PROCESS_ID_MISSING',\n exitCode: 2,\n },\n );\n }\n\n return [datasetId, version];\n}\n\nfunction processPayloadFromRow(row: JsonObject): JsonObject {\n if (isRecord(row.json_ordered)) {\n return row.json_ordered;\n }\n\n if (isRecord(row.json)) {\n return row.json;\n }\n\n if (isRecord(row.process)) {\n return row.process;\n }\n\n return row;\n}\n\nexport type ProcessSaveDraftSource = 'rows_file' | 'bundle' | 'input';\n\nexport type ProcessSaveDraftCandidate = {\n id: string | null;\n version: string | null;\n source: ProcessSaveDraftSource;\n bundle_path: string | null;\n payload: JsonObject;\n validation?: ProcessPayloadValidationResult;\n error?: { message: string };\n};\n\nexport type ProcessSaveDraftProcessReport = {\n id: string | null;\n version: string | null;\n source: ProcessSaveDraftSource;\n bundle_path: string | null;\n status: 'prepared' | 'executed' | 'failed';\n validation?: ProcessPayloadValidationResult;\n execution?: ProcessStateAwareWriteResult;\n error?: { message: string };\n};\n\nexport type ProcessSaveDraftReport = {\n generated_at_utc: string;\n input_path: string;\n input_kind: 'rows_file' | 'publish_request';\n out_dir: string;\n commit: boolean;\n mode: 'dry_run' | 'commit';\n status: 'completed' | 'completed_with_failures';\n counts: {\n selected: number;\n prepared: number;\n executed: number;\n failed: number;\n };\n files: {\n normalized_input: string;\n selected_processes: string;\n progress_jsonl: string;\n failures_jsonl: string;\n summary_json: string;\n };\n processes: ProcessSaveDraftProcessReport[];\n};\n\nexport type RunProcessSaveDraftOptions = {\n inputPath: string;\n outDir?: string | null;\n commit?: boolean | null;\n rawInput?: unknown;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n now?: Date;\n validateProcessPayloadImpl?: (payload: JsonObject) => ProcessPayloadValidationResult;\n};\n\ntype PreparedProcessSaveDraftInput = {\n inputKind: 'rows_file' | 'publish_request';\n normalizedInput: unknown;\n processes: ProcessSaveDraftCandidate[];\n};\n\nfunction candidateFromPayload(\n payload: JsonObject,\n source: ProcessSaveDraftSource,\n bundlePath: string | null,\n validateProcessPayloadImpl: (payload: JsonObject) => ProcessPayloadValidationResult,\n): ProcessSaveDraftCandidate {\n try {\n const [id, version] = extractProcessIdentity(payload);\n const validation = validateProcessPayloadImpl(payload);\n if (!validation.ok) {\n return {\n id,\n version,\n source,\n bundle_path: bundlePath,\n payload,\n validation,\n error: {\n message: summarizeProcessPayloadValidation(validation),\n },\n };\n }\n return {\n id,\n version,\n source,\n bundle_path: bundlePath,\n payload,\n validation,\n };\n } catch (error) {\n return {\n id: first_non_empty(payload['@id'], payload.id),\n version: first_non_empty(payload['@version'], payload.version, '01.01.000'),\n source,\n bundle_path: bundlePath,\n payload,\n error:\n error instanceof CliError && error.code === 'PUBLISH_PROCESS_ID_MISSING'\n ? {\n message:\n 'Payload is not a canonical processDataSet wrapper; process save-draft only supports canonical process datasets.',\n }\n : serialize_error(error),\n };\n }\n}\n\nfunction sourceFromPublishOrigin(origin: PublishCollectedOrigin): ProcessSaveDraftSource {\n return origin.source === 'bundle' ? 'bundle' : 'input';\n}\n\nfunction candidateFromPublishEntry(\n entry: PublishCollectedDatasetEntry,\n validateProcessPayloadImpl: (payload: JsonObject) => ProcessPayloadValidationResult,\n): ProcessSaveDraftCandidate {\n return candidateFromPayload(\n loadProcessPayloadFromDatasetEntry(entry.entry, entry.origin.base_dir),\n sourceFromPublishOrigin(entry.origin),\n entry.origin.bundle_path,\n validateProcessPayloadImpl,\n );\n}\n\nfunction prepareRowsFileInput(\n inputPath: string,\n rawInput: unknown,\n validateProcessPayloadImpl: (payload: JsonObject) => ProcessPayloadValidationResult,\n): PreparedProcessSaveDraftInput {\n const rows = Array.isArray(rawInput) ? rawInput : [rawInput];\n const normalizedRows = rows.map((row, index) => {\n if (!isRecord(row)) {\n throw new CliError(\n `Expected JSON object rows in process save-draft input: ${inputPath} (index ${index})`,\n {\n code: 'PROCESS_SAVE_DRAFT_INVALID_ROW',\n exitCode: 2,\n },\n );\n }\n return row;\n });\n\n return {\n inputKind: 'rows_file',\n normalizedInput: {\n input_kind: 'rows_file',\n input_path: inputPath,\n row_count: normalizedRows.length,\n },\n processes: normalizedRows.map((row) =>\n candidateFromPayload(\n processPayloadFromRow(row),\n 'rows_file',\n null,\n validateProcessPayloadImpl,\n ),\n ),\n };\n}\n\nfunction preparePublishRequestInput(\n inputPath: string,\n rawInput: unknown,\n commit: boolean,\n now: Date,\n validateProcessPayloadImpl: (payload: JsonObject) => ProcessPayloadValidationResult,\n): PreparedProcessSaveDraftInput {\n const normalized = normalizePublishRequest(rawInput, {\n requestPath: inputPath,\n commitOverride: commit,\n now,\n });\n const collected = collectPublishInputs(normalized, path.dirname(inputPath));\n\n return {\n inputKind: 'publish_request',\n normalizedInput: normalized,\n processes: collected.processes.map((entry) =>\n candidateFromPublishEntry(entry, validateProcessPayloadImpl),\n ),\n };\n}\n\nfunction prepareProcessSaveDraftInput(\n inputPath: string,\n rawInput: unknown,\n commit: boolean,\n now: Date,\n validateProcessPayloadImpl: (payload: JsonObject) => ProcessPayloadValidationResult,\n): PreparedProcessSaveDraftInput {\n return looksLikePublishRequest(rawInput)\n ? preparePublishRequestInput(inputPath, rawInput, commit, now, validateProcessPayloadImpl)\n : prepareRowsFileInput(inputPath, rawInput, validateProcessPayloadImpl);\n}\n\nfunction defaultOutDir(inputPath: string, commit: boolean, now: Date): string {\n const runId = buildRunId({\n namespace: 'process_save_draft',\n operation: commit ? 'commit' : 'dry_run',\n now,\n });\n return resolveRunLayout(\n path.join(path.dirname(inputPath), 'artifacts'),\n 'process_save_draft',\n runId,\n ).runRoot;\n}\n\nfunction resolveOutDir(\n inputPath: string,\n outDir: string | null | undefined,\n commit: boolean,\n now: Date,\n): string {\n return outDir ? path.resolve(outDir) : defaultOutDir(inputPath, commit, now);\n}\n\nfunction buildFiles(outDir: string): ProcessSaveDraftReport['files'] {\n const outputDir = path.join(outDir, 'outputs', 'save-draft-rpc');\n return {\n normalized_input: path.join(outDir, 'inputs', 'normalized-input.json'),\n selected_processes: path.join(outputDir, 'selected-processes.jsonl'),\n progress_jsonl: path.join(outputDir, 'progress.jsonl'),\n failures_jsonl: path.join(outputDir, 'failures.jsonl'),\n summary_json: path.join(outputDir, 'summary.json'),\n };\n}\n\nfunction compactCandidate(candidate: ProcessSaveDraftCandidate): JsonObject {\n return {\n id: candidate.id,\n version: candidate.version,\n source: candidate.source,\n bundle_path: candidate.bundle_path,\n payload: candidate.payload,\n ...(candidate.validation ? { validation: candidate.validation } : {}),\n ...(candidate.error ? { error: candidate.error } : {}),\n };\n}\n\nexport async function runProcessSaveDraft(\n options: RunProcessSaveDraftOptions,\n): Promise<ProcessSaveDraftReport> {\n const now = options.now ?? new Date();\n const inputPath = path.resolve(options.inputPath);\n const commit = options.commit === true;\n const rawInput = options.rawInput ?? readStructuredInput(inputPath);\n const validateProcessPayloadImpl = options.validateProcessPayloadImpl ?? validateProcessPayload;\n const prepared = prepareProcessSaveDraftInput(\n inputPath,\n rawInput,\n commit,\n now,\n validateProcessPayloadImpl,\n );\n const outDir = resolveOutDir(inputPath, options.outDir, commit, now);\n const files = buildFiles(outDir);\n\n if (commit && (!options.env || !options.fetchImpl)) {\n throw new CliError('Process save-draft commit requires env and fetch runtime bindings.', {\n code: 'PROCESS_SAVE_DRAFT_RUNTIME_REQUIRED',\n exitCode: 2,\n });\n }\n\n writeJsonArtifact(files.normalized_input, prepared.normalizedInput);\n writeJsonLinesArtifact(files.selected_processes, prepared.processes.map(compactCandidate));\n\n const reports: ProcessSaveDraftProcessReport[] = [];\n for (const candidate of prepared.processes) {\n const report: ProcessSaveDraftProcessReport = {\n id: candidate.id,\n version: candidate.version,\n source: candidate.source,\n bundle_path: candidate.bundle_path,\n status: 'prepared',\n ...(candidate.validation ? { validation: candidate.validation } : {}),\n };\n\n if (candidate.error) {\n report.status = 'failed';\n report.error = candidate.error;\n reports.push(report);\n continue;\n }\n\n if (!commit) {\n reports.push(report);\n continue;\n }\n\n try {\n report.execution = await syncStateAwareProcessRecord({\n id: candidate.id!,\n version: candidate.version!,\n payload: candidate.payload,\n env: options.env!,\n fetchImpl: options.fetchImpl!,\n timeoutMs: options.timeoutMs,\n audit: {\n command: 'tiangong-lca process save-draft',\n source: candidate.source,\n bundle_path: candidate.bundle_path,\n },\n });\n report.status = 'executed';\n } catch (error) {\n report.status = 'failed';\n report.error = serialize_error(error);\n }\n\n reports.push(report);\n }\n\n const failedReports = reports.filter((report) => report.status === 'failed');\n writeJsonLinesArtifact(files.progress_jsonl, reports);\n writeJsonLinesArtifact(files.failures_jsonl, failedReports);\n\n const report: ProcessSaveDraftReport = {\n generated_at_utc: now.toISOString(),\n input_path: inputPath,\n input_kind: prepared.inputKind,\n out_dir: outDir,\n commit,\n mode: commit ? 'commit' : 'dry_run',\n status: failedReports.length > 0 ? 'completed_with_failures' : 'completed',\n counts: {\n selected: prepared.processes.length,\n prepared: reports.filter((entry) => entry.status === 'prepared').length,\n executed: reports.filter((entry) => entry.status === 'executed').length,\n failed: failedReports.length,\n },\n files,\n processes: reports,\n };\n\n writeJsonArtifact(files.summary_json, report);\n return report;\n}\n"]}
1
+ {"version":3,"file":"process-save-draft-run.js","sourceRoot":"","sources":["../../../src/lib/process-save-draft-run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,iBAAiB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAC3E,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAEvC,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAC;AACxC,OAAO,EACL,iCAAiC,EACjC,sBAAsB,GAEvB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,oBAAoB,EACpB,uBAAuB,GAGxB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,2BAA2B,GAE5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAIxD,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9E,CAAC;AAED,SAAS,eAAe,CAAC,GAAG,MAAiB;IAC3C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;YAC9C,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC;QACtB,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,YAAY,CAAC,OAAe,EAAE,KAAa;IAClD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;AACtC,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;QAC3B,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC;IACpC,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AACpC,CAAC;AAED,SAAS,kBAAkB,CAAC,SAAiB;IAC3C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACzC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1B,MAAM,IAAI,QAAQ,CAAC,yBAAyB,QAAQ,EAAE,EAAE;YACtD,IAAI,EAAE,iBAAiB;YACvB,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,OAAO,YAAY,CAAC,QAAQ,EAAE,MAAM,CAAC;SAClC,KAAK,CAAC,QAAQ,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;SAC1B,MAAM,CAAC,OAAO,CAAC;SACf,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;YAC3C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,QAAQ,CAChB,6CAA6C,QAAQ,UAAU,KAAK,GAAG,CAAC,GAAG,EAC3E;oBACE,IAAI,EAAE,yBAAyB;oBAC/B,QAAQ,EAAE,CAAC;iBACZ,CACF,CAAC;YACJ,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;gBAC9B,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,IAAI,QAAQ,CAAC,6CAA6C,KAAK,GAAG,CAAC,KAAK,QAAQ,EAAE,EAAE;gBACxF,IAAI,EAAE,qBAAqB;gBAC3B,QAAQ,EAAE,CAAC;gBACX,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC;aACvB,CAAC,CAAC;QACL,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED,SAAS,mBAAmB,CAAC,SAAiB;IAC5C,OAAO,SAAS,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC;QAC/C,CAAC,CAAC,kBAAkB,CAAC,SAAS,CAAC;QAC/B,CAAC,CAAC,aAAa,CAAC,SAAS,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,uBAAuB,CAAC,KAAc;IAC7C,OAAO,CACL,QAAQ,CAAC,KAAK,CAAC;QACf,CAAC,QAAQ,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,IAAI,YAAY,IAAI,KAAK,CAAC,CACzF,CAAC;AACJ,CAAC;AAED,SAAS,kCAAkC,CAAC,KAAc,EAAE,OAAe;IACzE,IAAI,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACpB,KAAK,MAAM,GAAG,IAAI,CAAC,cAAc,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,CAAU,EAAE,CAAC;YACjF,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;YAC7B,IAAI,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBACxB,OAAO,SAAS,CAAC;YACnB,CAAC;QACH,CAAC;QAED,MAAM,SAAS,GAAG,eAAe,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC1D,IAAI,SAAS,EAAE,CAAC;YACd,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBACtB,MAAM,IAAI,QAAQ,CAAC,+BAA+B,QAAQ,EAAE,EAAE;oBAC5D,IAAI,EAAE,qCAAqC;oBAC3C,QAAQ,EAAE,CAAC;iBACZ,CAAC,CAAC;YACL,CAAC;YACD,OAAO,MAAM,CAAC;QAChB,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC;QAC9C,MAAM,MAAM,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;QACvC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,QAAQ,CAAC,+BAA+B,QAAQ,EAAE,EAAE;gBAC5D,IAAI,EAAE,qCAAqC;gBAC3C,QAAQ,EAAE,CAAC;aACZ,CAAC,CAAC;QACL,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,IAAI,QAAQ,CAAC,+CAA+C,EAAE;QAClE,IAAI,EAAE,sCAAsC;QAC5C,QAAQ,EAAE,CAAC;QACX,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAmB;IACjD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC;IACjF,MAAM,kBAAkB,GAAG,QAAQ,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,MAAM,kBAAkB,GAAG,QAAQ,CAAC,kBAAkB,CAAC,kBAAkB,CAAC;QACxE,CAAC,CAAC,kBAAkB,CAAC,kBAAkB;QACvC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,yBAAyB,GAAG,QAAQ,CAAC,IAAI,CAAC,yBAAyB,CAAC;QACxE,CAAC,CAAC,IAAI,CAAC,yBAAyB;QAChC,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,uBAAuB,GAAG,QAAQ,CAAC,yBAAyB,CAAC,uBAAuB,CAAC;QACzF,CAAC,CAAC,yBAAyB,CAAC,uBAAuB;QACnD,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,SAAS,GAAG,eAAe,CAAC,kBAAkB,CAAC,aAAa,CAAC,CAAC,CAAC;IACrE,MAAM,OAAO,GAAG,eAAe,CAAC,uBAAuB,CAAC,uBAAuB,CAAC,EAAE,WAAW,CAAE,CAAC;IAEhG,IAAI,CAAC,SAAS,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAChB,4EAA4E,EAC5E;YACE,IAAI,EAAE,4BAA4B;YAClC,QAAQ,EAAE,CAAC;SACZ,CACF,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC9B,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAe;IAC5C,IAAI,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC;QAC/B,OAAO,GAAG,CAAC,YAAY,CAAC;IAC1B,CAAC;IAED,IAAI,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,IAAI,CAAC;IAClB,CAAC;IAED,IAAI,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC,OAAO,CAAC;IACrB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AA2ED,SAAS,oBAAoB,CAC3B,OAAmB,EACnB,MAA8B,EAC9B,UAAyB,EACzB,0BAAmF;IAEnF,IAAI,CAAC;QACH,MAAM,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,0BAA0B,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;YACnB,OAAO;gBACL,EAAE;gBACF,OAAO;gBACP,MAAM;gBACN,WAAW,EAAE,UAAU;gBACvB,OAAO;gBACP,UAAU;gBACV,KAAK,EAAE;oBACL,OAAO,EAAE,iCAAiC,CAAC,UAAU,CAAC;iBACvD;aACF,CAAC;QACJ,CAAC;QACD,OAAO;YACL,EAAE;YACF,OAAO;YACP,MAAM;YACN,WAAW,EAAE,UAAU;YACvB,OAAO;YACP,UAAU;SACX,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO;YACL,EAAE,EAAE,eAAe,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;YAC/C,OAAO,EAAE,eAAe,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC;YAC3E,MAAM;YACN,WAAW,EAAE,UAAU;YACvB,OAAO;YACP,KAAK,EACH,KAAK,YAAY,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,4BAA4B;gBACtE,CAAC,CAAC;oBACE,OAAO,EACL,iHAAiH;iBACpH;gBACH,CAAC,CAAC,eAAe,CAAC,KAAK,CAAC;SAC7B,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,uBAAuB,CAAC,MAA8B;IAC7D,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC;AACzD,CAAC;AAED,SAAS,yBAAyB,CAChC,KAAmC,EACnC,0BAAmF;IAEnF,OAAO,oBAAoB,CACzB,kCAAkC,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,EACtE,uBAAuB,CAAC,KAAK,CAAC,MAAM,CAAC,EACrC,KAAK,CAAC,MAAM,CAAC,WAAW,EACxB,0BAA0B,CAC3B,CAAC;AACJ,CAAC;AAED,SAAS,oBAAoB,CAC3B,SAAiB,EACjB,QAAiB,EACjB,0BAAmF;IAEnF,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC;IAC7D,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE;QAC7C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,MAAM,IAAI,QAAQ,CAChB,0DAA0D,SAAS,WAAW,KAAK,GAAG,EACtF;gBACE,IAAI,EAAE,gCAAgC;gBACtC,QAAQ,EAAE,CAAC;aACZ,CACF,CAAC;QACJ,CAAC;QACD,OAAO,GAAG,CAAC;IACb,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,SAAS,EAAE,WAAW;QACtB,eAAe,EAAE;YACf,UAAU,EAAE,WAAW;YACvB,UAAU,EAAE,SAAS;YACrB,SAAS,EAAE,cAAc,CAAC,MAAM;SACjC;QACD,SAAS,EAAE,cAAc,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CACpC,oBAAoB,CAClB,qBAAqB,CAAC,GAAG,CAAC,EAC1B,WAAW,EACX,IAAI,EACJ,0BAA0B,CAC3B,CACF;KACF,CAAC;AACJ,CAAC;AAED,SAAS,0BAA0B,CACjC,SAAiB,EACjB,QAAiB,EACjB,MAAe,EACf,GAAS,EACT,0BAAmF;IAEnF,MAAM,UAAU,GAAG,uBAAuB,CAAC,QAAQ,EAAE;QACnD,WAAW,EAAE,SAAS;QACtB,cAAc,EAAE,MAAM;QACtB,GAAG;KACJ,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,oBAAoB,CAAC,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAE5E,OAAO;QACL,SAAS,EAAE,iBAAiB;QAC5B,eAAe,EAAE,UAAU;QAC3B,SAAS,EAAE,SAAS,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAC3C,yBAAyB,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAC7D;KACF,CAAC;AACJ,CAAC;AAED,SAAS,4BAA4B,CACnC,SAAiB,EACjB,QAAiB,EACjB,MAAe,EACf,GAAS,EACT,0BAAmF;IAEnF,OAAO,uBAAuB,CAAC,QAAQ,CAAC;QACtC,CAAC,CAAC,0BAA0B,CAAC,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,0BAA0B,CAAC;QAC1F,CAAC,CAAC,oBAAoB,CAAC,SAAS,EAAE,QAAQ,EAAE,0BAA0B,CAAC,CAAC;AAC5E,CAAC;AAED,SAAS,aAAa,CAAC,SAAiB,EAAE,MAAe,EAAE,GAAS;IAClE,MAAM,KAAK,GAAG,UAAU,CAAC;QACvB,SAAS,EAAE,oBAAoB;QAC/B,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QACxC,GAAG;KACJ,CAAC,CAAC;IACH,OAAO,gBAAgB,CACrB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,WAAW,CAAC,EAC/C,oBAAoB,EACpB,KAAK,CACN,CAAC,OAAO,CAAC;AACZ,CAAC;AAED,SAAS,aAAa,CACpB,SAAiB,EACjB,MAAiC,EACjC,MAAe,EACf,GAAS;IAET,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;AAC/E,CAAC;AAED,SAAS,UAAU,CAAC,MAAc;IAChC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;IACjE,OAAO;QACL,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,QAAQ,EAAE,uBAAuB,CAAC;QACtE,kBAAkB,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,0BAA0B,CAAC;QACpE,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC;QACtD,cAAc,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC;QACtD,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,cAAc,CAAC;KACnD,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CAAC,SAAoC;IAC5D,OAAO;QACL,EAAE,EAAE,SAAS,CAAC,EAAE;QAChB,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,MAAM,EAAE,SAAS,CAAC,MAAM;QACxB,WAAW,EAAE,SAAS,CAAC,WAAW;QAClC,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,GAAG,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,SAAS,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvD,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAmC;IAEnC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,KAAK,IAAI,CAAC;IACvC,MAAM,YAAY,GAAG,eAAe,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC;IAC3D,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,mBAAmB,CAAC,SAAS,CAAC,CAAC;IACpE,MAAM,0BAA0B,GAAG,OAAO,CAAC,0BAA0B,IAAI,sBAAsB,CAAC;IAChG,MAAM,QAAQ,GAAG,4BAA4B,CAC3C,SAAS,EACT,QAAQ,EACR,MAAM,EACN,GAAG,EACH,0BAA0B,CAC3B,CAAC;IACF,MAAM,MAAM,GAAG,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,CAAC,CAAC;IACrE,MAAM,KAAK,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;IAEjC,IAAI,MAAM,IAAI,CAAC,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;QACnD,MAAM,IAAI,QAAQ,CAAC,oEAAoE,EAAE;YACvF,IAAI,EAAE,qCAAqC;YAC3C,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,CAAC,KAAK,CAAC,gBAAgB,EAAE,QAAQ,CAAC,eAAe,CAAC,CAAC;IACpE,sBAAsB,CAAC,KAAK,CAAC,kBAAkB,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC;IAE3F,MAAM,OAAO,GAAoC,EAAE,CAAC;IACpD,KAAK,MAAM,SAAS,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;QAC3C,MAAM,MAAM,GAAkC;YAC5C,EAAE,EAAE,SAAS,CAAC,EAAE;YAChB,OAAO,EAAE,SAAS,CAAC,OAAO;YAC1B,MAAM,EAAE,SAAS,CAAC,MAAM;YACxB,WAAW,EAAE,SAAS,CAAC,WAAW;YAClC,MAAM,EAAE,UAAU;YAClB,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,SAAS,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACtE,CAAC;QAEF,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;YACpB,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;YACzB,MAAM,CAAC,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YACrB,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,MAAM,CAAC,SAAS,GAAG,MAAM,2BAA2B,CAAC;gBACnD,EAAE,EAAE,SAAS,CAAC,EAAG;gBACjB,OAAO,EAAE,SAAS,CAAC,OAAQ;gBAC3B,OAAO,EAAE,SAAS,CAAC,OAAO;gBAC1B,GAAG,EAAE,OAAO,CAAC,GAAI;gBACjB,SAAS,EAAE,OAAO,CAAC,SAAU;gBAC7B,SAAS,EAAE,OAAO,CAAC,SAAS;gBAC5B,YAAY;gBACZ,KAAK,EAAE;oBACL,OAAO,EAAE,iCAAiC;oBAC1C,MAAM,EAAE,SAAS,CAAC,MAAM;oBACxB,WAAW,EAAE,SAAS,CAAC,WAAW;oBAClC,cAAc,EAAE,YAAY;iBAC7B;aACF,CAAC,CAAC;YACH,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC;QAC7B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,CAAC,MAAM,GAAG,QAAQ,CAAC;YACzB,MAAM,CAAC,KAAK,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;QAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACvB,CAAC;IAED,MAAM,aAAa,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC;IAC7E,sBAAsB,CAAC,KAAK,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;IACtD,sBAAsB,CAAC,KAAK,CAAC,cAAc,EAAE,aAAa,CAAC,CAAC;IAE5D,MAAM,MAAM,GAA2B;QACrC,gBAAgB,EAAE,GAAG,CAAC,WAAW,EAAE;QACnC,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,QAAQ,CAAC,SAAS;QAC9B,OAAO,EAAE,MAAM;QACf,MAAM;QACN,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;QACnC,cAAc,EAAE,YAAY;QAC5B,aAAa,EAAE;YACb,uBAAuB,EAAE,OAAO,CAAC,YAAY,CAAC;YAC9C,cAAc,EAAE,YAAY;YAC5B,sBAAsB,EAAE,0BAA0B;YAClD,0BAA0B,EAAE,OAAO,CAAC,YAAY,CAAC;SAClD;QACD,MAAM,EAAE,aAAa,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,CAAC,WAAW;QAC1E,MAAM,EAAE;YACN,QAAQ,EAAE,QAAQ,CAAC,SAAS,CAAC,MAAM;YACnC,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM;YACvE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM;YACvE,MAAM,EAAE,aAAa,CAAC,MAAM;SAC7B;QACD,KAAK;QACL,SAAS,EAAE,OAAO;KACnB,CAAC;IAEF,iBAAiB,CAAC,KAAK,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAC9C,OAAO,MAAM,CAAC;AAChB,CAAC","sourcesContent":["import { existsSync, readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport type { FetchLike } from './http.js';\nimport { readJsonInput } from './io.js';\nimport {\n summarizeProcessPayloadValidation,\n validateProcessPayload,\n type ProcessPayloadValidationResult,\n} from './process-payload-validation.js';\nimport {\n collectPublishInputs,\n normalizePublishRequest,\n type PublishCollectedDatasetEntry,\n type PublishCollectedOrigin,\n} from './publish.js';\nimport {\n syncStateAwareProcessRecord,\n type ProcessStateAwareWriteResult,\n} from './process-save-draft.js';\nimport { buildRunId, resolveRunLayout } from './run.js';\n\ntype JsonObject = Record<string, unknown>;\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction first_non_empty(...values: unknown[]): string | null {\n for (const value of values) {\n if (typeof value === 'string' && value.trim()) {\n return value.trim();\n }\n }\n return null;\n}\n\nfunction resolve_path(baseDir: string, value: string): string {\n return path.resolve(baseDir, value);\n}\n\nfunction serialize_error(error: unknown): { message: string } {\n if (error instanceof Error) {\n return { message: error.message };\n }\n return { message: String(error) };\n}\n\nfunction readJsonLinesInput(inputPath: string): JsonObject[] {\n const resolved = path.resolve(inputPath);\n if (!existsSync(resolved)) {\n throw new CliError(`Input file not found: ${resolved}`, {\n code: 'INPUT_NOT_FOUND',\n exitCode: 2,\n });\n }\n\n return readFileSync(resolved, 'utf8')\n .split(/\\r?\\n/u)\n .map((line) => line.trim())\n .filter(Boolean)\n .map((line, index) => {\n try {\n const parsed = JSON.parse(line) as unknown;\n if (!isRecord(parsed)) {\n throw new CliError(\n `Expected JSON object rows in JSONL input: ${resolved} (line ${index + 1})`,\n {\n code: 'INPUT_INVALID_JSONL_ROW',\n exitCode: 2,\n },\n );\n }\n return parsed;\n } catch (error) {\n if (error instanceof CliError) {\n throw error;\n }\n throw new CliError(`Input file contains invalid JSONL at line ${index + 1}: ${resolved}`, {\n code: 'INPUT_INVALID_JSONL',\n exitCode: 2,\n details: String(error),\n });\n }\n });\n}\n\nfunction readStructuredInput(inputPath: string): unknown {\n return inputPath.toLowerCase().endsWith('.jsonl')\n ? readJsonLinesInput(inputPath)\n : readJsonInput(inputPath);\n}\n\nfunction looksLikePublishRequest(value: unknown): boolean {\n return (\n isRecord(value) &&\n ('inputs' in value || 'publish' in value || 'out_dir' in value || 'output_dir' in value)\n );\n}\n\nfunction loadProcessPayloadFromDatasetEntry(entry: unknown, baseDir: string): JsonObject {\n if (isRecord(entry)) {\n for (const key of ['json_ordered', 'jsonOrdered', 'payload', 'process'] as const) {\n const candidate = entry[key];\n if (isRecord(candidate)) {\n return candidate;\n }\n }\n\n const fileValue = first_non_empty(entry.file, entry.path);\n if (fileValue) {\n const filePath = resolve_path(baseDir, fileValue);\n const loaded = readJsonInput(filePath);\n if (!isRecord(loaded)) {\n throw new CliError(`Expected JSON object input: ${filePath}`, {\n code: 'PROCESS_SAVE_DRAFT_INPUT_NOT_OBJECT',\n exitCode: 2,\n });\n }\n return loaded;\n }\n\n return entry;\n }\n\n if (typeof entry === 'string' && entry.trim()) {\n const filePath = resolve_path(baseDir, entry);\n const loaded = readJsonInput(filePath);\n if (!isRecord(loaded)) {\n throw new CliError(`Expected JSON object input: ${filePath}`, {\n code: 'PROCESS_SAVE_DRAFT_INPUT_NOT_OBJECT',\n exitCode: 2,\n });\n }\n return loaded;\n }\n\n throw new CliError('Unsupported process save-draft dataset entry.', {\n code: 'PROCESS_SAVE_DRAFT_UNSUPPORTED_ENTRY',\n exitCode: 2,\n details: entry,\n });\n}\n\nfunction extractProcessIdentity(payload: JsonObject): [string, string] {\n const root = isRecord(payload.processDataSet) ? payload.processDataSet : payload;\n const processInformation = isRecord(root.processInformation) ? root.processInformation : {};\n const dataSetInformation = isRecord(processInformation.dataSetInformation)\n ? processInformation.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n const datasetId = first_non_empty(dataSetInformation['common:UUID']);\n const version = first_non_empty(publicationAndOwnership['common:dataSetVersion'], '01.01.000')!;\n\n if (!datasetId) {\n throw new CliError(\n 'Process payload missing processInformation.dataSetInformation.common:UUID.',\n {\n code: 'PUBLISH_PROCESS_ID_MISSING',\n exitCode: 2,\n },\n );\n }\n\n return [datasetId, version];\n}\n\nfunction processPayloadFromRow(row: JsonObject): JsonObject {\n if (isRecord(row.json_ordered)) {\n return row.json_ordered;\n }\n\n if (isRecord(row.json)) {\n return row.json;\n }\n\n if (isRecord(row.process)) {\n return row.process;\n }\n\n return row;\n}\n\nexport type ProcessSaveDraftSource = 'rows_file' | 'bundle' | 'input';\n\nexport type ProcessSaveDraftCandidate = {\n id: string | null;\n version: string | null;\n source: ProcessSaveDraftSource;\n bundle_path: string | null;\n payload: JsonObject;\n validation?: ProcessPayloadValidationResult;\n error?: { message: string };\n};\n\nexport type ProcessSaveDraftProcessReport = {\n id: string | null;\n version: string | null;\n source: ProcessSaveDraftSource;\n bundle_path: string | null;\n status: 'prepared' | 'executed' | 'failed';\n validation?: ProcessPayloadValidationResult;\n execution?: ProcessStateAwareWriteResult;\n error?: { message: string };\n};\n\nexport type ProcessSaveDraftReport = {\n generated_at_utc: string;\n input_path: string;\n input_kind: 'rows_file' | 'publish_request';\n out_dir: string;\n commit: boolean;\n mode: 'dry_run' | 'commit';\n target_user_id: string | null;\n account_guard: {\n target_user_id_required: boolean;\n target_user_id: string | null;\n commit_account_binding: 'current_cli_auth_session';\n post_write_verify_required: boolean;\n };\n status: 'completed' | 'completed_with_failures';\n counts: {\n selected: number;\n prepared: number;\n executed: number;\n failed: number;\n };\n files: {\n normalized_input: string;\n selected_processes: string;\n progress_jsonl: string;\n failures_jsonl: string;\n summary_json: string;\n };\n processes: ProcessSaveDraftProcessReport[];\n};\n\nexport type RunProcessSaveDraftOptions = {\n inputPath: string;\n outDir?: string | null;\n commit?: boolean | null;\n rawInput?: unknown;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n now?: Date;\n targetUserId?: string | null;\n validateProcessPayloadImpl?: (payload: JsonObject) => ProcessPayloadValidationResult;\n};\n\ntype PreparedProcessSaveDraftInput = {\n inputKind: 'rows_file' | 'publish_request';\n normalizedInput: unknown;\n processes: ProcessSaveDraftCandidate[];\n};\n\nfunction candidateFromPayload(\n payload: JsonObject,\n source: ProcessSaveDraftSource,\n bundlePath: string | null,\n validateProcessPayloadImpl: (payload: JsonObject) => ProcessPayloadValidationResult,\n): ProcessSaveDraftCandidate {\n try {\n const [id, version] = extractProcessIdentity(payload);\n const validation = validateProcessPayloadImpl(payload);\n if (!validation.ok) {\n return {\n id,\n version,\n source,\n bundle_path: bundlePath,\n payload,\n validation,\n error: {\n message: summarizeProcessPayloadValidation(validation),\n },\n };\n }\n return {\n id,\n version,\n source,\n bundle_path: bundlePath,\n payload,\n validation,\n };\n } catch (error) {\n return {\n id: first_non_empty(payload['@id'], payload.id),\n version: first_non_empty(payload['@version'], payload.version, '01.01.000'),\n source,\n bundle_path: bundlePath,\n payload,\n error:\n error instanceof CliError && error.code === 'PUBLISH_PROCESS_ID_MISSING'\n ? {\n message:\n 'Payload is not a canonical processDataSet wrapper; process save-draft only supports canonical process datasets.',\n }\n : serialize_error(error),\n };\n }\n}\n\nfunction sourceFromPublishOrigin(origin: PublishCollectedOrigin): ProcessSaveDraftSource {\n return origin.source === 'bundle' ? 'bundle' : 'input';\n}\n\nfunction candidateFromPublishEntry(\n entry: PublishCollectedDatasetEntry,\n validateProcessPayloadImpl: (payload: JsonObject) => ProcessPayloadValidationResult,\n): ProcessSaveDraftCandidate {\n return candidateFromPayload(\n loadProcessPayloadFromDatasetEntry(entry.entry, entry.origin.base_dir),\n sourceFromPublishOrigin(entry.origin),\n entry.origin.bundle_path,\n validateProcessPayloadImpl,\n );\n}\n\nfunction prepareRowsFileInput(\n inputPath: string,\n rawInput: unknown,\n validateProcessPayloadImpl: (payload: JsonObject) => ProcessPayloadValidationResult,\n): PreparedProcessSaveDraftInput {\n const rows = Array.isArray(rawInput) ? rawInput : [rawInput];\n const normalizedRows = rows.map((row, index) => {\n if (!isRecord(row)) {\n throw new CliError(\n `Expected JSON object rows in process save-draft input: ${inputPath} (index ${index})`,\n {\n code: 'PROCESS_SAVE_DRAFT_INVALID_ROW',\n exitCode: 2,\n },\n );\n }\n return row;\n });\n\n return {\n inputKind: 'rows_file',\n normalizedInput: {\n input_kind: 'rows_file',\n input_path: inputPath,\n row_count: normalizedRows.length,\n },\n processes: normalizedRows.map((row) =>\n candidateFromPayload(\n processPayloadFromRow(row),\n 'rows_file',\n null,\n validateProcessPayloadImpl,\n ),\n ),\n };\n}\n\nfunction preparePublishRequestInput(\n inputPath: string,\n rawInput: unknown,\n commit: boolean,\n now: Date,\n validateProcessPayloadImpl: (payload: JsonObject) => ProcessPayloadValidationResult,\n): PreparedProcessSaveDraftInput {\n const normalized = normalizePublishRequest(rawInput, {\n requestPath: inputPath,\n commitOverride: commit,\n now,\n });\n const collected = collectPublishInputs(normalized, path.dirname(inputPath));\n\n return {\n inputKind: 'publish_request',\n normalizedInput: normalized,\n processes: collected.processes.map((entry) =>\n candidateFromPublishEntry(entry, validateProcessPayloadImpl),\n ),\n };\n}\n\nfunction prepareProcessSaveDraftInput(\n inputPath: string,\n rawInput: unknown,\n commit: boolean,\n now: Date,\n validateProcessPayloadImpl: (payload: JsonObject) => ProcessPayloadValidationResult,\n): PreparedProcessSaveDraftInput {\n return looksLikePublishRequest(rawInput)\n ? preparePublishRequestInput(inputPath, rawInput, commit, now, validateProcessPayloadImpl)\n : prepareRowsFileInput(inputPath, rawInput, validateProcessPayloadImpl);\n}\n\nfunction defaultOutDir(inputPath: string, commit: boolean, now: Date): string {\n const runId = buildRunId({\n namespace: 'process_save_draft',\n operation: commit ? 'commit' : 'dry_run',\n now,\n });\n return resolveRunLayout(\n path.join(path.dirname(inputPath), 'artifacts'),\n 'process_save_draft',\n runId,\n ).runRoot;\n}\n\nfunction resolveOutDir(\n inputPath: string,\n outDir: string | null | undefined,\n commit: boolean,\n now: Date,\n): string {\n return outDir ? path.resolve(outDir) : defaultOutDir(inputPath, commit, now);\n}\n\nfunction buildFiles(outDir: string): ProcessSaveDraftReport['files'] {\n const outputDir = path.join(outDir, 'outputs', 'save-draft-rpc');\n return {\n normalized_input: path.join(outDir, 'inputs', 'normalized-input.json'),\n selected_processes: path.join(outputDir, 'selected-processes.jsonl'),\n progress_jsonl: path.join(outputDir, 'progress.jsonl'),\n failures_jsonl: path.join(outputDir, 'failures.jsonl'),\n summary_json: path.join(outputDir, 'summary.json'),\n };\n}\n\nfunction compactCandidate(candidate: ProcessSaveDraftCandidate): JsonObject {\n return {\n id: candidate.id,\n version: candidate.version,\n source: candidate.source,\n bundle_path: candidate.bundle_path,\n payload: candidate.payload,\n ...(candidate.validation ? { validation: candidate.validation } : {}),\n ...(candidate.error ? { error: candidate.error } : {}),\n };\n}\n\nexport async function runProcessSaveDraft(\n options: RunProcessSaveDraftOptions,\n): Promise<ProcessSaveDraftReport> {\n const now = options.now ?? new Date();\n const inputPath = path.resolve(options.inputPath);\n const commit = options.commit === true;\n const targetUserId = first_non_empty(options.targetUserId);\n const rawInput = options.rawInput ?? readStructuredInput(inputPath);\n const validateProcessPayloadImpl = options.validateProcessPayloadImpl ?? validateProcessPayload;\n const prepared = prepareProcessSaveDraftInput(\n inputPath,\n rawInput,\n commit,\n now,\n validateProcessPayloadImpl,\n );\n const outDir = resolveOutDir(inputPath, options.outDir, commit, now);\n const files = buildFiles(outDir);\n\n if (commit && (!options.env || !options.fetchImpl)) {\n throw new CliError('Process save-draft commit requires env and fetch runtime bindings.', {\n code: 'PROCESS_SAVE_DRAFT_RUNTIME_REQUIRED',\n exitCode: 2,\n });\n }\n\n writeJsonArtifact(files.normalized_input, prepared.normalizedInput);\n writeJsonLinesArtifact(files.selected_processes, prepared.processes.map(compactCandidate));\n\n const reports: ProcessSaveDraftProcessReport[] = [];\n for (const candidate of prepared.processes) {\n const report: ProcessSaveDraftProcessReport = {\n id: candidate.id,\n version: candidate.version,\n source: candidate.source,\n bundle_path: candidate.bundle_path,\n status: 'prepared',\n ...(candidate.validation ? { validation: candidate.validation } : {}),\n };\n\n if (candidate.error) {\n report.status = 'failed';\n report.error = candidate.error;\n reports.push(report);\n continue;\n }\n\n if (!commit) {\n reports.push(report);\n continue;\n }\n\n try {\n report.execution = await syncStateAwareProcessRecord({\n id: candidate.id!,\n version: candidate.version!,\n payload: candidate.payload,\n env: options.env!,\n fetchImpl: options.fetchImpl!,\n timeoutMs: options.timeoutMs,\n targetUserId,\n audit: {\n command: 'tiangong-lca process save-draft',\n source: candidate.source,\n bundle_path: candidate.bundle_path,\n target_user_id: targetUserId,\n },\n });\n report.status = 'executed';\n } catch (error) {\n report.status = 'failed';\n report.error = serialize_error(error);\n }\n\n reports.push(report);\n }\n\n const failedReports = reports.filter((report) => report.status === 'failed');\n writeJsonLinesArtifact(files.progress_jsonl, reports);\n writeJsonLinesArtifact(files.failures_jsonl, failedReports);\n\n const report: ProcessSaveDraftReport = {\n generated_at_utc: now.toISOString(),\n input_path: inputPath,\n input_kind: prepared.inputKind,\n out_dir: outDir,\n commit,\n mode: commit ? 'commit' : 'dry_run',\n target_user_id: targetUserId,\n account_guard: {\n target_user_id_required: Boolean(targetUserId),\n target_user_id: targetUserId,\n commit_account_binding: 'current_cli_auth_session',\n post_write_verify_required: Boolean(targetUserId),\n },\n status: failedReports.length > 0 ? 'completed_with_failures' : 'completed',\n counts: {\n selected: prepared.processes.length,\n prepared: reports.filter((entry) => entry.status === 'prepared').length,\n executed: reports.filter((entry) => entry.status === 'executed').length,\n failed: failedReports.length,\n },\n files,\n processes: reports,\n };\n\n writeJsonArtifact(files.summary_json, report);\n return report;\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { CliError } from './errors.js';
2
- import { postJson, requireRemoteOkPayload } from './http.js';
3
- import { buildSupabaseAuthHeaders, createSupabaseDataClient, requireSupabaseRestRuntime, runSupabaseArrayQuery, } from './supabase-client.js';
2
+ import { getJson, postJson, requireRemoteOkPayload } from './http.js';
3
+ import { buildSupabaseAuthHeaders, createSupabaseDataClient, deriveSupabaseProjectBaseUrl, requireSupabaseRestRuntime, runSupabaseArrayQuery, } from './supabase-client.js';
4
4
  import { createSupabaseDataRuntime } from './supabase-session.js';
5
5
  import { syncSupabaseJsonOrderedRecord, } from './supabase-json-ordered-write.js';
6
6
  const DEFAULT_TIMEOUT_MS = 10_000;
@@ -68,6 +68,48 @@ async function exactVisibleRows(options) {
68
68
  function visibleDraftRow(rows) {
69
69
  return rows.find((row) => row.state_code === 0) ?? null;
70
70
  }
71
+ function visibleDraftRowForTarget(rows, targetUserId) {
72
+ if (!targetUserId) {
73
+ return visibleDraftRow(rows);
74
+ }
75
+ return rows.find((row) => row.state_code === 0 && row.user_id === targetUserId) ?? null;
76
+ }
77
+ function buildCurrentUserUrl(restBaseUrl) {
78
+ return `${deriveSupabaseProjectBaseUrl(restBaseUrl)}/auth/v1/user`;
79
+ }
80
+ async function currentUserId(options) {
81
+ const url = buildCurrentUserUrl(options.restBaseUrl);
82
+ const payload = await getJson({
83
+ url,
84
+ headers: buildSupabaseAuthHeaders(options.publishableKey, options.accessToken),
85
+ timeoutMs: options.timeoutMs,
86
+ fetchImpl: options.fetchImpl,
87
+ });
88
+ const userId = isRecord(payload) ? trimToken(payload.id) : null;
89
+ if (!userId) {
90
+ throw new CliError('Supabase current-user lookup succeeded without a user id.', {
91
+ code: 'PROCESS_SAVE_DRAFT_CURRENT_USER_ID_MISSING',
92
+ exitCode: 1,
93
+ details: payload,
94
+ });
95
+ }
96
+ return userId;
97
+ }
98
+ function assertTargetUserMatchesCurrent(options) {
99
+ if (!options.targetUserId) {
100
+ return;
101
+ }
102
+ if (options.currentUserId !== options.targetUserId) {
103
+ throw new CliError(`Process save-draft target user ${options.targetUserId} does not match current CLI auth user ${options.currentUserId}.`, {
104
+ code: 'PROCESS_SAVE_DRAFT_TARGET_USER_MISMATCH',
105
+ exitCode: 1,
106
+ details: {
107
+ target_user_id: options.targetUserId,
108
+ current_user_id: options.currentUserId,
109
+ },
110
+ });
111
+ }
112
+ }
71
113
  function buildUnsupportedVisibleRowError(id, version, rows) {
72
114
  const primaryRow = rows[0] ?? null;
73
115
  const stateCode = primaryRow?.state_code === null || primaryRow?.state_code === undefined
@@ -114,6 +156,7 @@ async function saveDraft(options) {
114
156
  }
115
157
  export async function syncStateAwareProcessRecord(options) {
116
158
  const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;
159
+ const targetUserId = trimToken(options.targetUserId);
117
160
  const visible = await exactVisibleRows({
118
161
  id: options.id,
119
162
  version: options.version,
@@ -121,7 +164,17 @@ export async function syncStateAwareProcessRecord(options) {
121
164
  fetchImpl: options.fetchImpl,
122
165
  timeoutMs,
123
166
  });
124
- const draftRow = visibleDraftRow(visible.rows);
167
+ if (targetUserId) {
168
+ const userId = await currentUserId({
169
+ restBaseUrl: visible.restBaseUrl,
170
+ publishableKey: visible.publishableKey,
171
+ accessToken: visible.accessToken,
172
+ timeoutMs,
173
+ fetchImpl: options.fetchImpl,
174
+ });
175
+ assertTargetUserMatchesCurrent({ targetUserId, currentUserId: userId });
176
+ }
177
+ const draftRow = visibleDraftRowForTarget(visible.rows, targetUserId);
125
178
  if (!draftRow) {
126
179
  if (visible.rows.length > 0) {
127
180
  throw buildUnsupportedVisibleRowError(options.id, options.version, visible.rows);
@@ -158,8 +211,11 @@ export async function syncStateAwareProcessRecord(options) {
158
211
  }
159
212
  export const __testInternals = {
160
213
  buildVisibleRowsUrl,
214
+ buildCurrentUserUrl,
161
215
  parseVisibleRows,
162
216
  visibleDraftRow,
217
+ visibleDraftRowForTarget,
218
+ assertTargetUserMatchesCurrent,
163
219
  buildUnsupportedVisibleRowError,
164
220
  };
165
221
  //# sourceMappingURL=process-save-draft.js.map