onto-mcp 0.3.2 → 0.4.0

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 (300) hide show
  1. package/.onto/processes/reconstruct/actionable-ontology-seed-recomposition-design.md +447 -0
  2. package/.onto/processes/reconstruct/foundry-style-ontology-seed-contract.md +934 -0
  3. package/.onto/processes/reconstruct/reconstruct-boundary-contract.md +303 -725
  4. package/.onto/processes/reconstruct/reconstruct-contract-registry.yaml +1645 -0
  5. package/.onto/processes/reconstruct/reconstruct-execution-ux-contract.md +26 -22
  6. package/.onto/processes/reconstruct/source-profile-contract.md +49 -23
  7. package/.onto/processes/reconstruct/source-profiles/code.md +6 -3
  8. package/.onto/processes/reconstruct/source-profiles/database.md +5 -2
  9. package/.onto/processes/reconstruct/source-profiles/document.md +5 -2
  10. package/.onto/processes/reconstruct/source-profiles/spreadsheet.md +5 -4
  11. package/.onto/processes/review/review-execution-ux-contract.md +40 -0
  12. package/.onto/processes/shared/pipeline-execution-ledger-contract.md +26 -10
  13. package/.onto/processes/shared/target-material-kind-contract.md +29 -16
  14. package/AGENTS.md +6 -4
  15. package/README.md +135 -76
  16. package/dist/cli.js +8 -8
  17. package/dist/core-api/reconstruct-api.js +117 -31
  18. package/dist/core-api/review-api.js +47 -0
  19. package/dist/core-runtime/cli/codex-review-unit-executor.js +39 -2
  20. package/dist/core-runtime/cli/complete-review-session.js +2 -2
  21. package/dist/core-runtime/cli/mock-review-unit-executor.js +1 -1
  22. package/dist/core-runtime/cli/review-invoke.js +9 -9
  23. package/dist/core-runtime/cli/run-review-prompt-execution.js +39 -5
  24. package/dist/core-runtime/cli/spawn-watcher.js +266 -47
  25. package/dist/core-runtime/cli/start-review-session.js +3 -3
  26. package/dist/core-runtime/llm/llm-caller.js +11 -0
  27. package/dist/core-runtime/llm/llm-tool-loop.js +2 -0
  28. package/dist/core-runtime/observability/runtime-stream-observation.js +118 -0
  29. package/dist/core-runtime/onboard/cli-host.js +149 -0
  30. package/dist/core-runtime/onboard/host-target.js +22 -0
  31. package/dist/core-runtime/onboard/json-config-host.js +122 -0
  32. package/dist/core-runtime/onboard/path-scan.js +26 -0
  33. package/dist/core-runtime/onboard/prompt.js +51 -0
  34. package/dist/core-runtime/onboard/register.js +207 -0
  35. package/dist/core-runtime/onboard/types.js +27 -0
  36. package/dist/core-runtime/reconstruct/actionable-seed-validation.js +1777 -0
  37. package/dist/core-runtime/reconstruct/artifact-types.js +10 -4
  38. package/dist/core-runtime/reconstruct/contract-registry.js +623 -0
  39. package/dist/core-runtime/reconstruct/domain-id.js +10 -0
  40. package/dist/core-runtime/reconstruct/governing-snapshot.js +716 -0
  41. package/dist/core-runtime/reconstruct/material-profile-validation.js +191 -0
  42. package/dist/core-runtime/reconstruct/materialize-preparation.js +49 -11
  43. package/dist/core-runtime/reconstruct/pipeline-execution-ledger.js +269 -79
  44. package/dist/core-runtime/reconstruct/post-seed-validation.js +1194 -51
  45. package/dist/core-runtime/reconstruct/record.js +104 -20
  46. package/dist/core-runtime/reconstruct/run.js +2107 -413
  47. package/dist/core-runtime/reconstruct/seed-claim-projections.js +268 -0
  48. package/dist/core-runtime/reconstruct/source-profiles.js +93 -4
  49. package/dist/core-runtime/reconstruct/terminal-validation.js +807 -0
  50. package/dist/core-runtime/review/review-invocation-runner.js +4 -4
  51. package/dist/mcp/server.js +110 -38
  52. package/dist/mcp/tool-schemas.js +20 -6
  53. package/package.json +8 -17
  54. package/scripts/onto-review-watch.sh +486 -0
  55. package/scripts/onto-runtime-watch.sh +122 -0
  56. package/scripts/postinstall-hint.js +22 -0
  57. package/.onto/processes/reconstruct/top-level-concept-discovery-contract.md +0 -387
  58. package/dist/core-runtime/cli/bootstrap-review-binding.js +0 -186
  59. package/dist/core-runtime/cli/codex-nested-dispatch.test.js +0 -390
  60. package/dist/core-runtime/cli/codex-nested-teamlead-executor.test.js +0 -335
  61. package/dist/core-runtime/cli/coordinator-helpers.js +0 -583
  62. package/dist/core-runtime/cli/coordinator-state-machine-deliberation.test.js +0 -167
  63. package/dist/core-runtime/cli/coordinator-state-machine.js +0 -794
  64. package/dist/core-runtime/cli/e2e-codex-multi-agent-fixes.test.js +0 -615
  65. package/dist/core-runtime/cli/e2e-start-review-session.test.js +0 -312
  66. package/dist/core-runtime/cli/health.js +0 -44
  67. package/dist/core-runtime/cli/inline-http-review-unit-executor.test.js +0 -567
  68. package/dist/core-runtime/cli/materialize-review-execution-preparation.js +0 -104
  69. package/dist/core-runtime/cli/migrate-session-roots.js +0 -118
  70. package/dist/core-runtime/cli/repo-layout-migration-replace.smoke.test.js +0 -106
  71. package/dist/core-runtime/cli/review-invoke-auto-resolution.test.js +0 -268
  72. package/dist/core-runtime/cli/review-invoke-coordinator-topology.test.js +0 -136
  73. package/dist/core-runtime/cli/review-invoke-resolver-caching.test.js +0 -201
  74. package/dist/core-runtime/cli/review-invoke-topology-dispatch.test.js +0 -192
  75. package/dist/core-runtime/cli/session-root-guard.js +0 -168
  76. package/dist/core-runtime/cli/spawn-watcher.test.js +0 -457
  77. package/dist/core-runtime/cli/strip-wrapping-code-fence.test.js +0 -79
  78. package/dist/core-runtime/cli/teamcreate-lens-deliberation-executor.js +0 -412
  79. package/dist/core-runtime/cli/teamcreate-lens-deliberation-executor.test.js +0 -351
  80. package/dist/core-runtime/cli/topology-executor-mapping.js +0 -139
  81. package/dist/core-runtime/cli/topology-executor-mapping.test.js +0 -173
  82. package/dist/core-runtime/cli/write-review-interpretation.js +0 -81
  83. package/dist/core-runtime/config/onto-config-cli.js +0 -278
  84. package/dist/core-runtime/config/onto-config-key-path.js +0 -288
  85. package/dist/core-runtime/config/onto-config-key-path.test.js +0 -195
  86. package/dist/core-runtime/config/onto-config-preview.js +0 -108
  87. package/dist/core-runtime/config/onto-config-preview.test.js +0 -132
  88. package/dist/core-runtime/discovery/config-chain.js +0 -118
  89. package/dist/core-runtime/discovery/config-chain.test.js +0 -103
  90. package/dist/core-runtime/discovery/config-profile.js +0 -199
  91. package/dist/core-runtime/discovery/config-profile.test.js +0 -233
  92. package/dist/core-runtime/discovery/host-detection.test.js +0 -186
  93. package/dist/core-runtime/discovery/installation-paths.test.js +0 -65
  94. package/dist/core-runtime/discovery/lens-registry.test.js +0 -81
  95. package/dist/core-runtime/discovery/path-normalization.test.js +0 -22
  96. package/dist/core-runtime/discovery/plugin-path.js +0 -72
  97. package/dist/core-runtime/discovery/plugin-path.test.js +0 -95
  98. package/dist/core-runtime/evolve/adapters/code-product/compile/compile-defense.js +0 -344
  99. package/dist/core-runtime/evolve/adapters/code-product/compile/compile-defense.test.js +0 -915
  100. package/dist/core-runtime/evolve/adapters/code-product/compile/compile.js +0 -564
  101. package/dist/core-runtime/evolve/adapters/code-product/compile/compile.test.js +0 -708
  102. package/dist/core-runtime/evolve/adapters/code-product/parsers/brief-parser.js +0 -165
  103. package/dist/core-runtime/evolve/adapters/code-product/parsers/brief-parser.test.js +0 -227
  104. package/dist/core-runtime/evolve/adapters/code-product/validators/validate.js +0 -59
  105. package/dist/core-runtime/evolve/adapters/code-product/validators/validate.test.js +0 -205
  106. package/dist/core-runtime/evolve/adapters/methodology/adapter.js +0 -16
  107. package/dist/core-runtime/evolve/adapters/methodology/adapter.test.js +0 -9
  108. package/dist/core-runtime/evolve/adapters/methodology/perspectives/authority-consistency.js +0 -298
  109. package/dist/core-runtime/evolve/adapters/methodology/perspectives/authority-consistency.test.js +0 -70
  110. package/dist/core-runtime/evolve/adapters/methodology/scope-types/process.js +0 -46
  111. package/dist/core-runtime/evolve/adapters/methodology/scope-types/process.test.js +0 -73
  112. package/dist/core-runtime/evolve/adapters/registry.js +0 -47
  113. package/dist/core-runtime/evolve/adapters/registry.test.js +0 -67
  114. package/dist/core-runtime/evolve/cli.js +0 -256
  115. package/dist/core-runtime/evolve/commands/align.js +0 -194
  116. package/dist/core-runtime/evolve/commands/align.test.js +0 -82
  117. package/dist/core-runtime/evolve/commands/apply.js +0 -161
  118. package/dist/core-runtime/evolve/commands/apply.test.js +0 -138
  119. package/dist/core-runtime/evolve/commands/close.js +0 -39
  120. package/dist/core-runtime/evolve/commands/close.test.js +0 -99
  121. package/dist/core-runtime/evolve/commands/defer.js +0 -40
  122. package/dist/core-runtime/evolve/commands/defer.test.js +0 -134
  123. package/dist/core-runtime/evolve/commands/draft.js +0 -323
  124. package/dist/core-runtime/evolve/commands/draft.test.js +0 -178
  125. package/dist/core-runtime/evolve/commands/e2e-evolve-full-cycle.test.js +0 -208
  126. package/dist/core-runtime/evolve/commands/error-messages.js +0 -125
  127. package/dist/core-runtime/evolve/commands/error-messages.test.js +0 -167
  128. package/dist/core-runtime/evolve/commands/propose-align.js +0 -222
  129. package/dist/core-runtime/evolve/commands/propose-align.test.js +0 -136
  130. package/dist/core-runtime/evolve/commands/reconstruct.js +0 -330
  131. package/dist/core-runtime/evolve/commands/reconstruct.test.js +0 -278
  132. package/dist/core-runtime/evolve/commands/shared.js +0 -22
  133. package/dist/core-runtime/evolve/commands/stale-check.js +0 -103
  134. package/dist/core-runtime/evolve/commands/stale-check.test.js +0 -84
  135. package/dist/core-runtime/evolve/commands/start.js +0 -887
  136. package/dist/core-runtime/evolve/commands/start.test.js +0 -396
  137. package/dist/core-runtime/evolve/config/project-config.js +0 -99
  138. package/dist/core-runtime/evolve/config/project-config.test.js +0 -170
  139. package/dist/core-runtime/evolve/renderers/align-packet.js +0 -280
  140. package/dist/core-runtime/evolve/renderers/align-packet.test.js +0 -332
  141. package/dist/core-runtime/evolve/renderers/draft-packet.js +0 -303
  142. package/dist/core-runtime/evolve/renderers/draft-packet.test.js +0 -377
  143. package/dist/core-runtime/evolve/renderers/format.js +0 -5
  144. package/dist/core-runtime/evolve/renderers/scope-md.js +0 -237
  145. package/dist/core-runtime/evolve/renderers/scope-md.test.js +0 -306
  146. package/dist/core-runtime/govern/cli.js +0 -369
  147. package/dist/core-runtime/govern/cli.test.js +0 -314
  148. package/dist/core-runtime/govern/drift-engine.js +0 -103
  149. package/dist/core-runtime/govern/drift-engine.test.js +0 -319
  150. package/dist/core-runtime/govern/promote-principle.js +0 -206
  151. package/dist/core-runtime/govern/promote-principle.test.js +0 -368
  152. package/dist/core-runtime/govern/queue.js +0 -81
  153. package/dist/core-runtime/govern/types.js +0 -16
  154. package/dist/core-runtime/install/cli.js +0 -530
  155. package/dist/core-runtime/install/detect.js +0 -128
  156. package/dist/core-runtime/install/detect.test.js +0 -155
  157. package/dist/core-runtime/install/gitignore-update.js +0 -74
  158. package/dist/core-runtime/install/gitignore-update.test.js +0 -64
  159. package/dist/core-runtime/install/install-integration.test.js +0 -373
  160. package/dist/core-runtime/install/prompts.js +0 -389
  161. package/dist/core-runtime/install/prompts.test.js +0 -293
  162. package/dist/core-runtime/install/types.js +0 -26
  163. package/dist/core-runtime/install/validation.js +0 -295
  164. package/dist/core-runtime/install/validation.test.js +0 -313
  165. package/dist/core-runtime/install/writer.js +0 -254
  166. package/dist/core-runtime/install/writer.test.js +0 -218
  167. package/dist/core-runtime/learning/extractor.js +0 -461
  168. package/dist/core-runtime/learning/feedback.js +0 -179
  169. package/dist/core-runtime/learning/health-report.js +0 -165
  170. package/dist/core-runtime/learning/health-report.test.js +0 -169
  171. package/dist/core-runtime/learning/loader.js +0 -388
  172. package/dist/core-runtime/learning/loader.test.js +0 -102
  173. package/dist/core-runtime/learning/promote/apply-state.js +0 -240
  174. package/dist/core-runtime/learning/promote/audit-obligation.js +0 -195
  175. package/dist/core-runtime/learning/promote/collector.js +0 -432
  176. package/dist/core-runtime/learning/promote/degraded-state.js +0 -125
  177. package/dist/core-runtime/learning/promote/domain-doc-proposer.js +0 -166
  178. package/dist/core-runtime/learning/promote/e2e-promote.test.js +0 -6385
  179. package/dist/core-runtime/learning/promote/health-snapshot.js +0 -150
  180. package/dist/core-runtime/learning/promote/insight-reclassifier.js +0 -544
  181. package/dist/core-runtime/learning/promote/judgment-auditor.js +0 -517
  182. package/dist/core-runtime/learning/promote/panel-reviewer.js +0 -1158
  183. package/dist/core-runtime/learning/promote/promote-executor.js +0 -1675
  184. package/dist/core-runtime/learning/promote/promoter.js +0 -307
  185. package/dist/core-runtime/learning/promote/retirement.js +0 -122
  186. package/dist/core-runtime/learning/promote/types.js +0 -23
  187. package/dist/core-runtime/learning/prompt-sections.js +0 -51
  188. package/dist/core-runtime/learning/shared/artifact-registry-init.js +0 -45
  189. package/dist/core-runtime/learning/shared/artifact-registry.js +0 -254
  190. package/dist/core-runtime/learning/shared/audit-obligation-kernel.js +0 -73
  191. package/dist/core-runtime/learning/shared/audit-state.js +0 -99
  192. package/dist/core-runtime/learning/shared/duplicate-check.js +0 -28
  193. package/dist/core-runtime/learning/shared/llm-caller.js +0 -831
  194. package/dist/core-runtime/learning/shared/llm-caller.test.js +0 -601
  195. package/dist/core-runtime/learning/shared/llm-tool-loop.js +0 -393
  196. package/dist/core-runtime/learning/shared/mode.js +0 -25
  197. package/dist/core-runtime/learning/shared/paths.js +0 -84
  198. package/dist/core-runtime/learning/shared/paths.test.js +0 -79
  199. package/dist/core-runtime/learning/shared/patterns.js +0 -37
  200. package/dist/core-runtime/learning/shared/recoverability.js +0 -355
  201. package/dist/core-runtime/learning/shared/recovery-context.js +0 -374
  202. package/dist/core-runtime/learning/shared/scope.js +0 -1
  203. package/dist/core-runtime/learning/shared/semantic-classifier.js +0 -94
  204. package/dist/core-runtime/learning/shared/specs/apply-execution-state-spec.js +0 -42
  205. package/dist/core-runtime/learning/shared/specs/audit-state-spec.js +0 -37
  206. package/dist/core-runtime/learning/shared/specs/backup-metadata-spec.js +0 -39
  207. package/dist/core-runtime/learning/shared/specs/emergency-log-spec.js +0 -41
  208. package/dist/core-runtime/learning/shared/specs/layout-version-spec.js +0 -38
  209. package/dist/core-runtime/learning/shared/specs/promote-decisions-spec.js +0 -43
  210. package/dist/core-runtime/learning/shared/specs/promote-report-spec.js +0 -113
  211. package/dist/core-runtime/learning/shared/specs/prune-log-spec.js +0 -36
  212. package/dist/core-runtime/learning/shared/specs/recovery-resolution-spec.js +0 -48
  213. package/dist/core-runtime/learning/shared/specs/restore-manifest-spec.js +0 -43
  214. package/dist/core-runtime/learning/shared/specs/spec-helpers.js +0 -64
  215. package/dist/core-runtime/learning/usage-tracker.js +0 -190
  216. package/dist/core-runtime/learning/usage-tracker.test.js +0 -176
  217. package/dist/core-runtime/onboard/detect-review-axes.js +0 -122
  218. package/dist/core-runtime/onboard/detect-review-axes.test.js +0 -127
  219. package/dist/core-runtime/onboard/write-review-block.js +0 -188
  220. package/dist/core-runtime/onboard/write-review-block.test.js +0 -240
  221. package/dist/core-runtime/readers/brownfield-builder.js +0 -150
  222. package/dist/core-runtime/readers/brownfield-builder.test.js +0 -136
  223. package/dist/core-runtime/readers/code-chunk-collector.js +0 -53
  224. package/dist/core-runtime/readers/code-chunk-collector.test.js +0 -136
  225. package/dist/core-runtime/readers/file-utils.js +0 -240
  226. package/dist/core-runtime/readers/file-utils.test.js +0 -146
  227. package/dist/core-runtime/readers/lexicon-citation-check.js +0 -93
  228. package/dist/core-runtime/readers/lexicon-citation-check.test.js +0 -77
  229. package/dist/core-runtime/readers/mcp-figma.js +0 -30
  230. package/dist/core-runtime/readers/mcp-figma.test.js +0 -82
  231. package/dist/core-runtime/readers/mcp-generic.js +0 -31
  232. package/dist/core-runtime/readers/mcp-generic.test.js +0 -76
  233. package/dist/core-runtime/readers/ontology-index.js +0 -148
  234. package/dist/core-runtime/readers/ontology-index.test.js +0 -245
  235. package/dist/core-runtime/readers/ontology-query.js +0 -168
  236. package/dist/core-runtime/readers/ontology-query.test.js +0 -311
  237. package/dist/core-runtime/readers/ontology-resolve.js +0 -48
  238. package/dist/core-runtime/readers/ontology-resolve.test.js +0 -48
  239. package/dist/core-runtime/readers/patterns/index.js +0 -7
  240. package/dist/core-runtime/readers/review-log.js +0 -213
  241. package/dist/core-runtime/readers/review-log.test.js +0 -313
  242. package/dist/core-runtime/readers/scan-local.js +0 -102
  243. package/dist/core-runtime/readers/scan-local.test.js +0 -102
  244. package/dist/core-runtime/readers/scan-tarball.js +0 -121
  245. package/dist/core-runtime/readers/scan-tarball.test.js +0 -283
  246. package/dist/core-runtime/readers/scan-vault.js +0 -34
  247. package/dist/core-runtime/readers/scan-vault.test.js +0 -81
  248. package/dist/core-runtime/readers/types.js +0 -42
  249. package/dist/core-runtime/readers/types.test.js +0 -94
  250. package/dist/core-runtime/readers/viewpoint-collectors.js +0 -229
  251. package/dist/core-runtime/reconstruct/seed-candidate-validation.js +0 -385
  252. package/dist/core-runtime/review/citation-audit.test.js +0 -165
  253. package/dist/core-runtime/review/execution-plan-resolver.js +0 -247
  254. package/dist/core-runtime/review/execution-plan-resolver.test.js +0 -243
  255. package/dist/core-runtime/review/execution-topology-resolver-axis-first.test.js +0 -246
  256. package/dist/core-runtime/review/execution-topology-resolver.js +0 -401
  257. package/dist/core-runtime/review/execution-topology-resolver.test.js +0 -315
  258. package/dist/core-runtime/review/inline-context-embedder.test.js +0 -154
  259. package/dist/core-runtime/review/legacy-mode-policy.js +0 -88
  260. package/dist/core-runtime/review/materializers-effort-persist.test.js +0 -79
  261. package/dist/core-runtime/review/ontology-path-classifier.js +0 -179
  262. package/dist/core-runtime/review/ontology-path-classifier.test.js +0 -216
  263. package/dist/core-runtime/review/packet-boundary-policy.test.js +0 -107
  264. package/dist/core-runtime/review/participating-lens-paths.test.js +0 -73
  265. package/dist/core-runtime/review/review-config-legacy-translate.js +0 -244
  266. package/dist/core-runtime/review/review-config-legacy-translate.test.js +0 -161
  267. package/dist/core-runtime/review/review-config-validator.js +0 -289
  268. package/dist/core-runtime/review/review-config-validator.test.js +0 -236
  269. package/dist/core-runtime/review/shape-pipeline-audit.test.js +0 -311
  270. package/dist/core-runtime/review/shape-to-topology-id.js +0 -117
  271. package/dist/core-runtime/review/shape-to-topology-id.test.js +0 -132
  272. package/dist/core-runtime/review/topology-shape-derivation.js +0 -155
  273. package/dist/core-runtime/review/topology-shape-derivation.test.js +0 -195
  274. package/dist/core-runtime/scope-runtime/constants.js +0 -12
  275. package/dist/core-runtime/scope-runtime/constraint-pool.js +0 -166
  276. package/dist/core-runtime/scope-runtime/constraint-pool.test.js +0 -674
  277. package/dist/core-runtime/scope-runtime/domain-validation-log.js +0 -135
  278. package/dist/core-runtime/scope-runtime/domain-validation-log.test.js +0 -156
  279. package/dist/core-runtime/scope-runtime/eval-persistence.js +0 -65
  280. package/dist/core-runtime/scope-runtime/eval-persistence.test.js +0 -84
  281. package/dist/core-runtime/scope-runtime/event-pipeline.js +0 -64
  282. package/dist/core-runtime/scope-runtime/event-pipeline.test.js +0 -450
  283. package/dist/core-runtime/scope-runtime/event-store.js +0 -39
  284. package/dist/core-runtime/scope-runtime/event-store.test.js +0 -95
  285. package/dist/core-runtime/scope-runtime/gate-guard.js +0 -348
  286. package/dist/core-runtime/scope-runtime/gate-guard.test.js +0 -1047
  287. package/dist/core-runtime/scope-runtime/hash.js +0 -4
  288. package/dist/core-runtime/scope-runtime/hash.test.js +0 -33
  289. package/dist/core-runtime/scope-runtime/id.js +0 -4
  290. package/dist/core-runtime/scope-runtime/id.test.js +0 -17
  291. package/dist/core-runtime/scope-runtime/reducer.js +0 -297
  292. package/dist/core-runtime/scope-runtime/reducer.test.js +0 -759
  293. package/dist/core-runtime/scope-runtime/scope-manager.js +0 -161
  294. package/dist/core-runtime/scope-runtime/state-machine.js +0 -309
  295. package/dist/core-runtime/scope-runtime/state-machine.test.js +0 -704
  296. package/dist/core-runtime/scope-runtime/types.js +0 -116
  297. package/dist/core-runtime/scope-runtime/types.test.js +0 -69
  298. package/dist/core-runtime/translate/render-for-user.js +0 -169
  299. package/dist/core-runtime/translate/render-for-user.test.js +0 -122
  300. package/dist/providers/capability-contract.js +0 -1
