project-tiny-context-harness 0.8.17 → 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 (488) hide show
  1. package/README.md +93 -30
  2. package/assets/README.md +158 -44
  3. package/assets/README.zh-CN.md +88 -29
  4. package/assets/agents/AGENTS_CORE.md +2 -2
  5. package/assets/context_templates/context.toml +6 -1
  6. package/assets/runtime/windows-job-supervisor/formal_process_supervisor_native_helpers.cs +301 -0
  7. package/assets/runtime/windows-job-supervisor/formal_process_supervisor_native_run.cs +197 -0
  8. package/assets/runtime/windows-job-supervisor/formal_process_supervisor_native_types.cs +215 -0
  9. package/assets/runtime/windows-job-supervisor/windows_job_process_supervisor.ps1 +117 -0
  10. package/assets/skills/design-resource-authoring/SKILL.md +6 -3
  11. package/assets/skills/design-resource-authoring/references/authority-delta-assessment.md +52 -0
  12. package/assets/skills/design-resource-authoring/references/downstream-handoff.md +5 -1
  13. package/assets/skills/design-system-authoring/SKILL.md +23 -17
  14. package/assets/skills/design-system-authoring/references/authority-adoption.md +19 -9
  15. package/assets/skills/design-system-authoring/references/open-design-design-system-provider.md +4 -0
  16. package/assets/skills/long-task-workflow/SKILL.md +6 -6
  17. package/assets/skills/long-task-workflow/references/authority-lifecycle.md +10 -4
  18. package/assets/skills/long-task-workflow/references/contract-authoring.md +5 -5
  19. package/assets/skills/long-task-workflow/references/evidence-design.md +14 -3
  20. package/assets/skills/long-task-workflow/references/source-authoring.md +11 -8
  21. package/assets/tools/context_rules.json +53 -0
  22. package/assets/tools/validate_context.py +302 -77
  23. package/dist/cli.js +2 -1
  24. package/dist/commands/context-create.d.ts +1 -0
  25. package/dist/commands/context-create.js +90 -0
  26. package/dist/commands/context-inspect.d.ts +1 -0
  27. package/dist/commands/context-inspect.js +98 -0
  28. package/dist/commands/context-move.d.ts +1 -0
  29. package/dist/commands/context-move.js +78 -0
  30. package/dist/commands/context-register.d.ts +1 -0
  31. package/dist/commands/context-register.js +110 -0
  32. package/dist/commands/context-transaction.d.ts +1 -0
  33. package/dist/commands/context-transaction.js +84 -0
  34. package/dist/commands/context.d.ts +1 -0
  35. package/dist/commands/context.js +36 -0
  36. package/dist/commands/design-authority-delta.d.ts +1 -0
  37. package/dist/commands/design-authority-delta.js +53 -0
  38. package/dist/commands/design-authority.d.ts +1 -0
  39. package/dist/commands/design-authority.js +104 -0
  40. package/dist/commands/design-resource.js +8 -1
  41. package/dist/commands/doctor.d.ts +1 -1
  42. package/dist/commands/doctor.js +61 -3
  43. package/dist/commands/index.js +19 -2
  44. package/dist/commands/long-task-authoring.js +20 -2
  45. package/dist/commands/long-task-workdir.d.ts +2 -0
  46. package/dist/commands/long-task-workdir.js +23 -0
  47. package/dist/commands/long-task.js +75 -6
  48. package/dist/commands/route.d.ts +15 -0
  49. package/dist/commands/route.js +142 -0
  50. package/dist/index.d.ts +3 -13
  51. package/dist/index.js +3 -12
  52. package/dist/lib/cli-exit.d.ts +14 -0
  53. package/dist/lib/cli-exit.js +19 -0
  54. package/dist/lib/context-catalog/catalog-default-footprint.d.ts +3 -0
  55. package/dist/lib/context-catalog/catalog-default-footprint.js +53 -0
  56. package/dist/lib/context-catalog/catalog-diagnostics.d.ts +9 -0
  57. package/dist/lib/context-catalog/catalog-diagnostics.js +34 -0
  58. package/dist/lib/context-catalog/catalog-discovery.d.ts +7 -0
  59. package/dist/lib/context-catalog/catalog-discovery.js +81 -0
  60. package/dist/lib/context-catalog/catalog-load.d.ts +8 -0
  61. package/dist/lib/context-catalog/catalog-load.js +187 -0
  62. package/dist/lib/context-catalog/catalog-path-validation.d.ts +7 -0
  63. package/dist/lib/context-catalog/catalog-path-validation.js +62 -0
  64. package/dist/lib/context-catalog/catalog-paths.d.ts +11 -0
  65. package/dist/lib/context-catalog/catalog-paths.js +41 -0
  66. package/dist/lib/context-catalog/catalog-portable-contract.d.ts +15 -0
  67. package/dist/lib/context-catalog/catalog-portable-contract.js +68 -0
  68. package/dist/lib/context-catalog/catalog-staged-path-safety.d.ts +1 -0
  69. package/dist/lib/context-catalog/catalog-staged-path-safety.js +36 -0
  70. package/dist/lib/context-catalog/catalog-types.d.ts +40 -0
  71. package/dist/lib/context-catalog/catalog-types.js +1 -0
  72. package/dist/lib/context-catalog/catalog-validation.d.ts +9 -0
  73. package/dist/lib/context-catalog/catalog-validation.js +148 -0
  74. package/dist/lib/context-create/context-create-path.d.ts +2 -0
  75. package/dist/lib/context-create/context-create-path.js +30 -0
  76. package/dist/lib/context-create/context-create-template.d.ts +2 -0
  77. package/dist/lib/context-create/context-create-template.js +95 -0
  78. package/dist/lib/context-create/context-create-types.d.ts +28 -0
  79. package/dist/lib/context-create/context-create-types.js +1 -0
  80. package/dist/lib/context-create/context-create-write.d.ts +1 -0
  81. package/dist/lib/context-create/context-create-write.js +85 -0
  82. package/dist/lib/context-create/context-create.d.ts +2 -0
  83. package/dist/lib/context-create/context-create.js +84 -0
  84. package/dist/lib/context-default-footprint.d.ts +2 -3
  85. package/dist/lib/context-default-footprint.js +49 -57
  86. package/dist/lib/context-doctor/context-doctor-types.d.ts +16 -0
  87. package/dist/lib/context-doctor/context-doctor-types.js +15 -0
  88. package/dist/lib/context-doctor/context-doctor.d.ts +2 -0
  89. package/dist/lib/context-doctor/context-doctor.js +130 -0
  90. package/dist/lib/context-graph-snapshot.d.ts +5 -0
  91. package/dist/lib/context-graph-snapshot.js +46 -25
  92. package/dist/lib/context-inspect/context-inspect-projection.d.ts +9 -0
  93. package/dist/lib/context-inspect/context-inspect-projection.js +49 -0
  94. package/dist/lib/context-inspect/context-inspect-render.d.ts +2 -0
  95. package/dist/lib/context-inspect/context-inspect-render.js +29 -0
  96. package/dist/lib/context-inspect/context-inspect-types.d.ts +43 -0
  97. package/dist/lib/context-inspect/context-inspect-types.js +1 -0
  98. package/dist/lib/context-inspect/context-inspect.d.ts +2 -0
  99. package/dist/lib/context-inspect/context-inspect.js +104 -0
  100. package/dist/lib/context-manifest-schema.d.ts +1 -1
  101. package/dist/lib/context-manifest-schema.js +4 -20
  102. package/dist/lib/context-markdown/context-markdown-analysis.d.ts +15 -0
  103. package/dist/lib/context-markdown/context-markdown-analysis.js +245 -0
  104. package/dist/lib/context-markdown/context-markdown-extract.d.ts +7 -0
  105. package/dist/lib/context-markdown/context-markdown-extract.js +114 -0
  106. package/dist/lib/context-markdown/context-markdown-types.d.ts +57 -0
  107. package/dist/lib/context-markdown/context-markdown-types.js +1 -0
  108. package/dist/lib/context-move/context-move-input.d.ts +8 -0
  109. package/dist/lib/context-move/context-move-input.js +17 -0
  110. package/dist/lib/context-move/context-move-literal-scan.d.ts +20 -0
  111. package/dist/lib/context-move/context-move-literal-scan.js +213 -0
  112. package/dist/lib/context-move/context-move-live-validation.d.ts +3 -0
  113. package/dist/lib/context-move/context-move-live-validation.js +56 -0
  114. package/dist/lib/context-move/context-move-markdown-plan.d.ts +22 -0
  115. package/dist/lib/context-move/context-move-markdown-plan.js +39 -0
  116. package/dist/lib/context-move/context-move-projection.d.ts +3 -0
  117. package/dist/lib/context-move/context-move-projection.js +11 -0
  118. package/dist/lib/context-move/context-move-reference-validation.d.ts +11 -0
  119. package/dist/lib/context-move/context-move-reference-validation.js +64 -0
  120. package/dist/lib/context-move/context-move-render.d.ts +2 -0
  121. package/dist/lib/context-move/context-move-render.js +24 -0
  122. package/dist/lib/context-move/context-move-support.d.ts +10 -0
  123. package/dist/lib/context-move/context-move-support.js +88 -0
  124. package/dist/lib/context-move/context-move-transaction-plan.d.ts +24 -0
  125. package/dist/lib/context-move/context-move-transaction-plan.js +108 -0
  126. package/dist/lib/context-move/context-move-types.d.ts +74 -0
  127. package/dist/lib/context-move/context-move-types.js +1 -0
  128. package/dist/lib/context-move/context-move.d.ts +8 -0
  129. package/dist/lib/context-move/context-move.js +180 -0
  130. package/dist/lib/context-mutation/manifest-lossless-patch.d.ts +28 -0
  131. package/dist/lib/context-mutation/manifest-lossless-patch.js +208 -0
  132. package/dist/lib/context-mutation/markdown-link-patch.d.ts +34 -0
  133. package/dist/lib/context-mutation/markdown-link-patch.js +143 -0
  134. package/dist/lib/context-mutation/markdown-link-spans.d.ts +10 -0
  135. package/dist/lib/context-mutation/markdown-link-spans.js +179 -0
  136. package/dist/lib/context-mutation/mutation-cas.d.ts +13 -0
  137. package/dist/lib/context-mutation/mutation-cas.js +365 -0
  138. package/dist/lib/context-mutation/mutation-command-support.d.ts +12 -0
  139. package/dist/lib/context-mutation/mutation-command-support.js +57 -0
  140. package/dist/lib/context-mutation/mutation-commit.d.ts +12 -0
  141. package/dist/lib/context-mutation/mutation-commit.js +89 -0
  142. package/dist/lib/context-mutation/mutation-directories.d.ts +5 -0
  143. package/dist/lib/context-mutation/mutation-directories.js +56 -0
  144. package/dist/lib/context-mutation/mutation-file-state.d.ts +14 -0
  145. package/dist/lib/context-mutation/mutation-file-state.js +137 -0
  146. package/dist/lib/context-mutation/mutation-journal-file-validation.d.ts +1 -0
  147. package/dist/lib/context-mutation/mutation-journal-file-validation.js +106 -0
  148. package/dist/lib/context-mutation/mutation-journal-io.d.ts +5 -0
  149. package/dist/lib/context-mutation/mutation-journal-io.js +55 -0
  150. package/dist/lib/context-mutation/mutation-journal-storage.d.ts +18 -0
  151. package/dist/lib/context-mutation/mutation-journal-storage.js +283 -0
  152. package/dist/lib/context-mutation/mutation-journal-validation-support.d.ts +16 -0
  153. package/dist/lib/context-mutation/mutation-journal-validation-support.js +140 -0
  154. package/dist/lib/context-mutation/mutation-journal-validation.d.ts +3 -0
  155. package/dist/lib/context-mutation/mutation-journal-validation.js +177 -0
  156. package/dist/lib/context-mutation/mutation-journal.d.ts +8 -0
  157. package/dist/lib/context-mutation/mutation-journal.js +111 -0
  158. package/dist/lib/context-mutation/mutation-live-validation.d.ts +3 -0
  159. package/dist/lib/context-mutation/mutation-live-validation.js +51 -0
  160. package/dist/lib/context-mutation/mutation-long-task-guard.d.ts +6 -0
  161. package/dist/lib/context-mutation/mutation-long-task-guard.js +57 -0
  162. package/dist/lib/context-mutation/mutation-recovery.d.ts +4 -0
  163. package/dist/lib/context-mutation/mutation-recovery.js +189 -0
  164. package/dist/lib/context-mutation/mutation-staged-fs.d.ts +5 -0
  165. package/dist/lib/context-mutation/mutation-staged-fs.js +56 -0
  166. package/dist/lib/context-mutation/mutation-types.d.ts +103 -0
  167. package/dist/lib/context-mutation/mutation-types.js +1 -0
  168. package/dist/lib/context-register/context-register-input.d.ts +11 -0
  169. package/dist/lib/context-register/context-register-input.js +43 -0
  170. package/dist/lib/context-register/context-register-render.d.ts +2 -0
  171. package/dist/lib/context-register/context-register-render.js +21 -0
  172. package/dist/lib/context-register/context-register-support.d.ts +6 -0
  173. package/dist/lib/context-register/context-register-support.js +46 -0
  174. package/dist/lib/context-register/context-register-types.d.ts +46 -0
  175. package/dist/lib/context-register/context-register-types.js +1 -0
  176. package/dist/lib/context-register/context-register.d.ts +8 -0
  177. package/dist/lib/context-register/context-register.js +155 -0
  178. package/dist/lib/context-router/context-route-budget.d.ts +15 -0
  179. package/dist/lib/context-router/context-route-budget.js +14 -0
  180. package/dist/lib/context-router/context-route-candidates.d.ts +15 -0
  181. package/dist/lib/context-router/context-route-candidates.js +112 -0
  182. package/dist/lib/context-router/context-route-order.d.ts +6 -0
  183. package/dist/lib/context-router/context-route-order.js +53 -0
  184. package/dist/lib/context-router/context-route-paths.d.ts +16 -0
  185. package/dist/lib/context-router/context-route-paths.js +109 -0
  186. package/dist/lib/context-router/context-route-render.d.ts +2 -0
  187. package/dist/lib/context-router/context-route-render.js +32 -0
  188. package/dist/lib/context-router/context-route-scan.d.ts +18 -0
  189. package/dist/lib/context-router/context-route-scan.js +156 -0
  190. package/dist/lib/context-router/context-route-selection.d.ts +16 -0
  191. package/dist/lib/context-router/context-route-selection.js +72 -0
  192. package/dist/lib/context-router/context-route-terms.d.ts +13 -0
  193. package/dist/lib/context-router/context-route-terms.js +202 -0
  194. package/dist/lib/context-router/context-route-types.d.ts +101 -0
  195. package/dist/lib/context-router/context-route-types.js +1 -0
  196. package/dist/lib/context-router/context-route.d.ts +2 -0
  197. package/dist/lib/context-router/context-route.js +127 -0
  198. package/dist/lib/context-units-migration.d.ts +13 -0
  199. package/dist/lib/context-units-migration.js +217 -0
  200. package/dist/lib/design-authority-binding.d.ts +7 -0
  201. package/dist/lib/design-authority-binding.js +96 -0
  202. package/dist/lib/design-authority-closure.d.ts +3 -0
  203. package/dist/lib/design-authority-closure.js +201 -0
  204. package/dist/lib/design-authority-delta-codec-primitives.d.ts +10 -0
  205. package/dist/lib/design-authority-delta-codec-primitives.js +58 -0
  206. package/dist/lib/design-authority-delta-codec.d.ts +2 -0
  207. package/dist/lib/design-authority-delta-codec.js +193 -0
  208. package/dist/lib/design-authority-delta-types.d.ts +65 -0
  209. package/dist/lib/design-authority-delta-types.js +6 -0
  210. package/dist/lib/design-authority-delta-validation.d.ts +2 -0
  211. package/dist/lib/design-authority-delta-validation.js +16 -0
  212. package/dist/lib/design-authority-digest.d.ts +8 -0
  213. package/dist/lib/design-authority-digest.js +36 -0
  214. package/dist/lib/design-authority-files.d.ts +9 -0
  215. package/dist/lib/design-authority-files.js +62 -0
  216. package/dist/lib/design-authority-format.d.ts +2 -0
  217. package/dist/lib/design-authority-format.js +93 -0
  218. package/dist/lib/design-authority-links.d.ts +10 -0
  219. package/dist/lib/design-authority-links.js +137 -0
  220. package/dist/lib/design-authority-manifest.d.ts +4 -0
  221. package/dist/lib/design-authority-manifest.js +144 -0
  222. package/dist/lib/design-authority-tokens.d.ts +9 -0
  223. package/dist/lib/design-authority-tokens.js +45 -0
  224. package/dist/lib/design-authority-types.d.ts +80 -0
  225. package/dist/lib/design-authority-types.js +23 -0
  226. package/dist/lib/design-md-tool-adapter.d.ts +9 -0
  227. package/dist/lib/design-md-tool-adapter.js +152 -0
  228. package/dist/lib/design-md-tool-normalization.d.ts +7 -0
  229. package/dist/lib/design-md-tool-normalization.js +78 -0
  230. package/dist/lib/design-md-tool-types.d.ts +99 -0
  231. package/dist/lib/design-md-tool-types.js +8 -0
  232. package/dist/lib/design-resource-handoff-input-types.d.ts +1 -1
  233. package/dist/lib/design-resource-handoff-manifest-projection.js +3 -0
  234. package/dist/lib/design-resource-handoff-shape.js +14 -2
  235. package/dist/lib/design-resource-handoff-types.d.ts +3 -0
  236. package/dist/lib/design-resource-handoff-validation.js +16 -4
  237. package/dist/lib/design-resource-implementation-feasibility-validation-support.js +1 -1
  238. package/dist/lib/design-resource-recovery-current.js +22 -0
  239. package/dist/lib/design-resource-recovery-shape.js +64 -7
  240. package/dist/lib/design-resource-recovery-types.d.ts +4 -1
  241. package/dist/lib/design-resource-symbolic-fact-shape.js +7 -1
  242. package/dist/lib/design-resource-symbolic-fact-types.d.ts +3 -0
  243. package/dist/lib/design-resource-symbolic-fact-validation.js +15 -3
  244. package/dist/lib/doctor.d.ts +2 -1
  245. package/dist/lib/doctor.js +29 -1
  246. package/dist/lib/fs.js +1 -1
  247. package/dist/lib/long-task-acceptance-reachability-claims.d.ts +2 -0
  248. package/dist/lib/long-task-acceptance-reachability-claims.js +279 -0
  249. package/dist/lib/long-task-acceptance-reachability-design.d.ts +2 -0
  250. package/dist/lib/long-task-acceptance-reachability-design.js +96 -0
  251. package/dist/lib/long-task-acceptance-reachability-external.d.ts +9 -0
  252. package/dist/lib/long-task-acceptance-reachability-external.js +123 -0
  253. package/dist/lib/long-task-acceptance-reachability-helpers.d.ts +64 -0
  254. package/dist/lib/long-task-acceptance-reachability-helpers.js +473 -0
  255. package/dist/lib/long-task-acceptance-reachability-semantic.d.ts +2 -0
  256. package/dist/lib/long-task-acceptance-reachability-semantic.js +122 -0
  257. package/dist/lib/long-task-acceptance-reachability-types.d.ts +91 -0
  258. package/dist/lib/long-task-acceptance-reachability-types.js +1 -0
  259. package/dist/lib/long-task-acceptance-reachability.d.ts +4 -0
  260. package/dist/lib/long-task-acceptance-reachability.js +115 -0
  261. package/dist/lib/long-task-activation-validation.d.ts +6 -0
  262. package/dist/lib/long-task-activation-validation.js +72 -69
  263. package/dist/lib/long-task-active-authority-lock-context.d.ts +4 -0
  264. package/dist/lib/long-task-active-authority-lock-context.js +29 -0
  265. package/dist/lib/long-task-applicability-identity.d.ts +25 -0
  266. package/dist/lib/long-task-applicability-identity.js +60 -0
  267. package/dist/lib/long-task-authoring-preflight-diagnostics.js +8 -0
  268. package/dist/lib/long-task-authoring-preflight-types.d.ts +2 -0
  269. package/dist/lib/long-task-authoring-preflight-types.js +9 -0
  270. package/dist/lib/long-task-authoring-preflight.js +18 -2
  271. package/dist/lib/long-task-authority-material-diff.js +4 -0
  272. package/dist/lib/long-task-authority-materials.js +19 -0
  273. package/dist/lib/long-task-authority-policy.d.ts +3 -0
  274. package/dist/lib/long-task-authority-policy.js +3 -0
  275. package/dist/lib/long-task-authority-revision-details.js +2 -1
  276. package/dist/lib/long-task-authority-types.d.ts +2 -0
  277. package/dist/lib/long-task-authority.js +2 -0
  278. package/dist/lib/long-task-check-shape.js +6 -1
  279. package/dist/lib/long-task-claim-definitions.js +1 -3
  280. package/dist/lib/long-task-claim-semantic-proof-floor.d.ts +3 -0
  281. package/dist/lib/long-task-claim-semantic-proof-floor.js +78 -0
  282. package/dist/lib/long-task-claims.d.ts +0 -18
  283. package/dist/lib/long-task-claims.js +15 -14
  284. package/dist/lib/long-task-command-process.js +3 -0
  285. package/dist/lib/long-task-compact-authoring.js +3 -0
  286. package/dist/lib/long-task-compact-projections.js +10 -0
  287. package/dist/lib/long-task-complete-delivery-evidence-types.d.ts +38 -0
  288. package/dist/lib/long-task-complete-delivery-evidence-types.js +1 -0
  289. package/dist/lib/long-task-completion-types.d.ts +109 -0
  290. package/dist/lib/long-task-completion-types.js +1 -0
  291. package/dist/lib/long-task-conformance-policy.d.ts +2 -1
  292. package/dist/lib/long-task-conformance-policy.js +11 -4
  293. package/dist/lib/long-task-context-authority-topology.js +6 -4
  294. package/dist/lib/long-task-contract-types.d.ts +52 -1
  295. package/dist/lib/long-task-counterfactual-sandbox.d.ts +7 -1
  296. package/dist/lib/long-task-counterfactual-sandbox.js +86 -6
  297. package/dist/lib/long-task-delivery-compiler-preflight.d.ts +24 -0
  298. package/dist/lib/long-task-delivery-compiler-preflight.js +32 -0
  299. package/dist/lib/long-task-delivery-compiler.d.ts +1 -0
  300. package/dist/lib/long-task-delivery-compiler.js +59 -44
  301. package/dist/lib/long-task-delivery-parser.d.ts +3 -0
  302. package/dist/lib/long-task-delivery-parser.js +26 -8
  303. package/dist/lib/long-task-delivery-types.d.ts +2 -0
  304. package/dist/lib/long-task-delivery-types.js +2 -0
  305. package/dist/lib/long-task-delivery-validation.d.ts +6 -1
  306. package/dist/lib/long-task-delivery-validation.js +19 -4
  307. package/dist/lib/long-task-design-feasibility-binding.d.ts +1 -0
  308. package/dist/lib/long-task-design-feasibility-binding.js +3 -3
  309. package/dist/lib/long-task-design-feasibility-source-closure.js +11 -2
  310. package/dist/lib/long-task-design-obligation.d.ts +50 -0
  311. package/dist/lib/long-task-design-obligation.js +99 -0
  312. package/dist/lib/long-task-design-resource-handoff.d.ts +3 -1
  313. package/dist/lib/long-task-design-resource-handoff.js +36 -12
  314. package/dist/lib/long-task-design-resource-method-binding.js +12 -0
  315. package/dist/lib/long-task-effective-external-takeover.d.ts +15 -0
  316. package/dist/lib/long-task-effective-external-takeover.js +109 -0
  317. package/dist/lib/long-task-effective-external-ui-takeover.d.ts +5 -0
  318. package/dist/lib/long-task-effective-external-ui-takeover.js +117 -0
  319. package/dist/lib/long-task-evidence-capability-codec.js +91 -0
  320. package/dist/lib/long-task-evidence-capability-runtime.js +62 -14
  321. package/dist/lib/long-task-evidence-capability-types.d.ts +3 -2
  322. package/dist/lib/long-task-evidence-v2.d.ts +6 -1
  323. package/dist/lib/long-task-evidence-v2.js +253 -170
  324. package/dist/lib/long-task-execution-observation.d.ts +7 -0
  325. package/dist/lib/long-task-execution-observation.js +21 -4
  326. package/dist/lib/long-task-expected-authority.d.ts +4 -0
  327. package/dist/lib/long-task-expected-authority.js +126 -0
  328. package/dist/lib/long-task-external-confirmation-artifacts.d.ts +9 -0
  329. package/dist/lib/long-task-external-confirmation-artifacts.js +138 -0
  330. package/dist/lib/long-task-external-confirmation-attestation.d.ts +20 -0
  331. package/dist/lib/long-task-external-confirmation-attestation.js +115 -0
  332. package/dist/lib/long-task-external-confirmation-challenge.d.ts +23 -0
  333. package/dist/lib/long-task-external-confirmation-challenge.js +164 -0
  334. package/dist/lib/long-task-external-confirmation-context.d.ts +14 -0
  335. package/dist/lib/long-task-external-confirmation-context.js +53 -0
  336. package/dist/lib/long-task-external-confirmation-evaluation.d.ts +11 -0
  337. package/dist/lib/long-task-external-confirmation-evaluation.js +454 -0
  338. package/dist/lib/long-task-external-confirmation-expected.d.ts +8 -0
  339. package/dist/lib/long-task-external-confirmation-expected.js +200 -0
  340. package/dist/lib/long-task-external-confirmation-identity.d.ts +10 -0
  341. package/dist/lib/long-task-external-confirmation-identity.js +77 -0
  342. package/dist/lib/long-task-external-confirmation-plan.d.ts +25 -0
  343. package/dist/lib/long-task-external-confirmation-plan.js +148 -0
  344. package/dist/lib/long-task-external-confirmation-preparation.d.ts +4 -0
  345. package/dist/lib/long-task-external-confirmation-preparation.js +100 -0
  346. package/dist/lib/long-task-external-confirmation-shape.d.ts +8 -0
  347. package/dist/lib/long-task-external-confirmation-shape.js +387 -0
  348. package/dist/lib/long-task-external-confirmation-state.d.ts +10 -0
  349. package/dist/lib/long-task-external-confirmation-state.js +109 -0
  350. package/dist/lib/long-task-external-confirmation-types.d.ts +195 -0
  351. package/dist/lib/long-task-external-confirmation-types.js +1 -0
  352. package/dist/lib/long-task-final-integrity.d.ts +2 -0
  353. package/dist/lib/long-task-final-integrity.js +21 -10
  354. package/dist/lib/long-task-final-v2.d.ts +7 -2
  355. package/dist/lib/long-task-final-v2.js +179 -55
  356. package/dist/lib/long-task-finalization-identity.d.ts +27 -0
  357. package/dist/lib/long-task-finalization-identity.js +58 -0
  358. package/dist/lib/long-task-finding-context.d.ts +1 -1
  359. package/dist/lib/long-task-finding-context.js +139 -13
  360. package/dist/lib/long-task-freshness.d.ts +27 -0
  361. package/dist/lib/long-task-freshness.js +128 -5
  362. package/dist/lib/long-task-git.js +3 -3
  363. package/dist/lib/long-task-material-input-closure.d.ts +3 -0
  364. package/dist/lib/long-task-material-input-closure.js +92 -0
  365. package/dist/lib/long-task-obligation-authority-resolution.d.ts +12 -0
  366. package/dist/lib/long-task-obligation-authority-resolution.js +57 -0
  367. package/dist/lib/long-task-obligation-semantic-identity.d.ts +16 -0
  368. package/dist/lib/long-task-obligation-semantic-identity.js +116 -0
  369. package/dist/lib/long-task-observation-authority.d.ts +11 -0
  370. package/dist/lib/long-task-observation-authority.js +137 -6
  371. package/dist/lib/long-task-process-table.d.ts +2 -5
  372. package/dist/lib/long-task-process-table.js +21 -53
  373. package/dist/lib/long-task-process-tree.d.ts +0 -1
  374. package/dist/lib/long-task-process-tree.js +24 -54
  375. package/dist/lib/long-task-proof-adequacy.d.ts +12 -0
  376. package/dist/lib/long-task-proof-adequacy.js +57 -0
  377. package/dist/lib/long-task-proof-capability-floor.d.ts +6 -0
  378. package/dist/lib/long-task-proof-capability-floor.js +137 -0
  379. package/dist/lib/long-task-repair-frontier-checks.d.ts +8 -0
  380. package/dist/lib/long-task-repair-frontier-checks.js +93 -0
  381. package/dist/lib/long-task-repair-frontier-groups.d.ts +2 -0
  382. package/dist/lib/long-task-repair-frontier-groups.js +64 -0
  383. package/dist/lib/long-task-repair-frontier-utils.d.ts +6 -0
  384. package/dist/lib/long-task-repair-frontier-utils.js +27 -0
  385. package/dist/lib/long-task-repair-frontier.d.ts +14 -0
  386. package/dist/lib/long-task-repair-frontier.js +132 -0
  387. package/dist/lib/long-task-risk.d.ts +3 -2
  388. package/dist/lib/long-task-risk.js +73 -24
  389. package/dist/lib/long-task-root-shape.js +148 -8
  390. package/dist/lib/long-task-runner-freeze.d.ts +2 -1
  391. package/dist/lib/long-task-runner-freeze.js +23 -8
  392. package/dist/lib/long-task-runtime-types.d.ts +34 -40
  393. package/dist/lib/long-task-semantic-assurance-policy.js +2 -11
  394. package/dist/lib/long-task-semantic-contract-types.d.ts +2 -1
  395. package/dist/lib/long-task-semantic-drift-migration.js +48 -2
  396. package/dist/lib/long-task-semantic-fact-binding-types.d.ts +20 -0
  397. package/dist/lib/long-task-semantic-fact-closure.d.ts +5 -1
  398. package/dist/lib/long-task-semantic-fact-closure.js +33 -5
  399. package/dist/lib/long-task-semantic-fact-contract-closure.js +176 -1
  400. package/dist/lib/long-task-semantic-fact-contract-proofs.js +18 -1
  401. package/dist/lib/long-task-semantic-fact-input-closure.d.ts +16 -2
  402. package/dist/lib/long-task-semantic-fact-input-closure.js +138 -15
  403. package/dist/lib/long-task-semantic-fact-provenance-closure.js +1 -1
  404. package/dist/lib/long-task-semantic-fact-shape.d.ts +2 -1
  405. package/dist/lib/long-task-semantic-fact-shape.js +35 -1
  406. package/dist/lib/long-task-semantic-proof-adequacy.d.ts +2 -0
  407. package/dist/lib/long-task-semantic-proof-adequacy.js +19 -0
  408. package/dist/lib/long-task-semantic-proof-profile.d.ts +5 -0
  409. package/dist/lib/long-task-semantic-proof-profile.js +187 -0
  410. package/dist/lib/long-task-shape-primitives.d.ts +1 -1
  411. package/dist/lib/long-task-shape-primitives.js +5 -0
  412. package/dist/lib/long-task-source-anchors.d.ts +10 -0
  413. package/dist/lib/long-task-source-anchors.js +102 -0
  414. package/dist/lib/long-task-source-authority-types.d.ts +46 -0
  415. package/dist/lib/long-task-source-claim-validation.js +36 -0
  416. package/dist/lib/long-task-source-conservation-facts.d.ts +8 -0
  417. package/dist/lib/long-task-source-conservation-facts.js +57 -0
  418. package/dist/lib/long-task-source-conservation-types.d.ts +34 -0
  419. package/dist/lib/long-task-source-conservation-types.js +1 -0
  420. package/dist/lib/long-task-source-conservation.d.ts +7 -0
  421. package/dist/lib/long-task-source-conservation.js +110 -0
  422. package/dist/lib/long-task-source-fragments.d.ts +6 -0
  423. package/dist/lib/long-task-source-fragments.js +219 -0
  424. package/dist/lib/long-task-source-projection-resolution.d.ts +5 -0
  425. package/dist/lib/long-task-source-projection-resolution.js +57 -0
  426. package/dist/lib/long-task-source-projection-validation.d.ts +17 -0
  427. package/dist/lib/long-task-source-projection-validation.js +154 -0
  428. package/dist/lib/long-task-source-shape.js +14 -6
  429. package/dist/lib/long-task-source-supersession.d.ts +5 -0
  430. package/dist/lib/long-task-source-supersession.js +138 -0
  431. package/dist/lib/long-task-stage-policy.d.ts +7 -2
  432. package/dist/lib/long-task-stage-policy.js +67 -23
  433. package/dist/lib/long-task-state.d.ts +18 -4
  434. package/dist/lib/long-task-state.js +319 -33
  435. package/dist/lib/long-task-static-observation-freeze.js +4 -3
  436. package/dist/lib/long-task-status-projection.d.ts +3 -1
  437. package/dist/lib/long-task-status-projection.js +44 -13
  438. package/dist/lib/long-task-status-v2.d.ts +10 -6
  439. package/dist/lib/long-task-status-v2.js +70 -58
  440. package/dist/lib/long-task-target-policy.d.ts +8 -3
  441. package/dist/lib/long-task-target-policy.js +40 -9
  442. package/dist/lib/long-task-terminal-finalization.d.ts +12 -0
  443. package/dist/lib/long-task-terminal-finalization.js +190 -0
  444. package/dist/lib/long-task-ui-design-policy.js +15 -4
  445. package/dist/lib/long-task-verifier-counterfactuals.d.ts +11 -0
  446. package/dist/lib/long-task-verifier-counterfactuals.js +96 -0
  447. package/dist/lib/long-task-verifier-execution.d.ts +9 -0
  448. package/dist/lib/long-task-verifier-execution.js +67 -0
  449. package/dist/lib/long-task-verifier-identity.js +16 -5
  450. package/dist/lib/long-task-verifier-v2.js +52 -65
  451. package/dist/lib/long-task-windows-job-supervisor-helper.d.ts +1 -0
  452. package/dist/lib/long-task-windows-job-supervisor-helper.js +104 -0
  453. package/dist/lib/long-task-windows-job-supervisor-protocol.d.ts +28 -0
  454. package/dist/lib/long-task-windows-job-supervisor-protocol.js +124 -0
  455. package/dist/lib/long-task-windows-job-supervisor-result.d.ts +11 -0
  456. package/dist/lib/long-task-windows-job-supervisor-result.js +152 -0
  457. package/dist/lib/long-task-windows-job-supervisor.d.ts +2 -0
  458. package/dist/lib/long-task-windows-job-supervisor.js +126 -0
  459. package/dist/lib/long-task-workspace-scope.d.ts +1 -0
  460. package/dist/lib/long-task-workspace-scope.js +4 -1
  461. package/dist/lib/long-task-workspace.d.ts +1 -0
  462. package/dist/lib/long-task-workspace.js +10 -0
  463. package/dist/lib/migrations.js +43 -2
  464. package/dist/lib/repository-path-safety.d.ts +1 -0
  465. package/dist/lib/repository-path-safety.js +3 -3
  466. package/dist/lib/semantic-fact-input-shape.d.ts +7 -2
  467. package/dist/lib/semantic-fact-input-shape.js +25 -1
  468. package/dist/lib/semantic-fact-inventory-types.d.ts +8 -2
  469. package/dist/lib/semantic-fact-policy-census.d.ts +1 -1
  470. package/dist/lib/semantic-fact-policy-census.js +5 -2
  471. package/dist/lib/semantic-fact-policy.d.ts +1 -1
  472. package/dist/lib/semantic-fact-policy.js +2 -2
  473. package/dist/lib/semantic-fact-proof-shape.d.ts +1 -1
  474. package/dist/lib/semantic-fact-property-shape.d.ts +1 -1
  475. package/dist/lib/validators.d.ts +3 -0
  476. package/dist/lib/validators.js +45 -157
  477. package/dist/public-api-core.d.ts +12 -0
  478. package/dist/public-api-core.js +12 -0
  479. package/dist/public-api-long-task.d.ts +10 -0
  480. package/dist/public-api-long-task.js +10 -0
  481. package/dist/public-types.d.ts +5 -1
  482. package/dist/schemas/design-authority-delta-assessment-v1.schema.json +191 -0
  483. package/dist/schemas/long-task-delivery-v2/long-task-delivery-v2.schema.json +166 -2
  484. package/dist/schemas/long-task-external-confirmation-record-v1.schema.json +155 -0
  485. package/dist/schemas/long-task-external-confirmation-record-v2.schema.json +209 -0
  486. package/migrations/README.md +99 -0
  487. package/package.json +7 -5
  488. package/source-mappings.yaml +18 -0
