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,116 @@
1
+ import { findDesignFactObligation } from "./long-task-design-obligation.js";
2
+ import { canonicalApplicabilityIdentity, claimApplicabilityProfile, } from "./long-task-applicability-identity.js";
3
+ import { canonicalValueJson, sha256Hex } from "./strict-codec.js";
4
+ export function objectiveClaimSemanticIdentity(input) {
5
+ const authority = input.observation_authority;
6
+ const applicability = claimApplicabilityProfile(input.contract, input.outcome_key, input.applicability_ref);
7
+ const requiredCapabilities = [
8
+ ...new Set(input.required_evidence_capabilities),
9
+ ].sort();
10
+ if (!applicability ||
11
+ authority.fact_ref !== null ||
12
+ authority.claim_refs.length !== 1 ||
13
+ authority.claim_refs[0] !== input.local_claim_ref ||
14
+ authority.target_ref !== applicability.target_ref ||
15
+ authority.method !== input.method ||
16
+ !requiredCapabilities.every((capability) => authority.evidence_capabilities.includes(capability)) ||
17
+ !exactObservationAuthorityShape(authority))
18
+ return null;
19
+ return sha256Hex(canonicalValueJson({
20
+ claim_ref: input.claim_ref,
21
+ local_claim_ref: input.local_claim_ref,
22
+ applicability_identity: canonicalApplicabilityIdentity(applicability),
23
+ target_ref: applicability.target_ref,
24
+ required_polarity: input.required_polarity,
25
+ expected_authority_ref: input.expected_authority_ref,
26
+ expected_value_sha256: authority.expected_value_sha256,
27
+ actual_projection: authority.actual_projection,
28
+ method: input.method,
29
+ required_evidence_capabilities: requiredCapabilities,
30
+ comparison: authority.comparison,
31
+ }));
32
+ }
33
+ export function effectiveExternalObligationSemanticIdentity(input, expected) {
34
+ if (expected.semantic_identity)
35
+ return expected.semantic_identity;
36
+ const applicability = claimApplicabilityProfile(input.contract, expected.outcome_key, expected.applicability_ref);
37
+ if (!applicability)
38
+ return null;
39
+ const common = {
40
+ source_obligation_ref: expected.source_obligation_ref,
41
+ claim_ref: expected.claim_ref,
42
+ local_claim_ref: expected.local_claim_ref,
43
+ applicability_identity: canonicalApplicabilityIdentity(applicability),
44
+ target_ref: applicability.target_ref,
45
+ required_polarity: expected.required_polarity,
46
+ expected_authority_ref: expected.expected_authority_ref,
47
+ method: expected.method,
48
+ required_evidence_capabilities: [
49
+ ...new Set(expected.evidence_capabilities),
50
+ ].sort(),
51
+ };
52
+ if (expected.fact_ref && expected.proof_ref) {
53
+ const design = findDesignFactObligation(input.contract, expected);
54
+ if (design)
55
+ return sha256Hex(canonicalValueJson({
56
+ kind: "design_fact",
57
+ ...common,
58
+ design_obligation_ref: design.source_obligation_ref,
59
+ design_target_ref: design.target_key,
60
+ fact_ref: design.fact_ref,
61
+ proof_ref: design.source_obligation_ref,
62
+ expected_design_sha256: design.expected.sha256,
63
+ actual_projection: "raw_exact",
64
+ comparison: {
65
+ comparator: design.comparison.comparator,
66
+ mode: design.comparison.mode,
67
+ parameters_sha256: design.comparison.parameters.sha256,
68
+ tolerance_sha256: design.comparison.tolerance?.sha256 ?? null,
69
+ mask_sha256: design.comparison.mask?.sha256 ?? null,
70
+ },
71
+ }));
72
+ const fact = input.manifest.facts.find((candidate) => candidate.key === expected.fact_ref);
73
+ const proof = input.manifest.proof_obligations.find((candidate) => candidate.key === expected.proof_ref &&
74
+ candidate.fact_ref === expected.fact_ref);
75
+ if (fact && proof)
76
+ return sha256Hex(canonicalValueJson({
77
+ kind: "semantic_fact",
78
+ ...common,
79
+ fact_ref: fact.key,
80
+ proof_ref: proof.key,
81
+ expected_value_sha256: fact.expected.sha256,
82
+ actual_projection: "raw_exact",
83
+ comparison: {
84
+ comparator: proof.comparison.comparator,
85
+ mode: proof.comparison.mode,
86
+ parameters_sha256: proof.comparison.parameters.sha256,
87
+ tolerance_sha256: proof.comparison.tolerance?.sha256 ?? null,
88
+ mask_sha256: proof.comparison.mask?.sha256 ?? null,
89
+ },
90
+ }));
91
+ return null;
92
+ }
93
+ if (expected.fact_ref || expected.proof_ref)
94
+ return null;
95
+ return sha256Hex(canonicalValueJson({
96
+ kind: "source_delegated_judgment",
97
+ ...common,
98
+ expected_value_sha256: null,
99
+ actual_projection: null,
100
+ comparison: null,
101
+ }));
102
+ }
103
+ function exactObservationAuthorityShape(authority) {
104
+ return Boolean(typeof authority.expected_value_sha256 === "string" &&
105
+ /^[a-f0-9]{64}$/u.test(authority.expected_value_sha256) &&
106
+ typeof authority.actual_projection === "string" &&
107
+ authority.comparison &&
108
+ typeof authority.comparison.comparator === "string" &&
109
+ typeof authority.comparison.mode === "string" &&
110
+ sha256OrNull(authority.comparison.parameters_sha256) &&
111
+ sha256OrNull(authority.comparison.tolerance_sha256) &&
112
+ sha256OrNull(authority.comparison.mask_sha256));
113
+ }
114
+ function sha256OrNull(value) {
115
+ return value === null || /^[a-f0-9]{64}$/u.test(value);
116
+ }
@@ -12,6 +12,17 @@ interface CompileObservationAuthorityPlanInput {
12
12
  source_backed_execution_target: SourceBackedExecutionTargetV2 | null;
13
13
  workspace_manifest: WorkspaceManifestV2;
14
14
  protected_authority_paths?: readonly string[];
15
+ external_design_obligation_refs?: ReadonlySet<string>;
16
+ external_claim_obligation_refs_by_assertion?: ReadonlyMap<string, string>;
15
17
  }