@@ -1,4 +1,6 @@
1
+ import fs from "node:fs/promises";
1
2
  import path from "node:path";
3
+ import { parse as parseYaml } from "yaml";
2
4
  import { PIPELINE_EXECUTION_LEDGER_SCHEMA_VERSION, buildLedgerTrust, buildOutputHashes, isTrustedLedgerUnit, normalizeLedgerRefs, } from "../pipeline-execution-ledger.js";
3
5
  const RECONSTRUCT_LEDGER_STAGE_SPECS = [
4
6
  {
@@ -8,12 +10,19 @@ const RECONSTRUCT_LEDGER_STAGE_SPECS = [
8
10
  artifactKey: "target_material_profile",
9
11
  upstreamUnitIds: [],
10
12
  },
13
+ {
14
+ unitId: "target_material_profile_validation",
15
+ unitKind: "runtime_validation",
16
+ owner: "runtime",
17
+ artifactKey: "target_material_profile_validation",
18
+ upstreamUnitIds: ["target_material_profile"],
19
+ },
11
20
  {
12
21
  unitId: "source_inventory",
13
22
  unitKind: "source_inventory",
14
23
  owner: "runtime",
15
24
  artifactKey: "source_inventory",
16
- upstreamUnitIds: ["target_material_profile"],
25
+ upstreamUnitIds: ["target_material_profile_validation"],
17
26
  },
18
27
  {
19
28
  unitId: "initial_source_frontier",
@@ -43,20 +52,6 @@ const RECONSTRUCT_LEDGER_STAGE_SPECS = [
43
52
  artifactKey: "source_observation_directive_validation",
44
53
  upstreamUnitIds: ["observation_directive"],
45
54
  },
46
- {
47
- unitId: "domain_context_selection",
48
- unitKind: "semantic_context_selection",
49
- owner: "host_llm",
50
- artifactKey: "domain_context_selection",
51
- upstreamUnitIds: ["observation_directive_validation"],
52
- },
53
- {
54
- unitId: "domain_context_selection_validation",
55
- unitKind: "runtime_validation",
56
- owner: "runtime",
57
- artifactKey: "domain_context_selection_validation",
58
- upstreamUnitIds: ["domain_context_selection"],
59
- },
60
55
  {
61
56
  unitId: "lens_judgment",
62
57
  unitKind: "semantic_lens_judgment",
@@ -83,28 +78,58 @@ const RECONSTRUCT_LEDGER_STAGE_SPECS = [
83
78
  unitKind: "runtime_validation",
84
79
  owner: "runtime",
85
80
  artifactKey: "source_frontier_validation",
86
- upstreamUnitIds: ["source_frontier"],
81
+ upstreamUnitIds: [
82
+ "source_frontier",
83
+ "source_inventory",
84
+ "target_material_profile_validation",
85
+ "source_observation",
86
+ ],
87
87
  },
88
88
  {
89
- unitId: "seed_candidate",
90
- unitKind: "semantic_seed",
89
+ unitId: "candidate_inventory",
90
+ unitKind: "semantic_candidate_inventory",
91
91
  owner: "host_llm",
92
- artifactKey: "seed_candidate",
92
+ artifactKey: "candidate_inventory",
93
93
  upstreamUnitIds: ["source_frontier_validation"],
94
94
  },
95
95
  {
96
- unitId: "seed_candidate_validation",
96
+ unitId: "candidate_disposition",
97
+ unitKind: "semantic_candidate_disposition",
98
+ owner: "host_llm",
99
+ artifactKey: "candidate_disposition",
100
+ upstreamUnitIds: ["candidate_inventory"],
101
+ },
102
+ {
103
+ unitId: "candidate_disposition_validation",
104
+ unitKind: "runtime_validation",
105
+ owner: "runtime",
106
+ artifactKey: "candidate_disposition_validation",
107
+ upstreamUnitIds: [
108
+ "candidate_inventory",
109
+ "candidate_disposition",
110
+ "source_observation",
111
+ ],
112
+ },
113
+ {
114
+ unitId: "ontology_seed",
115
+ unitKind: "semantic_ontology_seed",
116
+ owner: "host_llm",
117
+ artifactKey: "ontology_seed",
118
+ upstreamUnitIds: ["candidate_disposition_validation"],
119
+ },
120
+ {
121
+ unitId: "ontology_seed_validation",
97
122
  unitKind: "runtime_validation",
98
123
  owner: "runtime",
99
- artifactKey: "seed_candidate_validation",
100
- upstreamUnitIds: ["seed_candidate"],
124
+ artifactKey: "ontology_seed_validation",
125
+ upstreamUnitIds: ["ontology_seed"],
101
126
  },
102
127
  {
103
128
  unitId: "claim_realization",
104
129
  unitKind: "semantic_map",
105
130
  owner: "host_llm",
106
131
  artifactKey: "claim_realization_map",
107
- upstreamUnitIds: ["seed_candidate_validation"],
132
+ upstreamUnitIds: ["ontology_seed_validation"],
108
133
  },
109
134
  {
110
135
  unitId: "claim_realization_validation",
@@ -118,7 +143,7 @@ const RECONSTRUCT_LEDGER_STAGE_SPECS = [
118
143
  unitKind: "confirmation",
119
144
  owner: "user_or_host_mediated",
120
145
  artifactKey: "seed_confirmation",
121
- upstreamUnitIds: ["seed_candidate_validation", "claim_realization_validation"],
146
+ upstreamUnitIds: ["ontology_seed_validation", "claim_realization_validation"],
122
147
  },
123
148
  {
124
149
  unitId: "seed_confirmation_validation",
@@ -146,28 +171,41 @@ const RECONSTRUCT_LEDGER_STAGE_SPECS = [
146
171
  unitKind: "semantic_assessment",
147
172
  owner: "host_llm",
148
173
  artifactKey: "competency_question_assessment",
149
- upstreamUnitIds: ["competency_questions_validation"],
174
+ upstreamUnitIds: [
175
+ "competency_questions_validation",
176
+ "claim_realization_validation",
177
+ ],
150
178
  },
151
179
  {
152
180
  unitId: "competency_question_assessment_validation",
153
181
  unitKind: "runtime_validation",
154
182
  owner: "runtime",
155
183
  artifactKey: "competency_question_assessment_validation",
156
- upstreamUnitIds: ["competency_question_assessment"],
184
+ upstreamUnitIds: [
185
+ "competency_question_assessment",
186
+ "claim_realization_validation",
187
+ ],
157
188
  },
158
189
  {
159
190
  unitId: "failure_classification",
160
191
  unitKind: "semantic_failure_classification",
161
192
  owner: "host_llm",
162
193
  artifactKey: "failure_classification",
163
- upstreamUnitIds: ["competency_question_assessment_validation"],
194
+ upstreamUnitIds: [
195
+ "seed_confirmation_validation",
196
+ "competency_question_assessment_validation",
197
+ ],
164
198
  },
165
199
  {
166
200
  unitId: "failure_classification_validation",
167
201
  unitKind: "runtime_validation",
168
202
  owner: "runtime",
169
203
  artifactKey: "failure_classification_validation",
170
- upstreamUnitIds: ["failure_classification"],
204
+ upstreamUnitIds: [
205
+ "failure_classification",
206
+ "competency_question_assessment_validation",
207
+ "seed_confirmation_validation",
208
+ ],
171
209
  },
172
210
  {
173
211
  unitId: "revision_proposal",
@@ -197,32 +235,142 @@ const RECONSTRUCT_LEDGER_STAGE_SPECS = [
197
235
  artifactKey: "stop_decision",
198
236
  upstreamUnitIds: ["metrics"],
199
237
  },
238
+ {
239
+ unitId: "pre_handoff_run_manifest_validation",
240
+ unitKind: "runtime_validation",
241
+ owner: "runtime",
242
+ artifactKey: "pre_handoff_run_manifest_validation",
243
+ upstreamUnitIds: [
244
+ "target_material_profile_validation",
245
+ "observation_directive_validation",
246
+ "source_frontier_validation",
247
+ "candidate_disposition_validation",
248
+ "ontology_seed_validation",
249
+ "claim_realization_validation",
250
+ "seed_confirmation_validation",
251
+ "competency_questions_validation",
252
+ "competency_question_assessment_validation",
253
+ "failure_classification_validation",
254
+ "revision_proposal_validation",
255
+ "metrics",
256
+ "stop_decision",
257
+ ],
258
+ },
259
+ {
260
+ unitId: "handoff_decision_validation",
261
+ unitKind: "runtime_validation",
262
+ owner: "runtime",
263
+ artifactKey: "handoff_decision_validation",
264
+ upstreamUnitIds: [
265
+ "target_material_profile_validation",
266
+ "observation_directive_validation",
267
+ "source_frontier_validation",
268
+ "candidate_disposition_validation",
269
+ "ontology_seed_validation",
270
+ "claim_realization_validation",
271
+ "seed_confirmation_validation",
272
+ "competency_questions_validation",
273
+ "competency_question_assessment_validation",
274
+ "failure_classification_validation",
275
+ "revision_proposal_validation",
276
+ "metrics",
277
+ "stop_decision",
278
+ "pre_handoff_run_manifest_validation",
279
+ ],
280
+ },
200
281
  {
201
282
  unitId: "final_output",
202
283
  unitKind: "final_output",
203
284
  owner: "host_llm",
204
285
  artifactKey: "final_output",
205
- upstreamUnitIds: ["stop_decision"],
286
+ upstreamUnitIds: ["handoff_decision_validation"],
287
+ },
288
+ {
289
+ unitId: "final_output_provenance_validation",
290
+ unitKind: "runtime_validation",
291
+ owner: "runtime",
292
+ artifactKey: "final_output_provenance_validation",
293
+ upstreamUnitIds: ["final_output"],
206
294
  },
207
295
  {
208
296
  unitId: "record_assembly",
209
297
  unitKind: "record_assembly",
210
298
  owner: "runtime",
211
299
  artifactKey: "reconstruct_record",
212
- upstreamUnitIds: ["final_output"],
300
+ upstreamUnitIds: ["final_output_provenance_validation"],
301
+ },
302
+ {
303
+ unitId: "post_publication_run_manifest_validation",
304
+ unitKind: "runtime_validation",
305
+ owner: "runtime",
306
+ artifactKey: "post_publication_run_manifest_validation",
307
+ upstreamUnitIds: ["record_assembly"],
213
308
  },
214
309
  ];
215
310
  const VALIDATION_GATE_BY_AUTHORED_UNIT = new Map([
216
311
  ["observation_directive", "observation_directive_validation"],
217
312
  ["source_frontier", "source_frontier_validation"],
218
- ["seed_candidate", "seed_candidate_validation"],
313
+ ["candidate_inventory", "candidate_disposition_validation"],
314
+ ["candidate_disposition", "candidate_disposition_validation"],
315
+ ["ontology_seed", "ontology_seed_validation"],
219
316
  ["claim_realization", "claim_realization_validation"],
220
317
  ["seed_confirmation", "seed_confirmation_validation"],
221
318
  ["competency_questions", "competency_questions_validation"],
222
319
  ["competency_question_assessment", "competency_question_assessment_validation"],
223
320
  ["failure_classification", "failure_classification_validation"],
224
321
  ["revision_proposal", "revision_proposal_validation"],
322
+ ["stop_decision", "handoff_decision_validation"],
323
+ ["final_output", "final_output_provenance_validation"],
324
+ ]);
325
+ const PRESENCE_INPUTS_BY_RUNTIME_VALIDATION = new Map([
326
+ ["target_material_profile_validation", ["target_material_profile"]],
327
+ ["observation_directive_validation", ["observation_directive"]],
328
+ ["source_frontier_validation", ["source_frontier", "source_inventory"]],
329
+ [
330
+ "candidate_disposition_validation",
331
+ ["candidate_inventory", "candidate_disposition", "source_observation"],
332
+ ],
333
+ ["ontology_seed_validation", ["ontology_seed"]],
334
+ ["claim_realization_validation", ["claim_realization"]],
335
+ ["seed_confirmation_validation", ["seed_confirmation"]],
336
+ ["competency_questions_validation", ["competency_questions"]],
337
+ ["competency_question_assessment_validation", ["competency_question_assessment"]],
338
+ ["failure_classification_validation", ["failure_classification"]],
339
+ ["revision_proposal_validation", ["revision_proposal"]],
340
+ ["handoff_decision_validation", ["stop_decision"]],
341
+ ["final_output_provenance_validation", ["final_output"]],
225
342
  ]);
343
+ function isPresenceInput(args) {
344
+ return (PRESENCE_INPUTS_BY_RUNTIME_VALIDATION.get(args.validationUnitId) ?? [])
345
+ .includes(args.upstreamUnitId);
346
+ }
347
+ async function runtimeValidationOutputStatus(outputRefs) {
348
+ if (outputRefs.length === 0)
349
+ return "not_available";
350
+ let sawValidationArtifact = false;
351
+ for (const outputRef of outputRefs) {
352
+ let parsed;
353
+ try {
354
+ parsed = parseYaml(await fs.readFile(outputRef, "utf8"));
355
+ }
356
+ catch (error) {
357
+ const code = error.code;
358
+ if (code === "ENOENT" || code === "ENOTDIR")
359
+ return "not_available";
360
+ throw error;
361
+ }
362
+ const validationStatus = parsed
363
+ ?.validation_status;
364
+ if (validationStatus === "invalid")
365
+ return "invalid";
366
+ if (validationStatus === "valid") {
367
+ sawValidationArtifact = true;
368
+ continue;
369
+ }
370
+ return "not_validation_artifact";
371
+ }
372
+ return sawValidationArtifact ? "valid" : "not_validation_artifact";
373
+ }
226
374
  function artifactRefForKey(args) {
227
375
  if (args.key === "reconstruct_record")
228
376
  return args.reconstructRecordRef ?? null;
@@ -247,15 +395,32 @@ function manifestStatus(manifest, unitId) {
247
395
  return null;
248
396
  }
249
397
  function trustForReconstructUnit(args) {
398
+ if (args.spec.unitKind === "runtime_validation" && args.status === "completed") {
399
+ const validationStatus = args.validationStatusesByUnitId.get(args.spec.unitId);
400
+ if (validationStatus !== "valid") {
401
+ return {
402
+ trustStatus: "untrusted",
403
+ trustReason: validationStatus === "invalid"
404
+ ? "Runtime validation artifact exists but reports validation_status: invalid."
405
+ : "Runtime validation unit did not produce a valid validation artifact.",
406
+ };
407
+ }
408
+ }
250
409
  const validationGateUnitId = VALIDATION_GATE_BY_AUTHORED_UNIT.get(args.spec.unitId);
251
410
  if (validationGateUnitId) {
252
- const validationOutputPresent = args.artifactRefsByUnitId.get(validationGateUnitId)?.some((ref) => ref.length > 0) ?? false;
253
- if (!validationOutputPresent) {
411
+ const validationStatus = args.validationStatusesByUnitId.get(validationGateUnitId);
412
+ if (!validationStatus || validationStatus === "not_available") {
254
413
  return {
255
414
  trustStatus: "untrusted",
256
415
  trustReason: "LLM or user-authored artifact exists only as a candidate until its runtime validation gate completes.",
257
416
  };
258
417
  }
418
+ if (!args.trustedUnitIds.has(validationGateUnitId)) {
419
+ return {
420
+ trustStatus: "blocked_by_upstream",
421
+ trustReason: "LLM or user-authored artifact exists only as a candidate until its runtime validation gate is trusted.",
422
+ };
423
+ }
259
424
  }
260
425
  return buildLedgerTrust({
261
426
  status: args.status,
@@ -277,55 +442,80 @@ export async function buildReconstructPipelineExecutionLedger(params) {
277
442
  }),
278
443
  ]),
279
444
  ]));
280
- const trustedUnitIds = new Set();
281
- const units = [];
445
+ const outputHashesByUnitId = new Map();
446
+ const validationStatusesByUnitId = new Map();
282
447
  for (const spec of RECONSTRUCT_LEDGER_STAGE_SPECS) {
283
448
  const outputRefs = artifactRefsByUnitId.get(spec.unitId) ?? [];
284
449
  const outputHashes = await buildOutputHashes(outputRefs);
285
- const outputPresent = outputRefs.length > 0 &&
286
- outputRefs.every((outputRef) => outputHashes[outputRef] !== null);
287
- const upstreamTrusted = spec.upstreamUnitIds.every((unitId) => {
288
- if (spec.unitKind === "runtime_validation") {
289
- return (artifactRefsByUnitId.get(unitId) ?? []).length > 0;
290
- }
291
- return trustedUnitIds.has(unitId);
292
- });
293
- const status = manifestStatus(params.reconstructRunManifest, spec.unitId) ??
294
- (outputPresent
295
- ? "completed"
296
- : upstreamTrusted
297
- ? "missing"
298
- : "not_reached");
299
- const trust = trustForReconstructUnit({
300
- spec,
301
- status,
302
- outputRefs,
303
- outputHashes,
304
- upstreamTrusted,
305
- artifactRefsByUnitId,
306
- });
307
- const manifestStep = manifestStepByUnitId.get(spec.unitId);
308
- const entry = {
309
- unitId: spec.unitId,
310
- unitKind: spec.unitKind,
311
- owner: spec.owner,
312
- producedArtifactRefs: outputRefs,
313
- consumedArtifactRefs: normalizeLedgerRefs([
314
- ...spec.upstreamUnitIds.flatMap((unitId) => artifactRefsByUnitId.get(unitId) ?? []),
315
- ]),
316
- outputRefs,
317
- outputHashes,
318
- status,
319
- trustStatus: trust.trustStatus,
320
- trustReason: trust.trustReason,
321
- attemptCount: manifestStep ? 1 : 0,
322
- lastFailureMessage: null,
323
- upstreamUnitIds: spec.upstreamUnitIds,
324
- downstreamUnitIds: downstreamUnitIds.get(spec.unitId) ?? [],
325
- };
326
- units.push(entry);
327
- if (isTrustedLedgerUnit(entry))
328
- trustedUnitIds.add(entry.unitId);
450
+ outputHashesByUnitId.set(spec.unitId, outputHashes);
451
+ if (spec.unitKind === "runtime_validation") {
452
+ validationStatusesByUnitId.set(spec.unitId, await runtimeValidationOutputStatus(outputRefs));
453
+ }
454
+ }
455
+ let trustedUnitIds = new Set();
456
+ let units = [];
457
+ for (let pass = 0; pass < RECONSTRUCT_LEDGER_STAGE_SPECS.length; pass += 1) {
458
+ const nextTrustedUnitIds = new Set();
459
+ const nextUnits = [];
460
+ for (const spec of RECONSTRUCT_LEDGER_STAGE_SPECS) {
461
+ const outputRefs = artifactRefsByUnitId.get(spec.unitId) ?? [];
462
+ const outputHashes = outputHashesByUnitId.get(spec.unitId) ?? {};
463
+ const outputPresent = outputRefs.length > 0 &&
464
+ outputRefs.every((outputRef) => outputHashes[outputRef] !== null);
465
+ const upstreamTrusted = spec.upstreamUnitIds.every((unitId) => {
466
+ if (spec.unitKind === "runtime_validation" &&
467
+ isPresenceInput({
468
+ validationUnitId: spec.unitId,
469
+ upstreamUnitId: unitId,
470
+ })) {
471
+ return (artifactRefsByUnitId.get(unitId) ?? []).length > 0;
472
+ }
473
+ return trustedUnitIds.has(unitId);
474
+ });
475
+ const status = manifestStatus(params.reconstructRunManifest, spec.unitId) ??
476
+ (outputPresent
477
+ ? "completed"
478
+ : upstreamTrusted
479
+ ? "missing"
480
+ : "not_reached");
481
+ const trust = trustForReconstructUnit({
482
+ spec,
483
+ status,
484
+ outputRefs,
485
+ outputHashes,
486
+ upstreamTrusted,
487
+ trustedUnitIds,
488
+ validationStatusesByUnitId,
489
+ });
490
+ const manifestStep = manifestStepByUnitId.get(spec.unitId);
491
+ const entry = {
492
+ unitId: spec.unitId,
493
+ unitKind: spec.unitKind,
494
+ owner: spec.owner,
495
+ producedArtifactRefs: outputRefs,
496
+ consumedArtifactRefs: normalizeLedgerRefs([
497
+ ...spec.upstreamUnitIds.flatMap((unitId) => artifactRefsByUnitId.get(unitId) ?? []),
498
+ ]),
499
+ outputRefs,
500
+ outputHashes,
501
+ status,
502
+ trustStatus: trust.trustStatus,
503
+ trustReason: trust.trustReason,
504
+ attemptCount: manifestStep ? 1 : 0,
505
+ lastFailureMessage: null,
506
+ upstreamUnitIds: spec.upstreamUnitIds,
507
+ downstreamUnitIds: downstreamUnitIds.get(spec.unitId) ?? [],
508
+ };
509
+ nextUnits.push(entry);
510
+ if (isTrustedLedgerUnit(entry))
511
+ nextTrustedUnitIds.add(spec.unitId);
512
+ }
513
+ const stable = nextTrustedUnitIds.size === trustedUnitIds.size &&
514
+ [...nextTrustedUnitIds].every((unitId) => trustedUnitIds.has(unitId));
515
+ trustedUnitIds = nextTrustedUnitIds;
516
+ units = nextUnits;
517
+ if (stable)
518
+ break;
329
519
  }
330
520
  return {
331
521
  schemaVersion: PIPELINE_EXECUTION_LEDGER_SCHEMA_VERSION,