@@ -0,0 +1,200 @@
1
+ import { admittedObjectiveExternalComparator, objectiveExternalClaimActualAuthority, objectivePopulationSet, } from "./long-task-acceptance-reachability-helpers.js";
2
+ import { controlFieldFacts } from "./long-task-control-fields.js";
3
+ import { DESIGN_RESOURCE_COMPARATORS } from "./design-resource-fact-enums.js";
4
+ import { findDesignFactObligation } from "./long-task-design-obligation.js";
5
+ import { evaluateExactDigestComparison } from "./long-task-exact-comparison.js";
6
+ import { canonicalValueJson, sha256Hex } from "./strict-codec.js";
7
+ export function expectedForExternalObligation(compiled, manifest, row, authorityRef) {
8
+ if (row.fact_ref && row.proof_ref) {
9
+ const fact = manifest.facts.find((candidate) => candidate.key === row.fact_ref);
10
+ const proof = manifest.proof_obligations.find((candidate) => candidate.key === row.proof_ref);
11
+ if (fact && proof)
12
+ return {
13
+ authority_ref: authorityRef,
14
+ kind: "semantic_fact",
15
+ statement: null,
16
+ located_value: fact.expected,
17
+ comparison: proof.comparison,
18
+ };
19
+ const design = findDesignFactObligation(compiled, row);
20
+ if (design)
21
+ return {
22
+ authority_ref: authorityRef,
23
+ kind: "design_fact",
24
+ statement: null,
25
+ located_value: design.expected,
26
+ comparison: {
27
+ comparator: "strict_digest_equal",
28
+ mode: "exact",
29
+ parameters: {
30
+ kind: "design_strict_comparison",
31
+ ref: row.proof_ref,
32
+ sha256: sha256Hex(canonicalValueJson(design.comparison)),
33
+ },
34
+ tolerance: null,
35
+ mask: null,
36
+ },
37
+ };
38
+ throw new Error(`external_confirmation_expected_fact_missing:${row.obligation_ref}`);
39
+ }
40
+ const statement = contractClaimStatement(compiled, row.claim_ref);
41
+ if (statement === null)
42
+ throw new Error(`external_confirmation_expected_claim_unresolved:${row.claim_ref}`);
43
+ const claimActual = objectiveExternalClaimActualAuthority(compiledChecks(compiled), row);
44
+ if (claimActual) {
45
+ if (!Object.hasOwn(claimActual, "expected_value") ||
46
+ sha256Hex(canonicalValueJson(claimActual.expected_value)) !==
47
+ claimActual.expected_value_sha256)
48
+ throw new Error(`external_confirmation_expected_claim_actual_invalid:${row.obligation_ref}`);
49
+ return {
50
+ authority_ref: authorityRef,
51
+ kind: "contract_claim_actual",
52
+ statement,
53
+ located_value: {
54
+ kind: "compiled_assertion",
55
+ ref: claimActual.assertion_ref,
56
+ sha256: claimActual.expected_value_sha256,
57
+ value: claimActual.expected_value,
58
+ },
59
+ comparison: {
60
+ comparator: claimActual.comparison.comparator,
61
+ mode: "exact",
62
+ parameters: {
63
+ kind: "compiled_assertion_comparison",
64
+ ref: claimActual.expected_identity,
65
+ sha256: claimActual.comparison.parameters_sha256,
66
+ },
67
+ tolerance: null,
68
+ mask: null,
69
+ },
70
+ };
71
+ }
72
+ return {
73
+ authority_ref: authorityRef,
74
+ kind: "contract_claim",
75
+ statement,
76
+ located_value: null,
77
+ comparison: null,
78
+ };
79
+ }
80
+ export function objectiveExternalComparison(compiled, manifest, row, actual) {
81
+ if (!row.fact_ref && !row.proof_ref) {
82
+ const authority = objectiveExternalClaimActualAuthority(compiledChecks(compiled), row);
83
+ if (!authority || authority.comparison.parameters_sha256 === null)
84
+ return null;
85
+ const projectedActual = authority.actual_projection === "raw_exact"
86
+ ? actual
87
+ : authority.actual_projection === "presence_boolean"
88
+ ? true
89
+ : Boolean(actual);
90
+ return evaluateExactDigestComparison({
91
+ identity: {
92
+ confirmation_ref: row.confirmation_ref,
93
+ obligation_ref: row.source_obligation_ref,
94
+ fact_ref: null,
95
+ proof_ref: null,
96
+ applicability_ref: row.applicability_ref,
97
+ },
98
+ actual_value_sha256: sha256Hex(canonicalValueJson(projectedActual)),
99
+ expected_value_sha256: authority.expected_value_sha256,
100
+ comparator: authority.comparison.comparator,
101
+ mode: "exact",
102
+ parameters_sha256: authority.comparison.parameters_sha256,
103
+ tolerance_sha256: null,
104
+ mask_sha256: null,
105
+ });
106
+ }
107
+ if (!row.fact_ref || !row.proof_ref)
108
+ return null;
109
+ const fact = manifest.facts.find((candidate) => candidate.key === row.fact_ref);
110
+ const proof = manifest.proof_obligations.find((candidate) => candidate.key === row.proof_ref);
111
+ if (fact && proof && proof.fact_ref === fact.key) {
112
+ const comparator = admittedObjectiveExternalComparator(manifest, row.fact_ref, row.proof_ref);
113
+ if (!comparator)
114
+ return null;
115
+ if (comparator === "population_set_equal") {
116
+ const expected = fact.expected.value;
117
+ if (!objectivePopulationSet(expected))
118
+ return null;
119
+ const actualSet = objectivePopulationSet(actual) ? new Set(actual) : null;
120
+ return {
121
+ passed: Boolean(actualSet &&
122
+ actualSet.size === expected.length &&
123
+ expected.every((item) => actualSet.has(item))),
124
+ };
125
+ }
126
+ return evaluateExactDigestComparison({
127
+ identity: {
128
+ confirmation_ref: row.confirmation_ref,
129
+ obligation_ref: row.obligation_ref,
130
+ fact_ref: row.fact_ref,
131
+ proof_ref: row.proof_ref,
132
+ applicability_ref: row.applicability_ref,
133
+ },
134
+ actual_value_sha256: sha256Hex(canonicalValueJson(actual)),
135
+ expected_value_sha256: fact.expected.sha256,
136
+ comparator: proof.comparison.comparator,
137
+ mode: proof.comparison.mode,
138
+ parameters_sha256: proof.comparison.parameters.sha256,
139
+ tolerance_sha256: null,
140
+ mask_sha256: null,
141
+ });
142
+ }
143
+ const design = findDesignFactObligation(compiled, row);
144
+ if (!design ||
145
+ design.observation_sensitivity !== "plain" ||
146
+ !DESIGN_RESOURCE_COMPARATORS.includes(design.comparison
147
+ .comparator))
148
+ return null;
149
+ return {
150
+ passed: sha256Hex(canonicalValueJson(actual)) === design.expected.sha256,
151
+ };
152
+ }
153
+ function compiledChecks(compiled) {
154
+ return [
155
+ ...compiled.global.acceptance.checks,
156
+ ...compiled.outcomes.flatMap((outcome) => outcome.acceptance.checks),
157
+ ];
158
+ }
159
+ function contractClaimStatement(compiled, claimRef) {
160
+ if (claimRef.startsWith("GLOBAL."))
161
+ return globalClaimStatement(compiled, claimRef.slice("GLOBAL.".length));
162
+ const outcome = compiled.outcomes.find((candidate) => claimRef === candidate.key || claimRef.startsWith(`${candidate.key}.`));
163
+ if (!outcome)
164
+ return null;
165
+ const local = claimRef.slice(outcome.key.length + 1);
166
+ if (local === "result")
167
+ return outcome.product.observable_result;
168
+ if (local === "control_relation_closure")
169
+ return outcome.product.control_relation_closure.statement;
170
+ const [kind, key, ...suffix] = local.split(".");
171
+ const statements = {
172
+ requirement: outcome.product.requirements,
173
+ obligation: outcome.technical.obligations,
174
+ non_completing: outcome.product.non_completing_outcomes,
175
+ forbidden_shortcut: outcome.technical.forbidden_shortcuts,
176
+ control_relation: outcome.product.control_relations,
177
+ };
178
+ if (kind in statements)
179
+ return (statements[kind].find((row) => row.key === key)
180
+ ?.statement ?? null);
181
+ if (kind !== "control")
182
+ return null;
183
+ const control = outcome.product.controls.find((row) => row.key === key);
184
+ if (!control)
185
+ return null;
186
+ return (controlFieldFacts(control).find((row) => row.claim_field === suffix.join("."))?.statement ?? null);
187
+ }
188
+ function globalClaimStatement(compiled, local) {
189
+ const [kind, ...rest] = local.split(".");
190
+ const key = rest.join(".");
191
+ if (kind === "non_goal")
192
+ return (compiled.global.product.non_goals.find((row) => row.key === key)
193
+ ?.statement ?? null);
194
+ if (kind === "constraint")
195
+ return (compiled.global.technical.constraints.find((row) => row.key === key)
196
+ ?.statement ?? null);
197
+ if (kind === "forbidden_shortcut")
198
+ return (compiled.global.technical.forbidden_shortcuts.find((row) => row.key === key)?.statement ?? null);
199
+ return null;
200
+ }
@@ -0,0 +1,10 @@
1
+ import type { EffectiveExternalObligationV1 } from "./long-task-acceptance-reachability-types.js";
2
+ import type { CompiledDeliveryContractV2, ExternalConfirmationV2, WorkspaceManifestV2 } from "./long-task-delivery-types.js";
3
+ import type { RelevantExternalInputIdentityV1 } from "./long-task-external-confirmation-types.js";
4
+ export declare function deriveRelevantExternalInputIdentity(compiled: CompiledDeliveryContractV2, confirmationRef: string, manifest: WorkspaceManifestV2): RelevantExternalInputIdentityV1;
5
+ export declare function allEffectiveExternalRows(compiled: CompiledDeliveryContractV2, confirmationRef: string): EffectiveExternalObligationV1[];
6
+ export declare function blockingExternalRows(compiled: CompiledDeliveryContractV2, confirmationRef: string): EffectiveExternalObligationV1[];
7
+ export declare function advisoryExternalRows(compiled: CompiledDeliveryContractV2, confirmationRef: string): EffectiveExternalObligationV1[];
8
+ export declare function requiredConfirmation(compiled: CompiledDeliveryContractV2, confirmationRef: string): ExternalConfirmationV2;
9
+ export declare function sameSet(left: readonly string[], right: readonly string[]): boolean;
10
+ export declare function sameValue(left: unknown, right: unknown): boolean;
@@ -0,0 +1,77 @@
1
+ import { matchesRepoPattern } from "./long-task-paths.js";
2
+ import { canonicalValueJson, sha256Hex } from "./strict-codec.js";
3
+ export function deriveRelevantExternalInputIdentity(compiled, confirmationRef, manifest) {
4
+ const confirmation = requiredConfirmation(compiled, confirmationRef);
5
+ if (blockingExternalRows(compiled, confirmationRef).length)
6
+ return wholeCandidateIdentity(manifest);
7
+ const rows = allEffectiveExternalRows(compiled, confirmationRef);
8
+ const outcomeKeys = [...new Set(rows.map((row) => row.outcome_key))];
9
+ if (!rows.length || outcomeKeys.some((key) => key === null))
10
+ return wholeCandidateIdentity(manifest);
11
+ const outcomes = outcomeKeys.map((key) => compiled.outcomes.find((outcome) => outcome.key === key));
12
+ if (outcomes.some((outcome) => !outcome ||
13
+ !outcome.product.owner.path_globs.length ||
14
+ !outcome.technical.bindings.length ||
15
+ outcome.technical.bindings.some((binding) => !binding.carrier_paths.length)))
16
+ return wholeCandidateIdentity(manifest);
17
+ const patterns = [
18
+ ...new Set(outcomes.flatMap((outcome) => [
19
+ ...outcome.product.owner.path_globs,
20
+ ...outcome.technical.expected_change_paths,
21
+ ...outcome.technical.allowed_support_paths,
22
+ ...outcome.technical.bindings.flatMap((binding) => [
23
+ ...(binding.kind === "file" || binding.kind === "path_glob"
24
+ ? [binding.target]
25
+ : []),
26
+ ...binding.carrier_paths,
27
+ ]),
28
+ ])),
29
+ ].sort();
30
+ if (!patterns.length)
31
+ return wholeCandidateIdentity(manifest);
32
+ const files = manifest.files
33
+ .filter((file) => patterns.some((pattern) => matchesRepoPattern(file.path, pattern)))
34
+ .map((file) => ({
35
+ path: file.path,
36
+ mode: file.mode,
37
+ size: file.size,
38
+ sha256: file.sha256,
39
+ }))
40
+ .sort((left, right) => left.path.localeCompare(right.path));
41
+ const digest = sha256Hex(canonicalValueJson({ mode: "bounded_paths", patterns, files }));
42
+ return {
43
+ mode: "bounded_paths",
44
+ identity: `bounded:${digest}`,
45
+ paths: files.map((file) => file.path),
46
+ };
47
+ }
48
+ export function allEffectiveExternalRows(compiled, confirmationRef) {
49
+ return (compiled.acceptance_reachability.effective_external_routes ?? []).filter((row) => row.confirmation_ref === confirmationRef);
50
+ }
51
+ export function blockingExternalRows(compiled, confirmationRef) {
52
+ return allEffectiveExternalRows(compiled, confirmationRef).filter((row) => row.completion_role === "blocking");
53
+ }
54
+ export function advisoryExternalRows(compiled, confirmationRef) {
55
+ return allEffectiveExternalRows(compiled, confirmationRef).filter((row) => row.completion_role === "advisory");
56
+ }
57
+ export function requiredConfirmation(compiled, confirmationRef) {
58
+ const confirmation = compiled.global.acceptance.external_confirmations.find((candidate) => candidate.key === confirmationRef);
59
+ if (!confirmation)
60
+ throw new Error(`external_confirmation_unknown:${confirmationRef}`);
61
+ return confirmation;
62
+ }
63
+ export function sameSet(left, right) {
64
+ return (left.length === right.length &&
65
+ new Set(left).size === left.length &&
66
+ left.every((item) => right.includes(item)));
67
+ }
68
+ export function sameValue(left, right) {
69
+ return canonicalValueJson(left) === canonicalValueJson(right);
70
+ }
71
+ function wholeCandidateIdentity(manifest) {
72
+ return {
73
+ mode: "whole_candidate",
74
+ identity: `whole:${manifest.snapshot_sha256}`,
75
+ paths: manifest.files.map((file) => file.path).sort(),
76
+ };
77
+ }
@@ -0,0 +1,25 @@
1
+ import type { CompiledDeliveryContractV2, WorkspaceManifestV2 } from "./long-task-delivery-types.js";
2
+ import { externalConfirmationRecordHash, externalConfirmationRecordV2Hash } from "./long-task-external-confirmation-shape.js";
3
+ import type { ExternalConfirmationCandidateV1, ExternalConfirmationEvaluationV1, ExternalConfirmationPreparationV1 } from "./long-task-external-confirmation-types.js";
4
+ import type { SemanticFactManifestV1 } from "./semantic-fact-types.js";
5
+ export { deriveRelevantExternalInputIdentity } from "./long-task-external-confirmation-identity.js";
6
+ export declare function prepareExternalConfirmations(workdirInput: string, confirmationRef?: string): Promise<ExternalConfirmationPreparationV1>;
7
+ export declare function submitExternalConfirmation(input: {
8
+ workdir: string;
9
+ confirmation_ref: string;
10
+ record_path: string;
11
+ }): Promise<ExternalConfirmationEvaluationV1>;
12
+ export declare function externalConfirmationStatus(workdirInput: string): Promise<Record<string, unknown>>;
13
+ export declare function revokeExternalConfirmation(input: {
14
+ workdir: string;
15
+ confirmation_ref: string;
16
+ }): Promise<Record<string, unknown>>;
17
+ export declare function rotateExternalConfirmation(input: {
18
+ workdir: string;
19
+ confirmation_ref: string;
20
+ }): Promise<Record<string, unknown>>;
21
+ export declare function evaluateExternalConfirmations(compiled: CompiledDeliveryContractV2, repository: string, workdir: string, manifest: WorkspaceManifestV2, candidate: ExternalConfirmationCandidateV1, semanticManifestInput?: SemanticFactManifestV1): Promise<ExternalConfirmationEvaluationV1[]>;
22
+ export declare const externalConfirmationRecordIntegrity: {
23
+ hash_v1: typeof externalConfirmationRecordHash;
24
+ hash_v2: typeof externalConfirmationRecordV2Hash;
25
+ };
@@ -0,0 +1,148 @@
1
+ import { loadExternalAuthorityContext, readSubmittedExternalConfirmationRecord, } from "./long-task-external-confirmation-context.js";
2
+ import { captureAndStoreExternalConfirmationArtifacts, MAX_TOTAL_EXTERNAL_CONFIRMATION_ARTIFACT_BYTES, } from "./long-task-external-confirmation-artifacts.js";
3
+ import { rotateExternalConfirmationChallenge, } from "./long-task-external-confirmation-challenge.js";
4
+ import { emptyExternalConfirmationEvaluation, evaluateExternalConfirmationRecord, externalConfirmationSubmissionEnvelopeIssues, partitionExternalConfirmationArtifactSnapshots, } from "./long-task-external-confirmation-evaluation.js";
5
+ import { allEffectiveExternalRows, requiredConfirmation, } from "./long-task-external-confirmation-identity.js";
6
+ import { externalFulfillableConfirmations, groupPreparationSessions, } from "./long-task-external-confirmation-preparation.js";
7
+ import { externalConfirmationRecordHash, externalConfirmationRecordV2Hash, } from "./long-task-external-confirmation-shape.js";
8
+ import { readStoredExternalConfirmationRecord, revokeStoredExternalConfirmationRecord, writeStoredExternalConfirmationRecord, } from "./long-task-external-confirmation-state.js";
9
+ import { withActiveAuthorityLock } from "./long-task-state.js";
10
+ import { repositoryRoot } from "./long-task-workspace.js";
11
+ import { loadSemanticFactManifest } from "./semantic-fact-source-parser.js";
12
+ export { deriveRelevantExternalInputIdentity } from "./long-task-external-confirmation-identity.js";
13
+ export async function prepareExternalConfirmations(workdirInput, confirmationRef) {
14
+ const repository = await repositoryRoot(process.cwd());
15
+ return withActiveAuthorityLock(repository, "external_confirmation", async () => {
16
+ const context = await loadExternalAuthorityContext(workdirInput, true);
17
+ const confirmations = await externalFulfillableConfirmations(context, confirmationRef);
18
+ const sessions = groupPreparationSessions(confirmations, context.candidate);
19
+ return {
20
+ schema_version: "long-task-external-confirmation-preparation-v2",
21
+ acceptance_effect: "none",
22
+ notice: "Preparation output does not establish acceptance.",
23
+ task_id: context.compiled.task.id,
24
+ compiled_identity: context.compiled.compiled_identity,
25
+ authority_revision: context.compiled.authority_revision,
26
+ candidate: context.candidate,
27
+ actor_identity_boundary: "detached_ed25519_required_for_blocking_fulfillment",
28
+ confirmations,
29
+ sessions,
30
+ generated_at: new Date().toISOString(),
31
+ };
32
+ });
33
+ }
34
+ export async function submitExternalConfirmation(input) {
35
+ const repository = await repositoryRoot(process.cwd());
36
+ return withActiveAuthorityLock(repository, "external_confirmation", async () => {
37
+ const context = await loadExternalAuthorityContext(input.workdir, true);
38
+ const confirmation = requiredConfirmation(context.compiled, input.confirmation_ref);
39
+ const record = await readSubmittedExternalConfirmationRecord(input.record_path);
40
+ if (record.confirmation_ref !== input.confirmation_ref)
41
+ throw new Error(`external_confirmation_submit_ref_mismatch:${input.confirmation_ref}:${record.confirmation_ref}`);
42
+ if (record.schema_version !== "long-task-external-confirmation-record-v2")
43
+ throw new Error("external_confirmation_submit_rejected:legacy_unattested");
44
+ const envelopeIssues = await externalConfirmationSubmissionEnvelopeIssues(context, confirmation, record);
45
+ if (envelopeIssues.length)
46
+ throw new Error(`external_confirmation_submit_rejected:${envelopeIssues.join(",")}`);
47
+ const rows = allEffectiveExternalRows(context.compiled, confirmation.key);
48
+ const artifactPartitions = partitionExternalConfirmationArtifactSnapshots(rows, record);
49
+ await captureAndStoreExternalConfirmationArtifacts(context.repository, context.workdir, artifactPartitions.blocking_or_shared);
50
+ const blockingArtifactBytes = Object.values(artifactPartitions.blocking_or_shared).reduce((total, snapshot) => total + snapshot.size_bytes, 0);
51
+ if (Object.keys(artifactPartitions.advisory_only).length)
52
+ await captureAndStoreExternalConfirmationArtifacts(context.repository, context.workdir, artifactPartitions.advisory_only, {
53
+ max_total_bytes: Math.max(0, MAX_TOTAL_EXTERNAL_CONFIRMATION_ARTIFACT_BYTES -
54
+ blockingArtifactBytes),
55
+ }).catch(() => {
56
+ // The role-scoped evaluation below records an absent or invalid
57
+ // advisory partition without contaminating a fulfilled blocking row.
58
+ });
59
+ const evaluation = await evaluateExternalConfirmationRecord(context, confirmation, record);
60
+ if (evaluation.state === "invalid" ||
61
+ evaluation.state === "stale" ||
62
+ evaluation.state === "legacy_unattested")
63
+ throw new Error(`external_confirmation_submit_rejected:${evaluation.state}:${evaluation.issues.join(",")}`);
64
+ await writeStoredExternalConfirmationRecord(context.repository, context.workdir, record);
65
+ return evaluation;
66
+ });
67
+ }
68
+ export async function externalConfirmationStatus(workdirInput) {
69
+ const context = await loadExternalAuthorityContext(workdirInput, false);
70
+ return {
71
+ schema_version: "long-task-external-confirmation-status-v2",
72
+ task_id: context.compiled.task.id,
73
+ compiled_identity: context.compiled.compiled_identity,
74
+ authority_revision: context.compiled.authority_revision,
75
+ candidate: context.candidate,
76
+ candidate_clean: context.candidate_dirty.length === 0,
77
+ candidate_dirty: context.candidate_dirty,
78
+ actor_identity_boundary: "detached_ed25519_required_for_blocking_fulfillment",
79
+ confirmations: await evaluateExternalConfirmations(context.compiled, context.repository, context.workdir, context.manifest, context.candidate, context.semantic_manifest),
80
+ };
81
+ }
82
+ export async function revokeExternalConfirmation(input) {
83
+ const repository = await repositoryRoot(process.cwd());
84
+ return withActiveAuthorityLock(repository, "external_confirmation", async () => {
85
+ const context = await loadExternalAuthorityContext(input.workdir, false);
86
+ requiredConfirmation(context.compiled, input.confirmation_ref);
87
+ const challenge = await rotateExternalConfirmationChallenge(context, input.confirmation_ref);
88
+ const revoked = await revokeStoredExternalConfirmationRecord(context.repository, context.workdir, input.confirmation_ref);
89
+ return {
90
+ schema_version: "long-task-external-confirmation-revoke-v2",
91
+ confirmation_ref: input.confirmation_ref,
92
+ status: revoked ? "revoked" : "not_present",
93
+ challenge_rotated: true,
94
+ challenge: challenge.challenge,
95
+ };
96
+ });
97
+ }
98
+ export async function rotateExternalConfirmation(input) {
99
+ const repository = await repositoryRoot(process.cwd());
100
+ return withActiveAuthorityLock(repository, "external_confirmation", async () => {
101
+ const context = await loadExternalAuthorityContext(input.workdir, false);
102
+ requiredConfirmation(context.compiled, input.confirmation_ref);
103
+ const challenge = await rotateExternalConfirmationChallenge(context, input.confirmation_ref);
104
+ return {
105
+ schema_version: "long-task-external-confirmation-rotate-v1",
106
+ confirmation_ref: input.confirmation_ref,
107
+ challenge: challenge.challenge,
108
+ rotated_at: challenge.rotated_at,
109
+ };
110
+ });
111
+ }
112
+ export async function evaluateExternalConfirmations(compiled, repository, workdir, manifest, candidate, semanticManifestInput) {
113
+ const semanticManifest = semanticManifestInput ??
114
+ (await loadSemanticFactManifest(repository, compiled.task.source_paths))
115
+ .manifest;
116
+ const context = {
117
+ repository,
118
+ workdir,
119
+ compiled,
120
+ manifest,
121
+ candidate,
122
+ candidate_dirty: [],
123
+ semantic_manifest: semanticManifest,
124
+ };
125
+ const results = [];
126
+ for (const confirmation of [
127
+ ...compiled.global.acceptance.external_confirmations,
128
+ ].sort((left, right) => left.key.localeCompare(right.key))) {
129
+ const stored = await readStoredExternalConfirmationRecord(repository, workdir, confirmation.key);
130
+ if (stored.error) {
131
+ results.push(await emptyExternalConfirmationEvaluation(context, confirmation, "invalid", [`record_invalid:${stored.error}`]));
132
+ continue;
133
+ }
134
+ if (!stored.record) {
135
+ const exactRows = allEffectiveExternalRows(compiled, confirmation.key);
136
+ results.push(exactRows.length || !confirmation.blocks_target
137
+ ? await emptyExternalConfirmationEvaluation(context, confirmation, "pending", [])
138
+ : await emptyExternalConfirmationEvaluation(context, confirmation, "invalid", ["blocking_confirmation_has_no_exact_obligations"]));
139
+ continue;
140
+ }
141
+ results.push(await evaluateExternalConfirmationRecord(context, confirmation, stored.record));
142
+ }
143
+ return results;
144
+ }
145
+ export const externalConfirmationRecordIntegrity = {
146
+ hash_v1: externalConfirmationRecordHash,
147
+ hash_v2: externalConfirmationRecordV2Hash,
148
+ };
@@ -0,0 +1,4 @@
1
+ import type { ExternalAuthorityContextV1 } from "./long-task-external-confirmation-context.js";
2
+ import type { ExternalConfirmationCandidateV1, ExternalConfirmationPreparationConfirmationV1, ExternalConfirmationPreparationSessionV1 } from "./long-task-external-confirmation-types.js";
3
+ export declare function externalFulfillableConfirmations(context: ExternalAuthorityContextV1, confirmationRef?: string): Promise<ExternalConfirmationPreparationConfirmationV1[]>;
4
+ export declare function groupPreparationSessions(confirmations: ExternalConfirmationPreparationConfirmationV1[], candidate: ExternalConfirmationCandidateV1): ExternalConfirmationPreparationSessionV1[];
@@ -0,0 +1,100 @@
1
+ import { compiledExternalConfirmationIdentityAssurance, externalConfirmationActor, } from "./long-task-external-confirmation-attestation.js";
2
+ import { readOrCreateExternalConfirmationChallenge } from "./long-task-external-confirmation-challenge.js";
3
+ import { expectedForExternalObligation } from "./long-task-external-confirmation-expected.js";
4
+ import { allEffectiveExternalRows, deriveRelevantExternalInputIdentity, requiredConfirmation, } from "./long-task-external-confirmation-identity.js";
5
+ import { canonicalValueJson, sha256Hex } from "./strict-codec.js";
6
+ export async function externalFulfillableConfirmations(context, confirmationRef) {
7
+ if (confirmationRef)
8
+ requiredConfirmation(context.compiled, confirmationRef);
9
+ const declarations = context.compiled.global.acceptance.external_confirmations.filter((confirmation) => (!confirmationRef || confirmation.key === confirmationRef) &&
10
+ allEffectiveExternalRows(context.compiled, confirmation.key).length > 0);
11
+ const selected = (await Promise.all(declarations.map((confirmation) => prepareConfirmation(context, confirmation)))).sort((left, right) => left.confirmation_ref.localeCompare(right.confirmation_ref));
12
+ if (confirmationRef && !selected.length)
13
+ throw new Error(`external_confirmation_not_fulfillable:${confirmationRef}`);
14
+ return selected;
15
+ }
16
+ export function groupPreparationSessions(confirmations, candidate) {
17
+ const groups = new Map();
18
+ for (const confirmation of confirmations) {
19
+ const rows = groups.get(confirmation.session_group) ?? [];
20
+ rows.push(confirmation);
21
+ groups.set(confirmation.session_group, rows);
22
+ }
23
+ return [...groups.entries()]
24
+ .map(([sessionGroup, rows]) => {
25
+ const first = rows[0];
26
+ return {
27
+ session_group: sessionGroup,
28
+ suggested_session_id: `external-${sessionGroup.slice(0, 16)}-${candidate.snapshot_sha256.slice(0, 12)}`,
29
+ actor: first.actor,
30
+ identity_assurance: first.identity_assurance,
31
+ target_ref: first.target_ref,
32
+ environment_identity: first.environment_identity,
33
+ scenario: first.scenario,
34
+ evidence_requirements: first.evidence_requirements,
35
+ confirmation_refs: rows.map((row) => row.confirmation_ref).sort(),
36
+ obligations: rows
37
+ .flatMap((row) => row.obligations)
38
+ .sort((left, right) => left.obligation_ref.localeCompare(right.obligation_ref)),
39
+ };
40
+ })
41
+ .sort((left, right) => left.session_group.localeCompare(right.session_group));
42
+ }
43
+ async function prepareConfirmation(context, confirmation) {
44
+ if (!confirmation.actor ||
45
+ !confirmation.target_ref ||
46
+ !confirmation.environment_identity ||
47
+ !confirmation.scenario ||
48
+ !confirmation.evidence_requirements?.length ||
49
+ !confirmation.obligations?.length)
50
+ throw new Error(`external_confirmation_declaration_incomplete:${confirmation.key}`);
51
+ const actor = externalConfirmationActor(confirmation);
52
+ const identityAssurance = compiledExternalConfirmationIdentityAssurance(context.compiled, confirmation.key);
53
+ if (!actor || !identityAssurance || identityAssurance.scheme !== "ed25519")
54
+ throw new Error(`external_confirmation_authenticated_actor_required:${confirmation.key}`);
55
+ const challenge = await readOrCreateExternalConfirmationChallenge(context, confirmation.key);
56
+ const relevant = deriveRelevantExternalInputIdentity(context.compiled, confirmation.key, context.manifest);
57
+ const obligations = allEffectiveExternalRows(context.compiled, confirmation.key)
58
+ .map((row) => prepareObligation(context, confirmation, row))
59
+ .sort((left, right) => left.obligation_ref.localeCompare(right.obligation_ref));
60
+ const groups = [...new Set(obligations.map((row) => row.session_group))];
61
+ if (groups.length !== 1 || !groups[0])
62
+ throw new Error(`external_confirmation_session_group_invalid:${confirmation.key}`);
63
+ const prepared = {
64
+ confirmation_ref: confirmation.key,
65
+ description: confirmation.description,
66
+ owner: confirmation.owner,
67
+ actor,
68
+ identity_assurance: identityAssurance,
69
+ target_ref: confirmation.target_ref,
70
+ environment_identity: confirmation.environment_identity,
71
+ scenario: confirmation.scenario,
72
+ evidence_requirements: confirmation.evidence_requirements,
73
+ session_group: groups[0],
74
+ relevant_input_identity: relevant.identity,
75
+ relevant_input_mode: relevant.mode,
76
+ relevant_input_paths: relevant.paths,
77
+ challenge: challenge.challenge,
78
+ obligations,
79
+ };
80
+ return {
81
+ ...prepared,
82
+ signable_canonical_digest: sha256Hex(canonicalValueJson({
83
+ schema_version: "long-task-external-confirmation-signing-context-v2",
84
+ compiled_identity: context.compiled.compiled_identity,
85
+ authority_revision: context.compiled.authority_revision,
86
+ candidate: context.candidate,
87
+ ...prepared,
88
+ })),
89
+ };
90
+ }
91
+ function prepareObligation(context, confirmation, row) {
92
+ const declaration = confirmation.obligations.find((obligation) => obligation.key === row.obligation_ref);
93
+ if (!declaration)
94
+ throw new Error(`external_confirmation_obligation_declaration_missing:${confirmation.key}:${row.obligation_ref}`);
95
+ return {
96
+ ...row,
97
+ result_kind: declaration.result_kind,
98
+ expected: expectedForExternalObligation(context.compiled, context.semantic_manifest, row, declaration.expected_authority_ref),
99
+ };
100
+ }
@@ -0,0 +1,8 @@
1
+ import type { ExternalConfirmationRecord, ExternalConfirmationRecordV1, ExternalConfirmationRecordV2 } from "./long-task-external-confirmation-types.js";
2
+ export declare function parseExternalConfirmationRecord(value: unknown): ExternalConfirmationRecord;
3
+ export declare function parseExternalConfirmationRecordV1(value: unknown): ExternalConfirmationRecordV1;
4
+ export declare function parseExternalConfirmationRecordV2(value: unknown): ExternalConfirmationRecordV2;
5
+ export declare function externalConfirmationRecordHash(record: Omit<ExternalConfirmationRecordV1, "record_sha256"> | ExternalConfirmationRecordV1): string;
6
+ export declare function signExternalConfirmationRecordV1(unsigned: Omit<ExternalConfirmationRecordV1, "record_sha256">): ExternalConfirmationRecordV1;
7
+ export declare function externalConfirmationRecordV2Hash(record: Omit<ExternalConfirmationRecordV2, "record_sha256"> | ExternalConfirmationRecordV2): string;
8
+ export declare function externalConfirmationV2SignablePayload(record: ExternalConfirmationRecordV2): string;