16
18
  export declare function compileObservationAuthorityPlan(input: CompileObservationAuthorityPlanInput): CompiledObservationAuthorityV2[];
19
+ export declare function projectExternallyOwnedDesignAssertions(check: DeliveryCheckV2, designTargets: CompiledDesignTargetV2[], machineAuthorities: CompiledObservationAuthorityV2[], externalDesignObligationRefs: ReadonlySet<string>): {
20
+ check: DeliveryCheckV2;
21
+ removed_assertion_refs: Set<string>;
22
+ };
23
+ export declare function projectExternallyOwnedClaimAssertions(check: DeliveryCheckV2, observationAuthorities: CompiledObservationAuthorityV2[], externalClaimObligationRefsByAssertion: ReadonlyMap<string, string>): {
24
+ check: DeliveryCheckV2;
25
+ removed_assertion_refs: Set<string>;
26
+ };
27
+ export declare function assertionObligationRef(outcomeKey: string | null, checkKey: string, assertionKey: string): string;
17
28
  export {};
@@ -1,5 +1,6 @@
1
1
  import { JSON_POINTER_EXACT_METHODS, isJsonPointerExactOracle, } from "./long-task-json-pointer-observation.js";
2
2
  import { classifyMachineObservationCarrierRoleConflict } from "./long-task-admitted-observation.js";
3
+ import { designGroundObligationRef } from "./long-task-design-obligation.js";
3
4
  import { canonicalValueJson, sha256Hex } from "./strict-codec.js";
4
5
  import { classifyRepositoryPatternOverlap, normalizeRepositoryFile, } from "./long-task-paths.js";
