@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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dataset-save-draft-run.js","sourceRoot":"","sources":["../../../src/lib/dataset-save-draft-run.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'node:path';\nimport * as tidasSdk from '@tiangong-lca/tidas-sdk';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { collectImportContentIssues } from './dataset-validate.js';\nimport {\n createDatasetRecord,\n saveDraftDatasetRecord,\n type DatasetCommandTable,\n} from './dataset-command.js';\nimport { readDatasetRowsInput } from './dataset-local.js';\nimport { CliError } from './errors.js';\nimport type { FetchLike } from './http.js';\nimport {\n normalizeIssuePath,\n type SafeParseSchema,\n type SdkValidationFactory,\n validateSchemaWithDeepFallback,\n} from './tidas-sdk-validation.js';\nimport {\n collectProcessPlaceholderIssues,\n collectProcessRequiredFieldIssues,\n} from './process-required-fields.js';\nimport { buildDatasetCommandTransport } from './dataset-command.js';\nimport {\n createSupabaseDataClient,\n requireSupabaseRestRuntime,\n runSupabaseArrayQuery,\n type SupabaseDataRuntime,\n} from './supabase-client.js';\nimport { createSupabaseDataRuntime } from './supabase-session.js';\nimport {\n collectRemoteReferences,\n lookupRemoteDataset,\n type RemoteDatasetLookup,\n type RemoteDatasetReference,\n type RemoteDatasetTable,\n} from './dataset-remote-verify.js';\n\ntype JsonObject = Record<string, unknown>;\n\nconst DEFAULT_TIMEOUT_MS = 10_000;\n\nexport type DatasetSaveDraftType =\n | 'auto'\n | 'contact'\n | 'source'\n | 'unitgroup'\n | 'flowproperty'\n | 'flow'\n | 'process';\n\ntype ConcreteDatasetSaveDraftType = Exclude<DatasetSaveDraftType, 'auto'>;\n\ntype DatasetTypeConfig = {\n table: DatasetCommandTable;\n rootKey: string;\n informationKey: string;\n schemaName: keyof typeof tidasSdk;\n factoryName: keyof typeof tidasSdk;\n};\n\ntype DatasetSaveDraftValidationIssue = {\n path: string;\n message: string;\n code: string;\n};\n\ntype DatasetSaveDraftValidationResult =\n | {\n ok: true;\n validator: string;\n issue_count: 0;\n issues: [];\n }\n | {\n ok: false;\n validator: string;\n issue_count: number;\n issues: DatasetSaveDraftValidationIssue[];\n };\n\nfunction normalizeValidationIssue(issue: {\n path?: Array<string | number>;\n message?: string;\n code?: string;\n}): DatasetSaveDraftValidationIssue {\n return {\n path: normalizeIssuePath(issue.path ?? []),\n message: issue.message ?? 'Validation failed',\n code: issue.code ?? 'custom',\n };\n}\n\nexport type DatasetSaveDraftRowReport = {\n index: number;\n id: string | null;\n version: string | null;\n type: ConcreteDatasetSaveDraftType | null;\n table: DatasetCommandTable | null;\n status: 'prepared' | 'executed' | 'failed';\n operation:\n | 'would_sync'\n | 'insert'\n | 'save_draft'\n | 'skipped_invalid'\n | 'reference_only_type'\n | 'type_unknown'\n | 'identity_missing'\n | 'elementary_flow_insert_blocked'\n | 'remote_reference_unresolved'\n | null;\n validation: DatasetSaveDraftValidationResult | null;\n visible_row?: VisibleDatasetRow | null;\n error?: { message: string; details?: unknown };\n};\n\nexport type DatasetSaveDraftReport = {\n schema_version: 1;\n generated_at_utc: string;\n input_path: string;\n requested_type: DatasetSaveDraftType;\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 by_table: Partial<Record<DatasetCommandTable, number>>;\n operations: Record<string, number>;\n };\n files: {\n selected_rows: string;\n progress_jsonl: string;\n failures_jsonl: string;\n summary_json: string;\n };\n rows: DatasetSaveDraftRowReport[];\n};\n\nexport type RunDatasetSaveDraftOptions = {\n inputPath: string;\n type?: string | null;\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};\n\ntype PreparedDatasetRow = {\n index: number;\n row: JsonObject;\n payload: JsonObject;\n type: ConcreteDatasetSaveDraftType | null;\n config: DatasetTypeConfig | null;\n id: string | null;\n version: string | null;\n validation: DatasetSaveDraftValidationResult | null;\n};\n\ntype VisibleDatasetRow = {\n id: string;\n version: string;\n user_id: string | null;\n state_code: number | null;\n};\n\ntype SupabaseDataClient = ReturnType<typeof createSupabaseDataClient>['client'];\n\ntype MissingFlowRemoteReference = {\n table: RemoteDatasetTable | null;\n id: string | null;\n version: string | null;\n path: string;\n short_description: string | null;\n status:\n | 'missing_dataset'\n | 'missing_version'\n | 'unsupported_type'\n | 'version_missing'\n | 'version_outdated';\n latest_version: string | null;\n};\n\nconst DATASET_CONFIGS: Record<ConcreteDatasetSaveDraftType, DatasetTypeConfig> = {\n contact: {\n table: 'contacts',\n rootKey: 'contactDataSet',\n informationKey: 'contactInformation',\n schemaName: 'ContactSchema',\n factoryName: 'createContact',\n },\n source: {\n table: 'sources',\n rootKey: 'sourceDataSet',\n informationKey: 'sourceInformation',\n schemaName: 'SourceSchema',\n factoryName: 'createSource',\n },\n unitgroup: {\n table: 'unitgroups',\n rootKey: 'unitGroupDataSet',\n informationKey: 'unitGroupInformation',\n schemaName: 'UnitGroupSchema',\n factoryName: 'createUnitGroup',\n },\n flowproperty: {\n table: 'flowproperties',\n rootKey: 'flowPropertyDataSet',\n informationKey: 'flowPropertiesInformation',\n schemaName: 'FlowPropertySchema',\n factoryName: 'createFlowProperty',\n },\n flow: {\n table: 'flows',\n rootKey: 'flowDataSet',\n informationKey: 'flowInformation',\n schemaName: 'FlowSchema',\n factoryName: 'createFlow',\n },\n process: {\n table: 'processes',\n rootKey: 'processDataSet',\n informationKey: 'processInformation',\n schemaName: 'ProcessSchema',\n factoryName: 'createProcess',\n },\n};\n\nconst REFERENCE_ONLY_SAVE_DRAFT_TYPES = new Set<ConcreteDatasetSaveDraftType>([\n 'unitgroup',\n 'flowproperty',\n]);\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction trimToken(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n const trimmed = value.trim();\n return trimmed || null;\n}\n\nfunction serializeError(error: unknown): { message: string; details?: unknown } {\n if (error instanceof CliError) {\n return { message: error.message, details: error.details };\n }\n if (error instanceof Error) {\n return { message: error.message };\n }\n return { message: String(error) };\n}\n\nfunction normalizeType(value: string | null | undefined): DatasetSaveDraftType {\n const normalized = value?.trim().toLowerCase();\n if (!normalized || normalized === 'auto') {\n return 'auto';\n }\n if (normalized === 'contact' || normalized === 'contacts') {\n return 'contact';\n }\n if (normalized === 'source' || normalized === 'sources') {\n return 'source';\n }\n if (\n normalized === 'unitgroup' ||\n normalized === 'unitgroups' ||\n normalized === 'unit-group' ||\n normalized === 'unit-groups'\n ) {\n throw new CliError(\n 'Unit groups are reference-only support data for dataset save-draft. Select an existing database row instead of creating a custom My Data unit group.',\n {\n code: 'DATASET_SAVE_DRAFT_REFERENCE_ONLY_TYPE',\n exitCode: 2,\n details: { type: normalized },\n },\n );\n }\n if (\n normalized === 'flowproperty' ||\n normalized === 'flowproperties' ||\n normalized === 'flow-property' ||\n normalized === 'flow-properties'\n ) {\n throw new CliError(\n 'Flow properties are reference-only support data for dataset save-draft. Select an existing database row instead of creating a custom My Data flow property.',\n {\n code: 'DATASET_SAVE_DRAFT_REFERENCE_ONLY_TYPE',\n exitCode: 2,\n details: { type: normalized },\n },\n );\n }\n if (normalized === 'flow' || normalized === 'flows') {\n return 'flow';\n }\n if (normalized === 'process' || normalized === 'processes') {\n return 'process';\n }\n\n throw new CliError('Expected --type to be auto, contact, source, flow, or process.', {\n code: 'DATASET_SAVE_DRAFT_TYPE_INVALID',\n exitCode: 2,\n details: value,\n });\n}\n\nfunction unwrapPayload(row: JsonObject): JsonObject {\n for (const key of ['json_ordered', 'jsonOrdered', 'payload', 'json'] as const) {\n if (isRecord(row[key])) {\n return row[key];\n }\n }\n return row;\n}\n\nfunction detectType(payload: JsonObject): ConcreteDatasetSaveDraftType | null {\n for (const [type, config] of Object.entries(DATASET_CONFIGS)) {\n if (isRecord(payload[config.rootKey])) {\n return type as ConcreteDatasetSaveDraftType;\n }\n }\n return null;\n}\n\nfunction schemaForConfig(config: DatasetTypeConfig): {\n schema: SafeParseSchema;\n createEntity: SdkValidationFactory | null;\n} {\n const schema = (tidasSdk as Record<string, unknown>)[config.schemaName];\n if (\n !schema ||\n typeof schema !== 'object' ||\n typeof (schema as SafeParseSchema).safeParse !== 'function'\n ) {\n throw new CliError(`${String(config.schemaName)} is unavailable in @tiangong-lca/tidas-sdk.`, {\n code: 'DATASET_SAVE_DRAFT_SCHEMA_UNAVAILABLE',\n exitCode: 2,\n details: { table: config.table },\n });\n }\n const createEntity = (tidasSdk as Record<string, unknown>)[config.factoryName];\n return {\n schema: schema as SafeParseSchema,\n createEntity:\n typeof createEntity === 'function' ? (createEntity as SdkValidationFactory) : null,\n };\n}\n\nfunction validatePayload(\n payload: JsonObject,\n type: ConcreteDatasetSaveDraftType,\n config: DatasetTypeConfig,\n): DatasetSaveDraftValidationResult {\n const { schema, createEntity } = schemaForConfig(config);\n const outcome = validateSchemaWithDeepFallback(schema, payload, createEntity);\n const processIssues =\n type === 'process'\n ? [...collectProcessRequiredFieldIssues(payload), ...collectProcessPlaceholderIssues(payload)]\n : [];\n const importIssues = type === 'process' ? [] : collectImportContentIssues(payload);\n const issues: DatasetSaveDraftValidationIssue[] = [\n ...outcome.issues.map(normalizeValidationIssue),\n ...processIssues,\n ...importIssues,\n ];\n\n if (outcome.success && issues.length === 0) {\n return {\n ok: true,\n validator: `@tiangong-lca/tidas-sdk/${String(config.schemaName)}+tiangong/import-content`,\n issue_count: 0,\n issues: [],\n };\n }\n\n return {\n ok: false,\n validator: `@tiangong-lca/tidas-sdk/${String(config.schemaName)}+tiangong/import-content`,\n issue_count: issues.length,\n issues,\n };\n}\n\nfunction extractIdentity(\n payload: JsonObject,\n row: JsonObject,\n config: DatasetTypeConfig,\n): {\n id: string | null;\n version: string | null;\n} {\n const rootCandidate = payload[config.rootKey];\n const root: JsonObject = isRecord(rootCandidate) ? rootCandidate : payload;\n const informationCandidate = root[config.informationKey];\n const information: JsonObject = isRecord(informationCandidate) ? informationCandidate : {};\n const dataSetInformationCandidate = information.dataSetInformation;\n const dataSetInformation = isRecord(dataSetInformationCandidate)\n ? dataSetInformationCandidate\n : {};\n const administrativeInformation = isRecord(root.administrativeInformation)\n ? root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n\n return {\n id: trimToken(row.id) ?? trimToken(dataSetInformation['common:UUID']),\n version:\n trimToken(row.version) ?? trimToken(publicationAndOwnership['common:dataSetVersion']) ?? null,\n };\n}\n\nfunction flowType(payload: JsonObject): string | null {\n const rootCandidate = payload.flowDataSet;\n const root = isRecord(rootCandidate) ? rootCandidate : payload;\n const modellingCandidate = root.modellingAndValidation;\n const modelling = isRecord(modellingCandidate) ? modellingCandidate : {};\n const lciMethodCandidate = modelling.LCIMethod;\n const lciMethod = isRecord(lciMethodCandidate) ? lciMethodCandidate : {};\n return trimToken(lciMethod.typeOfDataSet);\n}\n\nfunction isElementaryFlowPayload(payload: JsonObject): boolean {\n return flowType(payload)?.trim().toLowerCase() === 'elementary flow';\n}\n\nfunction compareVersions(left: string | null, right: string | null): number {\n if (!left && !right) {\n return 0;\n }\n if (!left) {\n return -1;\n }\n if (!right) {\n return 1;\n }\n const leftParts = left.split(/[._-]/u);\n const rightParts = right.split(/[._-]/u);\n const length = Math.max(leftParts.length, rightParts.length);\n for (let index = 0; index < length; index += 1) {\n const leftPart = leftParts[index] ?? '0';\n const rightPart = rightParts[index] ?? '0';\n const leftNumber = Number(leftPart);\n const rightNumber = Number(rightPart);\n if (Number.isFinite(leftNumber) && Number.isFinite(rightNumber)) {\n if (leftNumber !== rightNumber) {\n return leftNumber > rightNumber ? 1 : -1;\n }\n } else {\n const compared = leftPart.localeCompare(rightPart);\n if (compared !== 0) {\n return compared > 0 ? 1 : -1;\n }\n }\n }\n return 0;\n}\n\nfunction supportLookupKey(reference: {\n table: RemoteDatasetTable;\n id: string;\n version: string | null;\n}): string {\n return `${reference.table}:${reference.id}:${reference.version ?? ''}`;\n}\n\nfunction isLookupableRemoteReference(\n reference: RemoteDatasetReference,\n): reference is RemoteDatasetReference & { table: RemoteDatasetTable; id: string } {\n return Boolean(reference.table && reference.id);\n}\n\nfunction uniqueFlowRemoteReferences(payload: JsonObject): RemoteDatasetReference[] {\n const references = new Map<string, RemoteDatasetReference>();\n for (const reference of collectRemoteReferences([payload])) {\n if (reference.role !== 'reference') {\n continue;\n }\n if (reference.table && reference.id) {\n references.set(\n supportLookupKey({\n table: reference.table,\n id: reference.id,\n version: reference.version,\n }),\n reference,\n );\n } else {\n references.set(remoteReferenceFallbackKey(reference), reference);\n }\n }\n return [...references.values()];\n}\n\nfunction remoteReferenceFallbackKey(\n reference: Pick<RemoteDatasetReference, 'path' | 'type'>,\n): string {\n return `${reference.path}:${reference.type ?? 'unknown'}`;\n}\n\nasync function lookupCachedReferenceOnlySupport(options: {\n runtime: SupabaseDataRuntime;\n fetchImpl: FetchLike;\n timeoutMs: number;\n cache: Map<string, Promise<RemoteDatasetLookup>>;\n reference: RemoteDatasetReference & { table: RemoteDatasetTable; id: string };\n}): Promise<RemoteDatasetLookup> {\n const key = supportLookupKey(options.reference);\n if (!options.cache.has(key)) {\n options.cache.set(\n key,\n lookupRemoteDataset({\n runtime: options.runtime,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n request: {\n table: options.reference.table,\n id: options.reference.id,\n version: options.reference.version,\n },\n }),\n );\n }\n return options.cache.get(key) as Promise<RemoteDatasetLookup>;\n}\n\nasync function missingFlowRemoteReferences(options: {\n runtime: SupabaseDataRuntime;\n fetchImpl: FetchLike;\n timeoutMs: number;\n cache: Map<string, Promise<RemoteDatasetLookup>>;\n payload: JsonObject;\n}): Promise<MissingFlowRemoteReference[]> {\n const missing: MissingFlowRemoteReference[] = [];\n for (const reference of uniqueFlowRemoteReferences(options.payload)) {\n if (!isLookupableRemoteReference(reference)) {\n missing.push({\n table: reference.table,\n id: reference.id,\n version: reference.version,\n path: reference.path,\n short_description: reference.short_description,\n status: 'unsupported_type',\n latest_version: null,\n });\n continue;\n }\n if (!reference.version) {\n missing.push({\n table: reference.table,\n id: reference.id,\n version: null,\n path: reference.path,\n short_description: reference.short_description,\n status: 'version_missing',\n latest_version: null,\n });\n continue;\n }\n const lookup = await lookupCachedReferenceOnlySupport({ ...options, reference });\n if (!lookup.latest) {\n missing.push({\n table: reference.table,\n id: reference.id,\n version: reference.version,\n path: reference.path,\n short_description: reference.short_description,\n status: 'missing_dataset',\n latest_version: null,\n });\n } else if (!lookup.exact) {\n missing.push({\n table: reference.table,\n id: reference.id,\n version: reference.version,\n path: reference.path,\n short_description: reference.short_description,\n status: 'missing_version',\n latest_version: lookup.latest.version,\n });\n } else if (compareVersions(lookup.latest.version, reference.version) > 0) {\n missing.push({\n table: reference.table,\n id: reference.id,\n version: reference.version,\n path: reference.path,\n short_description: reference.short_description,\n status: 'version_outdated',\n latest_version: lookup.latest.version,\n });\n }\n }\n return missing;\n}\n\nfunction prepareRows(\n inputPath: string,\n rawInput: unknown | undefined,\n requestedType: DatasetSaveDraftType,\n): PreparedDatasetRow[] {\n const rows = readDatasetRowsInput(inputPath, rawInput);\n return rows.map((row, index) => {\n const payload = unwrapPayload(row);\n const type = requestedType === 'auto' ? detectType(payload) : requestedType;\n const config = type ? DATASET_CONFIGS[type] : null;\n const identity = config ? extractIdentity(payload, row, config) : { id: null, version: null };\n return {\n index,\n row,\n payload,\n type,\n config,\n id: identity.id,\n version: identity.version,\n validation: config && type ? validatePayload(payload, type, config) : null,\n };\n });\n}\n\nfunction buildFiles(outDir: string): DatasetSaveDraftReport['files'] {\n const outputDir = path.join(outDir, 'outputs', 'dataset-save-draft');\n return {\n selected_rows: path.join(outputDir, 'selected-rows.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 defaultOutDir(inputPath: string, commit: boolean, now: Date): string {\n const mode = commit ? 'commit' : 'dry-run';\n const timestamp = now.toISOString().replace(/[:.]/gu, '').replace(/Z$/u, 'Z');\n return path.join(\n path.dirname(inputPath),\n 'artifacts',\n 'dataset-save-draft',\n `${mode}-${timestamp}`,\n );\n}\n\nfunction operationCount(rows: DatasetSaveDraftRowReport[]): Record<string, number> {\n const counts: Record<string, number> = {};\n for (const row of rows) {\n const key = row.operation ?? 'none';\n counts[key] = (counts[key] ?? 0) + 1;\n }\n return counts;\n}\n\nfunction byTable(rows: PreparedDatasetRow[]): Partial<Record<DatasetCommandTable, number>> {\n const counts: Partial<Record<DatasetCommandTable, number>> = {};\n for (const row of rows) {\n if (row.config) {\n counts[row.config.table] = (counts[row.config.table] ?? 0) + 1;\n }\n }\n return counts;\n}\n\nfunction selectedRow(row: PreparedDatasetRow): JsonObject {\n return {\n index: row.index,\n type: row.type,\n table: row.config?.table ?? null,\n id: row.id,\n version: row.version,\n validation: row.validation,\n payload: row.payload,\n };\n}\n\nfunction buildPreparedFailure(row: PreparedDatasetRow): DatasetSaveDraftRowReport | null {\n if (!row.type || !row.config) {\n return {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.type,\n table: null,\n status: 'failed',\n operation: 'type_unknown',\n validation: null,\n error: {\n message: 'Could not detect dataset type. Use --type or provide a supported TIDAS wrapper.',\n },\n };\n }\n\n if (REFERENCE_ONLY_SAVE_DRAFT_TYPES.has(row.type)) {\n return {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.type,\n table: row.config.table,\n status: 'failed',\n operation: 'reference_only_type',\n validation: row.validation,\n error: {\n message:\n 'Unit Groups and Flow Properties are reference-only support data. Rewrite references to existing database rows instead of writing these rows through dataset save-draft.',\n },\n };\n }\n\n if (!row.id || !row.version) {\n return {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.type,\n table: row.config.table,\n status: 'failed',\n operation: 'identity_missing',\n validation: row.validation,\n error: {\n message:\n 'Dataset row is missing common:UUID or common:dataSetVersion required for save-draft.',\n },\n };\n }\n\n if (!row.validation?.ok) {\n return {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.type,\n table: row.config.table,\n status: 'failed',\n operation: 'skipped_invalid',\n validation: row.validation,\n error: {\n message: `Local dataset validation failed with ${row.validation?.issue_count ?? 0} issue(s).`,\n },\n };\n }\n\n return null;\n}\n\nfunction buildVisibleRowsUrl(\n restBaseUrl: string,\n table: DatasetCommandTable,\n id: string,\n version: string,\n): string {\n const url = new URL(`${restBaseUrl.replace(/\\/+$/u, '')}/${table}`);\n url.searchParams.set('select', 'id,version,user_id,state_code');\n url.searchParams.set('id', `eq.${id}`);\n url.searchParams.set('version', `eq.${version}`);\n return url.toString();\n}\n\nfunction parseVisibleRows(payload: unknown, url: string): VisibleDatasetRow[] {\n if (!Array.isArray(payload)) {\n throw new CliError(`Supabase REST response was not a JSON array for ${url}`, {\n code: 'SUPABASE_REST_RESPONSE_INVALID',\n exitCode: 1,\n details: payload,\n });\n }\n\n return payload.map((item, index) => {\n if (!isRecord(item)) {\n throw new CliError(`Supabase REST row ${index} was not a JSON object for ${url}`, {\n code: 'SUPABASE_REST_RESPONSE_INVALID',\n exitCode: 1,\n details: item,\n });\n }\n return {\n id: trimToken(item.id) ?? '',\n version: trimToken(item.version) ?? '',\n user_id: trimToken(item.user_id),\n state_code: typeof item.state_code === 'number' ? item.state_code : null,\n };\n });\n}\n\nasync function exactVisibleRows(options: {\n client: SupabaseDataClient;\n restBaseUrl: string;\n table: DatasetCommandTable;\n id: string;\n version: string;\n}): Promise<VisibleDatasetRow[]> {\n const url = buildVisibleRowsUrl(options.restBaseUrl, options.table, options.id, options.version);\n const payload = await runSupabaseArrayQuery(\n options.client\n .from(options.table)\n .select('id,version,user_id,state_code')\n .eq('id', options.id)\n .eq('version', options.version),\n url,\n );\n return parseVisibleRows(payload, url);\n}\n\nexport async function runDatasetSaveDraft(\n options: RunDatasetSaveDraftOptions,\n): Promise<DatasetSaveDraftReport> {\n const now = options.now ?? new Date();\n const inputPath = path.resolve(options.inputPath);\n const commit = options.commit === true;\n const requestedType = normalizeType(options.type);\n const outDir = path.resolve(options.outDir ?? defaultOutDir(inputPath, commit, now));\n const files = buildFiles(outDir);\n const preparedRows = prepareRows(inputPath, options.rawInput, requestedType);\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n\n if (commit && (!options.env || !options.fetchImpl)) {\n throw new CliError('Dataset save-draft commit requires env and fetch runtime bindings.', {\n code: 'DATASET_SAVE_DRAFT_RUNTIME_REQUIRED',\n exitCode: 2,\n });\n }\n\n writeJsonLinesArtifact(files.selected_rows, preparedRows.map(selectedRow));\n\n const runtime =\n commit && options.env && options.fetchImpl\n ? createSupabaseDataRuntime({\n runtime: requireSupabaseRestRuntime(options.env),\n fetchImpl: options.fetchImpl,\n timeoutMs,\n })\n : null;\n const commandTransport =\n runtime && options.fetchImpl\n ? await buildDatasetCommandTransport({\n runtime,\n fetchImpl: options.fetchImpl,\n timeoutMs,\n })\n : null;\n const dataClient =\n runtime && options.fetchImpl\n ? createSupabaseDataClient(runtime, options.fetchImpl, timeoutMs)\n : null;\n const referenceOnlySupportCache = new Map<string, Promise<RemoteDatasetLookup>>();\n\n const reports: DatasetSaveDraftRowReport[] = [];\n for (const row of preparedRows) {\n const preparedFailure = buildPreparedFailure(row);\n if (preparedFailure) {\n reports.push(preparedFailure);\n continue;\n }\n\n const baseReport: DatasetSaveDraftRowReport = {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.type,\n table: row.config!.table,\n status: 'prepared',\n operation: 'would_sync',\n validation: row.validation,\n };\n\n if (!commit) {\n reports.push(baseReport);\n continue;\n }\n\n try {\n const visibleRows = await exactVisibleRows({\n client: dataClient!.client,\n restBaseUrl: dataClient!.restBaseUrl,\n table: row.config!.table,\n id: row.id!,\n version: row.version!,\n });\n const visibleRow = visibleRows[0] ?? null;\n if (row.type === 'flow') {\n if (!visibleRow && isElementaryFlowPayload(row.payload)) {\n reports.push({\n ...baseReport,\n status: 'failed',\n operation: 'elementary_flow_insert_blocked',\n visible_row: null,\n error: {\n message:\n 'Elementary flows are reference-only for dataset save-draft. Resolve the flow with remote hybrid search and reference the existing database row instead of creating a My Data flow.',\n details: {\n code: 'DATASET_SAVE_DRAFT_ELEMENTARY_FLOW_INSERT_BLOCKED',\n },\n },\n });\n continue;\n }\n\n const unresolvedReferences = await missingFlowRemoteReferences({\n runtime: runtime!,\n fetchImpl: options.fetchImpl!,\n timeoutMs,\n cache: referenceOnlySupportCache,\n payload: row.payload,\n });\n if (unresolvedReferences.length > 0) {\n reports.push({\n ...baseReport,\n status: 'failed',\n operation: 'remote_reference_unresolved',\n visible_row: visibleRow,\n error: {\n message:\n 'Flow save-draft commit requires all referenced datasets to already resolve in the remote database.',\n details: {\n code: 'DATASET_SAVE_DRAFT_REMOTE_REFERENCE_UNRESOLVED',\n references: unresolvedReferences,\n },\n },\n });\n continue;\n }\n }\n if (visibleRow) {\n await saveDraftDatasetRecord({\n transport: commandTransport!,\n table: row.config!.table,\n id: row.id!,\n version: row.version!,\n payload: row.payload,\n extraData: { ruleVerification: true },\n });\n reports.push({\n ...baseReport,\n status: 'executed',\n operation: 'save_draft',\n visible_row: visibleRow,\n });\n } else {\n await createDatasetRecord({\n transport: commandTransport!,\n table: row.config!.table,\n id: row.id!,\n payload: row.payload,\n extraData: { ruleVerification: true },\n });\n reports.push({\n ...baseReport,\n status: 'executed',\n operation: 'insert',\n visible_row: null,\n });\n }\n } catch (error) {\n reports.push({\n ...baseReport,\n status: 'failed',\n error: serializeError(error),\n });\n }\n }\n\n const failures = reports.filter((row) => row.status === 'failed');\n writeJsonLinesArtifact(files.progress_jsonl, reports);\n writeJsonLinesArtifact(files.failures_jsonl, failures);\n\n const report: DatasetSaveDraftReport = {\n schema_version: 1,\n generated_at_utc: now.toISOString(),\n input_path: inputPath,\n requested_type: requestedType,\n out_dir: outDir,\n commit,\n mode: commit ? 'commit' : 'dry_run',\n status: failures.length > 0 ? 'completed_with_failures' : 'completed',\n counts: {\n selected: preparedRows.length,\n prepared: reports.filter((row) => row.status === 'prepared').length,\n executed: reports.filter((row) => row.status === 'executed').length,\n failed: failures.length,\n by_table: byTable(preparedRows),\n operations: operationCount(reports),\n },\n files,\n rows: reports,\n };\n\n writeJsonArtifact(files.summary_json, report);\n return report;\n}\n\nexport const __testInternals = {\n DATASET_CONFIGS,\n buildFiles,\n buildPreparedFailure,\n buildVisibleRowsUrl,\n byTable,\n compareVersions,\n defaultOutDir,\n detectType,\n extractIdentity,\n flowType,\n isElementaryFlowPayload,\n isLookupableRemoteReference,\n missingFlowRemoteReferences,\n normalizeValidationIssue,\n normalizeType,\n operationCount,\n parseVisibleRows,\n prepareRows,\n remoteReferenceFallbackKey,\n selectedRow,\n serializeError,\n supportLookupKey,\n unwrapPayload,\n uniqueFlowRemoteReferences,\n validatePayload,\n};\n"]}
@@ -7,14 +7,22 @@ import { normalizeIssuePath, validateSchemaWithDeepFallback, } from './tidas-sdk
7
7
  import { collectProcessPlaceholderIssues, collectProcessRequiredFieldIssues, } from './process-required-fields.js';
8
8
  const DEFAULT_TYPE = 'auto';
9
9
  const SCHEMA_EXPORTS = {
10
+ contact: 'ContactSchema',
10
11
  flow: 'FlowSchema',
12
+ flowproperty: 'FlowPropertySchema',
11
13
  process: 'ProcessSchema',
12
14
  lifecyclemodel: 'LifeCycleModelSchema',
15
+ source: 'SourceSchema',
16
+ unitgroup: 'UnitGroupSchema',
13
17
  };
14
18
  const ENTITY_FACTORY_EXPORTS = {
19
+ contact: 'createContact',
15
20
  flow: 'createFlow',
21
+ flowproperty: 'createFlowProperty',
16
22
  process: 'createProcess',
17
23
  lifecyclemodel: 'createLifeCycleModel',
24
+ source: 'createSource',
25
+ unitgroup: 'createUnitGroup',
18
26
  };
19
27
  function issuePath(pathSegments) {
20
28
  return pathSegments.length > 0 ? pathSegments.map(String).join('.') : '<root>';
@@ -57,7 +65,7 @@ function collectImportContentIssuesFromValue(value, pathSegments, issues) {
57
65
  }
58
66
  }
59
67
  }
60
- function collectImportContentIssues(payload) {
68
+ export function collectImportContentIssues(payload) {
61
69
  const issues = [];
62
70
  collectImportContentIssuesFromValue(payload, [], issues);
63
71
  return issues;
@@ -70,9 +78,18 @@ function normalizeType(value) {
70
78
  if (normalized === 'auto') {
71
79
  return 'auto';
72
80
  }
81
+ if (normalized === 'contact' || normalized === 'contacts') {
82
+ return 'contact';
83
+ }
73
84
  if (normalized === 'flow' || normalized === 'flows') {
74
85
  return 'flow';
75
86
  }
87
+ if (normalized === 'flowproperty' ||
88
+ normalized === 'flowproperties' ||
89
+ normalized === 'flow-property' ||
90
+ normalized === 'flow-properties') {
91
+ return 'flowproperty';
92
+ }
76
93
  if (normalized === 'process' || normalized === 'processes') {
77
94
  return 'process';
78
95
  }
@@ -82,7 +99,16 @@ function normalizeType(value) {
82
99
  normalized === 'models') {
83
100
  return 'lifecyclemodel';
84
101
  }
85
- throw new CliError('Expected --type to be auto, flow, process, or lifecyclemodel.', {
102
+ if (normalized === 'source' || normalized === 'sources') {
103
+ return 'source';
104
+ }
105
+ if (normalized === 'unitgroup' ||
106
+ normalized === 'unitgroups' ||
107
+ normalized === 'unit-group' ||
108
+ normalized === 'unit-groups') {
109
+ return 'unitgroup';
110
+ }
111
+ throw new CliError('Expected --type to be auto, contact, source, unitgroup, flowproperty, flow, process, or lifecyclemodel.', {
86
112
  code: 'DATASET_VALIDATE_TYPE_INVALID',
87
113
  exitCode: 2,
88
114
  details: value,
@@ -193,9 +219,13 @@ function buildFiles(outDir) {
193
219
  }
194
220
  function summarizeByType(rows) {
195
221
  return {
222
+ contact: rows.filter((row) => row.type === 'contact').length,
196
223
  flow: rows.filter((row) => row.type === 'flow').length,
224
+ flowproperty: rows.filter((row) => row.type === 'flowproperty').length,
197
225
  process: rows.filter((row) => row.type === 'process').length,
198
226
  lifecyclemodel: rows.filter((row) => row.type === 'lifecyclemodel').length,
227
+ source: rows.filter((row) => row.type === 'source').length,
228
+ unitgroup: rows.filter((row) => row.type === 'unitgroup').length,
199
229
  };
200
230
  }
201
231
  export async function runDatasetValidate(options) {
@@ -1 +1 @@
1
- {"version":3,"file":"dataset-validate.js","sourceRoot":"","sources":["../../../src/lib/dataset-validate.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'node:path';\nimport * as tidasSdk from '@tiangong-lca/tidas-sdk';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport {\n isRecord,\n materializeDatasetRows,\n type DatasetKind,\n type DatasetRowInput,\n} from './dataset-local.js';\nimport {\n normalizeIssuePath,\n type SafeParseSchema,\n type SdkValidationFactory,\n validateSchemaWithDeepFallback,\n} from './tidas-sdk-validation.js';\nimport {\n collectProcessPlaceholderIssues,\n collectProcessRequiredFieldIssues,\n} from './process-required-fields.js';\n\ntype DatasetValidateType = 'auto' | DatasetKind;\n\nexport type DatasetValidateIssue = {\n path: string;\n message: string;\n code: string;\n};\n\nexport type DatasetValidateRowReport = {\n index: number;\n id: string | null;\n version: string | null;\n type: DatasetKind | null;\n status: 'valid' | 'invalid';\n validator: string | null;\n issue_count: number;\n issues: DatasetValidateIssue[];\n};\n\nexport type DatasetValidateReport = {\n generated_at_utc: string;\n input_path: string;\n requested_type: DatasetValidateType;\n status: 'completed' | 'completed_with_failures';\n counts: {\n total: number;\n valid: number;\n invalid: number;\n by_type: Record<DatasetKind, number>;\n };\n files: {\n report: string | null;\n valid_rows: string | null;\n invalid_rows: string | null;\n };\n rows: DatasetValidateRowReport[];\n};\n\nexport type RunDatasetValidateOptions = {\n inputPath: string;\n type?: string | null;\n outDir?: string | null;\n rawInput?: unknown;\n now?: Date;\n schemas?: Partial<Record<DatasetKind, SafeParseSchema>>;\n};\n\nconst DEFAULT_TYPE: DatasetValidateType = 'auto';\n\nconst SCHEMA_EXPORTS: Record<DatasetKind, keyof typeof tidasSdk> = {\n flow: 'FlowSchema' as keyof typeof tidasSdk,\n process: 'ProcessSchema' as keyof typeof tidasSdk,\n lifecyclemodel: 'LifeCycleModelSchema' as keyof typeof tidasSdk,\n};\n\nconst ENTITY_FACTORY_EXPORTS: Record<DatasetKind, keyof typeof tidasSdk> = {\n flow: 'createFlow' as keyof typeof tidasSdk,\n process: 'createProcess' as keyof typeof tidasSdk,\n lifecyclemodel: 'createLifeCycleModel' as keyof typeof tidasSdk,\n};\n\nfunction issuePath(pathSegments: Array<string | number>): string {\n return pathSegments.length > 0 ? pathSegments.map(String).join('.') : '<root>';\n}\n\nfunction collectImportContentIssuesFromValue(\n value: unknown,\n pathSegments: Array<string | number>,\n issues: DatasetValidateIssue[],\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 ) {\n issues.push({\n path: issuePath(pathSegments),\n message:\n 'Dataset payload contains import placeholder, trace, local path, or sentinel content that must be repaired before import.',\n code: 'dataset_import_placeholder_content',\n });\n }\n return;\n }\n\n if (typeof value === 'number') {\n if (pathSegments.at(-1) === 'common:referenceYear' && value === 9999) {\n issues.push({\n path: issuePath(pathSegments),\n message:\n 'Dataset payload contains import placeholder, trace, local path, or sentinel content that must be repaired before import.',\n code: 'dataset_import_placeholder_content',\n });\n }\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item, index) =>\n collectImportContentIssuesFromValue(item, [...pathSegments, index], issues),\n );\n return;\n }\n\n if (isRecord(value)) {\n for (const [key, child] of Object.entries(value)) {\n collectImportContentIssuesFromValue(child, [...pathSegments, key], issues);\n }\n }\n}\n\nfunction collectImportContentIssues(payload: unknown): DatasetValidateIssue[] {\n const issues: DatasetValidateIssue[] = [];\n collectImportContentIssuesFromValue(payload, [], issues);\n return issues;\n}\n\nfunction normalizeType(value: string | null | undefined): DatasetValidateType {\n const normalized = value?.trim().toLowerCase();\n if (!normalized) {\n return DEFAULT_TYPE;\n }\n if (normalized === 'auto') {\n return 'auto';\n }\n if (normalized === 'flow' || normalized === 'flows') {\n return 'flow';\n }\n if (normalized === 'process' || normalized === 'processes') {\n return 'process';\n }\n if (\n normalized === 'lifecyclemodel' ||\n normalized === 'lifecyclemodels' ||\n normalized === 'model' ||\n normalized === 'models'\n ) {\n return 'lifecyclemodel';\n }\n throw new CliError('Expected --type to be auto, flow, process, or lifecyclemodel.', {\n code: 'DATASET_VALIDATE_TYPE_INVALID',\n exitCode: 2,\n details: value,\n });\n}\n\nfunction schemaForKind(\n kind: DatasetKind,\n schemas: Partial<Record<DatasetKind, SafeParseSchema>> | undefined,\n): { validator: string; schema: SafeParseSchema; createEntity: SdkValidationFactory | null } {\n if (schemas?.[kind]) {\n return {\n validator: 'injected',\n schema: schemas[kind],\n createEntity: null,\n };\n }\n\n const exportName = SCHEMA_EXPORTS[kind];\n const candidate = (tidasSdk as Record<string, unknown>)[exportName];\n if (\n !candidate ||\n typeof candidate !== 'object' ||\n typeof (candidate as SafeParseSchema).safeParse !== 'function'\n ) {\n throw new CliError(`${String(exportName)} is unavailable in @tiangong-lca/tidas-sdk.`, {\n code: 'DATASET_VALIDATE_SCHEMA_UNAVAILABLE',\n exitCode: 2,\n details: { type: kind },\n });\n }\n\n const factoryName = ENTITY_FACTORY_EXPORTS[kind];\n const createEntity = (tidasSdk as Record<string, unknown>)[factoryName];\n\n return {\n validator: `@tiangong-lca/tidas-sdk/${String(exportName)}`,\n schema: candidate as SafeParseSchema,\n createEntity:\n typeof createEntity === 'function' ? (createEntity as SdkValidationFactory) : null,\n };\n}\n\nfunction buildUnsupportedTypeReport(row: DatasetRowInput): DatasetValidateRowReport {\n return {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'invalid',\n validator: null,\n issue_count: 1,\n issues: [\n {\n path: '<root>',\n message: 'Could not detect dataset type. Use --type or provide a recognized TIDAS wrapper.',\n code: 'dataset_type_unknown',\n },\n ],\n };\n}\n\nfunction validateRow(\n row: DatasetRowInput,\n requestedType: DatasetValidateType,\n schemas: Partial<Record<DatasetKind, SafeParseSchema>> | undefined,\n): DatasetValidateRowReport {\n const kind = requestedType === 'auto' ? row.kind : requestedType;\n if (!kind) {\n return buildUnsupportedTypeReport(row);\n }\n\n const { validator, schema, createEntity } = schemaForKind(kind, schemas);\n const outcome = validateSchemaWithDeepFallback(schema, row.payload, createEntity);\n const requiredFieldIssues =\n kind === 'process' ? collectProcessRequiredFieldIssues(row.payload) : [];\n const placeholderIssues =\n kind === 'process'\n ? collectProcessPlaceholderIssues(row.payload)\n : collectImportContentIssues(row.payload);\n if (outcome.success && requiredFieldIssues.length === 0 && placeholderIssues.length === 0) {\n return {\n index: row.index,\n id: row.id,\n version: row.version,\n type: kind,\n status: 'valid',\n validator,\n issue_count: 0,\n issues: [],\n };\n }\n\n const issues = [\n ...outcome.issues.map((issue) => ({\n path: normalizeIssuePath(issue.path),\n message: issue.message ?? 'Validation failed',\n code: issue.code ?? 'custom',\n })),\n ...requiredFieldIssues,\n ...placeholderIssues,\n ];\n\n return {\n index: row.index,\n id: row.id,\n version: row.version,\n type: kind,\n status: 'invalid',\n validator,\n issue_count: issues.length,\n issues,\n };\n}\n\nfunction buildFiles(outDir: string | null | undefined): DatasetValidateReport['files'] {\n if (!outDir) {\n return {\n report: null,\n valid_rows: null,\n invalid_rows: null,\n };\n }\n\n const resolved = path.resolve(outDir);\n return {\n report: path.join(resolved, 'outputs', 'validation-report.json'),\n valid_rows: path.join(resolved, 'outputs', 'valid-rows.jsonl'),\n invalid_rows: path.join(resolved, 'outputs', 'invalid-rows.jsonl'),\n };\n}\n\nfunction summarizeByType(rows: DatasetValidateRowReport[]): Record<DatasetKind, number> {\n return {\n flow: rows.filter((row) => row.type === 'flow').length,\n process: rows.filter((row) => row.type === 'process').length,\n lifecyclemodel: rows.filter((row) => row.type === 'lifecyclemodel').length,\n };\n}\n\nexport async function runDatasetValidate(\n options: RunDatasetValidateOptions,\n): Promise<DatasetValidateReport> {\n const requestedType = normalizeType(options.type);\n const rows = materializeDatasetRows(options.inputPath, options.rawInput);\n const reports = rows.map((row) => validateRow(row, requestedType, options.schemas));\n const invalidRows = reports.filter((row) => row.status === 'invalid');\n const files = buildFiles(options.outDir);\n\n const report: DatasetValidateReport = {\n generated_at_utc: (options.now ?? new Date()).toISOString(),\n input_path: path.resolve(options.inputPath),\n requested_type: requestedType,\n status: invalidRows.length > 0 ? 'completed_with_failures' : 'completed',\n counts: {\n total: reports.length,\n valid: reports.length - invalidRows.length,\n invalid: invalidRows.length,\n by_type: summarizeByType(reports),\n },\n files,\n rows: reports,\n };\n\n if (files.report) {\n writeJsonArtifact(files.report, report);\n }\n if (files.valid_rows) {\n writeJsonLinesArtifact(\n files.valid_rows,\n rows.filter((_, index) => reports[index]?.status === 'valid').map((row) => row.row),\n );\n }\n if (files.invalid_rows) {\n writeJsonLinesArtifact(\n files.invalid_rows,\n rows.flatMap((row, index) =>\n reports[index]?.status === 'invalid'\n ? [\n {\n row: row.row,\n validation: reports[index],\n },\n ]\n : [],\n ),\n );\n }\n\n return report;\n}\n\nexport const __testInternals = {\n ENTITY_FACTORY_EXPORTS,\n SCHEMA_EXPORTS,\n collectImportContentIssues,\n normalizeType,\n schemaForKind,\n validateRow,\n};\n"]}
1
+ {"version":3,"file":"dataset-validate.js","sourceRoot":"","sources":["../../../src/lib/dataset-validate.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'node:path';\nimport * as tidasSdk from '@tiangong-lca/tidas-sdk';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport {\n isRecord,\n materializeDatasetRows,\n type DatasetKind,\n type DatasetRowInput,\n} from './dataset-local.js';\nimport {\n normalizeIssuePath,\n type SafeParseSchema,\n type SdkValidationFactory,\n validateSchemaWithDeepFallback,\n} from './tidas-sdk-validation.js';\nimport {\n collectProcessPlaceholderIssues,\n collectProcessRequiredFieldIssues,\n} from './process-required-fields.js';\n\ntype DatasetValidateType = 'auto' | DatasetKind;\n\nexport type DatasetValidateIssue = {\n path: string;\n message: string;\n code: string;\n};\n\nexport type DatasetValidateRowReport = {\n index: number;\n id: string | null;\n version: string | null;\n type: DatasetKind | null;\n status: 'valid' | 'invalid';\n validator: string | null;\n issue_count: number;\n issues: DatasetValidateIssue[];\n};\n\nexport type DatasetValidateReport = {\n generated_at_utc: string;\n input_path: string;\n requested_type: DatasetValidateType;\n status: 'completed' | 'completed_with_failures';\n counts: {\n total: number;\n valid: number;\n invalid: number;\n by_type: Record<DatasetKind, number>;\n };\n files: {\n report: string | null;\n valid_rows: string | null;\n invalid_rows: string | null;\n };\n rows: DatasetValidateRowReport[];\n};\n\nexport type RunDatasetValidateOptions = {\n inputPath: string;\n type?: string | null;\n outDir?: string | null;\n rawInput?: unknown;\n now?: Date;\n schemas?: Partial<Record<DatasetKind, SafeParseSchema>>;\n};\n\nconst DEFAULT_TYPE: DatasetValidateType = 'auto';\n\nconst SCHEMA_EXPORTS: Record<DatasetKind, keyof typeof tidasSdk> = {\n contact: 'ContactSchema' as keyof typeof tidasSdk,\n flow: 'FlowSchema' as keyof typeof tidasSdk,\n flowproperty: 'FlowPropertySchema' as keyof typeof tidasSdk,\n process: 'ProcessSchema' as keyof typeof tidasSdk,\n lifecyclemodel: 'LifeCycleModelSchema' as keyof typeof tidasSdk,\n source: 'SourceSchema' as keyof typeof tidasSdk,\n unitgroup: 'UnitGroupSchema' as keyof typeof tidasSdk,\n};\n\nconst ENTITY_FACTORY_EXPORTS: Record<DatasetKind, keyof typeof tidasSdk> = {\n contact: 'createContact' as keyof typeof tidasSdk,\n flow: 'createFlow' as keyof typeof tidasSdk,\n flowproperty: 'createFlowProperty' as keyof typeof tidasSdk,\n process: 'createProcess' as keyof typeof tidasSdk,\n lifecyclemodel: 'createLifeCycleModel' as keyof typeof tidasSdk,\n source: 'createSource' as keyof typeof tidasSdk,\n unitgroup: 'createUnitGroup' as keyof typeof tidasSdk,\n};\n\nfunction issuePath(pathSegments: Array<string | number>): string {\n return pathSegments.length > 0 ? pathSegments.map(String).join('.') : '<root>';\n}\n\nfunction collectImportContentIssuesFromValue(\n value: unknown,\n pathSegments: Array<string | number>,\n issues: DatasetValidateIssue[],\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 ) {\n issues.push({\n path: issuePath(pathSegments),\n message:\n 'Dataset payload contains import placeholder, trace, local path, or sentinel content that must be repaired before import.',\n code: 'dataset_import_placeholder_content',\n });\n }\n return;\n }\n\n if (typeof value === 'number') {\n if (pathSegments.at(-1) === 'common:referenceYear' && value === 9999) {\n issues.push({\n path: issuePath(pathSegments),\n message:\n 'Dataset payload contains import placeholder, trace, local path, or sentinel content that must be repaired before import.',\n code: 'dataset_import_placeholder_content',\n });\n }\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item, index) =>\n collectImportContentIssuesFromValue(item, [...pathSegments, index], issues),\n );\n return;\n }\n\n if (isRecord(value)) {\n for (const [key, child] of Object.entries(value)) {\n collectImportContentIssuesFromValue(child, [...pathSegments, key], issues);\n }\n }\n}\n\nexport function collectImportContentIssues(payload: unknown): DatasetValidateIssue[] {\n const issues: DatasetValidateIssue[] = [];\n collectImportContentIssuesFromValue(payload, [], issues);\n return issues;\n}\n\nfunction normalizeType(value: string | null | undefined): DatasetValidateType {\n const normalized = value?.trim().toLowerCase();\n if (!normalized) {\n return DEFAULT_TYPE;\n }\n if (normalized === 'auto') {\n return 'auto';\n }\n if (normalized === 'contact' || normalized === 'contacts') {\n return 'contact';\n }\n if (normalized === 'flow' || normalized === 'flows') {\n return 'flow';\n }\n if (\n normalized === 'flowproperty' ||\n normalized === 'flowproperties' ||\n normalized === 'flow-property' ||\n normalized === 'flow-properties'\n ) {\n return 'flowproperty';\n }\n if (normalized === 'process' || normalized === 'processes') {\n return 'process';\n }\n if (\n normalized === 'lifecyclemodel' ||\n normalized === 'lifecyclemodels' ||\n normalized === 'model' ||\n normalized === 'models'\n ) {\n return 'lifecyclemodel';\n }\n if (normalized === 'source' || normalized === 'sources') {\n return 'source';\n }\n if (\n normalized === 'unitgroup' ||\n normalized === 'unitgroups' ||\n normalized === 'unit-group' ||\n normalized === 'unit-groups'\n ) {\n return 'unitgroup';\n }\n throw new CliError(\n 'Expected --type to be auto, contact, source, unitgroup, flowproperty, flow, process, or lifecyclemodel.',\n {\n code: 'DATASET_VALIDATE_TYPE_INVALID',\n exitCode: 2,\n details: value,\n },\n );\n}\n\nfunction schemaForKind(\n kind: DatasetKind,\n schemas: Partial<Record<DatasetKind, SafeParseSchema>> | undefined,\n): { validator: string; schema: SafeParseSchema; createEntity: SdkValidationFactory | null } {\n if (schemas?.[kind]) {\n return {\n validator: 'injected',\n schema: schemas[kind],\n createEntity: null,\n };\n }\n\n const exportName = SCHEMA_EXPORTS[kind];\n const candidate = (tidasSdk as Record<string, unknown>)[exportName];\n if (\n !candidate ||\n typeof candidate !== 'object' ||\n typeof (candidate as SafeParseSchema).safeParse !== 'function'\n ) {\n throw new CliError(`${String(exportName)} is unavailable in @tiangong-lca/tidas-sdk.`, {\n code: 'DATASET_VALIDATE_SCHEMA_UNAVAILABLE',\n exitCode: 2,\n details: { type: kind },\n });\n }\n\n const factoryName = ENTITY_FACTORY_EXPORTS[kind];\n const createEntity = (tidasSdk as Record<string, unknown>)[factoryName];\n\n return {\n validator: `@tiangong-lca/tidas-sdk/${String(exportName)}`,\n schema: candidate as SafeParseSchema,\n createEntity:\n typeof createEntity === 'function' ? (createEntity as SdkValidationFactory) : null,\n };\n}\n\nfunction buildUnsupportedTypeReport(row: DatasetRowInput): DatasetValidateRowReport {\n return {\n index: row.index,\n id: row.id,\n version: row.version,\n type: row.kind,\n status: 'invalid',\n validator: null,\n issue_count: 1,\n issues: [\n {\n path: '<root>',\n message: 'Could not detect dataset type. Use --type or provide a recognized TIDAS wrapper.',\n code: 'dataset_type_unknown',\n },\n ],\n };\n}\n\nfunction validateRow(\n row: DatasetRowInput,\n requestedType: DatasetValidateType,\n schemas: Partial<Record<DatasetKind, SafeParseSchema>> | undefined,\n): DatasetValidateRowReport {\n const kind = requestedType === 'auto' ? row.kind : requestedType;\n if (!kind) {\n return buildUnsupportedTypeReport(row);\n }\n\n const { validator, schema, createEntity } = schemaForKind(kind, schemas);\n const outcome = validateSchemaWithDeepFallback(schema, row.payload, createEntity);\n const requiredFieldIssues =\n kind === 'process' ? collectProcessRequiredFieldIssues(row.payload) : [];\n const placeholderIssues =\n kind === 'process'\n ? collectProcessPlaceholderIssues(row.payload)\n : collectImportContentIssues(row.payload);\n if (outcome.success && requiredFieldIssues.length === 0 && placeholderIssues.length === 0) {\n return {\n index: row.index,\n id: row.id,\n version: row.version,\n type: kind,\n status: 'valid',\n validator,\n issue_count: 0,\n issues: [],\n };\n }\n\n const issues = [\n ...outcome.issues.map((issue) => ({\n path: normalizeIssuePath(issue.path),\n message: issue.message ?? 'Validation failed',\n code: issue.code ?? 'custom',\n })),\n ...requiredFieldIssues,\n ...placeholderIssues,\n ];\n\n return {\n index: row.index,\n id: row.id,\n version: row.version,\n type: kind,\n status: 'invalid',\n validator,\n issue_count: issues.length,\n issues,\n };\n}\n\nfunction buildFiles(outDir: string | null | undefined): DatasetValidateReport['files'] {\n if (!outDir) {\n return {\n report: null,\n valid_rows: null,\n invalid_rows: null,\n };\n }\n\n const resolved = path.resolve(outDir);\n return {\n report: path.join(resolved, 'outputs', 'validation-report.json'),\n valid_rows: path.join(resolved, 'outputs', 'valid-rows.jsonl'),\n invalid_rows: path.join(resolved, 'outputs', 'invalid-rows.jsonl'),\n };\n}\n\nfunction summarizeByType(rows: DatasetValidateRowReport[]): Record<DatasetKind, number> {\n return {\n contact: rows.filter((row) => row.type === 'contact').length,\n flow: rows.filter((row) => row.type === 'flow').length,\n flowproperty: rows.filter((row) => row.type === 'flowproperty').length,\n process: rows.filter((row) => row.type === 'process').length,\n lifecyclemodel: rows.filter((row) => row.type === 'lifecyclemodel').length,\n source: rows.filter((row) => row.type === 'source').length,\n unitgroup: rows.filter((row) => row.type === 'unitgroup').length,\n };\n}\n\nexport async function runDatasetValidate(\n options: RunDatasetValidateOptions,\n): Promise<DatasetValidateReport> {\n const requestedType = normalizeType(options.type);\n const rows = materializeDatasetRows(options.inputPath, options.rawInput);\n const reports = rows.map((row) => validateRow(row, requestedType, options.schemas));\n const invalidRows = reports.filter((row) => row.status === 'invalid');\n const files = buildFiles(options.outDir);\n\n const report: DatasetValidateReport = {\n generated_at_utc: (options.now ?? new Date()).toISOString(),\n input_path: path.resolve(options.inputPath),\n requested_type: requestedType,\n status: invalidRows.length > 0 ? 'completed_with_failures' : 'completed',\n counts: {\n total: reports.length,\n valid: reports.length - invalidRows.length,\n invalid: invalidRows.length,\n by_type: summarizeByType(reports),\n },\n files,\n rows: reports,\n };\n\n if (files.report) {\n writeJsonArtifact(files.report, report);\n }\n if (files.valid_rows) {\n writeJsonLinesArtifact(\n files.valid_rows,\n rows.filter((_, index) => reports[index]?.status === 'valid').map((row) => row.row),\n );\n }\n if (files.invalid_rows) {\n writeJsonLinesArtifact(\n files.invalid_rows,\n rows.flatMap((row, index) =>\n reports[index]?.status === 'invalid'\n ? [\n {\n row: row.row,\n validation: reports[index],\n },\n ]\n : [],\n ),\n );\n }\n\n return report;\n}\n\nexport const __testInternals = {\n ENTITY_FACTORY_EXPORTS,\n SCHEMA_EXPORTS,\n collectImportContentIssues,\n normalizeType,\n schemaForKind,\n validateRow,\n};\n"]}
@@ -1,6 +1,7 @@
1
1
  import { existsSync } from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';
4
+ import { collectImportContentIssues } from './dataset-validate.js';
4
5
  import { buildDatasetCommandTransport, createDatasetRecord, saveDraftDatasetRecord, } from './dataset-command.js';
5
6
  import { CliError } from './errors.js';
6
7
  import { FLOW_SCHEMA_VALIDATOR, validateFlowPayload, } from './flow-payload-validation.js';
@@ -11,6 +12,7 @@ import { createSupabaseDataRuntime } from './supabase-session.js';
11
12
  const DEFAULT_TIMEOUT_MS = 10_000;
12
13
  const DEFAULT_MAX_WORKERS = 4;
13
14
  const LEGACY_OUTPUT_PREFIX = 'flows_tidas_sdk_plus_classification';
15
+ const FLOW_PUBLISH_VALIDATOR = `${FLOW_SCHEMA_VALIDATOR}+tiangong/import-content`;
14
16
  function normalize_token(value) {
15
17
  if (typeof value !== 'string') {
16
18
  return null;
@@ -160,6 +162,7 @@ function validate_publish_flow_row(row, index, validate) {
160
162
  if (!validation.ok) {
161
163
  issues.push(...validation.issues);
162
164
  }
165
+ issues.push(...collectImportContentIssues(payload));
163
166
  }
164
167
  return {
165
168
  index,
@@ -193,7 +196,7 @@ function build_flow_publish_gate_report(rows, options) {
193
196
  ruleset_version: ruleset.version,
194
197
  ruleset_source_version: ruleset.source_version,
195
198
  ruleset_rule_ids: ruleset.rule_ids,
196
- validator: FLOW_SCHEMA_VALIDATOR,
199
+ validator: FLOW_PUBLISH_VALIDATOR,
197
200
  counts: {
198
201
  total: flows.length,
199
202
  valid: flows.length - invalid,
@@ -226,7 +229,9 @@ function gate_failure_rows(rows, gate) {
226
229
  }
227
230
  return [
228
231
  failure_row(row, flow.issues.map((issue) => ({
229
- validator: 'flow_schema',
232
+ validator: issue.code === 'dataset_import_placeholder_content'
233
+ ? 'import_content'
234
+ : 'flow_schema',
230
235
  stage: 'schema_gate',
231
236
  path: issue.path,
232
237
  message: issue.message,
@@ -1 +1 @@
1
- {"version":3,"file":"flow-publish-version.js","sourceRoot":"","sources":["../../../src/lib/flow-publish-version.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from 'node:fs';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport {\n buildDatasetCommandTransport,\n createDatasetRecord,\n saveDraftDatasetRecord,\n type DatasetCommandTransport,\n} from './dataset-command.js';\nimport { CliError } from './errors.js';\nimport {\n FLOW_SCHEMA_VALIDATOR,\n validateFlowPayload,\n type FlowPayloadValidationIssue,\n type FlowPayloadValidationResult,\n} from './flow-payload-validation.js';\nimport {\n coerceText,\n deepGet,\n isRecord,\n loadRowsFromFile,\n type JsonRecord,\n} from './flow-governance.js';\nimport type { FetchLike, ResponseLike } from './http.js';\nimport { getRuntimeRuleset, resolveRuntimeRuleId } from './runtime-rulesets.js';\nimport {\n createSupabaseDataClient,\n requireSupabaseRestRuntime,\n runSupabaseArrayQuery,\n} from './supabase-client.js';\nimport { createSupabaseDataRuntime } from './supabase-session.js';\n\nconst DEFAULT_TIMEOUT_MS = 10_000;\nconst DEFAULT_MAX_WORKERS = 4;\nconst LEGACY_OUTPUT_PREFIX = 'flows_tidas_sdk_plus_classification';\n\ntype FlowPublishMode = 'dry_run' | 'commit';\ntype FlowPublishOperation =\n | 'would_insert'\n | 'would_update_existing'\n | 'insert'\n | 'update_existing'\n | 'update_after_insert_error';\n\ntype FlowPublishFailureReason = {\n validator: 'remote_rest' | 'flow_schema';\n stage: string;\n path: string;\n message: string;\n code: string;\n visible_user_id?: string;\n visible_state_code?: string;\n};\n\ntype VisibleFlowRow = {\n id: string;\n version: string;\n user_id: string;\n state_code: number | null;\n};\n\ntype SupabaseDataClient = ReturnType<typeof createSupabaseDataClient>['client'];\n\ntype FlowPublishFailureRow = {\n id: unknown;\n user_id: unknown;\n json_ordered: JsonRecord;\n reason: FlowPublishFailureReason[];\n state_code: unknown;\n};\n\ntype FlowPublishSuccessRow = {\n id: string;\n version: string;\n operation: FlowPublishOperation;\n};\n\ntype FlowPublishFiles = {\n successList: string;\n remoteFailed: string;\n gateReport: string;\n report: string;\n};\n\ntype FlowPublishGateFinding = {\n code: string;\n severity: 'blocker';\n methodology_rule_id: string | null;\n message: string;\n path: string;\n dataset_index: number;\n dataset_id: string | null;\n dataset_version: string | null;\n};\n\nexport type FlowPublishVersionGateReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'passed' | 'blocked';\n ruleset_id: 'flow-publish/default';\n ruleset_version: '1';\n ruleset_source_version: string;\n ruleset_rule_ids: string[];\n validator: string;\n counts: {\n total: number;\n valid: number;\n invalid: number;\n };\n findings: FlowPublishGateFinding[];\n blockers: FlowPublishGateFinding[];\n next_action: 'query_remote_write_plan' | 'fix_flow_payloads';\n flows: Array<{\n index: number;\n id: string | null;\n version: string | null;\n ok: boolean;\n issue_count: number;\n issues: FlowPayloadValidationIssue[];\n }>;\n};\n\ntype FlowPublishOutcome =\n | {\n status: 'success';\n success: FlowPublishSuccessRow;\n }\n | {\n status: 'failure';\n failure: FlowPublishFailureRow;\n };\n\nexport type FlowPublishVersionReport = {\n schema_version: 1;\n generated_at_utc: string;\n status:\n | 'prepared_flow_publish_version'\n | 'completed_flow_publish_version'\n | 'completed_flow_publish_version_with_failures';\n mode: FlowPublishMode;\n input_file: string;\n out_dir: string;\n counts: {\n total_rows: number;\n success_count: number;\n failure_count: number;\n };\n flow_gate: {\n status: FlowPublishVersionGateReport['status'];\n ruleset_id: FlowPublishVersionGateReport['ruleset_id'];\n ruleset_version: FlowPublishVersionGateReport['ruleset_version'];\n counts: FlowPublishVersionGateReport['counts'];\n blocker_count: number;\n next_action: FlowPublishVersionGateReport['next_action'];\n };\n operation_counts: Record<string, number>;\n max_workers: number;\n limit: number | null;\n target_user_id_override: string | null;\n files: {\n success_list: string;\n remote_failed: string;\n gate_report: string;\n report: string;\n };\n};\n\nexport type RunFlowPublishVersionOptions = {\n inputFile: string;\n outDir: string;\n commit?: boolean;\n maxWorkers?: number;\n limit?: number;\n targetUserId?: string | null;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n now?: Date;\n validateFlowPayloadImpl?: (payload: JsonRecord) => FlowPayloadValidationResult;\n};\n\nfunction normalize_token(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n const trimmed = value.trim();\n return trimmed ? trimmed : null;\n}\n\nfunction assert_input_file(inputFile: string): string {\n const resolved = path.resolve(inputFile);\n if (!inputFile) {\n throw new CliError('Missing required --input-file value.', {\n code: 'FLOW_PUBLISH_VERSION_INPUT_REQUIRED',\n exitCode: 2,\n });\n }\n if (!existsSync(resolved)) {\n throw new CliError(`Flow publish-version input file not found: ${resolved}`, {\n code: 'FLOW_PUBLISH_VERSION_INPUT_NOT_FOUND',\n exitCode: 2,\n });\n }\n return resolved;\n}\n\nfunction assert_out_dir(outDir: string): string {\n if (!outDir) {\n throw new CliError('Missing required --out-dir value.', {\n code: 'FLOW_PUBLISH_VERSION_OUT_DIR_REQUIRED',\n exitCode: 2,\n });\n }\n return path.resolve(outDir);\n}\n\nfunction to_positive_integer(\n value: number | undefined,\n label: string,\n code: string,\n defaultValue: number,\n): number {\n if (value === undefined) {\n return defaultValue;\n }\n if (!Number.isInteger(value) || value <= 0) {\n throw new CliError(`Expected ${label} to be a positive integer.`, {\n code,\n exitCode: 2,\n });\n }\n return value;\n}\n\nfunction to_non_negative_integer(\n value: number | undefined,\n label: string,\n code: string,\n): number | null {\n if (value === undefined) {\n return null;\n }\n if (!Number.isInteger(value) || value < 0) {\n throw new CliError(`Expected ${label} to be a non-negative integer.`, {\n code,\n exitCode: 2,\n });\n }\n return value;\n}\n\nfunction build_output_files(outDir: string): FlowPublishFiles {\n return {\n successList: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_mcp_success_list.json`),\n remoteFailed: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remote_validation_failed.jsonl`),\n gateReport: path.join(outDir, 'flow-publish-version-gate-report.json'),\n report: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_mcp_sync_report.json`),\n };\n}\n\nfunction flow_payload(row: JsonRecord): JsonRecord {\n if (isRecord(row.json_ordered)) {\n return row.json_ordered;\n }\n if (isRecord(row.jsonOrdered)) {\n return row.jsonOrdered;\n }\n if (isRecord(row.json)) {\n return row.json;\n }\n if (isRecord(row.flowDataSet)) {\n return row;\n }\n throw new CliError(\n 'Flow row is missing json_ordered/jsonOrdered/json or a top-level flowDataSet payload.',\n {\n code: 'FLOW_PUBLISH_VERSION_PAYLOAD_REQUIRED',\n exitCode: 2,\n },\n );\n}\n\nfunction flow_id(row: JsonRecord, payload: JsonRecord): string {\n return (\n coerceText(row.id) ||\n coerceText(\n deepGet(payload, ['flowDataSet', 'flowInformation', 'dataSetInformation', 'common:UUID']),\n )\n );\n}\n\nfunction flow_version(payload: JsonRecord): string {\n const version = coerceText(\n deepGet(payload, [\n 'flowDataSet',\n 'administrativeInformation',\n 'publicationAndOwnership',\n 'common:dataSetVersion',\n ]),\n );\n if (!version) {\n throw new CliError(\n 'Flow payload is missing flowDataSet.administrativeInformation.publicationAndOwnership.common:dataSetVersion.',\n {\n code: 'FLOW_PUBLISH_VERSION_MISSING_VERSION',\n exitCode: 2,\n },\n );\n }\n return version;\n}\n\nfunction flow_version_gate_result(payload: JsonRecord): {\n version: string | null;\n issue: FlowPayloadValidationIssue | null;\n} {\n const version = coerceText(\n deepGet(payload, [\n 'flowDataSet',\n 'administrativeInformation',\n 'publicationAndOwnership',\n 'common:dataSetVersion',\n ]),\n );\n if (version) {\n return { version, issue: null };\n }\n return {\n version: null,\n issue: validation_issue(\n 'flowDataSet.administrativeInformation.publicationAndOwnership.common:dataSetVersion',\n 'Flow payload is missing flowDataSet.administrativeInformation.publicationAndOwnership.common:dataSetVersion.',\n 'FLOW_PUBLISH_VERSION_MISSING_VERSION',\n ),\n };\n}\n\nfunction validation_issue(\n pathValue: string,\n message: string,\n code: string,\n): FlowPayloadValidationIssue {\n return {\n path: pathValue,\n message,\n code,\n };\n}\n\nfunction validate_publish_flow_row(\n row: JsonRecord,\n index: number,\n validate: (payload: JsonRecord) => FlowPayloadValidationResult,\n): FlowPublishVersionGateReport['flows'][number] {\n const issues: FlowPayloadValidationIssue[] = [];\n let payload: JsonRecord | null = null;\n let id: string | null = null;\n let version: string | null = null;\n\n try {\n payload = flow_payload(row);\n } catch (error) {\n const cliError = error as CliError;\n issues.push(\n validation_issue('<root>', cliError.message, cliError.code || 'flow_payload_required'),\n );\n }\n\n if (payload) {\n id = flow_id(row, payload) || null;\n if (!id) {\n issues.push(\n validation_issue(\n 'flowDataSet.flowInformation.dataSetInformation.common:UUID',\n 'Flow row is missing a resolvable id/common:UUID value.',\n 'FLOW_PUBLISH_VERSION_ID_REQUIRED',\n ),\n );\n }\n\n const versionGate = flow_version_gate_result(payload);\n version = versionGate.version;\n if (versionGate.issue) {\n issues.push(versionGate.issue);\n }\n\n const validation = validate(payload);\n if (!validation.ok) {\n issues.push(...validation.issues);\n }\n }\n\n return {\n index,\n id,\n version,\n ok: issues.length === 0,\n issue_count: issues.length,\n issues,\n };\n}\n\nfunction build_flow_publish_gate_report(\n rows: JsonRecord[],\n options: {\n now: Date;\n validateFlowPayloadImpl?: (payload: JsonRecord) => FlowPayloadValidationResult;\n },\n): FlowPublishVersionGateReport {\n const ruleset = getRuntimeRuleset('flow-publish/default');\n const validate = options.validateFlowPayloadImpl ?? validateFlowPayload;\n const flows = rows.map((row, index) => validate_publish_flow_row(row, index, validate));\n const invalid = flows.filter((flow) => !flow.ok).length;\n const blockers = flows.flatMap((flow) =>\n flow.issues.map((issue) => ({\n code: issue.code,\n severity: 'blocker' as const,\n methodology_rule_id: resolveRuntimeRuleId(ruleset.id, issue.code),\n message: issue.message,\n path: issue.path,\n dataset_index: flow.index,\n dataset_id: flow.id,\n dataset_version: flow.version,\n })),\n );\n\n return {\n schema_version: 1,\n generated_at_utc: options.now.toISOString(),\n status: invalid > 0 ? 'blocked' : 'passed',\n ruleset_id: ruleset.id,\n ruleset_version: ruleset.version,\n ruleset_source_version: ruleset.source_version,\n ruleset_rule_ids: ruleset.rule_ids,\n validator: FLOW_SCHEMA_VALIDATOR,\n counts: {\n total: flows.length,\n valid: flows.length - invalid,\n invalid,\n },\n findings: blockers,\n blockers,\n next_action: invalid > 0 ? 'fix_flow_payloads' : 'query_remote_write_plan',\n flows,\n };\n}\n\nfunction flow_gate_summary(\n gate: FlowPublishVersionGateReport,\n): FlowPublishVersionReport['flow_gate'] {\n return {\n status: gate.status,\n ruleset_id: gate.ruleset_id,\n ruleset_version: gate.ruleset_version,\n counts: gate.counts,\n blocker_count: gate.blockers.length,\n next_action: gate.next_action,\n };\n}\n\nfunction gate_failure_rows(\n rows: JsonRecord[],\n gate: FlowPublishVersionGateReport,\n): FlowPublishFailureRow[] {\n return gate.flows.flatMap((flow) => {\n if (flow.ok) {\n return [];\n }\n const row = rows[flow.index];\n if (!row) {\n return [];\n }\n return [\n failure_row(\n row,\n flow.issues.map((issue) => ({\n validator: 'flow_schema' as const,\n stage: 'schema_gate',\n path: issue.path,\n message: issue.message,\n code: issue.code,\n })),\n ),\n ];\n });\n}\n\nfunction resolve_target_user_id(\n row: JsonRecord,\n targetUserIdOverride: string | null,\n): string | null {\n return normalize_token(coerceText(row.user_id)) ?? targetUserIdOverride;\n}\n\nfunction build_visible_rows_url(restBaseUrl: string, id: string, version: string): string {\n const url = new URL(`${restBaseUrl.replace(/\\/+$/u, '')}/flows`);\n url.searchParams.set('select', 'id,version,user_id,state_code');\n url.searchParams.set('id', `eq.${id}`);\n url.searchParams.set('version', `eq.${version}`);\n return url.toString();\n}\n\nfunction build_update_url(restBaseUrl: string, id: string, version: string): string {\n const url = new URL(`${restBaseUrl.replace(/\\/+$/u, '')}/flows`);\n url.searchParams.set('id', `eq.${id}`);\n url.searchParams.set('version', `eq.${version}`);\n return url.toString();\n}\n\nasync function parse_response(response: ResponseLike, url: string): Promise<unknown> {\n const rawText = await response.text();\n const contentType = response.headers.get('content-type') ?? '';\n\n if (!response.ok) {\n throw new CliError(`HTTP ${response.status} returned from ${url}`, {\n code: 'REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: rawText,\n });\n }\n\n if (!rawText) {\n return null;\n }\n\n if (contentType.includes('application/json')) {\n try {\n return JSON.parse(rawText);\n } catch (error) {\n throw new CliError(`Remote response was not valid JSON for ${url}`, {\n code: 'REMOTE_INVALID_JSON',\n exitCode: 1,\n details: String(error),\n });\n }\n }\n\n return rawText;\n}\n\nfunction parse_visible_rows(payload: unknown, url: string): VisibleFlowRow[] {\n if (!Array.isArray(payload)) {\n throw new CliError(`Supabase REST response was not a JSON array for ${url}`, {\n code: 'SUPABASE_REST_RESPONSE_INVALID',\n exitCode: 1,\n details: payload,\n });\n }\n\n return payload.map((item, index) => {\n if (!isRecord(item)) {\n throw new CliError(`Supabase REST row ${index} was not a JSON object for ${url}`, {\n code: 'SUPABASE_REST_RESPONSE_INVALID',\n exitCode: 1,\n details: item,\n });\n }\n\n return {\n id: coerceText(item.id),\n version: coerceText(item.version),\n user_id: coerceText(item.user_id),\n state_code: typeof item.state_code === 'number' ? item.state_code : null,\n };\n });\n}\n\nasync function visible_exact_rows(options: {\n client: SupabaseDataClient;\n restBaseUrl: string;\n id: string;\n version: string;\n}): Promise<VisibleFlowRow[]> {\n const url = build_visible_rows_url(options.restBaseUrl, options.id, options.version);\n const payload = await runSupabaseArrayQuery(\n options.client\n .from('flows')\n .select('id,version,user_id,state_code')\n .eq('id', options.id)\n .eq('version', options.version),\n url,\n );\n return parse_visible_rows(payload, url);\n}\n\nfunction own_visible_row(\n rows: VisibleFlowRow[],\n targetUserId: string | null,\n): VisibleFlowRow | null {\n if (!targetUserId) {\n return null;\n }\n return rows.find((row) => row.user_id === targetUserId) ?? null;\n}\n\nfunction visible_conflict_reasons(\n stage: string,\n visibleRows: VisibleFlowRow[],\n targetUserId: string | null,\n): FlowPublishFailureReason[] {\n if (visibleRows.length === 0) {\n return [];\n }\n\n if (!targetUserId) {\n return [\n {\n validator: 'remote_rest',\n stage,\n path: '',\n message:\n 'Exact UUID/version is already visible, but no target user id was available to determine whether the row is writable.',\n code: 'target_user_id_required',\n },\n ];\n }\n\n return visibleRows.map((row) => ({\n validator: 'remote_rest',\n stage,\n path: '',\n message: 'Exact UUID/version is already visible but not writable under the target user.',\n code: 'exact_version_visible_not_owned',\n visible_user_id: row.user_id,\n visible_state_code: row.state_code === null ? '' : String(row.state_code),\n }));\n}\n\nfunction failure_row(\n sourceRow: JsonRecord,\n reasons: FlowPublishFailureReason[],\n): FlowPublishFailureRow {\n let payload: JsonRecord;\n try {\n payload = flow_payload(sourceRow);\n } catch {\n payload = {};\n }\n return {\n id: sourceRow.id,\n user_id: sourceRow.user_id,\n json_ordered: payload,\n reason: reasons,\n state_code: sourceRow.state_code,\n };\n}\n\nfunction build_error_reasons(stage: string, error: unknown): FlowPublishFailureReason[] {\n if (error instanceof CliError) {\n const detailText = typeof error.details === 'string' ? error.details.trim() : error.message;\n return [\n {\n validator: 'remote_rest',\n stage,\n path: '',\n message: detailText || error.message,\n code: error.code,\n },\n ];\n }\n\n if (error instanceof Error) {\n return [\n {\n validator: 'remote_rest',\n stage,\n path: '',\n message: error.message,\n code: error.name || 'Error',\n },\n ];\n }\n\n return [\n {\n validator: 'remote_rest',\n stage,\n path: '',\n message: String(error),\n code: 'UnknownError',\n },\n ];\n}\n\nasync function insert_flow_version(options: {\n transport: DatasetCommandTransport;\n rowId: string;\n payload: JsonRecord;\n}): Promise<void> {\n await createDatasetRecord({\n transport: options.transport,\n table: 'flows',\n id: options.rowId,\n payload: options.payload,\n });\n}\n\nasync function update_flow_version(options: {\n transport: DatasetCommandTransport;\n rowId: string;\n version: string;\n payload: JsonRecord;\n}): Promise<void> {\n await saveDraftDatasetRecord({\n transport: options.transport,\n table: 'flows',\n id: options.rowId,\n version: options.version,\n payload: options.payload,\n });\n}\n\nasync function sync_one_row(options: {\n row: JsonRecord;\n mode: FlowPublishMode;\n client: SupabaseDataClient;\n restBaseUrl: string;\n commandTransport: DatasetCommandTransport;\n targetUserIdOverride: string | null;\n}): Promise<FlowPublishOutcome> {\n try {\n const payload = flow_payload(options.row);\n const rowId = flow_id(options.row, payload);\n if (!rowId) {\n throw new CliError('Flow row is missing a resolvable id/common:UUID value.', {\n code: 'FLOW_PUBLISH_VERSION_ID_REQUIRED',\n exitCode: 2,\n });\n }\n const version = flow_version(payload);\n const targetUserId = resolve_target_user_id(options.row, options.targetUserIdOverride);\n const visibleBefore = await visible_exact_rows({\n client: options.client,\n restBaseUrl: options.restBaseUrl,\n id: rowId,\n version,\n });\n const ownBefore = own_visible_row(visibleBefore, targetUserId);\n\n if (options.mode === 'dry_run') {\n if (ownBefore) {\n return {\n status: 'success',\n success: {\n id: rowId,\n version,\n operation: 'would_update_existing',\n },\n };\n }\n\n if (visibleBefore.length > 0) {\n return {\n status: 'failure',\n failure: failure_row(\n options.row,\n visible_conflict_reasons('dry_run_preflight', visibleBefore, targetUserId),\n ),\n };\n }\n\n return {\n status: 'success',\n success: {\n id: rowId,\n version,\n operation: 'would_insert',\n },\n };\n }\n\n if (ownBefore) {\n await update_flow_version({\n transport: options.commandTransport,\n rowId,\n version,\n payload,\n });\n return {\n status: 'success',\n success: {\n id: rowId,\n version,\n operation: 'update_existing',\n },\n };\n }\n\n if (visibleBefore.length > 0) {\n return {\n status: 'failure',\n failure: failure_row(\n options.row,\n visible_conflict_reasons('preflight', visibleBefore, targetUserId),\n ),\n };\n }\n\n try {\n await insert_flow_version({\n transport: options.commandTransport,\n rowId,\n payload,\n });\n return {\n status: 'success',\n success: {\n id: rowId,\n version,\n operation: 'insert',\n },\n };\n } catch (error) {\n const visibleAfter = await visible_exact_rows({\n client: options.client,\n restBaseUrl: options.restBaseUrl,\n id: rowId,\n version,\n });\n const ownAfter = own_visible_row(visibleAfter, targetUserId);\n if (ownAfter) {\n try {\n await update_flow_version({\n transport: options.commandTransport,\n rowId,\n version,\n payload,\n });\n return {\n status: 'success',\n success: {\n id: rowId,\n version,\n operation: 'update_after_insert_error',\n },\n };\n } catch (updateError) {\n return {\n status: 'failure',\n failure: failure_row(options.row, [\n ...build_error_reasons('insert', error),\n ...build_error_reasons('update_after_insert_error', updateError),\n ]),\n };\n }\n }\n\n return {\n status: 'failure',\n failure: failure_row(options.row, [\n ...build_error_reasons('insert', error),\n ...visible_conflict_reasons('post_insert_error_preflight', visibleAfter, targetUserId),\n ]),\n };\n }\n } catch (error) {\n return {\n status: 'failure',\n failure: failure_row(options.row, build_error_reasons('sync_one_unhandled', error)),\n };\n }\n}\n\nasync function map_with_concurrency<T, R>(\n items: T[],\n maxWorkers: number,\n worker: (item: T, index: number) => Promise<R>,\n): Promise<R[]> {\n const results = new Array<R>(items.length);\n const workerCount = Math.min(Math.max(1, maxWorkers), Math.max(items.length, 1));\n let nextIndex = 0;\n\n async function runWorker(): Promise<void> {\n while (true) {\n const currentIndex = nextIndex;\n nextIndex += 1;\n if (currentIndex >= items.length) {\n return;\n }\n results[currentIndex] = await worker(items[currentIndex] as T, currentIndex);\n }\n }\n\n await Promise.all(Array.from({ length: workerCount }, () => runWorker()));\n return results;\n}\n\nfunction status_from_mode(\n mode: FlowPublishMode,\n failureCount: number,\n): FlowPublishVersionReport['status'] {\n if (mode === 'dry_run') {\n return 'prepared_flow_publish_version';\n }\n return failureCount > 0\n ? 'completed_flow_publish_version_with_failures'\n : 'completed_flow_publish_version';\n}\n\nexport async function runFlowPublishVersion(\n options: RunFlowPublishVersionOptions,\n): Promise<FlowPublishVersionReport> {\n const inputFile = assert_input_file(options.inputFile);\n const outDir = assert_out_dir(options.outDir);\n const mode: FlowPublishMode = options.commit ? 'commit' : 'dry_run';\n const maxWorkers = to_positive_integer(\n options.maxWorkers,\n '--max-workers',\n 'FLOW_PUBLISH_VERSION_MAX_WORKERS_INVALID',\n DEFAULT_MAX_WORKERS,\n );\n const limit = to_non_negative_integer(\n options.limit,\n '--limit',\n 'FLOW_PUBLISH_VERSION_LIMIT_INVALID',\n );\n const now = options.now ?? new Date();\n const files = build_output_files(outDir);\n\n let rows = loadRowsFromFile(inputFile);\n if (limit !== null && limit > 0) {\n rows = rows.slice(0, limit);\n }\n if (rows.length === 0) {\n throw new CliError(`No rows found in ${inputFile}`, {\n code: 'FLOW_PUBLISH_VERSION_EMPTY_INPUT',\n exitCode: 2,\n });\n }\n\n const flowGate = build_flow_publish_gate_report(rows, {\n now,\n validateFlowPayloadImpl: options.validateFlowPayloadImpl,\n });\n await writeJsonArtifact(files.gateReport, flowGate);\n\n if (flowGate.status === 'blocked') {\n const failures = gate_failure_rows(rows, flowGate);\n await writeJsonArtifact(files.successList, []);\n await writeJsonLinesArtifact(files.remoteFailed, failures);\n\n const report: FlowPublishVersionReport = {\n schema_version: 1,\n generated_at_utc: now.toISOString(),\n status: status_from_mode(mode, failures.length),\n mode,\n input_file: inputFile,\n out_dir: outDir,\n counts: {\n total_rows: rows.length,\n success_count: 0,\n failure_count: failures.length,\n },\n flow_gate: flow_gate_summary(flowGate),\n operation_counts: {},\n max_workers: maxWorkers,\n limit,\n target_user_id_override: normalize_token(options.targetUserId ?? null),\n files: {\n success_list: files.successList,\n remote_failed: files.remoteFailed,\n gate_report: files.gateReport,\n report: files.report,\n },\n };\n\n await writeJsonArtifact(files.report, report);\n return report;\n }\n\n const fetchImpl = options.fetchImpl ?? (fetch as FetchLike);\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const runtime = createSupabaseDataRuntime({\n runtime: requireSupabaseRestRuntime(options.env ?? process.env),\n fetchImpl,\n timeoutMs,\n now,\n });\n const commandTransport = await buildDatasetCommandTransport({\n runtime,\n fetchImpl,\n timeoutMs,\n });\n const { client, restBaseUrl } = createSupabaseDataClient(runtime, fetchImpl, timeoutMs);\n const targetUserIdOverride = normalize_token(options.targetUserId ?? null);\n\n const outcomes = await map_with_concurrency(rows, maxWorkers, async (row) =>\n sync_one_row({\n row,\n mode,\n client,\n restBaseUrl,\n commandTransport,\n targetUserIdOverride,\n }),\n );\n\n const successes: FlowPublishSuccessRow[] = [];\n const failures: FlowPublishFailureRow[] = [];\n const operationCounts: Record<string, number> = {};\n\n for (const outcome of outcomes) {\n if (outcome.status === 'success') {\n successes.push(outcome.success);\n operationCounts[outcome.success.operation] =\n (operationCounts[outcome.success.operation] ?? 0) + 1;\n } else {\n failures.push(outcome.failure);\n }\n }\n\n await writeJsonArtifact(files.successList, successes);\n await writeJsonLinesArtifact(files.remoteFailed, failures);\n\n const report: FlowPublishVersionReport = {\n schema_version: 1,\n generated_at_utc: (options.now ?? new Date()).toISOString(),\n status: status_from_mode(mode, failures.length),\n mode,\n input_file: inputFile,\n out_dir: outDir,\n counts: {\n total_rows: rows.length,\n success_count: successes.length,\n failure_count: failures.length,\n },\n flow_gate: flow_gate_summary(flowGate),\n operation_counts: operationCounts,\n max_workers: maxWorkers,\n limit,\n target_user_id_override: targetUserIdOverride,\n files: {\n success_list: files.successList,\n remote_failed: files.remoteFailed,\n gate_report: files.gateReport,\n report: files.report,\n },\n };\n\n await writeJsonArtifact(files.report, report);\n return report;\n}\n\nexport const __testInternals = {\n assert_input_file,\n assert_out_dir,\n to_positive_integer,\n to_non_negative_integer,\n build_output_files,\n flow_payload,\n flow_id,\n flow_version,\n flow_version_gate_result,\n validate_publish_flow_row,\n build_flow_publish_gate_report,\n flow_gate_summary,\n gate_failure_rows,\n sync_one_row,\n resolve_target_user_id,\n build_visible_rows_url,\n build_update_url,\n parse_response,\n parse_visible_rows,\n visible_conflict_reasons,\n failure_row,\n build_error_reasons,\n map_with_concurrency,\n status_from_mode,\n};\n"]}
1
+ {"version":3,"file":"flow-publish-version.js","sourceRoot":"","sources":["../../../src/lib/flow-publish-version.ts"],"names":[],"mappings":"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","sourcesContent":["import { existsSync } from 'node:fs';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { collectImportContentIssues } from './dataset-validate.js';\nimport {\n buildDatasetCommandTransport,\n createDatasetRecord,\n saveDraftDatasetRecord,\n type DatasetCommandTransport,\n} from './dataset-command.js';\nimport { CliError } from './errors.js';\nimport {\n FLOW_SCHEMA_VALIDATOR,\n validateFlowPayload,\n type FlowPayloadValidationIssue,\n type FlowPayloadValidationResult,\n} from './flow-payload-validation.js';\nimport {\n coerceText,\n deepGet,\n isRecord,\n loadRowsFromFile,\n type JsonRecord,\n} from './flow-governance.js';\nimport type { FetchLike, ResponseLike } from './http.js';\nimport { getRuntimeRuleset, resolveRuntimeRuleId } from './runtime-rulesets.js';\nimport {\n createSupabaseDataClient,\n requireSupabaseRestRuntime,\n runSupabaseArrayQuery,\n} from './supabase-client.js';\nimport { createSupabaseDataRuntime } from './supabase-session.js';\n\nconst DEFAULT_TIMEOUT_MS = 10_000;\nconst DEFAULT_MAX_WORKERS = 4;\nconst LEGACY_OUTPUT_PREFIX = 'flows_tidas_sdk_plus_classification';\nconst FLOW_PUBLISH_VALIDATOR = `${FLOW_SCHEMA_VALIDATOR}+tiangong/import-content`;\n\ntype FlowPublishMode = 'dry_run' | 'commit';\ntype FlowPublishOperation =\n | 'would_insert'\n | 'would_update_existing'\n | 'insert'\n | 'update_existing'\n | 'update_after_insert_error';\n\ntype FlowPublishFailureReason = {\n validator: 'remote_rest' | 'flow_schema' | 'import_content';\n stage: string;\n path: string;\n message: string;\n code: string;\n visible_user_id?: string;\n visible_state_code?: string;\n};\n\ntype VisibleFlowRow = {\n id: string;\n version: string;\n user_id: string;\n state_code: number | null;\n};\n\ntype SupabaseDataClient = ReturnType<typeof createSupabaseDataClient>['client'];\n\ntype FlowPublishFailureRow = {\n id: unknown;\n user_id: unknown;\n json_ordered: JsonRecord;\n reason: FlowPublishFailureReason[];\n state_code: unknown;\n};\n\ntype FlowPublishSuccessRow = {\n id: string;\n version: string;\n operation: FlowPublishOperation;\n};\n\ntype FlowPublishFiles = {\n successList: string;\n remoteFailed: string;\n gateReport: string;\n report: string;\n};\n\ntype FlowPublishGateFinding = {\n code: string;\n severity: 'blocker';\n methodology_rule_id: string | null;\n message: string;\n path: string;\n dataset_index: number;\n dataset_id: string | null;\n dataset_version: string | null;\n};\n\nexport type FlowPublishVersionGateReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'passed' | 'blocked';\n ruleset_id: 'flow-publish/default';\n ruleset_version: '1';\n ruleset_source_version: string;\n ruleset_rule_ids: string[];\n validator: string;\n counts: {\n total: number;\n valid: number;\n invalid: number;\n };\n findings: FlowPublishGateFinding[];\n blockers: FlowPublishGateFinding[];\n next_action: 'query_remote_write_plan' | 'fix_flow_payloads';\n flows: Array<{\n index: number;\n id: string | null;\n version: string | null;\n ok: boolean;\n issue_count: number;\n issues: FlowPayloadValidationIssue[];\n }>;\n};\n\ntype FlowPublishOutcome =\n | {\n status: 'success';\n success: FlowPublishSuccessRow;\n }\n | {\n status: 'failure';\n failure: FlowPublishFailureRow;\n };\n\nexport type FlowPublishVersionReport = {\n schema_version: 1;\n generated_at_utc: string;\n status:\n | 'prepared_flow_publish_version'\n | 'completed_flow_publish_version'\n | 'completed_flow_publish_version_with_failures';\n mode: FlowPublishMode;\n input_file: string;\n out_dir: string;\n counts: {\n total_rows: number;\n success_count: number;\n failure_count: number;\n };\n flow_gate: {\n status: FlowPublishVersionGateReport['status'];\n ruleset_id: FlowPublishVersionGateReport['ruleset_id'];\n ruleset_version: FlowPublishVersionGateReport['ruleset_version'];\n counts: FlowPublishVersionGateReport['counts'];\n blocker_count: number;\n next_action: FlowPublishVersionGateReport['next_action'];\n };\n operation_counts: Record<string, number>;\n max_workers: number;\n limit: number | null;\n target_user_id_override: string | null;\n files: {\n success_list: string;\n remote_failed: string;\n gate_report: string;\n report: string;\n };\n};\n\nexport type RunFlowPublishVersionOptions = {\n inputFile: string;\n outDir: string;\n commit?: boolean;\n maxWorkers?: number;\n limit?: number;\n targetUserId?: string | null;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n now?: Date;\n validateFlowPayloadImpl?: (payload: JsonRecord) => FlowPayloadValidationResult;\n};\n\nfunction normalize_token(value: unknown): string | null {\n if (typeof value !== 'string') {\n return null;\n }\n const trimmed = value.trim();\n return trimmed ? trimmed : null;\n}\n\nfunction assert_input_file(inputFile: string): string {\n const resolved = path.resolve(inputFile);\n if (!inputFile) {\n throw new CliError('Missing required --input-file value.', {\n code: 'FLOW_PUBLISH_VERSION_INPUT_REQUIRED',\n exitCode: 2,\n });\n }\n if (!existsSync(resolved)) {\n throw new CliError(`Flow publish-version input file not found: ${resolved}`, {\n code: 'FLOW_PUBLISH_VERSION_INPUT_NOT_FOUND',\n exitCode: 2,\n });\n }\n return resolved;\n}\n\nfunction assert_out_dir(outDir: string): string {\n if (!outDir) {\n throw new CliError('Missing required --out-dir value.', {\n code: 'FLOW_PUBLISH_VERSION_OUT_DIR_REQUIRED',\n exitCode: 2,\n });\n }\n return path.resolve(outDir);\n}\n\nfunction to_positive_integer(\n value: number | undefined,\n label: string,\n code: string,\n defaultValue: number,\n): number {\n if (value === undefined) {\n return defaultValue;\n }\n if (!Number.isInteger(value) || value <= 0) {\n throw new CliError(`Expected ${label} to be a positive integer.`, {\n code,\n exitCode: 2,\n });\n }\n return value;\n}\n\nfunction to_non_negative_integer(\n value: number | undefined,\n label: string,\n code: string,\n): number | null {\n if (value === undefined) {\n return null;\n }\n if (!Number.isInteger(value) || value < 0) {\n throw new CliError(`Expected ${label} to be a non-negative integer.`, {\n code,\n exitCode: 2,\n });\n }\n return value;\n}\n\nfunction build_output_files(outDir: string): FlowPublishFiles {\n return {\n successList: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_mcp_success_list.json`),\n remoteFailed: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_remote_validation_failed.jsonl`),\n gateReport: path.join(outDir, 'flow-publish-version-gate-report.json'),\n report: path.join(outDir, `${LEGACY_OUTPUT_PREFIX}_mcp_sync_report.json`),\n };\n}\n\nfunction flow_payload(row: JsonRecord): JsonRecord {\n if (isRecord(row.json_ordered)) {\n return row.json_ordered;\n }\n if (isRecord(row.jsonOrdered)) {\n return row.jsonOrdered;\n }\n if (isRecord(row.json)) {\n return row.json;\n }\n if (isRecord(row.flowDataSet)) {\n return row;\n }\n throw new CliError(\n 'Flow row is missing json_ordered/jsonOrdered/json or a top-level flowDataSet payload.',\n {\n code: 'FLOW_PUBLISH_VERSION_PAYLOAD_REQUIRED',\n exitCode: 2,\n },\n );\n}\n\nfunction flow_id(row: JsonRecord, payload: JsonRecord): string {\n return (\n coerceText(row.id) ||\n coerceText(\n deepGet(payload, ['flowDataSet', 'flowInformation', 'dataSetInformation', 'common:UUID']),\n )\n );\n}\n\nfunction flow_version(payload: JsonRecord): string {\n const version = coerceText(\n deepGet(payload, [\n 'flowDataSet',\n 'administrativeInformation',\n 'publicationAndOwnership',\n 'common:dataSetVersion',\n ]),\n );\n if (!version) {\n throw new CliError(\n 'Flow payload is missing flowDataSet.administrativeInformation.publicationAndOwnership.common:dataSetVersion.',\n {\n code: 'FLOW_PUBLISH_VERSION_MISSING_VERSION',\n exitCode: 2,\n },\n );\n }\n return version;\n}\n\nfunction flow_version_gate_result(payload: JsonRecord): {\n version: string | null;\n issue: FlowPayloadValidationIssue | null;\n} {\n const version = coerceText(\n deepGet(payload, [\n 'flowDataSet',\n 'administrativeInformation',\n 'publicationAndOwnership',\n 'common:dataSetVersion',\n ]),\n );\n if (version) {\n return { version, issue: null };\n }\n return {\n version: null,\n issue: validation_issue(\n 'flowDataSet.administrativeInformation.publicationAndOwnership.common:dataSetVersion',\n 'Flow payload is missing flowDataSet.administrativeInformation.publicationAndOwnership.common:dataSetVersion.',\n 'FLOW_PUBLISH_VERSION_MISSING_VERSION',\n ),\n };\n}\n\nfunction validation_issue(\n pathValue: string,\n message: string,\n code: string,\n): FlowPayloadValidationIssue {\n return {\n path: pathValue,\n message,\n code,\n };\n}\n\nfunction validate_publish_flow_row(\n row: JsonRecord,\n index: number,\n validate: (payload: JsonRecord) => FlowPayloadValidationResult,\n): FlowPublishVersionGateReport['flows'][number] {\n const issues: FlowPayloadValidationIssue[] = [];\n let payload: JsonRecord | null = null;\n let id: string | null = null;\n let version: string | null = null;\n\n try {\n payload = flow_payload(row);\n } catch (error) {\n const cliError = error as CliError;\n issues.push(\n validation_issue('<root>', cliError.message, cliError.code || 'flow_payload_required'),\n );\n }\n\n if (payload) {\n id = flow_id(row, payload) || null;\n if (!id) {\n issues.push(\n validation_issue(\n 'flowDataSet.flowInformation.dataSetInformation.common:UUID',\n 'Flow row is missing a resolvable id/common:UUID value.',\n 'FLOW_PUBLISH_VERSION_ID_REQUIRED',\n ),\n );\n }\n\n const versionGate = flow_version_gate_result(payload);\n version = versionGate.version;\n if (versionGate.issue) {\n issues.push(versionGate.issue);\n }\n\n const validation = validate(payload);\n if (!validation.ok) {\n issues.push(...validation.issues);\n }\n issues.push(...collectImportContentIssues(payload));\n }\n\n return {\n index,\n id,\n version,\n ok: issues.length === 0,\n issue_count: issues.length,\n issues,\n };\n}\n\nfunction build_flow_publish_gate_report(\n rows: JsonRecord[],\n options: {\n now: Date;\n validateFlowPayloadImpl?: (payload: JsonRecord) => FlowPayloadValidationResult;\n },\n): FlowPublishVersionGateReport {\n const ruleset = getRuntimeRuleset('flow-publish/default');\n const validate = options.validateFlowPayloadImpl ?? validateFlowPayload;\n const flows = rows.map((row, index) => validate_publish_flow_row(row, index, validate));\n const invalid = flows.filter((flow) => !flow.ok).length;\n const blockers = flows.flatMap((flow) =>\n flow.issues.map((issue) => ({\n code: issue.code,\n severity: 'blocker' as const,\n methodology_rule_id: resolveRuntimeRuleId(ruleset.id, issue.code),\n message: issue.message,\n path: issue.path,\n dataset_index: flow.index,\n dataset_id: flow.id,\n dataset_version: flow.version,\n })),\n );\n\n return {\n schema_version: 1,\n generated_at_utc: options.now.toISOString(),\n status: invalid > 0 ? 'blocked' : 'passed',\n ruleset_id: ruleset.id,\n ruleset_version: ruleset.version,\n ruleset_source_version: ruleset.source_version,\n ruleset_rule_ids: ruleset.rule_ids,\n validator: FLOW_PUBLISH_VALIDATOR,\n counts: {\n total: flows.length,\n valid: flows.length - invalid,\n invalid,\n },\n findings: blockers,\n blockers,\n next_action: invalid > 0 ? 'fix_flow_payloads' : 'query_remote_write_plan',\n flows,\n };\n}\n\nfunction flow_gate_summary(\n gate: FlowPublishVersionGateReport,\n): FlowPublishVersionReport['flow_gate'] {\n return {\n status: gate.status,\n ruleset_id: gate.ruleset_id,\n ruleset_version: gate.ruleset_version,\n counts: gate.counts,\n blocker_count: gate.blockers.length,\n next_action: gate.next_action,\n };\n}\n\nfunction gate_failure_rows(\n rows: JsonRecord[],\n gate: FlowPublishVersionGateReport,\n): FlowPublishFailureRow[] {\n return gate.flows.flatMap((flow) => {\n if (flow.ok) {\n return [];\n }\n const row = rows[flow.index];\n if (!row) {\n return [];\n }\n return [\n failure_row(\n row,\n flow.issues.map((issue) => ({\n validator:\n issue.code === 'dataset_import_placeholder_content'\n ? ('import_content' as const)\n : ('flow_schema' as const),\n stage: 'schema_gate',\n path: issue.path,\n message: issue.message,\n code: issue.code,\n })),\n ),\n ];\n });\n}\n\nfunction resolve_target_user_id(\n row: JsonRecord,\n targetUserIdOverride: string | null,\n): string | null {\n return normalize_token(coerceText(row.user_id)) ?? targetUserIdOverride;\n}\n\nfunction build_visible_rows_url(restBaseUrl: string, id: string, version: string): string {\n const url = new URL(`${restBaseUrl.replace(/\\/+$/u, '')}/flows`);\n url.searchParams.set('select', 'id,version,user_id,state_code');\n url.searchParams.set('id', `eq.${id}`);\n url.searchParams.set('version', `eq.${version}`);\n return url.toString();\n}\n\nfunction build_update_url(restBaseUrl: string, id: string, version: string): string {\n const url = new URL(`${restBaseUrl.replace(/\\/+$/u, '')}/flows`);\n url.searchParams.set('id', `eq.${id}`);\n url.searchParams.set('version', `eq.${version}`);\n return url.toString();\n}\n\nasync function parse_response(response: ResponseLike, url: string): Promise<unknown> {\n const rawText = await response.text();\n const contentType = response.headers.get('content-type') ?? '';\n\n if (!response.ok) {\n throw new CliError(`HTTP ${response.status} returned from ${url}`, {\n code: 'REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: rawText,\n });\n }\n\n if (!rawText) {\n return null;\n }\n\n if (contentType.includes('application/json')) {\n try {\n return JSON.parse(rawText);\n } catch (error) {\n throw new CliError(`Remote response was not valid JSON for ${url}`, {\n code: 'REMOTE_INVALID_JSON',\n exitCode: 1,\n details: String(error),\n });\n }\n }\n\n return rawText;\n}\n\nfunction parse_visible_rows(payload: unknown, url: string): VisibleFlowRow[] {\n if (!Array.isArray(payload)) {\n throw new CliError(`Supabase REST response was not a JSON array for ${url}`, {\n code: 'SUPABASE_REST_RESPONSE_INVALID',\n exitCode: 1,\n details: payload,\n });\n }\n\n return payload.map((item, index) => {\n if (!isRecord(item)) {\n throw new CliError(`Supabase REST row ${index} was not a JSON object for ${url}`, {\n code: 'SUPABASE_REST_RESPONSE_INVALID',\n exitCode: 1,\n details: item,\n });\n }\n\n return {\n id: coerceText(item.id),\n version: coerceText(item.version),\n user_id: coerceText(item.user_id),\n state_code: typeof item.state_code === 'number' ? item.state_code : null,\n };\n });\n}\n\nasync function visible_exact_rows(options: {\n client: SupabaseDataClient;\n restBaseUrl: string;\n id: string;\n version: string;\n}): Promise<VisibleFlowRow[]> {\n const url = build_visible_rows_url(options.restBaseUrl, options.id, options.version);\n const payload = await runSupabaseArrayQuery(\n options.client\n .from('flows')\n .select('id,version,user_id,state_code')\n .eq('id', options.id)\n .eq('version', options.version),\n url,\n );\n return parse_visible_rows(payload, url);\n}\n\nfunction own_visible_row(\n rows: VisibleFlowRow[],\n targetUserId: string | null,\n): VisibleFlowRow | null {\n if (!targetUserId) {\n return null;\n }\n return rows.find((row) => row.user_id === targetUserId) ?? null;\n}\n\nfunction visible_conflict_reasons(\n stage: string,\n visibleRows: VisibleFlowRow[],\n targetUserId: string | null,\n): FlowPublishFailureReason[] {\n if (visibleRows.length === 0) {\n return [];\n }\n\n if (!targetUserId) {\n return [\n {\n validator: 'remote_rest',\n stage,\n path: '',\n message:\n 'Exact UUID/version is already visible, but no target user id was available to determine whether the row is writable.',\n code: 'target_user_id_required',\n },\n ];\n }\n\n return visibleRows.map((row) => ({\n validator: 'remote_rest',\n stage,\n path: '',\n message: 'Exact UUID/version is already visible but not writable under the target user.',\n code: 'exact_version_visible_not_owned',\n visible_user_id: row.user_id,\n visible_state_code: row.state_code === null ? '' : String(row.state_code),\n }));\n}\n\nfunction failure_row(\n sourceRow: JsonRecord,\n reasons: FlowPublishFailureReason[],\n): FlowPublishFailureRow {\n let payload: JsonRecord;\n try {\n payload = flow_payload(sourceRow);\n } catch {\n payload = {};\n }\n return {\n id: sourceRow.id,\n user_id: sourceRow.user_id,\n json_ordered: payload,\n reason: reasons,\n state_code: sourceRow.state_code,\n };\n}\n\nfunction build_error_reasons(stage: string, error: unknown): FlowPublishFailureReason[] {\n if (error instanceof CliError) {\n const detailText = typeof error.details === 'string' ? error.details.trim() : error.message;\n return [\n {\n validator: 'remote_rest',\n stage,\n path: '',\n message: detailText || error.message,\n code: error.code,\n },\n ];\n }\n\n if (error instanceof Error) {\n return [\n {\n validator: 'remote_rest',\n stage,\n path: '',\n message: error.message,\n code: error.name || 'Error',\n },\n ];\n }\n\n return [\n {\n validator: 'remote_rest',\n stage,\n path: '',\n message: String(error),\n code: 'UnknownError',\n },\n ];\n}\n\nasync function insert_flow_version(options: {\n transport: DatasetCommandTransport;\n rowId: string;\n payload: JsonRecord;\n}): Promise<void> {\n await createDatasetRecord({\n transport: options.transport,\n table: 'flows',\n id: options.rowId,\n payload: options.payload,\n });\n}\n\nasync function update_flow_version(options: {\n transport: DatasetCommandTransport;\n rowId: string;\n version: string;\n payload: JsonRecord;\n}): Promise<void> {\n await saveDraftDatasetRecord({\n transport: options.transport,\n table: 'flows',\n id: options.rowId,\n version: options.version,\n payload: options.payload,\n });\n}\n\nasync function sync_one_row(options: {\n row: JsonRecord;\n mode: FlowPublishMode;\n client: SupabaseDataClient;\n restBaseUrl: string;\n commandTransport: DatasetCommandTransport;\n targetUserIdOverride: string | null;\n}): Promise<FlowPublishOutcome> {\n try {\n const payload = flow_payload(options.row);\n const rowId = flow_id(options.row, payload);\n if (!rowId) {\n throw new CliError('Flow row is missing a resolvable id/common:UUID value.', {\n code: 'FLOW_PUBLISH_VERSION_ID_REQUIRED',\n exitCode: 2,\n });\n }\n const version = flow_version(payload);\n const targetUserId = resolve_target_user_id(options.row, options.targetUserIdOverride);\n const visibleBefore = await visible_exact_rows({\n client: options.client,\n restBaseUrl: options.restBaseUrl,\n id: rowId,\n version,\n });\n const ownBefore = own_visible_row(visibleBefore, targetUserId);\n\n if (options.mode === 'dry_run') {\n if (ownBefore) {\n return {\n status: 'success',\n success: {\n id: rowId,\n version,\n operation: 'would_update_existing',\n },\n };\n }\n\n if (visibleBefore.length > 0) {\n return {\n status: 'failure',\n failure: failure_row(\n options.row,\n visible_conflict_reasons('dry_run_preflight', visibleBefore, targetUserId),\n ),\n };\n }\n\n return {\n status: 'success',\n success: {\n id: rowId,\n version,\n operation: 'would_insert',\n },\n };\n }\n\n if (ownBefore) {\n await update_flow_version({\n transport: options.commandTransport,\n rowId,\n version,\n payload,\n });\n return {\n status: 'success',\n success: {\n id: rowId,\n version,\n operation: 'update_existing',\n },\n };\n }\n\n if (visibleBefore.length > 0) {\n return {\n status: 'failure',\n failure: failure_row(\n options.row,\n visible_conflict_reasons('preflight', visibleBefore, targetUserId),\n ),\n };\n }\n\n try {\n await insert_flow_version({\n transport: options.commandTransport,\n rowId,\n payload,\n });\n return {\n status: 'success',\n success: {\n id: rowId,\n version,\n operation: 'insert',\n },\n };\n } catch (error) {\n const visibleAfter = await visible_exact_rows({\n client: options.client,\n restBaseUrl: options.restBaseUrl,\n id: rowId,\n version,\n });\n const ownAfter = own_visible_row(visibleAfter, targetUserId);\n if (ownAfter) {\n try {\n await update_flow_version({\n transport: options.commandTransport,\n rowId,\n version,\n payload,\n });\n return {\n status: 'success',\n success: {\n id: rowId,\n version,\n operation: 'update_after_insert_error',\n },\n };\n } catch (updateError) {\n return {\n status: 'failure',\n failure: failure_row(options.row, [\n ...build_error_reasons('insert', error),\n ...build_error_reasons('update_after_insert_error', updateError),\n ]),\n };\n }\n }\n\n return {\n status: 'failure',\n failure: failure_row(options.row, [\n ...build_error_reasons('insert', error),\n ...visible_conflict_reasons('post_insert_error_preflight', visibleAfter, targetUserId),\n ]),\n };\n }\n } catch (error) {\n return {\n status: 'failure',\n failure: failure_row(options.row, build_error_reasons('sync_one_unhandled', error)),\n };\n }\n}\n\nasync function map_with_concurrency<T, R>(\n items: T[],\n maxWorkers: number,\n worker: (item: T, index: number) => Promise<R>,\n): Promise<R[]> {\n const results = new Array<R>(items.length);\n const workerCount = Math.min(Math.max(1, maxWorkers), Math.max(items.length, 1));\n let nextIndex = 0;\n\n async function runWorker(): Promise<void> {\n while (true) {\n const currentIndex = nextIndex;\n nextIndex += 1;\n if (currentIndex >= items.length) {\n return;\n }\n results[currentIndex] = await worker(items[currentIndex] as T, currentIndex);\n }\n }\n\n await Promise.all(Array.from({ length: workerCount }, () => runWorker()));\n return results;\n}\n\nfunction status_from_mode(\n mode: FlowPublishMode,\n failureCount: number,\n): FlowPublishVersionReport['status'] {\n if (mode === 'dry_run') {\n return 'prepared_flow_publish_version';\n }\n return failureCount > 0\n ? 'completed_flow_publish_version_with_failures'\n : 'completed_flow_publish_version';\n}\n\nexport async function runFlowPublishVersion(\n options: RunFlowPublishVersionOptions,\n): Promise<FlowPublishVersionReport> {\n const inputFile = assert_input_file(options.inputFile);\n const outDir = assert_out_dir(options.outDir);\n const mode: FlowPublishMode = options.commit ? 'commit' : 'dry_run';\n const maxWorkers = to_positive_integer(\n options.maxWorkers,\n '--max-workers',\n 'FLOW_PUBLISH_VERSION_MAX_WORKERS_INVALID',\n DEFAULT_MAX_WORKERS,\n );\n const limit = to_non_negative_integer(\n options.limit,\n '--limit',\n 'FLOW_PUBLISH_VERSION_LIMIT_INVALID',\n );\n const now = options.now ?? new Date();\n const files = build_output_files(outDir);\n\n let rows = loadRowsFromFile(inputFile);\n if (limit !== null && limit > 0) {\n rows = rows.slice(0, limit);\n }\n if (rows.length === 0) {\n throw new CliError(`No rows found in ${inputFile}`, {\n code: 'FLOW_PUBLISH_VERSION_EMPTY_INPUT',\n exitCode: 2,\n });\n }\n\n const flowGate = build_flow_publish_gate_report(rows, {\n now,\n validateFlowPayloadImpl: options.validateFlowPayloadImpl,\n });\n await writeJsonArtifact(files.gateReport, flowGate);\n\n if (flowGate.status === 'blocked') {\n const failures = gate_failure_rows(rows, flowGate);\n await writeJsonArtifact(files.successList, []);\n await writeJsonLinesArtifact(files.remoteFailed, failures);\n\n const report: FlowPublishVersionReport = {\n schema_version: 1,\n generated_at_utc: now.toISOString(),\n status: status_from_mode(mode, failures.length),\n mode,\n input_file: inputFile,\n out_dir: outDir,\n counts: {\n total_rows: rows.length,\n success_count: 0,\n failure_count: failures.length,\n },\n flow_gate: flow_gate_summary(flowGate),\n operation_counts: {},\n max_workers: maxWorkers,\n limit,\n target_user_id_override: normalize_token(options.targetUserId ?? null),\n files: {\n success_list: files.successList,\n remote_failed: files.remoteFailed,\n gate_report: files.gateReport,\n report: files.report,\n },\n };\n\n await writeJsonArtifact(files.report, report);\n return report;\n }\n\n const fetchImpl = options.fetchImpl ?? (fetch as FetchLike);\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const runtime = createSupabaseDataRuntime({\n runtime: requireSupabaseRestRuntime(options.env ?? process.env),\n fetchImpl,\n timeoutMs,\n now,\n });\n const commandTransport = await buildDatasetCommandTransport({\n runtime,\n fetchImpl,\n timeoutMs,\n });\n const { client, restBaseUrl } = createSupabaseDataClient(runtime, fetchImpl, timeoutMs);\n const targetUserIdOverride = normalize_token(options.targetUserId ?? null);\n\n const outcomes = await map_with_concurrency(rows, maxWorkers, async (row) =>\n sync_one_row({\n row,\n mode,\n client,\n restBaseUrl,\n commandTransport,\n targetUserIdOverride,\n }),\n );\n\n const successes: FlowPublishSuccessRow[] = [];\n const failures: FlowPublishFailureRow[] = [];\n const operationCounts: Record<string, number> = {};\n\n for (const outcome of outcomes) {\n if (outcome.status === 'success') {\n successes.push(outcome.success);\n operationCounts[outcome.success.operation] =\n (operationCounts[outcome.success.operation] ?? 0) + 1;\n } else {\n failures.push(outcome.failure);\n }\n }\n\n await writeJsonArtifact(files.successList, successes);\n await writeJsonLinesArtifact(files.remoteFailed, failures);\n\n const report: FlowPublishVersionReport = {\n schema_version: 1,\n generated_at_utc: (options.now ?? new Date()).toISOString(),\n status: status_from_mode(mode, failures.length),\n mode,\n input_file: inputFile,\n out_dir: outDir,\n counts: {\n total_rows: rows.length,\n success_count: successes.length,\n failure_count: failures.length,\n },\n flow_gate: flow_gate_summary(flowGate),\n operation_counts: operationCounts,\n max_workers: maxWorkers,\n limit,\n target_user_id_override: targetUserIdOverride,\n files: {\n success_list: files.successList,\n remote_failed: files.remoteFailed,\n gate_report: files.gateReport,\n report: files.report,\n },\n };\n\n await writeJsonArtifact(files.report, report);\n return report;\n}\n\nexport const __testInternals = {\n assert_input_file,\n assert_out_dir,\n to_positive_integer,\n to_non_negative_integer,\n build_output_files,\n flow_payload,\n flow_id,\n flow_version,\n flow_version_gate_result,\n validate_publish_flow_row,\n build_flow_publish_gate_report,\n flow_gate_summary,\n gate_failure_rows,\n sync_one_row,\n resolve_target_user_id,\n build_visible_rows_url,\n build_update_url,\n parse_response,\n parse_visible_rows,\n visible_conflict_reasons,\n failure_row,\n build_error_reasons,\n map_with_concurrency,\n status_from_mode,\n};\n"]}