project-tiny-context-harness 0.8.16 → 0.11.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 (535) hide show
  1. package/README.md +119 -41
  2. package/assets/README.md +184 -55
  3. package/assets/README.zh-CN.md +114 -40
  4. package/assets/agents/AGENTS_CORE.md +2 -2
  5. package/assets/context_templates/context.toml +6 -1
  6. package/assets/context_templates/screen-contract.md +16 -0
  7. package/assets/runtime/windows-job-supervisor/formal_process_supervisor_native_helpers.cs +301 -0
  8. package/assets/runtime/windows-job-supervisor/formal_process_supervisor_native_run.cs +197 -0
  9. package/assets/runtime/windows-job-supervisor/formal_process_supervisor_native_types.cs +215 -0
  10. package/assets/runtime/windows-job-supervisor/windows_job_process_supervisor.ps1 +117 -0
  11. package/assets/skills/context_development_engineer/SKILL.md +16 -30
  12. package/assets/skills/context_development_engineer/references/engineering-design-reasoning.md +93 -0
  13. package/assets/skills/context_surface_contract/SKILL.md +13 -2
  14. package/assets/skills/context_uiux_design/SKILL.md +7 -3
  15. package/assets/skills/context_uiux_design/references/task-uiux-analysis.md +82 -0
  16. package/assets/skills/design-resource-authoring/SKILL.md +18 -9
  17. package/assets/skills/design-resource-authoring/references/authority-delta-assessment.md +52 -0
  18. package/assets/skills/design-resource-authoring/references/downstream-handoff.md +22 -6
  19. package/assets/skills/design-resource-authoring/references/formal-selected-web-app-handoff.md +26 -8
  20. package/assets/skills/design-resource-authoring/references/implementation-feasibility.md +111 -0
  21. package/assets/skills/design-resource-authoring/references/open-design-provider.md +45 -7
  22. package/assets/skills/design-resource-authoring/references/recovery-and-writeback.md +7 -1
  23. package/assets/skills/design-resource-authoring/references/resource-selection.md +115 -3
  24. package/assets/skills/design-system-authoring/SKILL.md +23 -17
  25. package/assets/skills/design-system-authoring/references/authority-adoption.md +19 -9
  26. package/assets/skills/design-system-authoring/references/open-design-design-system-provider.md +4 -0
  27. package/assets/skills/long-task-workflow/SKILL.md +6 -6
  28. package/assets/skills/long-task-workflow/references/authority-lifecycle.md +10 -4
  29. package/assets/skills/long-task-workflow/references/contract-authoring.md +5 -5
  30. package/assets/skills/long-task-workflow/references/evidence-design.md +14 -3
  31. package/assets/skills/long-task-workflow/references/source-authoring.md +11 -8
  32. package/assets/tools/context_rules.json +53 -0
  33. package/assets/tools/validate_context.py +302 -77
  34. package/dist/cli.js +2 -1
  35. package/dist/commands/context-create.d.ts +1 -0
  36. package/dist/commands/context-create.js +90 -0
  37. package/dist/commands/context-inspect.d.ts +1 -0
  38. package/dist/commands/context-inspect.js +98 -0
  39. package/dist/commands/context-move.d.ts +1 -0
  40. package/dist/commands/context-move.js +78 -0
  41. package/dist/commands/context-register.d.ts +1 -0
  42. package/dist/commands/context-register.js +110 -0
  43. package/dist/commands/context-transaction.d.ts +1 -0
  44. package/dist/commands/context-transaction.js +84 -0
  45. package/dist/commands/context.d.ts +1 -0
  46. package/dist/commands/context.js +36 -0
  47. package/dist/commands/design-authority-delta.d.ts +1 -0
  48. package/dist/commands/design-authority-delta.js +53 -0
  49. package/dist/commands/design-authority.d.ts +1 -0
  50. package/dist/commands/design-authority.js +104 -0
  51. package/dist/commands/design-resource.js +17 -3
  52. package/dist/commands/doctor.d.ts +1 -1
  53. package/dist/commands/doctor.js +61 -3
  54. package/dist/commands/index.js +19 -2
  55. package/dist/commands/long-task-authoring.js +20 -2
  56. package/dist/commands/long-task-workdir.d.ts +2 -0
  57. package/dist/commands/long-task-workdir.js +23 -0
  58. package/dist/commands/long-task.js +75 -6
  59. package/dist/commands/route.d.ts +15 -0
  60. package/dist/commands/route.js +142 -0
  61. package/dist/index.d.ts +3 -13
  62. package/dist/index.js +3 -12
  63. package/dist/lib/cli-exit.d.ts +14 -0
  64. package/dist/lib/cli-exit.js +19 -0
  65. package/dist/lib/context-catalog/catalog-default-footprint.d.ts +3 -0
  66. package/dist/lib/context-catalog/catalog-default-footprint.js +53 -0
  67. package/dist/lib/context-catalog/catalog-diagnostics.d.ts +9 -0
  68. package/dist/lib/context-catalog/catalog-diagnostics.js +34 -0
  69. package/dist/lib/context-catalog/catalog-discovery.d.ts +7 -0
  70. package/dist/lib/context-catalog/catalog-discovery.js +81 -0
  71. package/dist/lib/context-catalog/catalog-load.d.ts +8 -0
  72. package/dist/lib/context-catalog/catalog-load.js +187 -0
  73. package/dist/lib/context-catalog/catalog-path-validation.d.ts +7 -0
  74. package/dist/lib/context-catalog/catalog-path-validation.js +62 -0
  75. package/dist/lib/context-catalog/catalog-paths.d.ts +11 -0
  76. package/dist/lib/context-catalog/catalog-paths.js +41 -0
  77. package/dist/lib/context-catalog/catalog-portable-contract.d.ts +15 -0
  78. package/dist/lib/context-catalog/catalog-portable-contract.js +68 -0
  79. package/dist/lib/context-catalog/catalog-staged-path-safety.d.ts +1 -0
  80. package/dist/lib/context-catalog/catalog-staged-path-safety.js +36 -0
  81. package/dist/lib/context-catalog/catalog-types.d.ts +40 -0
  82. package/dist/lib/context-catalog/catalog-types.js +1 -0
  83. package/dist/lib/context-catalog/catalog-validation.d.ts +9 -0
  84. package/dist/lib/context-catalog/catalog-validation.js +148 -0
  85. package/dist/lib/context-create/context-create-path.d.ts +2 -0
  86. package/dist/lib/context-create/context-create-path.js +30 -0
  87. package/dist/lib/context-create/context-create-template.d.ts +2 -0
  88. package/dist/lib/context-create/context-create-template.js +95 -0
  89. package/dist/lib/context-create/context-create-types.d.ts +28 -0
  90. package/dist/lib/context-create/context-create-types.js +1 -0
  91. package/dist/lib/context-create/context-create-write.d.ts +1 -0
  92. package/dist/lib/context-create/context-create-write.js +85 -0
  93. package/dist/lib/context-create/context-create.d.ts +2 -0
  94. package/dist/lib/context-create/context-create.js +84 -0
  95. package/dist/lib/context-default-footprint.d.ts +2 -3
  96. package/dist/lib/context-default-footprint.js +49 -57
  97. package/dist/lib/context-doctor/context-doctor-types.d.ts +16 -0
  98. package/dist/lib/context-doctor/context-doctor-types.js +15 -0
  99. package/dist/lib/context-doctor/context-doctor.d.ts +2 -0
  100. package/dist/lib/context-doctor/context-doctor.js +130 -0
  101. package/dist/lib/context-graph-snapshot.d.ts +5 -0
  102. package/dist/lib/context-graph-snapshot.js +46 -25
  103. package/dist/lib/context-inspect/context-inspect-projection.d.ts +9 -0
  104. package/dist/lib/context-inspect/context-inspect-projection.js +49 -0
  105. package/dist/lib/context-inspect/context-inspect-render.d.ts +2 -0
  106. package/dist/lib/context-inspect/context-inspect-render.js +29 -0
  107. package/dist/lib/context-inspect/context-inspect-types.d.ts +43 -0
  108. package/dist/lib/context-inspect/context-inspect-types.js +1 -0
  109. package/dist/lib/context-inspect/context-inspect.d.ts +2 -0
  110. package/dist/lib/context-inspect/context-inspect.js +104 -0
  111. package/dist/lib/context-manifest-schema.d.ts +1 -1
  112. package/dist/lib/context-manifest-schema.js +4 -20
  113. package/dist/lib/context-markdown/context-markdown-analysis.d.ts +15 -0
  114. package/dist/lib/context-markdown/context-markdown-analysis.js +245 -0
  115. package/dist/lib/context-markdown/context-markdown-extract.d.ts +7 -0
  116. package/dist/lib/context-markdown/context-markdown-extract.js +114 -0
  117. package/dist/lib/context-markdown/context-markdown-types.d.ts +57 -0
  118. package/dist/lib/context-markdown/context-markdown-types.js +1 -0
  119. package/dist/lib/context-move/context-move-input.d.ts +8 -0
  120. package/dist/lib/context-move/context-move-input.js +17 -0
  121. package/dist/lib/context-move/context-move-literal-scan.d.ts +20 -0
  122. package/dist/lib/context-move/context-move-literal-scan.js +213 -0
  123. package/dist/lib/context-move/context-move-live-validation.d.ts +3 -0
  124. package/dist/lib/context-move/context-move-live-validation.js +56 -0
  125. package/dist/lib/context-move/context-move-markdown-plan.d.ts +22 -0
  126. package/dist/lib/context-move/context-move-markdown-plan.js +39 -0
  127. package/dist/lib/context-move/context-move-projection.d.ts +3 -0
  128. package/dist/lib/context-move/context-move-projection.js +11 -0
  129. package/dist/lib/context-move/context-move-reference-validation.d.ts +11 -0
  130. package/dist/lib/context-move/context-move-reference-validation.js +64 -0
  131. package/dist/lib/context-move/context-move-render.d.ts +2 -0
  132. package/dist/lib/context-move/context-move-render.js +24 -0
  133. package/dist/lib/context-move/context-move-support.d.ts +10 -0
  134. package/dist/lib/context-move/context-move-support.js +88 -0
  135. package/dist/lib/context-move/context-move-transaction-plan.d.ts +24 -0
  136. package/dist/lib/context-move/context-move-transaction-plan.js +108 -0
  137. package/dist/lib/context-move/context-move-types.d.ts +74 -0
  138. package/dist/lib/context-move/context-move-types.js +1 -0
  139. package/dist/lib/context-move/context-move.d.ts +8 -0
  140. package/dist/lib/context-move/context-move.js +180 -0
  141. package/dist/lib/context-mutation/manifest-lossless-patch.d.ts +28 -0
  142. package/dist/lib/context-mutation/manifest-lossless-patch.js +208 -0
  143. package/dist/lib/context-mutation/markdown-link-patch.d.ts +34 -0
  144. package/dist/lib/context-mutation/markdown-link-patch.js +143 -0
  145. package/dist/lib/context-mutation/markdown-link-spans.d.ts +10 -0
  146. package/dist/lib/context-mutation/markdown-link-spans.js +179 -0
  147. package/dist/lib/context-mutation/mutation-cas.d.ts +13 -0
  148. package/dist/lib/context-mutation/mutation-cas.js +365 -0
  149. package/dist/lib/context-mutation/mutation-command-support.d.ts +12 -0
  150. package/dist/lib/context-mutation/mutation-command-support.js +57 -0
  151. package/dist/lib/context-mutation/mutation-commit.d.ts +12 -0
  152. package/dist/lib/context-mutation/mutation-commit.js +89 -0
  153. package/dist/lib/context-mutation/mutation-directories.d.ts +5 -0
  154. package/dist/lib/context-mutation/mutation-directories.js +56 -0
  155. package/dist/lib/context-mutation/mutation-file-state.d.ts +14 -0
  156. package/dist/lib/context-mutation/mutation-file-state.js +137 -0
  157. package/dist/lib/context-mutation/mutation-journal-file-validation.d.ts +1 -0
  158. package/dist/lib/context-mutation/mutation-journal-file-validation.js +106 -0
  159. package/dist/lib/context-mutation/mutation-journal-io.d.ts +5 -0
  160. package/dist/lib/context-mutation/mutation-journal-io.js +55 -0
  161. package/dist/lib/context-mutation/mutation-journal-storage.d.ts +18 -0
  162. package/dist/lib/context-mutation/mutation-journal-storage.js +283 -0
  163. package/dist/lib/context-mutation/mutation-journal-validation-support.d.ts +16 -0
  164. package/dist/lib/context-mutation/mutation-journal-validation-support.js +140 -0
  165. package/dist/lib/context-mutation/mutation-journal-validation.d.ts +3 -0
  166. package/dist/lib/context-mutation/mutation-journal-validation.js +177 -0
  167. package/dist/lib/context-mutation/mutation-journal.d.ts +8 -0
  168. package/dist/lib/context-mutation/mutation-journal.js +111 -0
  169. package/dist/lib/context-mutation/mutation-live-validation.d.ts +3 -0
  170. package/dist/lib/context-mutation/mutation-live-validation.js +51 -0
  171. package/dist/lib/context-mutation/mutation-long-task-guard.d.ts +6 -0
  172. package/dist/lib/context-mutation/mutation-long-task-guard.js +57 -0
  173. package/dist/lib/context-mutation/mutation-recovery.d.ts +4 -0
  174. package/dist/lib/context-mutation/mutation-recovery.js +189 -0
  175. package/dist/lib/context-mutation/mutation-staged-fs.d.ts +5 -0
  176. package/dist/lib/context-mutation/mutation-staged-fs.js +56 -0
  177. package/dist/lib/context-mutation/mutation-types.d.ts +103 -0
  178. package/dist/lib/context-mutation/mutation-types.js +1 -0
  179. package/dist/lib/context-register/context-register-input.d.ts +11 -0
  180. package/dist/lib/context-register/context-register-input.js +43 -0
  181. package/dist/lib/context-register/context-register-render.d.ts +2 -0
  182. package/dist/lib/context-register/context-register-render.js +21 -0
  183. package/dist/lib/context-register/context-register-support.d.ts +6 -0
  184. package/dist/lib/context-register/context-register-support.js +46 -0
  185. package/dist/lib/context-register/context-register-types.d.ts +46 -0
  186. package/dist/lib/context-register/context-register-types.js +1 -0
  187. package/dist/lib/context-register/context-register.d.ts +8 -0
  188. package/dist/lib/context-register/context-register.js +155 -0
  189. package/dist/lib/context-router/context-route-budget.d.ts +15 -0
  190. package/dist/lib/context-router/context-route-budget.js +14 -0
  191. package/dist/lib/context-router/context-route-candidates.d.ts +15 -0
  192. package/dist/lib/context-router/context-route-candidates.js +112 -0
  193. package/dist/lib/context-router/context-route-order.d.ts +6 -0
  194. package/dist/lib/context-router/context-route-order.js +53 -0
  195. package/dist/lib/context-router/context-route-paths.d.ts +16 -0
  196. package/dist/lib/context-router/context-route-paths.js +109 -0
  197. package/dist/lib/context-router/context-route-render.d.ts +2 -0
  198. package/dist/lib/context-router/context-route-render.js +32 -0
  199. package/dist/lib/context-router/context-route-scan.d.ts +18 -0
  200. package/dist/lib/context-router/context-route-scan.js +156 -0
  201. package/dist/lib/context-router/context-route-selection.d.ts +16 -0
  202. package/dist/lib/context-router/context-route-selection.js +72 -0
  203. package/dist/lib/context-router/context-route-terms.d.ts +13 -0
  204. package/dist/lib/context-router/context-route-terms.js +202 -0
  205. package/dist/lib/context-router/context-route-types.d.ts +101 -0
  206. package/dist/lib/context-router/context-route-types.js +1 -0
  207. package/dist/lib/context-router/context-route.d.ts +2 -0
  208. package/dist/lib/context-router/context-route.js +127 -0
  209. package/dist/lib/context-units-migration.d.ts +13 -0
  210. package/dist/lib/context-units-migration.js +217 -0
  211. package/dist/lib/design-authority-binding.d.ts +7 -0
  212. package/dist/lib/design-authority-binding.js +96 -0
  213. package/dist/lib/design-authority-closure.d.ts +3 -0
  214. package/dist/lib/design-authority-closure.js +201 -0
  215. package/dist/lib/design-authority-delta-codec-primitives.d.ts +10 -0
  216. package/dist/lib/design-authority-delta-codec-primitives.js +58 -0
  217. package/dist/lib/design-authority-delta-codec.d.ts +2 -0
  218. package/dist/lib/design-authority-delta-codec.js +193 -0
  219. package/dist/lib/design-authority-delta-types.d.ts +65 -0
  220. package/dist/lib/design-authority-delta-types.js +6 -0
  221. package/dist/lib/design-authority-delta-validation.d.ts +2 -0
  222. package/dist/lib/design-authority-delta-validation.js +16 -0
  223. package/dist/lib/design-authority-digest.d.ts +8 -0
  224. package/dist/lib/design-authority-digest.js +36 -0
  225. package/dist/lib/design-authority-files.d.ts +9 -0
  226. package/dist/lib/design-authority-files.js +62 -0
  227. package/dist/lib/design-authority-format.d.ts +2 -0
  228. package/dist/lib/design-authority-format.js +93 -0
  229. package/dist/lib/design-authority-links.d.ts +10 -0
  230. package/dist/lib/design-authority-links.js +137 -0
  231. package/dist/lib/design-authority-manifest.d.ts +4 -0
  232. package/dist/lib/design-authority-manifest.js +144 -0
  233. package/dist/lib/design-authority-tokens.d.ts +9 -0
  234. package/dist/lib/design-authority-tokens.js +45 -0
  235. package/dist/lib/design-authority-types.d.ts +80 -0
  236. package/dist/lib/design-authority-types.js +23 -0
  237. package/dist/lib/design-md-tool-adapter.d.ts +9 -0
  238. package/dist/lib/design-md-tool-adapter.js +152 -0
  239. package/dist/lib/design-md-tool-normalization.d.ts +7 -0
  240. package/dist/lib/design-md-tool-normalization.js +78 -0
  241. package/dist/lib/design-md-tool-types.d.ts +99 -0
  242. package/dist/lib/design-md-tool-types.js +8 -0
  243. package/dist/lib/design-resource-handoff-bundle.js +5 -0
  244. package/dist/lib/design-resource-handoff-input-types.d.ts +1 -1
  245. package/dist/lib/design-resource-handoff-manifest-projection.js +4 -0
  246. package/dist/lib/design-resource-handoff-set-integrity.js +1 -0
  247. package/dist/lib/design-resource-handoff-shape.js +18 -2
  248. package/dist/lib/design-resource-handoff-types.d.ts +8 -0
  249. package/dist/lib/design-resource-handoff-validation.js +24 -0
  250. package/dist/lib/design-resource-implementation-feasibility-model.d.ts +35 -0
  251. package/dist/lib/design-resource-implementation-feasibility-model.js +62 -0
  252. package/dist/lib/design-resource-implementation-feasibility-shape-sections.d.ts +43 -0
  253. package/dist/lib/design-resource-implementation-feasibility-shape-sections.js +142 -0
  254. package/dist/lib/design-resource-implementation-feasibility-shape.d.ts +4 -0
  255. package/dist/lib/design-resource-implementation-feasibility-shape.js +154 -0
  256. package/dist/lib/design-resource-implementation-feasibility-source-decision-projection.d.ts +24 -0
  257. package/dist/lib/design-resource-implementation-feasibility-source-decision-projection.js +106 -0
  258. package/dist/lib/design-resource-implementation-feasibility-source-decision.d.ts +21 -0
  259. package/dist/lib/design-resource-implementation-feasibility-source-decision.js +75 -0
  260. package/dist/lib/design-resource-implementation-feasibility-types.d.ts +135 -0
  261. package/dist/lib/design-resource-implementation-feasibility-types.js +37 -0
  262. package/dist/lib/design-resource-implementation-feasibility-validation-cells.d.ts +5 -0
  263. package/dist/lib/design-resource-implementation-feasibility-validation-cells.js +125 -0
  264. package/dist/lib/design-resource-implementation-feasibility-validation-document.d.ts +4 -0
  265. package/dist/lib/design-resource-implementation-feasibility-validation-document.js +167 -0
  266. package/dist/lib/design-resource-implementation-feasibility-validation-facts.d.ts +3 -0
  267. package/dist/lib/design-resource-implementation-feasibility-validation-facts.js +76 -0
  268. package/dist/lib/design-resource-implementation-feasibility-validation-realizations.d.ts +8 -0
  269. package/dist/lib/design-resource-implementation-feasibility-validation-realizations.js +76 -0
  270. package/dist/lib/design-resource-implementation-feasibility-validation-support.d.ts +10 -0
  271. package/dist/lib/design-resource-implementation-feasibility-validation-support.js +75 -0
  272. package/dist/lib/design-resource-implementation-feasibility-validation.d.ts +3 -0
  273. package/dist/lib/design-resource-implementation-feasibility-validation.js +138 -0
  274. package/dist/lib/design-resource-recovery-current.js +22 -0
  275. package/dist/lib/design-resource-recovery-shape.js +64 -7
  276. package/dist/lib/design-resource-recovery-types.d.ts +4 -1
  277. package/dist/lib/design-resource-symbolic-fact-shape.js +9 -1
  278. package/dist/lib/design-resource-symbolic-fact-types.d.ts +8 -0
  279. package/dist/lib/design-resource-symbolic-fact-validation.js +25 -0
  280. package/dist/lib/doctor.d.ts +2 -1
  281. package/dist/lib/doctor.js +29 -1
  282. package/dist/lib/fs.js +1 -1
  283. package/dist/lib/long-task-acceptance-reachability-claims.d.ts +2 -0
  284. package/dist/lib/long-task-acceptance-reachability-claims.js +279 -0
  285. package/dist/lib/long-task-acceptance-reachability-design.d.ts +2 -0
  286. package/dist/lib/long-task-acceptance-reachability-design.js +96 -0
  287. package/dist/lib/long-task-acceptance-reachability-external.d.ts +9 -0
  288. package/dist/lib/long-task-acceptance-reachability-external.js +123 -0
  289. package/dist/lib/long-task-acceptance-reachability-helpers.d.ts +64 -0
  290. package/dist/lib/long-task-acceptance-reachability-helpers.js +473 -0
  291. package/dist/lib/long-task-acceptance-reachability-semantic.d.ts +2 -0
  292. package/dist/lib/long-task-acceptance-reachability-semantic.js +122 -0
  293. package/dist/lib/long-task-acceptance-reachability-types.d.ts +91 -0
  294. package/dist/lib/long-task-acceptance-reachability-types.js +1 -0
  295. package/dist/lib/long-task-acceptance-reachability.d.ts +4 -0
  296. package/dist/lib/long-task-acceptance-reachability.js +115 -0
  297. package/dist/lib/long-task-activation-validation.d.ts +6 -0
  298. package/dist/lib/long-task-activation-validation.js +96 -23
  299. package/dist/lib/long-task-active-authority-lock-context.d.ts +4 -0
  300. package/dist/lib/long-task-active-authority-lock-context.js +29 -0
  301. package/dist/lib/long-task-applicability-identity.d.ts +25 -0
  302. package/dist/lib/long-task-applicability-identity.js +60 -0
  303. package/dist/lib/long-task-authoring-preflight-diagnostics.js +8 -0
  304. package/dist/lib/long-task-authoring-preflight-types.d.ts +2 -0
  305. package/dist/lib/long-task-authoring-preflight-types.js +9 -0
  306. package/dist/lib/long-task-authoring-preflight.js +18 -2
  307. package/dist/lib/long-task-authority-material-diff.js +4 -0
  308. package/dist/lib/long-task-authority-materials.js +19 -0
  309. package/dist/lib/long-task-authority-policy.d.ts +3 -0
  310. package/dist/lib/long-task-authority-policy.js +3 -0
  311. package/dist/lib/long-task-authority-revision-details.js +2 -1
  312. package/dist/lib/long-task-authority-types.d.ts +2 -0
  313. package/dist/lib/long-task-authority.js +2 -0
  314. package/dist/lib/long-task-check-runner.js +3 -296
  315. package/dist/lib/long-task-check-shape.js +6 -1
  316. package/dist/lib/long-task-claim-definitions.js +1 -3
  317. package/dist/lib/long-task-claim-semantic-proof-floor.d.ts +3 -0
  318. package/dist/lib/long-task-claim-semantic-proof-floor.js +78 -0
  319. package/dist/lib/long-task-claims.d.ts +0 -18
  320. package/dist/lib/long-task-claims.js +15 -14
  321. package/dist/lib/long-task-command-process.d.ts +9 -0
  322. package/dist/lib/long-task-command-process.js +178 -0
  323. package/dist/lib/long-task-compact-authoring.js +3 -0
  324. package/dist/lib/long-task-compact-projections.js +10 -0
  325. package/dist/lib/long-task-complete-delivery-evidence-types.d.ts +38 -0
  326. package/dist/lib/long-task-complete-delivery-evidence-types.js +1 -0
  327. package/dist/lib/long-task-completion-types.d.ts +109 -0
  328. package/dist/lib/long-task-completion-types.js +1 -0
  329. package/dist/lib/long-task-conformance-policy.d.ts +2 -1
  330. package/dist/lib/long-task-conformance-policy.js +11 -4
  331. package/dist/lib/long-task-context-authority-topology.js +6 -4
  332. package/dist/lib/long-task-contract-types.d.ts +52 -1
  333. package/dist/lib/long-task-counterfactual-sandbox.d.ts +7 -1
  334. package/dist/lib/long-task-counterfactual-sandbox.js +86 -6
  335. package/dist/lib/long-task-delivery-compiler-preflight.d.ts +24 -0
  336. package/dist/lib/long-task-delivery-compiler-preflight.js +32 -0
  337. package/dist/lib/long-task-delivery-compiler.d.ts +1 -0
  338. package/dist/lib/long-task-delivery-compiler.js +59 -44
  339. package/dist/lib/long-task-delivery-parser.d.ts +3 -0
  340. package/dist/lib/long-task-delivery-parser.js +26 -8
  341. package/dist/lib/long-task-delivery-types.d.ts +2 -0
  342. package/dist/lib/long-task-delivery-types.js +2 -0
  343. package/dist/lib/long-task-delivery-validation.d.ts +11 -3
  344. package/dist/lib/long-task-delivery-validation.js +23 -8
  345. package/dist/lib/long-task-design-feasibility-binding-owners.d.ts +6 -0
  346. package/dist/lib/long-task-design-feasibility-binding-owners.js +52 -0
  347. package/dist/lib/long-task-design-feasibility-binding.d.ts +14 -0
  348. package/dist/lib/long-task-design-feasibility-binding.js +114 -0
  349. package/dist/lib/long-task-design-feasibility-source-closure.d.ts +11 -0
  350. package/dist/lib/long-task-design-feasibility-source-closure.js +87 -0
  351. package/dist/lib/long-task-design-obligation.d.ts +50 -0
  352. package/dist/lib/long-task-design-obligation.js +99 -0
  353. package/dist/lib/long-task-design-resource-handoff.d.ts +5 -3
  354. package/dist/lib/long-task-design-resource-handoff.js +64 -4
  355. package/dist/lib/long-task-design-resource-method-binding.js +20 -2
  356. package/dist/lib/long-task-effective-external-takeover.d.ts +15 -0
  357. package/dist/lib/long-task-effective-external-takeover.js +109 -0
  358. package/dist/lib/long-task-effective-external-ui-takeover.d.ts +5 -0
  359. package/dist/lib/long-task-effective-external-ui-takeover.js +117 -0
  360. package/dist/lib/long-task-evidence-capability-codec.js +91 -0
  361. package/dist/lib/long-task-evidence-capability-runtime.js +62 -14
  362. package/dist/lib/long-task-evidence-capability-types.d.ts +3 -2
  363. package/dist/lib/long-task-evidence-v2.d.ts +6 -1
  364. package/dist/lib/long-task-evidence-v2.js +253 -170
  365. package/dist/lib/long-task-execution-observation.d.ts +7 -0
  366. package/dist/lib/long-task-execution-observation.js +21 -4
  367. package/dist/lib/long-task-expected-authority.d.ts +4 -0
  368. package/dist/lib/long-task-expected-authority.js +126 -0
  369. package/dist/lib/long-task-external-confirmation-artifacts.d.ts +9 -0
  370. package/dist/lib/long-task-external-confirmation-artifacts.js +138 -0
  371. package/dist/lib/long-task-external-confirmation-attestation.d.ts +20 -0
  372. package/dist/lib/long-task-external-confirmation-attestation.js +115 -0
  373. package/dist/lib/long-task-external-confirmation-challenge.d.ts +23 -0
  374. package/dist/lib/long-task-external-confirmation-challenge.js +164 -0
  375. package/dist/lib/long-task-external-confirmation-context.d.ts +14 -0
  376. package/dist/lib/long-task-external-confirmation-context.js +53 -0
  377. package/dist/lib/long-task-external-confirmation-evaluation.d.ts +11 -0
  378. package/dist/lib/long-task-external-confirmation-evaluation.js +454 -0
  379. package/dist/lib/long-task-external-confirmation-expected.d.ts +8 -0
  380. package/dist/lib/long-task-external-confirmation-expected.js +200 -0
  381. package/dist/lib/long-task-external-confirmation-identity.d.ts +10 -0
  382. package/dist/lib/long-task-external-confirmation-identity.js +77 -0
  383. package/dist/lib/long-task-external-confirmation-plan.d.ts +25 -0
  384. package/dist/lib/long-task-external-confirmation-plan.js +148 -0
  385. package/dist/lib/long-task-external-confirmation-preparation.d.ts +4 -0
  386. package/dist/lib/long-task-external-confirmation-preparation.js +100 -0
  387. package/dist/lib/long-task-external-confirmation-shape.d.ts +8 -0
  388. package/dist/lib/long-task-external-confirmation-shape.js +387 -0
  389. package/dist/lib/long-task-external-confirmation-state.d.ts +10 -0
  390. package/dist/lib/long-task-external-confirmation-state.js +109 -0
  391. package/dist/lib/long-task-external-confirmation-types.d.ts +195 -0
  392. package/dist/lib/long-task-external-confirmation-types.js +1 -0
  393. package/dist/lib/long-task-final-integrity.d.ts +2 -0
  394. package/dist/lib/long-task-final-integrity.js +21 -10
  395. package/dist/lib/long-task-final-v2.d.ts +7 -2
  396. package/dist/lib/long-task-final-v2.js +179 -55
  397. package/dist/lib/long-task-finalization-identity.d.ts +27 -0
  398. package/dist/lib/long-task-finalization-identity.js +58 -0
  399. package/dist/lib/long-task-finding-context.d.ts +1 -1
  400. package/dist/lib/long-task-finding-context.js +139 -13
  401. package/dist/lib/long-task-freshness.d.ts +27 -0
  402. package/dist/lib/long-task-freshness.js +129 -6
  403. package/dist/lib/long-task-git.js +3 -3
  404. package/dist/lib/long-task-material-input-closure.d.ts +3 -0
  405. package/dist/lib/long-task-material-input-closure.js +92 -0
  406. package/dist/lib/long-task-obligation-authority-resolution.d.ts +12 -0
  407. package/dist/lib/long-task-obligation-authority-resolution.js +57 -0
  408. package/dist/lib/long-task-obligation-semantic-identity.d.ts +16 -0
  409. package/dist/lib/long-task-obligation-semantic-identity.js +116 -0
  410. package/dist/lib/long-task-observation-authority.d.ts +11 -0
  411. package/dist/lib/long-task-observation-authority.js +137 -6
  412. package/dist/lib/long-task-process-table.d.ts +9 -0
  413. package/dist/lib/long-task-process-table.js +87 -0
  414. package/dist/lib/long-task-process-tree.d.ts +8 -0
  415. package/dist/lib/long-task-process-tree.js +108 -0
  416. package/dist/lib/long-task-proof-adequacy.d.ts +12 -0
  417. package/dist/lib/long-task-proof-adequacy.js +57 -0
  418. package/dist/lib/long-task-proof-capability-floor.d.ts +6 -0
  419. package/dist/lib/long-task-proof-capability-floor.js +137 -0
  420. package/dist/lib/long-task-protected-files.d.ts +1 -1
  421. package/dist/lib/long-task-protected-files.js +1 -1
  422. package/dist/lib/long-task-repair-frontier-checks.d.ts +8 -0
  423. package/dist/lib/long-task-repair-frontier-checks.js +93 -0
  424. package/dist/lib/long-task-repair-frontier-groups.d.ts +2 -0
  425. package/dist/lib/long-task-repair-frontier-groups.js +64 -0
  426. package/dist/lib/long-task-repair-frontier-utils.d.ts +6 -0
  427. package/dist/lib/long-task-repair-frontier-utils.js +27 -0
  428. package/dist/lib/long-task-repair-frontier.d.ts +14 -0
  429. package/dist/lib/long-task-repair-frontier.js +132 -0
  430. package/dist/lib/long-task-risk.d.ts +3 -2
  431. package/dist/lib/long-task-risk.js +73 -24
  432. package/dist/lib/long-task-root-shape.js +148 -8
  433. package/dist/lib/long-task-runner-freeze.d.ts +2 -1
  434. package/dist/lib/long-task-runner-freeze.js +23 -8
  435. package/dist/lib/long-task-runtime-types.d.ts +34 -40
  436. package/dist/lib/long-task-semantic-assurance-policy.js +2 -11
  437. package/dist/lib/long-task-semantic-contract-types.d.ts +2 -1
  438. package/dist/lib/long-task-semantic-drift-migration.js +48 -2
  439. package/dist/lib/long-task-semantic-fact-binding-types.d.ts +20 -0
  440. package/dist/lib/long-task-semantic-fact-closure.d.ts +5 -1
  441. package/dist/lib/long-task-semantic-fact-closure.js +33 -5
  442. package/dist/lib/long-task-semantic-fact-contract-closure.js +176 -1
  443. package/dist/lib/long-task-semantic-fact-contract-proofs.js +18 -1
  444. package/dist/lib/long-task-semantic-fact-input-closure.d.ts +16 -2
  445. package/dist/lib/long-task-semantic-fact-input-closure.js +138 -15
  446. package/dist/lib/long-task-semantic-fact-provenance-closure.js +1 -1
  447. package/dist/lib/long-task-semantic-fact-shape.d.ts +2 -1
  448. package/dist/lib/long-task-semantic-fact-shape.js +35 -1
  449. package/dist/lib/long-task-semantic-proof-adequacy.d.ts +2 -0
  450. package/dist/lib/long-task-semantic-proof-adequacy.js +19 -0
  451. package/dist/lib/long-task-semantic-proof-profile.d.ts +5 -0
  452. package/dist/lib/long-task-semantic-proof-profile.js +187 -0
  453. package/dist/lib/long-task-shape-primitives.d.ts +1 -1
  454. package/dist/lib/long-task-shape-primitives.js +5 -0
  455. package/dist/lib/long-task-source-anchors.d.ts +10 -0
  456. package/dist/lib/long-task-source-anchors.js +102 -0
  457. package/dist/lib/long-task-source-authority-types.d.ts +46 -0
  458. package/dist/lib/long-task-source-claim-validation.js +36 -0
  459. package/dist/lib/long-task-source-conservation-facts.d.ts +8 -0
  460. package/dist/lib/long-task-source-conservation-facts.js +57 -0
  461. package/dist/lib/long-task-source-conservation-types.d.ts +34 -0
  462. package/dist/lib/long-task-source-conservation-types.js +1 -0
  463. package/dist/lib/long-task-source-conservation.d.ts +7 -0
  464. package/dist/lib/long-task-source-conservation.js +110 -0
  465. package/dist/lib/long-task-source-fragments.d.ts +6 -0
  466. package/dist/lib/long-task-source-fragments.js +219 -0
  467. package/dist/lib/long-task-source-projection-resolution.d.ts +5 -0
  468. package/dist/lib/long-task-source-projection-resolution.js +57 -0
  469. package/dist/lib/long-task-source-projection-validation.d.ts +17 -0
  470. package/dist/lib/long-task-source-projection-validation.js +154 -0
  471. package/dist/lib/long-task-source-shape.js +14 -6
  472. package/dist/lib/long-task-source-supersession.d.ts +5 -0
  473. package/dist/lib/long-task-source-supersession.js +138 -0
  474. package/dist/lib/long-task-stage-policy.d.ts +7 -2
  475. package/dist/lib/long-task-stage-policy.js +67 -23
  476. package/dist/lib/long-task-state.d.ts +18 -4
  477. package/dist/lib/long-task-state.js +319 -33
  478. package/dist/lib/long-task-static-observation-freeze.js +4 -3
  479. package/dist/lib/long-task-status-projection.d.ts +3 -1
  480. package/dist/lib/long-task-status-projection.js +44 -13
  481. package/dist/lib/long-task-status-v2.d.ts +10 -6
  482. package/dist/lib/long-task-status-v2.js +70 -58
  483. package/dist/lib/long-task-target-policy.d.ts +8 -3
  484. package/dist/lib/long-task-target-policy.js +40 -9
  485. package/dist/lib/long-task-terminal-finalization.d.ts +12 -0
  486. package/dist/lib/long-task-terminal-finalization.js +190 -0
  487. package/dist/lib/long-task-ui-design-policy.js +15 -4
  488. package/dist/lib/long-task-ui-surface-policy.d.ts +2 -1
  489. package/dist/lib/long-task-ui-surface-policy.js +7 -4
  490. package/dist/lib/long-task-ui-surface-validation.d.ts +3 -1
  491. package/dist/lib/long-task-ui-surface-validation.js +2 -2
  492. package/dist/lib/long-task-verifier-counterfactuals.d.ts +11 -0
  493. package/dist/lib/long-task-verifier-counterfactuals.js +96 -0
  494. package/dist/lib/long-task-verifier-execution.d.ts +9 -0
  495. package/dist/lib/long-task-verifier-execution.js +67 -0
  496. package/dist/lib/long-task-verifier-identity.js +16 -5
  497. package/dist/lib/long-task-verifier-v2.js +52 -65
  498. package/dist/lib/long-task-windows-job-supervisor-helper.d.ts +1 -0
  499. package/dist/lib/long-task-windows-job-supervisor-helper.js +104 -0
  500. package/dist/lib/long-task-windows-job-supervisor-protocol.d.ts +28 -0
  501. package/dist/lib/long-task-windows-job-supervisor-protocol.js +124 -0
  502. package/dist/lib/long-task-windows-job-supervisor-result.d.ts +11 -0
  503. package/dist/lib/long-task-windows-job-supervisor-result.js +152 -0
  504. package/dist/lib/long-task-windows-job-supervisor.d.ts +2 -0
  505. package/dist/lib/long-task-windows-job-supervisor.js +126 -0
  506. package/dist/lib/long-task-workspace-scope.d.ts +1 -0
  507. package/dist/lib/long-task-workspace-scope.js +4 -1
  508. package/dist/lib/long-task-workspace.d.ts +1 -0
  509. package/dist/lib/long-task-workspace.js +10 -0
  510. package/dist/lib/migrations.js +43 -2
  511. package/dist/lib/repository-path-safety.d.ts +3 -0
  512. package/dist/lib/repository-path-safety.js +39 -3
  513. package/dist/lib/semantic-fact-input-shape.d.ts +7 -2
  514. package/dist/lib/semantic-fact-input-shape.js +25 -1
  515. package/dist/lib/semantic-fact-inventory-types.d.ts +8 -2
  516. package/dist/lib/semantic-fact-policy-census.d.ts +1 -1
  517. package/dist/lib/semantic-fact-policy-census.js +5 -2
  518. package/dist/lib/semantic-fact-policy.d.ts +1 -1
  519. package/dist/lib/semantic-fact-policy.js +2 -2
  520. package/dist/lib/semantic-fact-proof-shape.d.ts +1 -1
  521. package/dist/lib/semantic-fact-property-shape.d.ts +1 -1
  522. package/dist/lib/validators.d.ts +3 -0
  523. package/dist/lib/validators.js +45 -157
  524. package/dist/public-api-core.d.ts +12 -0
  525. package/dist/public-api-core.js +12 -0
  526. package/dist/public-api-long-task.d.ts +10 -0
  527. package/dist/public-api-long-task.js +10 -0
  528. package/dist/public-types.d.ts +6 -1
  529. package/dist/schemas/design-authority-delta-assessment-v1.schema.json +191 -0
  530. package/dist/schemas/long-task-delivery-v2/long-task-delivery-v2.schema.json +166 -2
  531. package/dist/schemas/long-task-external-confirmation-record-v1.schema.json +155 -0
  532. package/dist/schemas/long-task-external-confirmation-record-v2.schema.json +209 -0
  533. package/migrations/README.md +99 -0
  534. package/package.json +7 -5
  535. package/source-mappings.yaml +18 -0