5
6
  const PROCESS_DERIVED_CAPABILITIES = new Set([
@@ -106,7 +107,8 @@ export function compileObservationAuthorityPlan(input) {
106
107
  if (factBoundAssertions.has(assertion.key))
107
108
  continue;
108
109
  const expected = exactAssertionExpected(assertion);
109
- const obligationRef = assertionObligationRef(input.outcome_key, input.check.key, assertion.key);
110
+ const obligationRef = input.external_claim_obligation_refs_by_assertion?.get(assertion.key) ??
111
+ assertionObligationRef(input.outcome_key, input.check.key, assertion.key);
110
112
  candidates.push({
111
113
  obligation_ref: obligationRef,
112
114
  observation_identity: obligationRef,
@@ -115,6 +117,7 @@ export function compileObservationAuthorityPlan(input) {
115
117
  target_ref: input.check.execution_target.target_ref,
116
118
  method: "exact_value",
117
119
  expected_value_sha256: sha256Hex(canonicalValueJson(expected)),
120
+ expected_value: expected,
118
121
  actual_projection: assertionActualProjection(assertion),
119
122
  comparison: {
120
123
  comparator: "exact_value",
@@ -127,10 +130,89 @@ export function compileObservationAuthorityPlan(input) {
127
130
  diagnostic_scope: "assertion",
128
131
  });
129
132
  }
130
- const rows = candidates.map((candidate) => compileCandidate(input, candidate));
133
+ const rows = candidates.flatMap((candidate) => {
134
+ try {
135
+ return [compileCandidate(input, candidate)];
136
+ }
137
+ catch (error) {
138
+ const exactExternalDesign = candidate.diagnostic_scope === "design_fact" &&
139
+ input.external_design_obligation_refs?.has(candidate.obligation_ref);
140
+ const exactExternalClaim = candidate.diagnostic_scope === "assertion" &&
141
+ input.external_claim_obligation_refs_by_assertion?.get(candidate.assertion.key) === candidate.obligation_ref;
142
+ if ((exactExternalDesign || exactExternalClaim) &&
143
+ externalizableObservationError(error))
144
+ return [compileExternalCandidate(input, candidate)];
145
+ throw error;
146
+ }
147
+ });
131
148
  assertUniqueRows(rows);
132
149
  return rows.sort((left, right) => canonicalValueJson(left).localeCompare(canonicalValueJson(right)));
133
150
  }
151
+ export function projectExternallyOwnedDesignAssertions(check, designTargets, machineAuthorities, externalDesignObligationRefs) {
152
+ const obligationsByAssertion = new Map();
153
+ const add = (assertionRef, obligationRef) => {
154
+ const refs = obligationsByAssertion.get(assertionRef) ?? [];
155
+ refs.push(obligationRef);
156
+ obligationsByAssertion.set(assertionRef, refs);
157
+ };
158
+ for (const target of designTargets) {
159
+ for (const binding of target.verification_method_bindings)
160
+ for (const artifact of binding.evidence_artifacts)
161
+ for (const expectation of artifact.fact_expectations)
162
+ add(binding.assertion_ref, designGroundObligationRef(target.key, binding.method, artifact.condition_key, expectation.fact_ref));
163
+ for (const binding of target.symbolic_method_bindings ?? [])
164
+ for (const expectation of binding.rule_expectations)
165
+ add(binding.assertion_ref, expectation.obligation_ref);
166
+ }
167
+ const machineRefs = new Set(machineAuthorities
168
+ .filter((authority) => authority.authority !== "external_confirmation")
169
+ .map((authority) => authority.obligation_ref));
170
+ const removed = new Set();
171
+ for (const [assertionRef, refs] of obligationsByAssertion) {
172
+ const externalRefs = refs.filter((ref) => externalDesignObligationRefs.has(ref));
173
+ if (!externalRefs.length)
174
+ continue;
175
+ const admittedMachineRefs = refs.filter((ref) => machineRefs.has(ref));
176
+ if (admittedMachineRefs.length === refs.length)
177
+ continue;
178
+ if (!admittedMachineRefs.length && externalRefs.length === refs.length) {
179
+ removed.add(assertionRef);
180
+ continue;
181
+ }
182
+ fail("mixed_machine_external_design_assertion", `${check.key}:${assertionRef}:${refs.join(",")}`);
183
+ }
184
+ if (!removed.size)
185
+ return { check, removed_assertion_refs: removed };
186
+ return {
187
+ check: {
188
+ ...check,
189
+ positive_assertions: check.positive_assertions.filter((assertion) => !removed.has(assertion.key)),
190
+ negative_assertions: check.negative_assertions.filter((assertion) => !removed.has(assertion.key)),
191
+ },
192
+ removed_assertion_refs: removed,
193
+ };
194
+ }
195
+ export function projectExternallyOwnedClaimAssertions(check, observationAuthorities, externalClaimObligationRefsByAssertion) {
196
+ const removed = new Set();
197
+ for (const [assertionRef, obligationRef,] of externalClaimObligationRefsByAssertion) {
198
+ const authorities = observationAuthorities.filter((authority) => authority.assertion_ref === assertionRef &&
199
+ authority.obligation_ref === obligationRef);
200
+ if (authorities.some((authority) => authority.authority !== "external_confirmation"))
201
+ continue;
202
+ if (authorities.some((authority) => authority.authority === "external_confirmation"))
203
+ removed.add(assertionRef);
204
+ }
205
+ if (!removed.size)
206
+ return { check, removed_assertion_refs: removed };
207
+ return {
208
+ check: {
209
+ ...check,
210
+ positive_assertions: check.positive_assertions.filter((assertion) => !removed.has(assertion.key)),
211
+ negative_assertions: check.negative_assertions.filter((assertion) => !removed.has(assertion.key)),
212
+ },
213
+ removed_assertion_refs: removed,
214
+ };
215
+ }
134
216
  function compileCandidate(input, candidate) {
135
217
  const unimplementedDerivedCapability = candidate.assertion.evidence_capabilities.find((capability) => PROCESS_CAPABILITIES_REQUIRING_A_SEPARATE_PACKAGE_DERIVATION.has(capability));
136
218
  if (unimplementedDerivedCapability)
@@ -198,6 +280,46 @@ function compileCandidate(input, candidate) {
198
280
  runtime_requirements: runtimeRequirements(input),
199
281
  };
200
282
  }
283
+ function compileExternalCandidate(input, candidate) {
284
+ const carrierRefs = [];
285
+ const comparison = candidate.comparison;
286
+ const expectedIdentity = sha256Hex(canonicalValueJson({
287
+ obligation_ref: candidate.obligation_ref,
288
+ fact_ref: candidate.fact_ref,
289
+ method: candidate.method,
290
+ expected_value_sha256: candidate.expected_value_sha256,
291
+ comparison,
292
+ actual_projection: candidate.actual_projection,
293
+ carrier_refs: carrierRefs,
294
+ }));
295
+ return {
296
+ obligation_ref: candidate.obligation_ref,
297
+ fact_ref: candidate.fact_ref,
298
+ assertion_ref: candidate.assertion.key,
299
+ claim_refs: [...candidate.assertion.claims].sort(),
300
+ target_ref: candidate.target_ref,
301
+ proof_surface: input.check.proof_surface,
302
+ method: candidate.method,
303
+ evidence_capabilities: [
304
+ ...candidate.assertion.evidence_capabilities,
305
+ ].sort(),
306
+ authority: "external_confirmation",
307
+ expected_identity: expectedIdentity,
308
+ expected_value_sha256: candidate.expected_value_sha256,
309
+ ...(Object.hasOwn(candidate, "expected_value")
310
+ ? { expected_value: candidate.expected_value }
311
+ : {}),
312
+ actual_projection: candidate.actual_projection,
313
+ observation_identity: candidate.observation_identity,
314
+ comparison,
315
+ locator_policy: {
316
+ kind: "fixed_json_pointer",
317
+ value: observationPointer(candidate.observation_identity),
318
+ },
319
+ carrier_refs: carrierRefs,
320
+ runtime_requirements: runtimeRequirements(input),
321
+ };
322
+ }
201
323
  function selectAuthority(input, candidate) {
202
324
  const target = input.execution_target;
203
325
  if (target.role !== "product")
@@ -325,11 +447,20 @@ function requiredAssertion(assertions, assertionRef, diagnostic) {
325
447
  throw new Error(diagnostic);
326
448
  return assertion;
327
449
  }
328
- function assertionObligationRef(outcomeKey, checkKey, assertionKey) {
329
- return `assertion.${outcomeKey ?? "GLOBAL"}.${checkKey}.${assertionKey}`;
450
+ function externalizableObservationError(error) {
451
+ if (!(error instanceof Error))
452
+ return false;
453
+ return [
454
+ "unsupported_observer_requires_external_confirmation:",
455
+ "custom_oracle_machine_completion_forbidden:",
456
+ "machine_observer_not_admitted:",
457
+ "process_observer_direct_root_required:",
458
+ "process_observer_root_invocation_required:",
459
+ "process_observer_root_argv_mismatch:",
460
+ ].some((prefix) => error.message.startsWith(prefix));
330
461
  }
331
- function designGroundObligationRef(targetKey, method, conditionKey, factRef) {
332
- return `design.${targetKey}.${method}.${conditionKey}.${factRef}`;
462
+ export function assertionObligationRef(outcomeKey, checkKey, assertionKey) {
463
+ return `assertion.${outcomeKey ?? "GLOBAL"}.${checkKey}.${assertionKey}`;
333
464
  }
334
465
  function observationPointer(identity) {
335
466
  return `/observations/${identity.replace(/~/gu, "~0").replace(/\//gu, "~1")}`;
@@ -1,12 +1,9 @@
1
1
  export interface ProcessInstance {
2
2
  pid: number;
3
3
  parent_pid: number;
4
- start_identity: string | null;
5
4
  }
6
- export declare function processInstanceMatches(expected: Pick<ProcessInstance, "pid" | "start_identity">, current: Pick<ProcessInstance, "pid" | "start_identity">): boolean;
7
5
  export declare function processSnapshot(): Promise<ProcessInstance[]>;
8
6
  export declare function descendantsOf(rootPid: number, snapshot: readonly ProcessInstance[]): ProcessInstance[];
9
- export declare function liveProcessInstances(candidates: readonly ProcessInstance[], snapshot: readonly ProcessInstance[]): ProcessInstance[];
10
- export declare function rootProcessAlive(rootPid: number, rootInstance: ProcessInstance | null, snapshot: readonly ProcessInstance[]): boolean;
7
+ export declare function liveProcessInstances(candidates: readonly ProcessInstance[]): ProcessInstance[];
8
+ export declare function rootProcessAlive(rootPid: number): boolean;
11
9
  export declare function uniqueProcessInstances(instances: readonly ProcessInstance[]): ProcessInstance[];
12
- export declare function processInstanceKey(instance: ProcessInstance): string;
@@ -2,34 +2,15 @@ import { execFile } from "node:child_process";
2
2
  import { promisify } from "node:util";
3
3
  const PROCESS_TABLE_OUTPUT_LIMIT = 2 * 1024 * 1024;
4
4
  const execFileAsync = promisify(execFile);
5
- export function processInstanceMatches(expected, current) {
6
- if (expected.pid !== current.pid)
7
- return false;
8
- if (expected.start_identity === null || current.start_identity === null)
9
- return true;
10
- return expected.start_identity === current.start_identity;
11
- }
12
5
  export async function processSnapshot() {
6
+ assertNonWindowsProcessTree();
13
7
  let stdout;
14
8
  try {
15
- const result = process.platform === "win32"
16
- ? await execFileAsync("powershell.exe", [
17
- "-NoLogo",
18
- "-NoProfile",
19
- "-NonInteractive",
20
- "-Command",
21
- '$rows = Get-CimInstance Win32_Process; foreach ($row in $rows) { $started = if ($null -eq $row.CreationDate) { "unknown" } else { $row.CreationDate.ToUniversalTime().Ticks }; "$($row.ProcessId) $($row.ParentProcessId) $started" }',
22
- ], {
23
- encoding: "utf8",
24
- windowsHide: true,
25
- timeout: 5_000,
26
- maxBuffer: PROCESS_TABLE_OUTPUT_LIMIT,
27
- })
28
- : await execFileAsync("ps", ["-A", "-o", "pid=,ppid="], {
29
- encoding: "utf8",
30
- timeout: 5_000,
31
- maxBuffer: PROCESS_TABLE_OUTPUT_LIMIT,
32
- });
9
+ const result = await execFileAsync("ps", ["-A", "-o", "pid=,ppid="], {
10
+ encoding: "utf8",
11
+ timeout: 5_000,
12
+ maxBuffer: PROCESS_TABLE_OUTPUT_LIMIT,
13
+ });
33
14
  stdout = result.stdout;
34
15
  }
35
16
  catch (error) {
@@ -37,16 +18,12 @@ export async function processSnapshot() {
37
18
  }
38
19
  const rows = [];
39
20
  for (const line of stdout.split(/\r?\n/u)) {
40
- const [pidText, parentText, startText] = line.trim().split(/\s+/u);
21
+ const [pidText, parentText] = line.trim().split(/\s+/u);
41
22
  const pid = Number.parseInt(pidText ?? "", 10);
42
23
  const parent = Number.parseInt(parentText ?? "", 10);
43
24
  if (!Number.isSafeInteger(pid) || !Number.isSafeInteger(parent))
44
25
  continue;
45
- rows.push({
46
- pid,
47
- parent_pid: parent,
48
- start_identity: process.platform === "win32" && startText ? startText : null,
49
- });
26
+ rows.push({ pid, parent_pid: parent });
50
27
  }
51
28
  return rows;
52
29
  }
@@ -64,40 +41,27 @@ export function descendantsOf(rootPid, snapshot) {
64
41
  const seen = new Set();
65
42
  while (pending.length) {
66
43
  const processInstance = pending.shift();
67
- const key = processInstanceKey(processInstance);
68
- if (seen.has(key))
44
+ if (seen.has(processInstance.pid))
69
45
  continue;
70
- seen.add(key);
46
+ seen.add(processInstance.pid);
71
47
  result.push(processInstance);
72
48
  pending.push(...(children.get(processInstance.pid) ?? []));
73
49
  }
74
50
  return result;
75
51
  }
76
- export function liveProcessInstances(candidates, snapshot) {
77
- if (process.platform !== "win32")
78
- return candidates.filter((candidate) => processIdExists(candidate.pid));
79
- const currentByPid = new Map(snapshot.map((entry) => [entry.pid, entry]));
80
- return candidates.filter((candidate) => {
81
- const current = currentByPid.get(candidate.pid);
82
- return current ? processInstanceMatches(candidate, current) : false;
83
- });
52
+ export function liveProcessInstances(candidates) {
53
+ assertNonWindowsProcessTree();
54
+ return candidates.filter((candidate) => processIdExists(candidate.pid));
84
55
  }
85
- export function rootProcessAlive(rootPid, rootInstance, snapshot) {
86
- if (process.platform !== "win32")
87
- return processIdExists(rootPid);
88
- const current = snapshot.find((entry) => entry.pid === rootPid);
89
- if (!current)
90
- return false;
91
- return rootInstance ? processInstanceMatches(rootInstance, current) : true;
56
+ export function rootProcessAlive(rootPid) {
57
+ assertNonWindowsProcessTree();
58
+ return processIdExists(rootPid);
92
59
  }
93
60
  export function uniqueProcessInstances(instances) {
94
61
  return [
95
- ...new Map(instances.map((instance) => [processInstanceKey(instance), instance])).values(),
62
+ ...new Map(instances.map((instance) => [instance.pid, instance])).values(),
96
63
  ];
97
64
  }
98
- export function processInstanceKey(instance) {
99
- return `${instance.pid}:${instance.start_identity ?? "pid-only"}`;
100
- }
101
65
  function processIdExists(pid) {
102
66
  try {
103
67
  process.kill(pid, 0);
@@ -109,6 +73,10 @@ function processIdExists(pid) {
109
73
  throw error;
110
74
  }
111
75
  }
76
+ function assertNonWindowsProcessTree() {
77
+ if (process.platform === "win32")
78
+ throw new Error("process_observer_windows_job_required");
79
+ }
112
80
  function nodeErrorCode(error) {
113
81
  return error && typeof error === "object" && "code" in error
114
82
  ? String(error.code)
@@ -1,4 +1,3 @@
1
- export { processInstanceMatches } from "./long-task-process-table.js";
2
1
  export interface ProcessTreeObserver {
3
2
  stop(): void;
4
3
  wait(): Promise<void>;
@@ -1,12 +1,9 @@
1
- import { execFile } from "node:child_process";
2
- import { promisify } from "node:util";
3
- import { descendantsOf, liveProcessInstances, processInstanceKey, processInstanceMatches, processSnapshot, rootProcessAlive, uniqueProcessInstances, } from "./long-task-process-table.js";
4
- export { processInstanceMatches } from "./long-task-process-table.js";
1
+ import { descendantsOf, liveProcessInstances, processSnapshot, rootProcessAlive, uniqueProcessInstances, } from "./long-task-process-table.js";
5
2
  const PROCESS_TREE_GRACE_MS = 1_000;
6
- const execFileAsync = promisify(execFile);
7
3
  export function createProcessTreeObserver(rootPid) {
4
+ if (process.platform === "win32")
5
+ throw new Error("process_observer_windows_job_required");
8
6
  let stopped = false;
9
- let rootInstance = null;
10
7
  const observed = new Map();
11
8
  const monitor = observe();
12
9
  return {
@@ -17,86 +14,60 @@ export function createProcessTreeObserver(rootPid) {
17
14
  return monitor;
18
15
  },
19
16
  terminate(force) {
20
- return terminateProcessTree(rootPid, rootInstance, force, [...observed.values()], true);
17
+ return terminateProcessTree(rootPid, force, [...observed.values()], true);
21
18
  },
22
19
  forceQuiescence() {
23
- return forceProcessTreeQuiescence(rootPid, rootInstance, observed);
20
+ return forceProcessTreeQuiescence(rootPid, observed);
24
21
  },
25
22
  assertQuiescent() {
26
- return assertProcessTreeQuiescent(rootPid, rootInstance, observed);
23
+ return assertProcessTreeQuiescent(rootPid, observed);
27
24
  },
28
25
  };
29
26
  async function observe() {
30
27
  do {
31
28
  const snapshot = await processSnapshot();
32
- const currentRoot = snapshot.find((entry) => entry.pid === rootPid);
33
- if (currentRoot &&
34
- (!rootInstance || processInstanceMatches(rootInstance, currentRoot))) {
35
- rootInstance ??= currentRoot;
29
+ if (snapshot.some((entry) => entry.pid === rootPid))
36
30
  for (const descendant of descendantsOf(rootPid, snapshot))
37
- observed.set(processInstanceKey(descendant), descendant);
38
- }
31
+ observed.set(descendant.pid, descendant);
39
32
  if (stopped)
40
33
  return;
41
- await delay(process.platform === "win32" ? 100 : 25);
34
+ await delay(25);
42
35
  } while (!stopped);
43
36
  }
44
37
  }
45
- async function forceProcessTreeQuiescence(rootPid, rootInstance, observed) {
46
- await terminateProcessTree(rootPid, rootInstance, true, [...observed.values()], true);
38
+ async function forceProcessTreeQuiescence(rootPid, observed) {
39
+ await terminateProcessTree(rootPid, true, [...observed.values()], true);
47
40
  const deadline = Date.now() + PROCESS_TREE_GRACE_MS;
48
41
  while (Date.now() < deadline) {
49
- const snapshot = await processSnapshot();
50
- const rootAlive = rootProcessAlive(rootPid, rootInstance, snapshot);
51
- const descendantsAlive = liveProcessInstances([...observed.values()], snapshot).length;
52
- const groupAlive = process.platform !== "win32" && processGroupExists(rootPid);
42
+ const rootAlive = rootProcessAlive(rootPid);
43
+ const descendantsAlive = liveProcessInstances([
44
+ ...observed.values(),
45
+ ]).length;
46
+ const groupAlive = processGroupExists(rootPid);
53
47
  if (!rootAlive && descendantsAlive === 0 && !groupAlive)
54
48
  return;
55
- await delay(process.platform === "win32" ? 100 : 25);
49
+ await delay(25);
56
50
  }
57
51
  throw new Error("process_observer_descendant_process_alive");
58
52
  }
59
- async function assertProcessTreeQuiescent(rootPid, rootInstance, observed) {
53
+ async function assertProcessTreeQuiescent(rootPid, observed) {
60
54
  const snapshot = await processSnapshot();
61
- const currentRoot = snapshot.find((entry) => entry.pid === rootPid);
62
- const finalDescendants = currentRoot &&
63
- (!rootInstance || processInstanceMatches(rootInstance, currentRoot))
55
+ const finalDescendants = snapshot.some((entry) => entry.pid === rootPid)
64
56
  ? descendantsOf(rootPid, snapshot)
65
57
  : [];
66
58
  const candidates = uniqueProcessInstances([
67
59
  ...observed.values(),
68
60
  ...finalDescendants,
69
61
  ]);
70
- const descendants = liveProcessInstances(candidates, snapshot);
71
- const processGroupAlive = process.platform !== "win32" && processGroupExists(rootPid);
72
- if (!descendants.length && !processGroupAlive)
62
+ const descendants = liveProcessInstances(candidates);
63
+ if (!descendants.length && !processGroupExists(rootPid))
73
64
  return;
74
- await terminateProcessTree(rootPid, rootInstance, true, descendants, false);
65
+ await terminateProcessTree(rootPid, true, descendants, false);
75
66
  throw new Error("process_observer_descendant_process_alive");
76
67
  }
77
- async function terminateProcessTree(rootPid, rootInstance, force, knownDescendants, includeRoot) {
68
+ async function terminateProcessTree(rootPid, force, knownDescendants, includeRoot) {
78
69
  if (!Number.isSafeInteger(rootPid) || rootPid <= 0)
79
70
  return;
80
- if (process.platform === "win32") {
81
- const snapshot = await processSnapshot();
82
- const currentRoot = snapshot.find((entry) => entry.pid === rootPid);
83
- const rootTarget = includeRoot &&
84
- currentRoot &&
85
- (!rootInstance || processInstanceMatches(rootInstance, currentRoot))
86
- ? currentRoot
87
- : null;
88
- const currentDescendants = rootTarget
89
- ? descendantsOf(rootPid, snapshot)
90
- : [];
91
- const descendants = liveProcessInstances(uniqueProcessInstances([...knownDescendants, ...currentDescendants]), snapshot).reverse();
92
- const targets = rootTarget ? [...descendants, rootTarget] : descendants;
93
- for (const target of targets)
94
- await execFileAsync("taskkill.exe", ["/PID", String(target.pid), "/T", "/F"], {
95
- windowsHide: true,
96
- timeout: PROCESS_TREE_GRACE_MS,
97
- }).catch(() => undefined);
98
- return;
99
- }
100
71
  const signal = force ? "SIGKILL" : "SIGTERM";
101
72
  if (includeRoot)
102
73
  try {
@@ -106,8 +77,7 @@ async function terminateProcessTree(rootPid, rootInstance, force, knownDescendan
106
77
  if (nodeErrorCode(error) !== "ESRCH")
107
78
  throw error;
108
79
  }
109
- const snapshot = await processSnapshot();
110
- const descendants = liveProcessInstances(knownDescendants, snapshot);
80
+ const descendants = liveProcessInstances(knownDescendants);
111
81
  for (const descendant of descendants.reverse())
112
82
  try {
113
83
  process.kill(descendant.pid, signal);
@@ -0,0 +1,12 @@
1
+ import type { DeliveryContractV2, EvidenceCapabilityV2, SemanticFactExpectationV2 } from "./long-task-delivery-types.js";
2
+ import type { SemanticFactManifestV1 } from "./semantic-fact-types.js";
3
+ export { externalClaimCapabilityFloor } from "./long-task-proof-capability-floor.js";
4
+ export type CheckCompletionRoleV2 = "semantic" | "diagnostic";
5
+ export interface CheckProofAdequacyV2 {
6
+ completion_role: CheckCompletionRoleV2;
7
+ expected_authority_refs: Record<string, string>;
8
+ required_evidence_capabilities: Record<string, EvidenceCapabilityV2[]>;
9
+ }
10
+ export type ProofAdequacyByCheckV2 = Record<string, CheckProofAdequacyV2>;
11
+ export declare function proofAdequacyCheckKey(outcomeKey: string | null, checkKey: string): string;
12
+ export declare function validateLongTaskProofAdequacy(contract: DeliveryContractV2, manifest: SemanticFactManifestV1, expectationsByCheck: ReadonlyMap<string, SemanticFactExpectationV2[]>): ProofAdequacyByCheckV2;