@@ -0,0 +1,114 @@
1
+ import { DESIGN_RESOURCE_FEASIBILITY_DECISION_SCHEMA, deriveDesignResourceFeasibilityConditionScopeSha256, parseDesignResourceFeasibilityDecisionProjections, } from "./design-resource-implementation-feasibility-source-decision.js";
2
+ import { createV1ImplementationFeasibilityTargetModel, createV2ImplementationFeasibilityTargetModel, } from "./design-resource-implementation-feasibility-model.js";
3
+ import { matchingFeasibilityBindingKeys, validateFeasibilityBindingOwnerRoots, } from "./long-task-design-feasibility-binding-owners.js";
4
+ import { validateFeasibilityBlockers, validateSelectedPlannedOwnerClaims, validateTechnicalDecisionClaim, } from "./long-task-design-feasibility-source-closure.js";
5
+ import { invalid } from "./long-task-design-resource-method-binding.js";
6
+ export function validateLongTaskDesignFeasibilityBindings(contract, contractTarget, preflight, sourceItems, options = {}) {
7
+ const document = preflight.technical_feasibility_documents.find((item) => item.target_ref === contractTarget.target.key);
8
+ if (!document) {
9
+ if (!contractTarget.binding.component_binding_refs.length)
10
+ invalid("componentless_surface_requires_blocker_only_feasibility", contractTarget.target.key);
11
+ return {
12
+ attribution_mode: "legacy",
13
+ consumed_component_binding_refs: [],
14
+ };
15
+ }
16
+ const model = feasibilityTargetModel(preflight, contractTarget.target.key);
17
+ const decisions = compiledDecisionSources(document, sourceItems);
18
+ const outcome = contract.outcomes.find((item) => item.key === contractTarget.outcome_key);
19
+ const bindingsByKey = new Map(outcome.technical.bindings.map((binding) => [binding.key, binding]));
20
+ const componentBindings = contractTarget.binding.component_binding_refs.map((bindingRef) => {
21
+ const binding = bindingsByKey.get(bindingRef);
22
+ if (!binding)
23
+ invalid("feasibility_component_binding_unknown", `${contractTarget.target.key}:${bindingRef}`);
24
+ return binding;
25
+ });
26
+ const routeBinding = bindingsByKey.get(contractTarget.binding.route_binding_ref);
27
+ if (!routeBinding)
28
+ invalid("feasibility_route_binding_unknown", `${contractTarget.target.key}:${contractTarget.binding.route_binding_ref}`);
29
+ const hasCandidateCells = document.component_family_cells.some((cell) => cell.feasible_realizations.length > 0);
30
+ const allCellsBlockerOnly = document.component_family_cells.length > 0 &&
31
+ document.component_family_cells.every((cell) => cell.feasible_realizations.length === 0 && cell.blocker_refs.length > 0);
32
+ if (!componentBindings.length && hasCandidateCells)
33
+ invalid("feasibility_component_binding_required", contractTarget.target.key);
34
+ if (!componentBindings.length && !allCellsBlockerOnly)
35
+ invalid("componentless_surface_requires_blocker_only_feasibility", contractTarget.target.key);
36
+ validateFeasibilityBindingOwnerRoots(document, componentBindings, routeBinding);
37
+ const consumedComponentBindings = new Set();
38
+ for (const cell of document.component_family_cells) {
39
+ const blockerOnly = cell.feasible_realizations.length === 0 && cell.blocker_refs.length > 0;
40
+ if (blockerOnly)
41
+ continue;
42
+ const matching = cell.feasible_realizations
43
+ .map((realization) => ({
44
+ realization,
45
+ bindingKeys: matchingFeasibilityBindingKeys(realization, componentBindings),
46
+ }))
47
+ .filter((candidate) => candidate.bindingKeys.size > 0);
48
+ const required = cell.required_realization.realization_ref;
49
+ if (required !== null &&
50
+ (matching.length !== 1 || matching[0].realization.key !== required))
51
+ invalid("feasibility_required_realization_binding_mismatch", `${cell.key}:${required}:${matching.map((item) => item.realization.key).join(",")}`);
52
+ if (required === null && matching.length === 0)
53
+ invalid("feasibility_realization_binding_missing", cell.key);
54
+ if (required === null && matching.length > 1)
55
+ invalid("feasibility_realization_binding_ambiguous", `${cell.key}:${matching.map((item) => item.realization.key).join(",")}`);
56
+ const selected = matching.length === 1 ? matching[0] : null;
57
+ if (selected)
58
+ for (const bindingKey of selected.bindingKeys)
59
+ consumedComponentBindings.add(bindingKey);
60
+ if (required !== null)
61
+ validateTechnicalDecisionClaim(contract, contractTarget, decisions, cell.required_realization.technical_authority_source_refs, {
62
+ schema_version: DESIGN_RESOURCE_FEASIBILITY_DECISION_SCHEMA,
63
+ mode: "required_realization",
64
+ target_ref: cell.target_ref,
65
+ component_family_ref: cell.component_family_ref,
66
+ condition_scope_sha256: deriveDesignResourceFeasibilityConditionScopeSha256(document, model, cell.condition_profile_ref),
67
+ realization_ref: required,
68
+ }, `required_realization:${cell.key}`);
69
+ if (selected)
70
+ validateSelectedPlannedOwnerClaims(contract, contractTarget, document, model, decisions, selected.realization, componentBindings, cell);
71
+ }
72
+ if (!options.deferComponentBindingAttribution)
73
+ validateComponentBindingAttribution(contractTarget, consumedComponentBindings);
74
+ validateFeasibilityBlockers(contract, contractTarget, document, model, decisions);
75
+ return {
76
+ attribution_mode: "feasibility",
77
+ consumed_component_binding_refs: [...consumedComponentBindings].sort(),
78
+ };
79
+ }
80
+ function validateComponentBindingAttribution(contractTarget, consumedComponentBindings) {
81
+ for (const bindingRef of contractTarget.binding.component_binding_refs)
82
+ if (!consumedComponentBindings.has(bindingRef))
83
+ invalid("feasibility_component_binding_unattributed", `${contractTarget.target.key}:${bindingRef}`);
84
+ }
85
+ function feasibilityTargetModel(preflight, targetRef) {
86
+ if ("preflight_schema_version" in preflight) {
87
+ const target = preflight.handoff.targets.find((candidate) => candidate.key === targetRef);
88
+ return createV2ImplementationFeasibilityTargetModel(target, preflight.manifest);
89
+ }
90
+ const target = preflight.handoff.targets.find((candidate) => candidate.key === targetRef);
91
+ return createV1ImplementationFeasibilityTargetModel(preflight.handoff, target);
92
+ }
93
+ function compiledDecisionSources(document, sourceItems) {
94
+ const index = new Map();
95
+ for (const record of document.source_records) {
96
+ if (record.locator.kind !== "source_item")
97
+ continue;
98
+ const item = sourceItems.find((candidate) => candidate.source_path === record.path &&
99
+ candidate.key === record.locator.value);
100
+ if (!item)
101
+ invalid("feasibility_source_item_not_declared", `${record.key}:${record.path}#${record.locator.value}`);
102
+ if (item.text_sha256 !== record.locator.text_sha256)
103
+ invalid("feasibility_source_item_digest_mismatch", `${record.key}:${record.locator.text_sha256}:${item.text_sha256}`);
104
+ index.set(record.key, {
105
+ source_record_ref: record.key,
106
+ source_path: record.path,
107
+ source_item_key: item.key,
108
+ source_item_kind: item.kind,
109
+ text_sha256: item.text_sha256,
110
+ projections: parseDesignResourceFeasibilityDecisionProjections(record.path, item.key, item.normalized_text),
111
+ });
112
+ }
113
+ return index;
114
+ }
@@ -0,0 +1,11 @@
1
+ import type { DesignResourceImplementationFeasibilityTargetModel } from "./design-resource-implementation-feasibility-model.js";
2
+ import { type DesignResourceFeasibilityDecisionProjection, type DesignResourceFeasibilityDecisionSourceIndex } from "./design-resource-implementation-feasibility-source-decision.js";
3
+ import type { DesignResourceImplementationFeasibilityV1 } from "./design-resource-implementation-feasibility-types.js";
4
+ import type { DeliveryBindingV2, DeliveryContractV2 } from "./long-task-delivery-types.js";
5
+ import type { ContractDesignTarget } from "./long-task-design-resource-handoff.js";
6
+ type FeasibilityCell = DesignResourceImplementationFeasibilityV1["component_family_cells"][number];
7
+ type FeasibleRealization = FeasibilityCell["feasible_realizations"][number];
8
+ export declare function validateSelectedPlannedOwnerClaims(contract: DeliveryContractV2, contractTarget: ContractDesignTarget, document: DesignResourceImplementationFeasibilityV1, model: DesignResourceImplementationFeasibilityTargetModel, decisions: DesignResourceFeasibilityDecisionSourceIndex, realization: FeasibleRealization, bindings: DeliveryBindingV2[], cell: FeasibilityCell): void;
9
+ export declare function validateTechnicalDecisionClaim(contract: DeliveryContractV2, contractTarget: ContractDesignTarget, decisions: DesignResourceFeasibilityDecisionSourceIndex, sourceRefs: string[], expectation: DesignResourceFeasibilityDecisionProjection, label: string): void;
10
+ export declare function validateFeasibilityBlockers(contract: DeliveryContractV2, contractTarget: ContractDesignTarget, document: DesignResourceImplementationFeasibilityV1, model: DesignResourceImplementationFeasibilityTargetModel, decisions: DesignResourceFeasibilityDecisionSourceIndex): void;
11
+ export {};
@@ -0,0 +1,87 @@
1
+ import { DESIGN_RESOURCE_FEASIBILITY_DECISION_SCHEMA, deriveDesignResourceFeasibilityConditionScopeSha256, requireExactFeasibilityDecisionProjection, } from "./design-resource-implementation-feasibility-source-decision.js";
2
+ import { designFactObligationDescriptors, externalDesignObligationMatches, } from "./long-task-design-obligation.js";
3
+ import { invalid } from "./long-task-design-resource-method-binding.js";
4
+ export function validateSelectedPlannedOwnerClaims(contract, contractTarget, document, model, decisions, realization, bindings, cell) {
5
+ for (const owner of realization.owner_candidates) {
6
+ if (owner.kind !== "planned_logical_owner")
7
+ continue;
8
+ if (!bindings.some((binding) => binding.existence === "planned" &&
9
+ (binding.key === owner.locator || binding.target === owner.locator)))
10
+ continue;
11
+ validateTechnicalDecisionClaim(contract, contractTarget, decisions, owner.authorization_source_refs, {
12
+ schema_version: DESIGN_RESOURCE_FEASIBILITY_DECISION_SCHEMA,
13
+ mode: "planned_owner_authorization",
14
+ target_ref: cell.target_ref,
15
+ component_family_ref: cell.component_family_ref,
16
+ condition_scope_sha256: deriveDesignResourceFeasibilityConditionScopeSha256(document, model, cell.condition_profile_ref),
17
+ owner_locator: owner.locator,
18
+ }, `planned_owner:${cell.key}:${owner.locator}`);
19
+ }
20
+ }
21
+ export function validateTechnicalDecisionClaim(contract, contractTarget, decisions, sourceRefs, expectation, label) {
22
+ const source = requireDecisionSource(sourceRefs, decisions, expectation, label, ["technical_obligation"], true);
23
+ const claim = exactSourceClaim(contract, source, label);
24
+ const validOutcomeClaim = claim.disposition.type === "claim" &&
25
+ claim.disposition.refs.some((ref) => ref.startsWith(`${contractTarget.outcome_key}.`));
26
+ if (!validOutcomeClaim && claim.disposition.type !== "global_constraint")
27
+ invalid("feasibility_technical_decision_claim_disposition_invalid", `${label}:${claim.key}:${claim.disposition.type}`);
28
+ }
29
+ export function validateFeasibilityBlockers(contract, contractTarget, document, model, decisions) {
30
+ for (const blocker of document.blockers) {
31
+ const source = requireDecisionSource(blocker.source_record_refs, decisions, {
32
+ schema_version: DESIGN_RESOURCE_FEASIBILITY_DECISION_SCHEMA,
33
+ mode: "feasibility_blocker",
34
+ target_ref: blocker.target_ref,
35
+ component_family_ref: blocker.component_family_ref,
36
+ condition_scope_sha256: deriveDesignResourceFeasibilityConditionScopeSha256(document, model, blocker.condition_profile_ref),
37
+ blocker_ref: blocker.key,
38
+ substrate_observation_refs: blocker.substrate_observation_refs,
39
+ }, `blocker:${blocker.key}`, ["decision", "external_confirmation"], false);
40
+ const claim = exactSourceClaim(contract, source, `blocker:${blocker.key}`);
41
+ if (source.source_item_kind === "decision") {
42
+ if (claim.disposition.type !== "decision_required")
43
+ invalid("feasibility_blocker_decision_required", `${blocker.key}:${claim.key}:${claim.disposition.type}`);
44
+ continue;
45
+ }
46
+ if (claim.disposition.type !== "external_confirmation")
47
+ invalid("feasibility_blocker_external_confirmation_required", `${blocker.key}:${claim.key}:${claim.disposition.type}`);
48
+ const impactedTargetClaims = new Set(contractTarget.target.claim_refs.map((claimRef) => `${contractTarget.outcome_key}.${claimRef}`));
49
+ const exactTargetDesignObligations = designFactObligationDescriptors(contract).filter((descriptor) => descriptor.outcome_key === contractTarget.outcome_key &&
50
+ descriptor.target_key === contractTarget.target.key);
51
+ for (const confirmationRef of claim.disposition.refs) {
52
+ const confirmation = contract.global.acceptance.external_confirmations.find((candidate) => candidate.key === confirmationRef);
53
+ if (!confirmation)
54
+ invalid("feasibility_blocker_confirmation_unknown", `${blocker.key}:${confirmationRef}`);
55
+ if (!confirmation.blocks_target)
56
+ invalid("feasibility_blocker_confirmation_not_blocking", `${blocker.key}:${confirmationRef}`);
57
+ if (!confirmation.obligations?.some((obligation) => obligation.result_kind === "actual" &&
58
+ obligation.fact_ref !== null &&
59
+ obligation.proof_ref !== null))
60
+ invalid("feasibility_blocker_confirmation_exact_fact_required", `${blocker.key}:${confirmationRef}`);
61
+ }
62
+ if (!contract.global.acceptance.external_confirmations.some((confirmation) => confirmation.blocks_target &&
63
+ confirmation.impact_claims.some((claimRef) => impactedTargetClaims.has(claimRef)) &&
64
+ confirmation.obligations?.some((obligation) => exactTargetDesignObligations.some((descriptor) => externalDesignObligationMatches(obligation, descriptor)))))
65
+ invalid("feasibility_blocker_confirmation_target_claim_missing", `${blocker.key}:${contractTarget.target.key}`);
66
+ }
67
+ }
68
+ function requireDecisionSource(sourceRefs, decisions, expectation, label, allowedItemKinds, allReferencesMustBeSourceItems) {
69
+ try {
70
+ return requireExactFeasibilityDecisionProjection(sourceRefs, decisions, expectation, label, { allReferencesMustBeSourceItems, allowedItemKinds });
71
+ }
72
+ catch (error) {
73
+ invalid("feasibility_source_decision_invalid", `${label}:${message(error)}`);
74
+ }
75
+ }
76
+ function exactSourceClaim(contract, source, label) {
77
+ if (!contract.task.source_paths.includes(source.source_path))
78
+ invalid("feasibility_authority_source_not_declared", `${label}:${source.source_path}`);
79
+ const sourceRef = `${source.source_path}#${source.source_item_key}`;
80
+ const matching = contract.source_claims.filter((claim) => claim.source_ref === sourceRef);
81
+ if (matching.length !== 1)
82
+ invalid("feasibility_authority_claim_count", `${label}:${sourceRef}:${matching.length}`);
83
+ return matching[0];
84
+ }
85
+ function message(error) {
86
+ return error instanceof Error ? error.message : String(error);
87
+ }
@@ -0,0 +1,50 @@
1
+ import type { DeliveryCheckV2, DeliveryContractV2, DeliveryDesignFactExpectationV2, EvidenceCapabilityV2, ExternalConfirmationV2, ProofSurface } from "./long-task-delivery-types.js";
2
+ type DesignObligationContract = {
3
+ outcomes: ReadonlyArray<{
4
+ key: string;
5
+ product: Pick<DeliveryContractV2["outcomes"][number]["product"], "surface_bindings">;
6
+ acceptance: {
7
+ checks: ReadonlyArray<Pick<DeliveryCheckV2, "key" | "proof_surface" | "positive_assertions" | "negative_assertions">>;
8
+ };
9
+ }>;
10
+ };
11
+ export interface DesignFactObligationDescriptorV1 {
12
+ source_obligation_ref: string;
13
+ outcome_key: string;
14
+ check_key: string;
15
+ target_key: string;
16
+ assertion_ref: string;
17
+ local_claim_ref: string;
18
+ claim_ref: string;
19
+ applicability_ref: string;
20
+ fact_ref: string;
21
+ method: string;
22
+ proof_surface: ProofSurface;
23
+ evidence_capabilities: EvidenceCapabilityV2[];
24
+ expected_authority_ref: string;
25
+ expected: DeliveryDesignFactExpectationV2["expected"];
26
+ comparison: DeliveryDesignFactExpectationV2["comparison"];
27
+ observation_sensitivity: "plain" | "protected";
28
+ }
29
+ export declare function designGroundObligationRef(targetKey: string, method: string, conditionKey: string, factRef: string): string;
30
+ export declare function designFactObligationDescriptors(contract: DesignObligationContract): DesignFactObligationDescriptorV1[];
31
+ export declare function exactExternalDesignObligationRefs(contract: DesignObligationContract & {
32
+ global: {
33
+ acceptance: {
34
+ external_confirmations: readonly ExternalConfirmationV2[];
35
+ };
36
+ };
37
+ }, outcomeKey: string, checkKey: string): Set<string>;
38
+ export declare function externalDesignObligationMatches(obligation: NonNullable<ExternalConfirmationV2["obligations"]>[number], descriptor: DesignFactObligationDescriptorV1): boolean;
39
+ export declare function findDesignFactObligation(contract: DesignObligationContract, identity: {
40
+ outcome_key: string | null;
41
+ claim_ref: string;
42
+ applicability_ref: string;
43
+ fact_ref: string | null;
44
+ proof_ref: string | null;
45
+ method: string;
46
+ proof_surface: ProofSurface;
47
+ required_evidence_capabilities?: readonly EvidenceCapabilityV2[];
48
+ evidence_capabilities?: readonly EvidenceCapabilityV2[];
49
+ }): DesignFactObligationDescriptorV1 | null;
50
+ export {};
@@ -0,0 +1,99 @@
1
+ export function designGroundObligationRef(targetKey, method, conditionKey, factRef) {
2
+ return `design.${targetKey}.${method}.${conditionKey}.${factRef}`;
3
+ }
4
+ export function designFactObligationDescriptors(contract) {
5
+ const result = [];
6
+ for (const outcome of contract.outcomes)
7
+ for (const surface of outcome.product.surface_bindings ?? [])
8
+ for (const target of surface.design_targets) {
9
+ const check = outcome.acceptance.checks.find((candidate) => candidate.key === target.conformance_check_ref);
10
+ if (!check)
11
+ continue;
12
+ for (const binding of target.verification_method_bindings)
13
+ for (const artifact of binding.evidence_artifacts)
14
+ for (const expectation of artifact.fact_expectations) {
15
+ const descriptor = descriptorForExpectation(outcome.key, check, target.key, binding.assertion_ref, designGroundObligationRef(target.key, binding.method, artifact.condition_key, expectation.fact_ref), expectation.fact_ref, binding.method, expectation);
16
+ if (descriptor)
17
+ result.push(descriptor);
18
+ }
19
+ for (const binding of target.symbolic_method_bindings ?? [])
20
+ for (const expectation of binding.rule_expectations) {
21
+ const descriptor = descriptorForExpectation(outcome.key, check, target.key, binding.assertion_ref, expectation.obligation_ref, expectation.fact_rule_ref, binding.method, expectation);
22
+ if (descriptor)
23
+ result.push(descriptor);
24
+ }
25
+ }
26
+ return result;
27
+ }
28
+ export function exactExternalDesignObligationRefs(contract, outcomeKey, checkKey) {
29
+ const confirmations = contract.global.acceptance.external_confirmations;
30
+ return new Set(designFactObligationDescriptors(contract)
31
+ .filter((descriptor) => descriptor.outcome_key === outcomeKey &&
32
+ descriptor.check_key === checkKey &&
33
+ confirmations.some((confirmation) => confirmation.blocks_target &&
34
+ confirmation.obligations?.some((obligation) => externalDesignObligationMatches(obligation, descriptor))))
35
+ .map((descriptor) => descriptor.source_obligation_ref));
36
+ }
37
+ export function externalDesignObligationMatches(obligation, descriptor) {
38
+ return (obligation.claim_ref === descriptor.claim_ref &&
39
+ obligation.applicability_ref === descriptor.applicability_ref &&
40
+ obligation.fact_ref === descriptor.fact_ref &&
41
+ obligation.proof_ref === descriptor.source_obligation_ref &&
42
+ obligation.method === descriptor.method &&
43
+ obligation.proof_surface === descriptor.proof_surface &&
44
+ sameSet(obligation.evidence_capabilities, descriptor.evidence_capabilities) &&
45
+ obligation.expected_authority_ref === descriptor.expected_authority_ref &&
46
+ obligation.result_kind === "actual" &&
47
+ obligation.judgment_basis === undefined);
48
+ }
49
+ export function findDesignFactObligation(contract, identity) {
50
+ if (!identity.outcome_key || !identity.fact_ref || !identity.proof_ref)
51
+ return null;
52
+ const capabilities = identity.evidence_capabilities ??
53
+ identity.required_evidence_capabilities ??
54
+ [];
55
+ const candidates = designFactObligationDescriptors(contract).filter((descriptor) => descriptor.source_obligation_ref === identity.proof_ref &&
56
+ descriptor.outcome_key === identity.outcome_key &&
57
+ descriptor.claim_ref === identity.claim_ref &&
58
+ descriptor.applicability_ref === identity.applicability_ref &&
59
+ descriptor.fact_ref === identity.fact_ref &&
60
+ descriptor.method === identity.method &&
61
+ descriptor.proof_surface === identity.proof_surface &&
62
+ sameSet(descriptor.evidence_capabilities, capabilities));
63
+ return candidates.length === 1 ? candidates[0] : null;
64
+ }
65
+ function descriptorForExpectation(outcomeKey, check, targetKey, assertionRef, sourceObligationRef, factRef, method, expectation) {
66
+ const assertion = findAssertion(check, assertionRef);
67
+ if (!assertion ||
68
+ assertion.claims.length !== 1 ||
69
+ !assertion.applicability_ref)
70
+ return null;
71
+ const localClaimRef = assertion.claims[0];
72
+ return {
73
+ source_obligation_ref: sourceObligationRef,
74
+ outcome_key: outcomeKey,
75
+ check_key: check.key,
76
+ target_key: targetKey,
77
+ assertion_ref: assertionRef,
78
+ local_claim_ref: localClaimRef,
79
+ claim_ref: `${outcomeKey}.${localClaimRef}`,
80
+ applicability_ref: assertion.applicability_ref,
81
+ fact_ref: factRef,
82
+ method,
83
+ proof_surface: check.proof_surface,
84
+ evidence_capabilities: [...assertion.evidence_capabilities].sort(),
85
+ expected_authority_ref: `design-proof:${sourceObligationRef}`,
86
+ expected: expectation.expected,
87
+ comparison: expectation.comparison,
88
+ observation_sensitivity: expectation.observation_sensitivity,
89
+ };
90
+ }
91
+ function findAssertion(check, assertionRef) {
92
+ return ([...check.positive_assertions, ...check.negative_assertions].find((assertion) => assertion.key === assertionRef) ?? null);
93
+ }
94
+ function sameSet(left, right) {
95
+ return (left.length === right.length &&
96
+ new Set(left).size === left.length &&
97
+ new Set(right).size === right.length &&
98
+ left.every((value) => right.includes(value)));
99
+ }
@@ -1,6 +1,6 @@
1
1
  import type { DesignResourceHandoffPreflightV1, DesignResourceHandoffTargetV1 } from "./design-resource-handoff-types.js";
2
2
  import type { DesignResourceHandoffPreflightV2 } from "./design-resource-symbolic-fact-types.js";
3
- import type { DeliveryContractV2 } from "./long-task-delivery-types.js";
3
+ import type { CompiledSourceItemV2, DeliveryContractV2 } from "./long-task-delivery-types.js";
4
4
  export interface ContractDesignTarget {
5
5
  outcome_key: string;
6
6
  binding: DeliveryContractV2["outcomes"][number]["product"]["surface_bindings"][number];
@@ -14,5 +14,7 @@ export interface LongTaskDesignHandoffConsumer {
14
14
  consume(preflight: DesignResourceHandoffPreflightV1 | DesignResourceHandoffPreflightV2): void;
15
15
  finish(): void;
16
16
  }
17
- export declare function validateLongTaskDesignResourceHandoffs(contract: DeliveryContractV2, repository: string): Promise<void>;
18
- export declare function createLongTaskDesignHandoffConsumer(contract: DeliveryContractV2): LongTaskDesignHandoffConsumer;
17
+ export type LongTaskDesignHandoffPreflight = DesignResourceHandoffPreflightV1 | DesignResourceHandoffPreflightV2;
18
+ export declare function validateLongTaskDesignResourceHandoffs(contract: DeliveryContractV2, repository: string, sourceItems: CompiledSourceItemV2[]): Promise<LongTaskDesignHandoffPreflight[]>;
19
+ export declare function validateProjectDesignAuthoritySet(preflights: LongTaskDesignHandoffPreflight[]): void;
20
+ export declare function createLongTaskDesignHandoffConsumer(contract: DeliveryContractV2, sourceItems?: CompiledSourceItemV2[]): LongTaskDesignHandoffConsumer;
@@ -6,8 +6,10 @@ import { preflightParsedDesignResourceHandoffAny } from "./design-resource-hando
6
6
  import { assertSameSet, designSourceItemClaims, invalid, validateTargetIdentity, validateSymbolicTargetIdentity, validateSymbolicVerificationMethodBindings, validateVerificationMethodBindings, } from "./long-task-design-resource-method-binding.js";
7
7
  import { validateLongTaskDesignTargetCapabilities } from "./long-task-design-target-capabilities.js";
8
8
  import { assertProtectedRepositoryFile } from "./long-task-protected-files.js";
9
- export async function validateLongTaskDesignResourceHandoffs(contract, repository) {
10
- const consumer = createLongTaskDesignHandoffConsumer(contract);
9
+ import { validateLongTaskDesignFeasibilityBindings } from "./long-task-design-feasibility-binding.js";
10
+ export async function validateLongTaskDesignResourceHandoffs(contract, repository, sourceItems) {
11
+ const consumer = createLongTaskDesignHandoffConsumer(contract, sourceItems);
12
+ const preflights = [];
11
13
  for (const sourcePath of contract.task.source_paths) {
12
14
  if (!sourcePath.toLowerCase().endsWith(".md"))
13
15
  continue;
@@ -15,11 +17,28 @@ export async function validateLongTaskDesignResourceHandoffs(contract, repositor
15
17
  const content = await readFile(file, "utf8");
16
18
  if (!containsDesignResourceHandoff(content))
17
19
  continue;
18
- consumer.consume(await preflightParsedDesignResourceHandoffAny(repository, parseDesignResourceHandoffMarkdown(sourcePath, content)));
20
+ const preflight = await preflightParsedDesignResourceHandoffAny(repository, parseDesignResourceHandoffMarkdown(sourcePath, content));
21
+ preflights.push(preflight);
22
+ consumer.consume(preflight);
19
23
  }
24
+ validateProjectDesignAuthoritySet(preflights);
20
25
  consumer.finish();
26
+ return preflights;
21
27
  }
22
- export function createLongTaskDesignHandoffConsumer(contract) {
28
+ export function validateProjectDesignAuthoritySet(preflights) {
29
+ let expected = null;
30
+ for (const preflight of preflights) {
31
+ const identity = preflight.project_design_authority_resolution.identity;
32
+ if (!identity)
33
+ continue;
34
+ const canonical = JSON.stringify(identity);
35
+ if (expected === null)
36
+ expected = canonical;
37
+ else if (expected !== canonical)
38
+ invalid("project_design_authority_identity_conflict", `${JSON.parse(expected).closure_digest}:${identity.closure_digest}`);
39
+ }
40
+ }
41
+ export function createLongTaskDesignHandoffConsumer(contract, sourceItems = []) {
23
42
  const contractTargets = contract.outcomes.flatMap((outcome) => outcome.product.surface_bindings.flatMap((binding) => binding.design_targets.map((target) => ({
24
43
  outcome_key: outcome.key,
25
44
  binding,
@@ -29,6 +48,7 @@ export function createLongTaskDesignHandoffConsumer(contract) {
29
48
  const indexedTargetKeys = new Set();
30
49
  const consumed = new Set();
31
50
  const validationErrors = new Map();
51
+ const feasibilityBindingAttributionBySurface = new Map();
32
52
  let duplicate = null;
33
53
  const unbound = [];
34
54
  const handoffSetIntegrity = createDesignResourceHandoffSetIntegrity(invalid);
@@ -54,6 +74,14 @@ export function createLongTaskDesignHandoffConsumer(contract) {
54
74
  else
55
75
  resourcePaths.set(resource.path, identity);
56
76
  }
77
+ for (const input of preflight.handoff.technical_feasibility_inputs) {
78
+ const identity = JSON.stringify(input);
79
+ const previous = resourcePaths.get(input.path);
80
+ if (previous && previous !== identity)
81
+ recordCrossVersionIssue("handoff_set_feasibility_path_conflict", input.path);
82
+ else
83
+ resourcePaths.set(input.path, identity);
84
+ }
57
85
  if (!("preflight_schema_version" in preflight))
58
86
  handoffSetIntegrity.consume(preflight);
59
87
  for (const target of preflight.handoff.targets) {
@@ -75,6 +103,8 @@ export function createLongTaskDesignHandoffConsumer(contract) {
75
103
  target,
76
104
  };
77
105
  validateSymbolicTargetIdentity(contractTarget, indexedTarget);
106
+ const feasibility = validateLongTaskDesignFeasibilityBindings(contract, contractTarget, preflight, sourceItems, { deferComponentBindingAttribution: true });
107
+ recordFeasibilityBindingAttribution(feasibilityBindingAttributionBySurface, contractTarget, feasibility);
78
108
  validateSymbolicCoverageClaims(contract, contractTarget, indexedTarget);
79
109
  validateBlockerBindings(contract, contractTarget, indexedTarget);
80
110
  }
@@ -84,6 +114,8 @@ export function createLongTaskDesignHandoffConsumer(contract) {
84
114
  target: target,
85
115
  };
86
116
  validateTargetIdentity(contractTarget, indexedTarget);
117
+ const feasibility = validateLongTaskDesignFeasibilityBindings(contract, contractTarget, preflight, sourceItems, { deferComponentBindingAttribution: true });
118
+ recordFeasibilityBindingAttribution(feasibilityBindingAttributionBySurface, contractTarget, feasibility);
87
119
  validateLongTaskDesignTargetCapabilities(contract, contractTarget, indexedTarget);
88
120
  validateCoverageClaims(contract, contractTarget, indexedTarget);
89
121
  validateBlockerBindings(contract, contractTarget, indexedTarget);
@@ -106,11 +138,39 @@ export function createLongTaskDesignHandoffConsumer(contract) {
106
138
  if (validationErrors.has(contractTarget.target.key))
107
139
  throw validationErrors.get(contractTarget.target.key);
108
140
  }
141
+ validateSurfaceFeasibilityBindingAttribution(contractTargets, feasibilityBindingAttributionBySurface);
109
142
  if (unbound.length)
110
143
  invalid("handoff_target_unbound", unbound[0]);
111
144
  },
112
145
  };
113
146
  }
147
+ function recordFeasibilityBindingAttribution(bySurface, contractTarget, result) {
148
+ const key = surfaceBindingIdentity(contractTarget);
149
+ const attribution = bySurface.get(key) ?? {
150
+ modes: new Set(),
151
+ consumed_component_binding_refs: new Set(),
152
+ };
153
+ attribution.modes.add(result.attribution_mode);
154
+ for (const bindingRef of result.consumed_component_binding_refs)
155
+ attribution.consumed_component_binding_refs.add(bindingRef);
156
+ bySurface.set(key, attribution);
157
+ }
158
+ function validateSurfaceFeasibilityBindingAttribution(contractTargets, bySurface) {
159
+ const surfaces = new Map();
160
+ for (const contractTarget of contractTargets)
161
+ surfaces.set(surfaceBindingIdentity(contractTarget), contractTarget);
162
+ for (const [surfaceKey, contractTarget] of surfaces) {
163
+ const attribution = bySurface.get(surfaceKey);
164
+ if (!attribution?.modes.has("feasibility"))
165
+ continue;
166
+ for (const bindingRef of contractTarget.binding.component_binding_refs)
167
+ if (!attribution.consumed_component_binding_refs.has(bindingRef))
168
+ invalid("feasibility_component_binding_unattributed", `${contractTarget.binding.key}:${bindingRef}`);
169
+ }
170
+ }
171
+ function surfaceBindingIdentity(contractTarget) {
172
+ return `${contractTarget.outcome_key}\0${contractTarget.binding.key}`;
173
+ }
114
174
  function validateSymbolicCoverageClaims(contract, contractTarget, indexed) {
115
175
  const claims = new Map(contract.source_claims.map((item) => [item.key, item]));
116
176
  const rows = indexed.preflight.handoff.coverage.filter((row) => row.target_ref === contractTarget.target.key);
@@ -10,7 +10,10 @@ export function validateTargetIdentity(contractTarget, indexed) {
10
10
  assertSameSet(target.condition_keys, handoffTarget.condition_refs, "target_conditions_mismatch", target.key);
11
11
  const resourcePaths = handoffTarget.resource_refs.map((ref) => indexed.preflight.handoff.resources.find((item) => item.key === ref)
12
12
  .path);
13
- assertSameSet(target.source_paths, [indexed.preflight.handoff_path, ...resourcePaths], "target_source_paths_mismatch", target.key);
13
+ const feasibilityPaths = indexed.preflight.handoff.technical_feasibility_inputs
14
+ .filter((item) => item.target_ref === handoffTarget.key)
15
+ .map((item) => item.path);
16
+ assertSameSet(target.source_paths, [indexed.preflight.handoff_path, ...resourcePaths, ...feasibilityPaths], "target_source_paths_mismatch", target.key);
14
17
  }
15
18
  export function validateSymbolicTargetIdentity(contractTarget, indexed) {
16
19
  const { target } = contractTarget;
@@ -25,7 +28,10 @@ export function validateSymbolicTargetIdentity(contractTarget, indexed) {
25
28
  invalid("v2_ground_method_bindings_forbidden", target.key);
26
29
  const resourcePaths = handoffTarget.resource_refs.map((ref) => indexed.preflight.handoff.resources.find((item) => item.key === ref)
27
30
  .path);
28
- assertSameSet(target.source_paths, [indexed.preflight.handoff_path, ...resourcePaths], "target_source_paths_mismatch", target.key);
31
+ const feasibilityPaths = indexed.preflight.handoff.technical_feasibility_inputs
32
+ .filter((item) => item.target_ref === handoffTarget.key)
33
+ .map((item) => item.path);
34
+ assertSameSet(target.source_paths, [indexed.preflight.handoff_path, ...resourcePaths, ...feasibilityPaths], "target_source_paths_mismatch", target.key);
29
35
  }
30
36
  export function validateSymbolicVerificationMethodBindings(contract, contractTarget, indexed, claimsBySourceItem) {
31
37
  const target = contractTarget.target;
@@ -56,6 +62,8 @@ export function validateSymbolicVerificationMethodBindings(contract, contractTar
56
62
  const expected = preflight.manifest.semantic_proof_obligations
57
63
  .filter((obligation) => obligation.method === binding.method)
58
64
  .map((obligation) => symbolicRuleExpectation(preflight, obligation.key));
65
+ const sourceItems = new Set(expected.flatMap((expectation) => preflight.manifest.fact_rules.find((item) => item.key === expectation.fact_rule_ref)?.source_item_refs ?? []));
66
+ validateMethodAssertionClaimOwnership(target, assertion.claims, sourceItems, claimsBySourceItem, "v2_verification_method_claim_not_owned", `${target.key}:${binding.method}`);
59
67
  assertCanonicalRowsByKey(binding.rule_expectations, expected, "obligation_ref", "v2_rule_expectations_mismatch", `${target.key}:${binding.method}`);
60
68
  for (const expectation of expected) {
61
69
  const rule = preflight.manifest.fact_rules.find((item) => item.key === expectation.fact_rule_ref);
@@ -150,6 +158,7 @@ export function validateVerificationMethodBindings(target, check, facts, proofs,
150
158
  const sourceItems = new Set(facts
151
159
  .filter((fact) => proofs.some((proof) => proof.fact_ref === fact.key && proof.method === binding.method))
152
160
  .flatMap((fact) => fact.source_item_refs));
161
+ validateMethodAssertionClaimOwnership(target, assertion.claims, sourceItems, claimsBySourceItem, "verification_method_claim_not_owned", `${target.key}:${binding.method}`);
153
162
  for (const sourceItemRef of sourceItems)
154
163
  for (const claimRef of claimsBySourceItem.get(sourceItemRef) ?? [])
155
164
  if (!assertedClaims.has(claimRef))
@@ -179,6 +188,15 @@ function claimsAssertedByRootOrMethod(target, check, methodClaims) {
179
188
  const rootAssertion = check.positive_assertions.find((item) => item.key === target.conformance_assertion_ref);
180
189
  return new Set([...(rootAssertion?.claims ?? []), ...methodClaims]);
181
190
  }
191
+ function validateMethodAssertionClaimOwnership(target, methodClaims, sourceItems, claimsBySourceItem, code, detail) {
192
+ const allowedClaims = new Set(target.claim_refs);
193
+ for (const sourceItemRef of sourceItems)
194
+ for (const claimRef of claimsBySourceItem.get(sourceItemRef) ?? [])
195
+ allowedClaims.add(claimRef);
196
+ for (const claimRef of methodClaims)
197
+ if (!allowedClaims.has(claimRef))
198
+ invalid(code, `${detail}:${claimRef}`);
199
+ }
182
200
  function designFactExpectation(indexed, factRef, proofRef) {
183
201
  const handoff = indexed.preflight.handoff;
184
202
  const fact = handoff.facts.find((item) => item.key === factRef);
@@ -0,0 +1,15 @@
1
+ import type { ClaimApplicabilityV2, CompiledOutcomeV2, DeliveryContractV2, DeliveryOutcomeV2 } from "./long-task-delivery-types.js";
2
+ import type { AcceptanceReachabilityV1 } from "./long-task-acceptance-reachability-types.js";
3
+ export declare function effectiveBlockingExternalRows(reachability: AcceptanceReachabilityV1 | null | undefined): AcceptanceReachabilityV1["effective_external_routes"];
4
+ export declare function outcomePopulationSemanticProofFullyEffectivelyExternallyBlocked(outcome: DeliveryOutcomeV2, reachability: AcceptanceReachabilityV1 | null | undefined): boolean;
5
+ export declare function resultApplicabilityEffectivelyExternallyBlocked(reachability: AcceptanceReachabilityV1 | null | undefined, outcomeKey: string, applicabilityRef: string, targetRef: string): boolean;
6
+ export declare function resultApplicabilityProfiles(outcome: Pick<CompiledOutcomeV2, "applicability" | "product">, options?: {
7
+ target_ref?: string;
8
+ journey_role?: ClaimApplicabilityV2["journey_role"];
9
+ }): ClaimApplicabilityV2[];
10
+ export declare function outcomeResultScopeFullyEffectivelyExternallyBlocked(outcome: Pick<CompiledOutcomeV2, "key" | "applicability" | "product">, reachability: AcceptanceReachabilityV1 | null | undefined, options?: {
11
+ target_ref?: string;
12
+ journey_role?: ClaimApplicabilityV2["journey_role"];
13
+ }): boolean;
14
+ export declare function outcomeResultFullyEffectivelyExternallyBlocked(outcome: Pick<CompiledOutcomeV2, "key" | "applicability" | "product">, reachability: AcceptanceReachabilityV1 | null | undefined): boolean;
15
+ export declare function allOutcomeResultsFullyEffectivelyExternallyBlocked(contract: Pick<DeliveryContractV2, "outcomes">, reachability: AcceptanceReachabilityV1 | null | undefined): boolean;