project-tiny-context-harness 0.8.11 → 0.8.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (395) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +514 -472
  3. package/assets/README.md +803 -749
  4. package/assets/README.zh-CN.md +468 -431
  5. package/assets/agents/.gitkeep +1 -1
  6. package/assets/agents/AGENTS_CORE.md +22 -24
  7. package/assets/agents/long-task-implementation.toml +15 -0
  8. package/assets/context_templates/architecture.md +18 -18
  9. package/assets/context_templates/area.md +30 -30
  10. package/assets/context_templates/context.toml +24 -24
  11. package/assets/context_templates/deployment.md +35 -35
  12. package/assets/context_templates/global.md +56 -56
  13. package/assets/context_templates/product-surface-contract.md +70 -70
  14. package/assets/context_templates/screen-contract.md +189 -189
  15. package/assets/context_templates/verification.md +25 -25
  16. package/assets/github/.gitkeep +1 -1
  17. package/assets/github/harness.yml +39 -39
  18. package/assets/make/.gitkeep +1 -1
  19. package/assets/make/ty-context.mk +48 -48
  20. package/assets/skills/context_development_engineer/SKILL.md +72 -185
  21. package/assets/skills/context_full_project_export/SKILL.md +28 -28
  22. package/assets/skills/context_harness_upgrade/SKILL.md +60 -60
  23. package/assets/skills/context_product_plan/SKILL.md +35 -101
  24. package/assets/skills/context_surface_contract/SKILL.md +194 -191
  25. package/assets/skills/context_uiux_design/SKILL.md +49 -172
  26. package/assets/skills/design-resource-authoring/SKILL.md +54 -88
  27. package/assets/skills/design-resource-authoring/references/downstream-handoff.md +51 -163
  28. package/assets/skills/design-resource-authoring/references/formal-selected-web-app-handoff.md +96 -0
  29. package/assets/skills/design-resource-authoring/references/open-design-provider.md +140 -120
  30. package/assets/skills/design-resource-authoring/references/recovery-and-writeback.md +199 -0
  31. package/assets/skills/design-resource-authoring/references/resource-selection.md +158 -181
  32. package/assets/skills/design-system-authoring/SKILL.md +57 -57
  33. package/assets/skills/design-system-authoring/agents/openai.yaml +6 -6
  34. package/assets/skills/design-system-authoring/references/authority-adoption.md +48 -48
  35. package/assets/skills/design-system-authoring/references/open-design-design-system-provider.md +110 -110
  36. package/assets/skills/long-task-workflow/SKILL.md +71 -106
  37. package/assets/skills/long-task-workflow/agents/openai.yaml +1 -1
  38. package/assets/skills/long-task-workflow/references/authority-lifecycle.md +71 -69
  39. package/assets/skills/long-task-workflow/references/contract-authoring.md +110 -101
  40. package/assets/skills/long-task-workflow/references/evidence-design.md +99 -78
  41. package/assets/skills/long-task-workflow/references/source-authoring.md +90 -90
  42. package/assets/tools/validate_context.py +442 -442
  43. package/dist/commands/design-resource-recovery.d.ts +1 -0
  44. package/dist/commands/design-resource-recovery.js +152 -0
  45. package/dist/commands/design-resource.js +29 -3
  46. package/dist/commands/enable.js +2 -0
  47. package/dist/commands/index.js +2 -2
  48. package/dist/commands/long-task-revision.js +8 -7
  49. package/dist/commands/sync.js +2 -0
  50. package/dist/index.d.ts +3 -3
  51. package/dist/index.js +2 -0
  52. package/dist/lib/compact-authoring-support.d.ts +22 -0
  53. package/dist/lib/compact-authoring-support.js +143 -0
  54. package/dist/lib/compact-shared-structure-authoring.d.ts +5 -0
  55. package/dist/lib/compact-shared-structure-authoring.js +9 -0
  56. package/dist/lib/compact-shared-structure-types.d.ts +61 -0
  57. package/dist/lib/compact-shared-structure-types.js +1 -0
  58. package/dist/lib/compact-shared-structure-validation.d.ts +2 -0
  59. package/dist/lib/compact-shared-structure-validation.js +159 -0
  60. package/dist/lib/compact-shared-structures.d.ts +3 -0
  61. package/dist/lib/compact-shared-structures.js +204 -0
  62. package/dist/lib/design-resource-fact-enums.d.ts +4 -0
  63. package/dist/lib/design-resource-fact-enums.js +12 -0
  64. package/dist/lib/design-resource-fact-manifest-shape-evidence.js +2 -2
  65. package/dist/lib/design-resource-fact-policy.d.ts +2 -2
  66. package/dist/lib/design-resource-fact-types.d.ts +2 -2
  67. package/dist/lib/design-resource-handoff-bundle-draft.js +4 -2
  68. package/dist/lib/design-resource-handoff-input-types.d.ts +3 -0
  69. package/dist/lib/design-resource-handoff-parser.d.ts +2 -2
  70. package/dist/lib/design-resource-handoff-parser.js +2 -2
  71. package/dist/lib/design-resource-handoff-shape.d.ts +2 -0
  72. package/dist/lib/design-resource-handoff-shape.js +10 -0
  73. package/dist/lib/design-resource-handoff-snapshot.js +4 -0
  74. package/dist/lib/design-resource-handoff-validation.d.ts +4 -1
  75. package/dist/lib/design-resource-handoff-validation.js +11 -0
  76. package/dist/lib/design-resource-handoff-web-dependency-validation.d.ts +4 -2
  77. package/dist/lib/design-resource-reconciliation-codec.d.ts +2 -0
  78. package/dist/lib/design-resource-reconciliation-codec.js +174 -0
  79. package/dist/lib/design-resource-reconciliation-types.d.ts +62 -0
  80. package/dist/lib/design-resource-reconciliation-types.js +1 -0
  81. package/dist/lib/design-resource-reconciliation.d.ts +3 -0
  82. package/dist/lib/design-resource-reconciliation.js +224 -0
  83. package/dist/lib/design-resource-recovery-authority-policy.d.ts +8 -0
  84. package/dist/lib/design-resource-recovery-authority-policy.js +123 -0
  85. package/dist/lib/design-resource-recovery-catalog-resources.d.ts +6 -0
  86. package/dist/lib/design-resource-recovery-catalog-resources.js +121 -0
  87. package/dist/lib/design-resource-recovery-catalog-shape.d.ts +3 -0
  88. package/dist/lib/design-resource-recovery-catalog-shape.js +104 -0
  89. package/dist/lib/design-resource-recovery-catalog.d.ts +9 -0
  90. package/dist/lib/design-resource-recovery-catalog.js +103 -0
  91. package/dist/lib/design-resource-recovery-cleanup.d.ts +2 -0
  92. package/dist/lib/design-resource-recovery-cleanup.js +11 -0
  93. package/dist/lib/design-resource-recovery-codec-primitives.d.ts +19 -0
  94. package/dist/lib/design-resource-recovery-codec-primitives.js +92 -0
  95. package/dist/lib/design-resource-recovery-codec.d.ts +4 -0
  96. package/dist/lib/design-resource-recovery-codec.js +93 -0
  97. package/dist/lib/design-resource-recovery-current.d.ts +9 -0
  98. package/dist/lib/design-resource-recovery-current.js +41 -0
  99. package/dist/lib/design-resource-recovery-delta-policy.d.ts +5 -0
  100. package/dist/lib/design-resource-recovery-delta-policy.js +108 -0
  101. package/dist/lib/design-resource-recovery-files.d.ts +37 -0
  102. package/dist/lib/design-resource-recovery-files.js +204 -0
  103. package/dist/lib/design-resource-recovery-final-disposition-shape.d.ts +2 -0
  104. package/dist/lib/design-resource-recovery-final-disposition-shape.js +47 -0
  105. package/dist/lib/design-resource-recovery-patch-types.d.ts +54 -0
  106. package/dist/lib/design-resource-recovery-patch-types.js +1 -0
  107. package/dist/lib/design-resource-recovery-replay.d.ts +7 -0
  108. package/dist/lib/design-resource-recovery-replay.js +112 -0
  109. package/dist/lib/design-resource-recovery-repository-bindings.d.ts +9 -0
  110. package/dist/lib/design-resource-recovery-repository-bindings.js +49 -0
  111. package/dist/lib/design-resource-recovery-schema.d.ts +5 -0
  112. package/dist/lib/design-resource-recovery-schema.js +5 -0
  113. package/dist/lib/design-resource-recovery-shape.d.ts +10 -0
  114. package/dist/lib/design-resource-recovery-shape.js +184 -0
  115. package/dist/lib/design-resource-recovery-source-authority.d.ts +5 -0
  116. package/dist/lib/design-resource-recovery-source-authority.js +219 -0
  117. package/dist/lib/design-resource-recovery-text.d.ts +17 -0
  118. package/dist/lib/design-resource-recovery-text.js +186 -0
  119. package/dist/lib/design-resource-recovery-types.d.ts +197 -0
  120. package/dist/lib/design-resource-recovery-types.js +1 -0
  121. package/dist/lib/design-resource-recovery-writeback-policy.d.ts +5 -0
  122. package/dist/lib/design-resource-recovery-writeback-policy.js +326 -0
  123. package/dist/lib/design-resource-recovery-writeback-shape.d.ts +6 -0
  124. package/dist/lib/design-resource-recovery-writeback-shape.js +155 -0
  125. package/dist/lib/design-resource-recovery.d.ts +44 -0
  126. package/dist/lib/design-resource-recovery.js +216 -0
  127. package/dist/lib/design-resource-symbolic-applicability-authority.d.ts +7 -0
  128. package/dist/lib/design-resource-symbolic-applicability-authority.js +19 -0
  129. package/dist/lib/design-resource-symbolic-applicability-policy.d.ts +12 -0
  130. package/dist/lib/design-resource-symbolic-applicability-policy.js +79 -0
  131. package/dist/lib/design-resource-symbolic-applicability-profiles.d.ts +8 -0
  132. package/dist/lib/design-resource-symbolic-applicability-profiles.js +55 -0
  133. package/dist/lib/design-resource-symbolic-applicability-shape.d.ts +2 -0
  134. package/dist/lib/design-resource-symbolic-applicability-shape.js +76 -0
  135. package/dist/lib/design-resource-symbolic-applicability-validation.d.ts +7 -0
  136. package/dist/lib/design-resource-symbolic-applicability-validation.js +128 -0
  137. package/dist/lib/design-resource-symbolic-compilation.d.ts +3 -0
  138. package/dist/lib/design-resource-symbolic-compilation.js +13 -0
  139. package/dist/lib/design-resource-symbolic-denotation.d.ts +3 -0
  140. package/dist/lib/design-resource-symbolic-denotation.js +167 -0
  141. package/dist/lib/design-resource-symbolic-disposition-validation.d.ts +4 -0
  142. package/dist/lib/design-resource-symbolic-disposition-validation.js +28 -0
  143. package/dist/lib/design-resource-symbolic-fact-policy.d.ts +12 -0
  144. package/dist/lib/design-resource-symbolic-fact-policy.js +12 -0
  145. package/dist/lib/design-resource-symbolic-fact-shape.d.ts +3 -0
  146. package/dist/lib/design-resource-symbolic-fact-shape.js +138 -0
  147. package/dist/lib/design-resource-symbolic-fact-types.d.ts +213 -0
  148. package/dist/lib/design-resource-symbolic-fact-types.js +1 -0
  149. package/dist/lib/design-resource-symbolic-fact-validation.d.ts +3 -0
  150. package/dist/lib/design-resource-symbolic-fact-validation.js +86 -0
  151. package/dist/lib/design-resource-symbolic-indexes.d.ts +23 -0
  152. package/dist/lib/design-resource-symbolic-indexes.js +54 -0
  153. package/dist/lib/design-resource-symbolic-manifest-shape.d.ts +3 -0
  154. package/dist/lib/design-resource-symbolic-manifest-shape.js +155 -0
  155. package/dist/lib/design-resource-symbolic-manifest-validation.d.ts +6 -0
  156. package/dist/lib/design-resource-symbolic-manifest-validation.js +132 -0
  157. package/dist/lib/design-resource-symbolic-noninterference-artifact.d.ts +33 -0
  158. package/dist/lib/design-resource-symbolic-noninterference-artifact.js +110 -0
  159. package/dist/lib/design-resource-symbolic-noninterference-equivalence.d.ts +3 -0
  160. package/dist/lib/design-resource-symbolic-noninterference-equivalence.js +77 -0
  161. package/dist/lib/design-resource-symbolic-noninterference-recompute.d.ts +4 -0
  162. package/dist/lib/design-resource-symbolic-noninterference-recompute.js +146 -0
  163. package/dist/lib/design-resource-symbolic-noninterference-scope.d.ts +7 -0
  164. package/dist/lib/design-resource-symbolic-noninterference-scope.js +49 -0
  165. package/dist/lib/design-resource-symbolic-noninterference-shape.d.ts +2 -0
  166. package/dist/lib/design-resource-symbolic-noninterference-shape.js +152 -0
  167. package/dist/lib/design-resource-symbolic-noninterference-types.d.ts +103 -0
  168. package/dist/lib/design-resource-symbolic-noninterference-types.js +1 -0
  169. package/dist/lib/design-resource-symbolic-noninterference-validation.d.ts +5 -0
  170. package/dist/lib/design-resource-symbolic-noninterference-validation.js +62 -0
  171. package/dist/lib/design-resource-symbolic-oracle-fingerprint.d.ts +1 -0
  172. package/dist/lib/design-resource-symbolic-oracle-fingerprint.js +47 -0
  173. package/dist/lib/design-resource-symbolic-predicate-shape.d.ts +6 -0
  174. package/dist/lib/design-resource-symbolic-predicate-shape.js +123 -0
  175. package/dist/lib/design-resource-symbolic-production-closure.d.ts +4 -0
  176. package/dist/lib/design-resource-symbolic-production-closure.js +144 -0
  177. package/dist/lib/design-resource-symbolic-proof-authority-validation.d.ts +10 -0
  178. package/dist/lib/design-resource-symbolic-proof-authority-validation.js +68 -0
  179. package/dist/lib/design-resource-symbolic-proof-validation.d.ts +10 -0
  180. package/dist/lib/design-resource-symbolic-proof-validation.js +89 -0
  181. package/dist/lib/design-resource-symbolic-region-validation.d.ts +19 -0
  182. package/dist/lib/design-resource-symbolic-region-validation.js +146 -0
  183. package/dist/lib/design-resource-symbolic-resource-validation.d.ts +5 -0
  184. package/dist/lib/design-resource-symbolic-resource-validation.js +90 -0
  185. package/dist/lib/design-resource-symbolic-rule-shape.d.ts +27 -0
  186. package/dist/lib/design-resource-symbolic-rule-shape.js +158 -0
  187. package/dist/lib/design-resource-symbolic-safety-validation.d.ts +6 -0
  188. package/dist/lib/design-resource-symbolic-safety-validation.js +29 -0
  189. package/dist/lib/design-resource-symbolic-source-ir-evaluation.d.ts +19 -0
  190. package/dist/lib/design-resource-symbolic-source-ir-evaluation.js +74 -0
  191. package/dist/lib/design-resource-symbolic-source-ir-evidence.d.ts +44 -0
  192. package/dist/lib/design-resource-symbolic-source-ir-evidence.js +88 -0
  193. package/dist/lib/design-resource-symbolic-source-ir-oracle.d.ts +13 -0
  194. package/dist/lib/design-resource-symbolic-source-ir-oracle.js +96 -0
  195. package/dist/lib/design-resource-symbolic-source-ir-proof.d.ts +14 -0
  196. package/dist/lib/design-resource-symbolic-source-ir-proof.js +98 -0
  197. package/dist/lib/design-resource-symbolic-source-ir-shape.d.ts +2 -0
  198. package/dist/lib/design-resource-symbolic-source-ir-shape.js +38 -0
  199. package/dist/lib/design-resource-symbolic-source-ir-types.d.ts +17 -0
  200. package/dist/lib/design-resource-symbolic-source-ir-types.js +2 -0
  201. package/dist/lib/design-resource-symbolic-static-dependency-validation.d.ts +2 -0
  202. package/dist/lib/design-resource-symbolic-static-dependency-validation.js +83 -0
  203. package/dist/lib/design-resource-symbolic-structural-closure-validation.d.ts +6 -0
  204. package/dist/lib/design-resource-symbolic-structural-closure-validation.js +79 -0
  205. package/dist/lib/design-resource-symbolic-validation-support.d.ts +29 -0
  206. package/dist/lib/design-resource-symbolic-validation-support.js +111 -0
  207. package/dist/lib/design-resource-v1-capacity-header.d.ts +8 -0
  208. package/dist/lib/design-resource-v1-capacity-header.js +231 -0
  209. package/dist/lib/design-resource-v1-capacity.d.ts +5 -0
  210. package/dist/lib/design-resource-v1-capacity.js +45 -0
  211. package/dist/lib/init.js +1 -0
  212. package/dist/lib/long-task-acceptance-shape.js +8 -2
  213. package/dist/lib/long-task-activation-validation.js +13 -3
  214. package/dist/lib/long-task-admitted-observation-records.d.ts +25 -0
  215. package/dist/lib/long-task-admitted-observation-records.js +40 -0
  216. package/dist/lib/long-task-admitted-observation.d.ts +93 -0
  217. package/dist/lib/long-task-admitted-observation.js +201 -0
  218. package/dist/lib/long-task-artifacts.d.ts +1 -0
  219. package/dist/lib/long-task-artifacts.js +1 -0
  220. package/dist/lib/long-task-authority-material-diff.js +1 -0
  221. package/dist/lib/long-task-authority-policy.d.ts +5 -0
  222. package/dist/lib/long-task-authority-policy.js +5 -0
  223. package/dist/lib/long-task-authority-revision-details.js +3 -1
  224. package/dist/lib/long-task-authority.js +2 -1
  225. package/dist/lib/long-task-check-execution-policy.js +5 -0
  226. package/dist/lib/long-task-check-runner.d.ts +2 -2
  227. package/dist/lib/long-task-check-runner.js +440 -23
  228. package/dist/lib/long-task-claims.d.ts +18 -0
  229. package/dist/lib/long-task-claims.js +35 -0
  230. package/dist/lib/long-task-codex-agent-profile.d.ts +42 -0
  231. package/dist/lib/long-task-codex-agent-profile.js +276 -0
  232. package/dist/lib/long-task-compact-authoring-projections.d.ts +12 -0
  233. package/dist/lib/long-task-compact-authoring-projections.js +67 -0
  234. package/dist/lib/long-task-compact-authoring.d.ts +3 -0
  235. package/dist/lib/long-task-compact-authoring.js +173 -0
  236. package/dist/lib/long-task-compact-carrier.d.ts +7 -0
  237. package/dist/lib/long-task-compact-carrier.js +132 -0
  238. package/dist/lib/long-task-compact-parser.d.ts +14 -0
  239. package/dist/lib/long-task-compact-parser.js +123 -0
  240. package/dist/lib/long-task-compact-primitives.d.ts +22 -0
  241. package/dist/lib/long-task-compact-primitives.js +132 -0
  242. package/dist/lib/long-task-compact-projections.d.ts +4 -0
  243. package/dist/lib/long-task-compact-projections.js +153 -0
  244. package/dist/lib/long-task-compact-structure-targets.d.ts +2 -0
  245. package/dist/lib/long-task-compact-structure-targets.js +91 -0
  246. package/dist/lib/long-task-conformance-policy.js +3 -1
  247. package/dist/lib/long-task-counterfactual-claim-policy.d.ts +3 -4
  248. package/dist/lib/long-task-counterfactual-claim-policy.js +11 -3
  249. package/dist/lib/long-task-counterfactual-sandbox.d.ts +1 -1
  250. package/dist/lib/long-task-counterfactual-sandbox.js +8 -5
  251. package/dist/lib/long-task-counterfactual-types.d.ts +2 -0
  252. package/dist/lib/long-task-delivery-compiler.js +2 -0
  253. package/dist/lib/long-task-delivery-parser.d.ts +1 -0
  254. package/dist/lib/long-task-delivery-parser.js +38 -6
  255. package/dist/lib/long-task-design-resource-handoff.d.ts +2 -1
  256. package/dist/lib/long-task-design-resource-handoff.js +71 -11
  257. package/dist/lib/long-task-design-resource-method-binding.d.ts +8 -1
  258. package/dist/lib/long-task-design-resource-method-binding.js +150 -0
  259. package/dist/lib/long-task-evidence-capability-codec.js +256 -34
  260. package/dist/lib/long-task-evidence-capability-policy.d.ts +3 -2
  261. package/dist/lib/long-task-evidence-capability-policy.js +142 -8
  262. package/dist/lib/long-task-evidence-capability-runtime.d.ts +5 -2
  263. package/dist/lib/long-task-evidence-capability-runtime.js +420 -68
  264. package/dist/lib/long-task-evidence-capability-types.d.ts +70 -2
  265. package/dist/lib/long-task-evidence-sensitivity-policy.d.ts +9 -0
  266. package/dist/lib/long-task-evidence-sensitivity-policy.js +31 -1
  267. package/dist/lib/long-task-evidence-v2.d.ts +4 -4
  268. package/dist/lib/long-task-evidence-v2.js +322 -44
  269. package/dist/lib/long-task-exact-comparison.d.ts +16 -0
  270. package/dist/lib/long-task-exact-comparison.js +28 -0
  271. package/dist/lib/long-task-execution-observation.d.ts +24 -0
  272. package/dist/lib/long-task-execution-observation.js +332 -0
  273. package/dist/lib/long-task-explain-acceptance-link.d.ts +4 -0
  274. package/dist/lib/long-task-explain-acceptance-link.js +4 -0
  275. package/dist/lib/long-task-explain-claim-links.d.ts +2 -0
  276. package/dist/lib/long-task-explain-claim-links.js +2 -0
  277. package/dist/lib/long-task-explain-source-links.d.ts +6 -0
  278. package/dist/lib/long-task-final-v2.js +7 -4
  279. package/dist/lib/long-task-hook-install.d.ts +19 -2
  280. package/dist/lib/long-task-hook-install.js +288 -91
  281. package/dist/lib/long-task-json-pointer-observation.d.ts +59 -0
  282. package/dist/lib/long-task-json-pointer-observation.js +184 -0
  283. package/dist/lib/long-task-observation-artifact.d.ts +8 -0
  284. package/dist/lib/long-task-observation-artifact.js +58 -0
  285. package/dist/lib/long-task-observation-authority.d.ts +17 -0
  286. package/dist/lib/long-task-observation-authority.js +348 -0
  287. package/dist/lib/long-task-paths.js +1 -1
  288. package/dist/lib/long-task-playwright-capability-records.d.ts +2 -0
  289. package/dist/lib/long-task-playwright-capability-records.js +74 -2
  290. package/dist/lib/long-task-process-observation.d.ts +6 -0
  291. package/dist/lib/long-task-process-observation.js +117 -0
  292. package/dist/lib/long-task-process-runtime-closure.d.ts +13 -0
  293. package/dist/lib/long-task-process-runtime-closure.js +175 -0
  294. package/dist/lib/long-task-progress.js +2 -0
  295. package/dist/lib/long-task-protected-files.d.ts +1 -1
  296. package/dist/lib/long-task-protected-files.js +1 -30
  297. package/dist/lib/long-task-risk.js +8 -3
  298. package/dist/lib/long-task-root-shape.js +10 -1
  299. package/dist/lib/long-task-runner-environment.d.ts +1 -1
  300. package/dist/lib/long-task-runner-environment.js +4 -4
  301. package/dist/lib/long-task-runner-freeze.d.ts +4 -2
  302. package/dist/lib/long-task-runner-freeze.js +130 -28
  303. package/dist/lib/long-task-runtime-types.d.ts +111 -0
  304. package/dist/lib/long-task-scoped-binding.d.ts +13 -0
  305. package/dist/lib/long-task-scoped-binding.js +11 -0
  306. package/dist/lib/long-task-semantic-contract-types.d.ts +2 -1
  307. package/dist/lib/long-task-semantic-fact-binding-types.d.ts +8 -0
  308. package/dist/lib/long-task-semantic-fact-closure.js +4 -1
  309. package/dist/lib/long-task-semantic-fact-contract-closure.d.ts +1 -1
  310. package/dist/lib/long-task-semantic-fact-contract-closure.js +18 -6
  311. package/dist/lib/long-task-semantic-fact-contract-facts.d.ts +1 -1
  312. package/dist/lib/long-task-semantic-fact-contract-facts.js +4 -1
  313. package/dist/lib/long-task-semantic-fact-contract-proofs.d.ts +1 -1
  314. package/dist/lib/long-task-semantic-fact-contract-proofs.js +12 -3
  315. package/dist/lib/long-task-semantic-fact-evidence.d.ts +8 -4
  316. package/dist/lib/long-task-semantic-fact-evidence.js +103 -43
  317. package/dist/lib/long-task-semantic-fact-shape.js +17 -6
  318. package/dist/lib/long-task-shape-primitives.d.ts +1 -1
  319. package/dist/lib/long-task-shape-primitives.js +1 -0
  320. package/dist/lib/long-task-source-claim-validation.js +4 -1
  321. package/dist/lib/long-task-source-item-parser.d.ts +2 -2
  322. package/dist/lib/long-task-source-item-parser.js +20 -11
  323. package/dist/lib/long-task-source-target-continuity.d.ts +2 -2
  324. package/dist/lib/long-task-source-target-continuity.js +35 -2
  325. package/dist/lib/long-task-source-target-index.d.ts +3 -0
  326. package/dist/lib/long-task-source-target-index.js +19 -0
  327. package/dist/lib/long-task-stage-policy.js +10 -4
  328. package/dist/lib/long-task-static-observation-freeze.d.ts +83 -0
  329. package/dist/lib/long-task-static-observation-freeze.js +428 -0
  330. package/dist/lib/long-task-status-projection.js +5 -1
  331. package/dist/lib/long-task-target-policy.d.ts +1 -1
  332. package/dist/lib/long-task-target-policy.js +3 -0
  333. package/dist/lib/long-task-ui-design-policy.js +64 -4
  334. package/dist/lib/long-task-ui-surface-shape.js +195 -0
  335. package/dist/lib/long-task-ui-surface-types.d.ts +53 -0
  336. package/dist/lib/long-task-verifier-dependency-closure.js +7 -3
  337. package/dist/lib/long-task-verifier-v2.js +70 -9
  338. package/dist/lib/long-task-worker-selection.d.ts +2 -0
  339. package/dist/lib/long-task-worker-selection.js +7 -0
  340. package/dist/lib/long-task-workspace-scope.js +3 -1
  341. package/dist/lib/long-task-workspace.d.ts +1 -1
  342. package/dist/lib/long-task-workspace.js +12 -13
  343. package/dist/lib/migrations.js +58 -0
  344. package/dist/lib/profiles.js +0 -1
  345. package/dist/lib/repository-path-safety.d.ts +14 -0
  346. package/dist/lib/repository-path-safety.js +126 -0
  347. package/dist/lib/semantic-fact-compact-authoring.d.ts +2 -0
  348. package/dist/lib/semantic-fact-compact-authoring.js +160 -0
  349. package/dist/lib/semantic-fact-compact-capacity.d.ts +9 -0
  350. package/dist/lib/semantic-fact-compact-capacity.js +40 -0
  351. package/dist/lib/semantic-fact-compact-carrier.d.ts +16 -0
  352. package/dist/lib/semantic-fact-compact-carrier.js +146 -0
  353. package/dist/lib/semantic-fact-compact-parser.d.ts +17 -0
  354. package/dist/lib/semantic-fact-compact-parser.js +168 -0
  355. package/dist/lib/semantic-fact-compact-revision.d.ts +11 -0
  356. package/dist/lib/semantic-fact-compact-revision.js +64 -0
  357. package/dist/lib/semantic-fact-compact-support.d.ts +23 -0
  358. package/dist/lib/semantic-fact-compact-support.js +159 -0
  359. package/dist/lib/semantic-fact-policy-census.d.ts +1 -0
  360. package/dist/lib/semantic-fact-policy-census.js +43 -0
  361. package/dist/lib/semantic-fact-proof-shape.d.ts +1 -1
  362. package/dist/lib/semantic-fact-property-shape.d.ts +1 -1
  363. package/dist/lib/semantic-fact-source-parser.d.ts +5 -0
  364. package/dist/lib/semantic-fact-source-parser.js +47 -6
  365. package/dist/lib/structural-closure-cost.d.ts +79 -0
  366. package/dist/lib/structural-closure-cost.js +91 -0
  367. package/dist/lib/symbolic-denotation-dag-builder.d.ts +25 -0
  368. package/dist/lib/symbolic-denotation-dag-builder.js +176 -0
  369. package/dist/lib/symbolic-denotation-domain-validation.d.ts +3 -0
  370. package/dist/lib/symbolic-denotation-domain-validation.js +56 -0
  371. package/dist/lib/symbolic-denotation-engine.d.ts +32 -0
  372. package/dist/lib/symbolic-denotation-engine.js +140 -0
  373. package/dist/lib/symbolic-denotation-public.d.ts +11 -0
  374. package/dist/lib/symbolic-denotation-public.js +12 -0
  375. package/dist/lib/symbolic-denotation-runtime.d.ts +20 -0
  376. package/dist/lib/symbolic-denotation-runtime.js +90 -0
  377. package/dist/lib/symbolic-denotation-support.d.ts +11 -0
  378. package/dist/lib/symbolic-denotation-support.js +49 -0
  379. package/dist/lib/symbolic-denotation-types.d.ts +133 -0
  380. package/dist/lib/symbolic-denotation-types.js +18 -0
  381. package/dist/lib/symbolic-denotation-validation.d.ts +6 -0
  382. package/dist/lib/symbolic-denotation-validation.js +126 -0
  383. package/dist/lib/sync-engine.d.ts +1 -0
  384. package/dist/lib/sync-engine.js +4 -1
  385. package/dist/lib/upgrade.js +1 -0
  386. package/dist/long-task-hook.js +40 -1
  387. package/dist/public-types.d.ts +8 -0
  388. package/dist/public-types.js +1 -0
  389. package/dist/schemas/design-resource-symbolic-noninterference-artifact-v2.schema.json +289 -0
  390. package/dist/schemas/design-resource-symbolic-source-ir-v1.schema.json +130 -0
  391. package/dist/schemas/long-task-delivery-v2/long-task-delivery-v2.schema.json +435 -5
  392. package/migrations/README.md +92 -15
  393. package/package.json +2 -2
  394. package/source-mappings.yaml +28 -25
  395. package/assets/skills/source-plan-authoring/SKILL.md +0 -14
@@ -1,4 +1,5 @@
1
- import { canonicalValueJson, sha256Hex } from "./strict-codec.js";
1
+ import { evaluateExactDigestComparison, } from "./long-task-exact-comparison.js";
2
+ import { canonicalValueJson } from "./strict-codec.js";
2
3
  export function validateSemanticFactEvidence(check, record, artifactHashes) {
3
4
  const expectations = check.semantic_fact_expectations.filter((item) => item.assertion_ref === record.assertion_key);
4
5
  if (expectations.length !== 1)
@@ -15,8 +16,6 @@ export function validateSemanticFactEvidence(check, record, artifactHashes) {
15
16
  const observerError = validateSemanticFactObservers(record, expected, artifactHashes);
16
17
  if (observerError)
17
18
  return observerError;
18
- if (record.verdict !== "passed" || record.comparison.passed !== true)
19
- return "semantic_fact_failed";
20
19
  return null;
21
20
  }
22
21
  function validateSemanticFactEvidenceAuthority(check, record, expected) {
@@ -34,24 +33,9 @@ function validateSemanticFactEvidenceAuthority(check, record, expected) {
34
33
  return "semantic_fact_expected_value_mismatch";
35
34
  if (!sameSemanticFactComparisonAuthority(record, expected))
36
35
  return "semantic_fact_comparison_authority_mismatch";
37
- if (record.comparison.result_sha256 !==
38
- semanticFactComparisonResultIdentity({
39
- fact_ref: record.fact_ref,
40
- proof_ref: record.proof_ref,
41
- target_ref: record.target_ref,
42
- actual_value_sha256: record.actual_observation.value_sha256,
43
- expected_value_sha256: expected.expected.sha256,
44
- comparator: record.comparison.comparator,
45
- mode: record.comparison.mode,
46
- parameters_sha256: record.comparison.parameters.sha256,
47
- tolerance_sha256: record.comparison.tolerance?.sha256 ?? null,
48
- mask_sha256: record.comparison.mask?.sha256 ?? null,
49
- passed: record.comparison.passed,
50
- }))
51
- return "semantic_fact_comparison_result_identity_mismatch";
52
- if (record.comparison.comparator === "exact_value" &&
53
- record.actual_observation.value_sha256 !== expected.expected.sha256)
54
- return "semantic_fact_exact_value_mismatch";
36
+ const exactError = validateSemanticFactExactComparison(record, expected);
37
+ if (exactError)
38
+ return exactError;
55
39
  if (canonicalValueJson(record.oracle) !== canonicalValueJson(expected.oracle) ||
56
40
  canonicalValueJson(record.environment) !==
57
41
  canonicalValueJson(expected.environment))
@@ -67,14 +51,33 @@ function sameSemanticFactIdentity(record, expected) {
67
51
  record.method === expected.method &&
68
52
  record.subject_ref === expected.subject_ref &&
69
53
  record.condition_ref === expected.condition_ref &&
70
- record.property_ref === expected.property_ref);
54
+ record.property_ref === expected.property_ref &&
55
+ sameSemanticFactRevisionIdentity(record, expected));
56
+ }
57
+ function sameSemanticFactRevisionIdentity(record, expected) {
58
+ const present = record.fact_key !== undefined ||
59
+ record.fact_revision_digest !== undefined ||
60
+ record.obligation_key !== undefined ||
61
+ record.obligation_revision_digest !== undefined;
62
+ if (!expected.revision_identity_required && !present)
63
+ return true;
64
+ return (record.fact_key === expected.fact_key &&
65
+ record.fact_key === record.fact_ref &&
66
+ record.fact_revision_digest === expected.fact_revision_digest &&
67
+ record.obligation_key === expected.obligation_key &&
68
+ record.obligation_key === record.proof_ref &&
69
+ record.obligation_revision_digest === expected.obligation_revision_digest);
71
70
  }
72
71
  function validSemanticFactRedaction(sensitivity, redaction) {
73
72
  return ((sensitivity === "plain" && redaction === null) ||
74
73
  (sensitivity === "protected" && redaction !== null));
75
74
  }
76
75
  function sameSemanticFactComparisonAuthority(record, expected) {
77
- return (record.comparison.comparator === expected.comparison.comparator &&
76
+ return (expected.comparison.comparator === "exact_value" &&
77
+ expected.comparison.mode === "exact" &&
78
+ expected.comparison.tolerance === null &&
79
+ expected.comparison.mask === null &&
80
+ record.comparison.comparator === expected.comparison.comparator &&
78
81
  record.comparison.mode === expected.comparison.mode &&
79
82
  canonicalValueJson(record.comparison.parameters) ===
80
83
  canonicalValueJson(expected.comparison.parameters) &&
@@ -83,6 +86,17 @@ function sameSemanticFactComparisonAuthority(record, expected) {
83
86
  canonicalValueJson(record.comparison.mask) ===
84
87
  canonicalValueJson(expected.comparison.mask));
85
88
  }
89
+ function validateSemanticFactExactComparison(record, expected) {
90
+ const recomputed = evaluateSemanticFactExactComparison(expected, record.target_ref, record.actual_observation.value_sha256);
91
+ if (!recomputed.passed)
92
+ return "semantic_fact_exact_value_mismatch";
93
+ if (record.comparison.passed !== recomputed.passed ||
94
+ record.verdict !== semanticFactVerdict(recomputed.passed))
95
+ return "project_submitted_verdict_disagrees_with_harness";
96
+ return record.comparison.result_sha256 === recomputed.result_sha256
97
+ ? null
98
+ : "semantic_fact_comparison_result_identity_mismatch";
99
+ }
86
100
  function validateSemanticFactArtifacts(record, expected, artifactHashes) {
87
101
  if (artifactHashes[record.actual_observation.artifact_path] !==
88
102
  record.actual_observation.artifact_sha256)
@@ -110,30 +124,74 @@ function validateSemanticFactObservers(record, expected, artifactHashes) {
110
124
  observerObservations.add(observation);
111
125
  if (artifactHashes[observer.artifact_path] !== observer.artifact_sha256)
112
126
  return "semantic_fact_observer_artifact_mismatch";
113
- if (observer.passed !== true ||
114
- (record.comparison.comparator === "exact_value" &&
115
- observer.value_sha256 !== expected.expected.sha256))
127
+ const recomputed = evaluateSemanticFactExactComparison(expected, observer.target_ref, observer.value_sha256);
128
+ if (!recomputed.passed)
116
129
  return "semantic_fact_observer_failed";
117
- if (observer.comparison_result_sha256 !==
118
- semanticFactComparisonResultIdentity({
119
- fact_ref: record.fact_ref,
120
- proof_ref: record.proof_ref,
121
- target_ref: observer.target_ref,
122
- actual_value_sha256: observer.value_sha256,
123
- expected_value_sha256: expected.expected.sha256,
124
- comparator: record.comparison.comparator,
125
- mode: record.comparison.mode,
126
- parameters_sha256: record.comparison.parameters.sha256,
127
- tolerance_sha256: record.comparison.tolerance?.sha256 ?? null,
128
- mask_sha256: record.comparison.mask?.sha256 ?? null,
129
- passed: observer.passed,
130
- }))
130
+ if (observer.passed !== recomputed.passed)
131
+ return "project_submitted_verdict_disagrees_with_harness";
132
+ if (observer.comparison_result_sha256 !== recomputed.result_sha256)
131
133
  return "semantic_fact_observer_comparison_identity_mismatch";
132
134
  }
133
135
  return null;
134
136
  }
135
137
  export function semanticFactComparisonResultIdentity(value) {
136
- return sha256Hex(canonicalValueJson(value));
138
+ return evaluateSemanticFactExactComparisonMaterial(value).result_sha256;
139
+ }
140
+ function evaluateSemanticFactExactComparison(expected, targetRef, actualValueSha256) {
141
+ return evaluateSemanticFactExactComparisonMaterial({
142
+ fact_ref: expected.fact_ref,
143
+ proof_ref: expected.proof_ref,
144
+ fact_key: expected.fact_key,
145
+ fact_revision_digest: expected.fact_revision_digest,
146
+ obligation_key: expected.obligation_key,
147
+ obligation_revision_digest: expected.obligation_revision_digest,
148
+ target_ref: targetRef,
149
+ actual_value_sha256: actualValueSha256,
150
+ expected_value_sha256: expected.expected.sha256,
151
+ comparator: expected.comparison.comparator,
152
+ mode: expected.comparison.mode,
153
+ parameters_sha256: expected.comparison.parameters.sha256,
154
+ tolerance_sha256: expected.comparison.tolerance?.sha256 ?? null,
155
+ mask_sha256: expected.comparison.mask?.sha256 ?? null,
156
+ });
157
+ }
158
+ function evaluateSemanticFactExactComparisonMaterial(value) {
159
+ return evaluateExactDigestComparison({
160
+ identity: semanticFactComparisonIdentity(value),
161
+ actual_value_sha256: value.actual_value_sha256,
162
+ expected_value_sha256: value.expected_value_sha256,
163
+ comparator: value.comparator,
164
+ mode: value.mode,
165
+ parameters_sha256: value.parameters_sha256,
166
+ tolerance_sha256: value.tolerance_sha256,
167
+ mask_sha256: value.mask_sha256,
168
+ });
169
+ }
170
+ function semanticFactComparisonIdentity(value) {
171
+ const revisionIdentityPresent = value.fact_key !== undefined ||
172
+ value.fact_revision_digest !== undefined ||
173
+ value.obligation_key !== undefined ||
174
+ value.obligation_revision_digest !== undefined;
175
+ return revisionIdentityPresent
176
+ ? {
177
+ kind: "semantic_fact_non_ui",
178
+ fact_ref: value.fact_ref,
179
+ proof_ref: value.proof_ref,
180
+ fact_key: value.fact_key,
181
+ fact_revision_digest: value.fact_revision_digest,
182
+ obligation_key: value.obligation_key,
183
+ obligation_revision_digest: value.obligation_revision_digest,
184
+ target_ref: value.target_ref,
185
+ }
186
+ : {
187
+ kind: "semantic_fact_non_ui",
188
+ fact_ref: value.fact_ref,
189
+ proof_ref: value.proof_ref,
190
+ target_ref: value.target_ref,
191
+ };
192
+ }
193
+ function semanticFactVerdict(passed) {
194
+ return passed ? "passed" : "failed";
137
195
  }
138
196
  export function validateDistinctSemanticFactEvidence(records) {
139
197
  const observations = new Set();
@@ -142,7 +200,9 @@ export function validateDistinctSemanticFactEvidence(records) {
142
200
  for (const record of records) {
143
201
  if (record.capability !== "semantic_fact")
144
202
  continue;
145
- const identity = `${record.fact_ref}\0${record.proof_ref}`;
203
+ const identity = record.obligation_key
204
+ ? `${record.obligation_key}\0${record.obligation_revision_digest}\0${record.fact_key}\0${record.fact_revision_digest}`
205
+ : `${record.fact_ref}\0${record.proof_ref}`;
146
206
  if (identities.has(identity))
147
207
  return "semantic_fact_result_duplicate";
148
208
  identities.add(identity);
@@ -162,4 +222,4 @@ function sameSet(left, right) {
162
222
  new Set(left).size === left.length &&
163
223
  left.every((item) => right.includes(item)));
164
224
  }
165
- export const typed_semantic_fact_runtime_evidence = "fact_ref+actual+comparison+verdict+oracle+environment";
225
+ export const typed_semantic_fact_runtime_evidence = "obligation_key+obligation_revision_digest->fact_key+fact_revision_digest+actual+comparison+verdict+oracle+environment";
@@ -13,13 +13,14 @@ export function parseSemanticFactOutcomeBindings(value, label) {
13
13
  manifest_ref: semanticRef(row.manifest_ref, `${label}.manifest_ref`),
14
14
  facts: array(row.facts, `${label}.facts`).map((item, index) => {
15
15
  const itemLabel = `${label}.facts[${index}]`;
16
- const entry = object(item, itemLabel, [
17
- "fact_ref",
18
- "claim_ref",
19
- "applicability_ref",
20
- ]);
16
+ const entry = object(item, itemLabel, ["fact_ref", "claim_ref", "applicability_ref"], ["fact_revision_digest"]);
21
17
  return {
22
18
  fact_ref: semanticRef(entry.fact_ref, `${itemLabel}.fact_ref`),
19
+ ...(Object.hasOwn(entry, "fact_revision_digest")
20
+ ? {
21
+ fact_revision_digest: sha256(entry.fact_revision_digest, `${itemLabel}.fact_revision_digest`),
22
+ }
23
+ : {}),
23
24
  claim_ref: semanticRef(entry.claim_ref, `${itemLabel}.claim_ref`),
24
25
  applicability_ref: semanticRef(entry.applicability_ref, `${itemLabel}.applicability_ref`),
25
26
  };
@@ -33,7 +34,12 @@ export function parseSemanticFactOutcomeBindings(value, label) {
33
34
  "proof_surface",
34
35
  "evidence_capabilities",
35
36
  "authority",
36
- ], ["check_ref", "assertion_ref", "confirmation_ref"]);
37
+ ], [
38
+ "obligation_revision_digest",
39
+ "check_ref",
40
+ "assertion_ref",
41
+ "confirmation_ref",
42
+ ]);
37
43
  const authority = literal(preliminary.authority, ["machine", "external_confirmation"], `${itemLabel}.authority`);
38
44
  if (authority === "machine") {
39
45
  requireOwned(preliminary, itemLabel, ["check_ref", "assertion_ref"]);
@@ -45,6 +51,11 @@ export function parseSemanticFactOutcomeBindings(value, label) {
45
51
  }
46
52
  const base = {
47
53
  proof_ref: semanticRef(preliminary.proof_ref, `${itemLabel}.proof_ref`),
54
+ ...(Object.hasOwn(preliminary, "obligation_revision_digest")
55
+ ? {
56
+ obligation_revision_digest: sha256(preliminary.obligation_revision_digest, `${itemLabel}.obligation_revision_digest`),
57
+ }
58
+ : {}),
48
59
  fact_ref: semanticRef(preliminary.fact_ref, `${itemLabel}.fact_ref`),
49
60
  method: semanticRef(preliminary.method, `${itemLabel}.method`),
50
61
  proof_surface: literal(preliminary.proof_surface, PROOF_SURFACES, `${itemLabel}.proof_surface`),
@@ -17,5 +17,5 @@ export declare function semanticRef(value: unknown, label: string): string;
17
17
  export declare function nullable<T>(value: unknown, parser: (value: unknown) => T): T | null;
18
18
  export declare const PROOF_SURFACES: readonly ["ui_browser", "runtime_behavior", "api_contract", "data_state", "security_boundary", "population_coverage", "implementation_structure"];
19
19
  export declare const JOURNEY_ROLES: readonly ["success", "degradation", "recovery", "stage_gate", "conformance"];
20
- export declare const EVIDENCE_CAPABILITIES: readonly ["presence", "interaction_trace", "state_delta", "cross_surface_consistency", "durable_readback", "boundary_invocation", "external_side_effect", "failure_injection", "visual_render", "design_conformance", "design_method", "semantic_fact", "target_runtime", "input_variation"];
20
+ export declare const EVIDENCE_CAPABILITIES: readonly ["presence", "interaction_trace", "state_delta", "cross_surface_consistency", "durable_readback", "boundary_invocation", "external_side_effect", "failure_injection", "visual_render", "design_conformance", "design_method", "design_symbolic_certificate", "semantic_fact", "target_runtime", "input_variation"];
21
21
  export declare function fail(label: string, message: string): never;
@@ -106,6 +106,7 @@ export const EVIDENCE_CAPABILITIES = [
106
106
  "visual_render",
107
107
  "design_conformance",
108
108
  "design_method",
109
+ "design_symbolic_certificate",
109
110
  "semantic_fact",
110
111
  "target_runtime",
111
112
  "input_variation",
@@ -1,11 +1,13 @@
1
1
  import { resolveAcceptanceAssertion } from "./long-task-acceptance-reference.js";
2
2
  import { fail } from "./long-task-delivery-shape.js";
3
+ import { executionTargetSourceTargetRef } from "./long-task-source-target-index.js";
3
4
  export function validateSourceClaimMappings(contract, compiledClaims, report) {
4
5
  validateSourcePresence(contract, report);
5
6
  const sources = new Set(contract.task.source_paths);
6
7
  const productClaims = new Set(Object.values(compiledClaims.by_outcome)
7
8
  .flat()
8
9
  .map((claim) => claim.id));
10
+ const executionTargetClaims = new Set(contract.task.execution_targets.map((target) => executionTargetSourceTargetRef(target.key)));
9
11
  const globalClaims = new Map(compiledClaims.by_global.map((claim) => [claim.local_key, claim]));
10
12
  const coveredGlobalClaims = new Set(Object.entries(compiledClaims.summary.claims_by_global)
11
13
  .filter(([, value]) => value.covered)
@@ -22,7 +24,8 @@ export function validateSourceClaimMappings(contract, compiledClaims, report) {
22
24
  for (const reference of disposition.refs) {
23
25
  if (reference.endsWith(".result"))
24
26
  issue(report, "source_claim_result_overcompression", `${claim.key}:${reference}`);
25
- if (!productClaims.has(reference))
27
+ if (!productClaims.has(reference) &&
28
+ !executionTargetClaims.has(reference))
26
29
  issue(report, "source_claim_product_ref_unknown", `${claim.key}:${reference}`);
27
30
  }
28
31
  if (disposition.type === "acceptance") {
@@ -1,9 +1,9 @@
1
1
  import type { CompiledSourceItemV2 } from "./long-task-delivery-types.js";
2
- import type { DesignResourceHandoffInputV1 } from "./design-resource-handoff-input-types.js";
2
+ import type { DesignResourceHandoffInput } from "./design-resource-handoff-input-types.js";
3
3
  import type { SemanticFactManifestV1 } from "./semantic-fact-types.js";
4
4
  export interface ParsedSourceDocument {
5
5
  items: CompiledSourceItemV2[];
6
- designResourceHandoff: DesignResourceHandoffInputV1 | null;
6
+ designResourceHandoff: DesignResourceHandoffInput | null;
7
7
  semanticFactManifest: SemanticFactManifestV1 | null;
8
8
  }
9
9
  export declare function parseSourceItems(sourcePath: string, content: string): CompiledSourceItemV2[];
@@ -1,10 +1,12 @@
1
1
  import { parseDesignResourceHandoffInputShape } from "./design-resource-handoff-shape.js";
2
+ import { parseDesignResourceSymbolicHandoffShape } from "./design-resource-symbolic-fact-shape.js";
3
+ import { parseSemanticFactCompactCarrierShape } from "./semantic-fact-compact-carrier.js";
2
4
  import { parseSemanticFactManifestShape } from "./semantic-fact-manifest-shape.js";
3
5
  import { assertNoOpenOwnedSection, assertOwnedSourceSectionsClosed, consumeBackgroundBoundary, consumeOwnedText, consumeSourceItemBoundary, } from "./long-task-source-owned-sections.js";
4
6
  import { formalBlockBody, forEachSourceLine } from "./source-line-scanner.js";
5
7
  import { parseStrictYaml } from "./strict-codec.js";
6
- const DESIGN_RESOURCE_START = /^\s*```yaml[ \t]+design-resource-handoff-v1[ \t]*$/u;
7
- const SEMANTIC_FACT_START = /^\s*```yaml[ \t]+semantic-fact-manifest-v1[ \t]*$/u;
8
+ const DESIGN_RESOURCE_START = /^\s*```yaml[ \t]+design-resource-handoff-(v1|v2)[ \t]*$/u;
9
+ const SEMANTIC_FACT_START = /^\s*```yaml[ \t]+(semantic-fact-manifest-v1|semantic-fact-compact-carrier-v1)[ \t]*$/u;
8
10
  const FORMAL_BLOCK_END = /^\s*```[ \t]*$/u;
9
11
  export function parseSourceItems(sourcePath, content) {
10
12
  return parseSourceDocument(sourcePath, content).items;
@@ -52,9 +54,15 @@ function consumeOpenFormalBlock(state, line, startOffset) {
52
54
  if (!FORMAL_BLOCK_END.test(line))
53
55
  return true;
54
56
  try {
55
- const value = parseStrictYaml(formalBlockBody(state.content, state.formalBlock.bodyStartOffset, startOffset, state.formalBlock.owner === "design-resource-handoff-v1"));
57
+ const value = parseStrictYaml(formalBlockBody(state.content, state.formalBlock.bodyStartOffset, startOffset, state.formalBlock.owner.startsWith("design-resource-handoff-")));
56
58
  if (state.formalBlock.owner === "design-resource-handoff-v1")
57
59
  state.designResourceHandoff = parseDesignResourceHandoffInputShape(value);
60
+ else if (state.formalBlock.owner === "design-resource-handoff-v2")
61
+ state.designResourceHandoff =
62
+ parseDesignResourceSymbolicHandoffShape(value);
63
+ else if (state.formalBlock.owner === "semantic-fact-compact-carrier-v1")
64
+ state.semanticFactManifest =
65
+ parseSemanticFactCompactCarrierShape(value).manifest;
58
66
  else
59
67
  state.semanticFactManifest = parseSemanticFactManifestShape(value);
60
68
  }
@@ -66,23 +74,24 @@ function consumeOpenFormalBlock(state, line, startOffset) {
66
74
  return true;
67
75
  }
68
76
  function startFormalBlock(state, line, lineNumber, nextOffset) {
69
- const owner = DESIGN_RESOURCE_START.test(line)
70
- ? "design-resource-handoff-v1"
71
- : SEMANTIC_FACT_START.test(line)
72
- ? "semantic-fact-manifest-v1"
73
- : null;
77
+ const designMatch = DESIGN_RESOURCE_START.exec(line);
78
+ const owner = designMatch
79
+ ? designMatch[1] === "v2"
80
+ ? "design-resource-handoff-v2"
81
+ : "design-resource-handoff-v1"
82
+ : (SEMANTIC_FACT_START.exec(line)?.[1] ?? null);
74
83
  if (!owner)
75
84
  return false;
76
85
  assertNoOpenOwnedSection(state, lineNumber);
77
- if (owner === "design-resource-handoff-v1") {
86
+ if (owner.startsWith("design-resource-handoff-")) {
78
87
  state.designResourceBlocks += 1;
79
88
  if (state.designResourceBlocks > 1)
80
- throw new Error(`source_formal_block_duplicate:${state.sourcePath}:design-resource-handoff-v1`);
89
+ throw new Error(`source_formal_block_duplicate:${state.sourcePath}:design-resource-handoff`);
81
90
  }
82
91
  else {
83
92
  state.semanticFactBlocks += 1;
84
93
  if (state.semanticFactBlocks > 1)
85
- throw new Error(`source_formal_block_duplicate:${state.sourcePath}:semantic-fact-manifest-v1`);
94
+ throw new Error(`source_formal_block_duplicate:${state.sourcePath}:semantic-fact-manifest`);
86
95
  }
87
96
  state.formalBlock = {
88
97
  owner,
@@ -1,4 +1,4 @@
1
- import type { CompiledSourceItemV2, DeliveryContractV2 } from "./long-task-delivery-types.js";
1
+ import type { CompiledSourceItemV2, DeliveryContractV2, SourceBackedExecutionTargetV2 } from "./long-task-delivery-types.js";
2
2
  type ValidationReporter = (message: string) => void;
3
- export declare function validateSourceTargetContinuity(contract: DeliveryContractV2, items: CompiledSourceItemV2[], report?: ValidationReporter): void;
3
+ export declare function validateSourceTargetContinuity(contract: DeliveryContractV2, items: CompiledSourceItemV2[], report?: ValidationReporter): Map<string, SourceBackedExecutionTargetV2>;
4
4
  export {};
@@ -1,11 +1,14 @@
1
1
  import { resolveAcceptanceAssertion } from "./long-task-acceptance-reference.js";
2
- import { buildCanonicalSourceTargetIndex, sourceKindForTarget, } from "./long-task-source-target-index.js";
2
+ import { buildCanonicalSourceTargetIndex, executionTargetSourceTargetRef, sourceKindForTarget, } from "./long-task-source-target-index.js";
3
+ import { canonicalValueJson, sha256Hex } from "./strict-codec.js";
3
4
  export function validateSourceTargetContinuity(contract, items, report) {
4
5
  const state = sourceContinuityState(contract, items);
5
6
  for (const claim of contract.source_claims)
6
7
  validateSourceClaimContinuity(claim, state, report);
7
8
  validateAcceptanceBindingContinuity(contract, state, report);
8
9
  validateArchitectureContinuity(state, report);
10
+ validateRequiredExecutionTargetContinuity(contract, state, report);
11
+ return state.executionTargetAuthorities;
9
12
  }
10
13
  function sourceContinuityState(contract, items) {
11
14
  return {
@@ -19,6 +22,7 @@ function sourceContinuityState(contract, items) {
19
22
  .filter((item) => item.aspect === "architecture")
20
23
  .map((item) => item.key)),
21
24
  ownedArchitectureItems: new Set(),
25
+ executionTargetAuthorities: new Map(),
22
26
  };
23
27
  }
24
28
  function validateSourceClaimContinuity(claim, state, report) {
@@ -46,7 +50,9 @@ function validateSourceClaimContinuity(claim, state, report) {
46
50
  }
47
51
  if (target.normalized_text !== undefined &&
48
52
  target.normalized_text !== item.normalized_text) {
49
- issue(report, `source_target_statement_mismatch:${claim.key}:${ref}`);
53
+ issue(report, target.execution_target_ref
54
+ ? `process_root_source_identity_mismatch:${target.execution_target_ref}:${claim.key}`
55
+ : `source_target_statement_mismatch:${claim.key}:${ref}`);
50
56
  return;
51
57
  }
52
58
  const owner = state.owners.get(ref);
@@ -73,6 +79,33 @@ function validateSourceClaimContinuity(claim, state, report) {
73
79
  state.sourceBackedGlobalClaims.add(ref);
74
80
  if (target.kind === "acceptance")
75
81
  state.acceptanceBindings.push({ claim, target });
82
+ if (target.execution_target_ref)
83
+ state.executionTargetAuthorities.set(target.execution_target_ref, {
84
+ target_ref: target.execution_target_ref,
85
+ canonical_target_ref: ref,
86
+ source_claim_key: claim.key,
87
+ source_item_key: item.key,
88
+ source_path: item.source_path,
89
+ source_text_sha256: item.text_sha256,
90
+ target_identity: sha256Hex(canonicalValueJson({
91
+ canonical_target_ref: ref,
92
+ source_claim_key: claim.key,
93
+ source_item_key: item.key,
94
+ source_path: item.source_path,
95
+ source_text_sha256: item.text_sha256,
96
+ normalized_text: item.normalized_text,
97
+ })),
98
+ });
99
+ }
100
+ function validateRequiredExecutionTargetContinuity(contract, state, report) {
101
+ for (const targetRef of contract.task.target_profile.required_target_refs) {
102
+ if (state.executionTargetAuthorities.has(targetRef))
103
+ continue;
104
+ const target = contract.task.execution_targets.find((candidate) => candidate.key === targetRef);
105
+ issue(report, target?.runtime_family === "process"
106
+ ? `process_root_source_binding_required:${targetRef}:${executionTargetSourceTargetRef(targetRef)}`
107
+ : `execution_target_source_binding_required:${targetRef}:${executionTargetSourceTargetRef(targetRef)}`);
108
+ }
76
109
  }
77
110
  function validateAcceptanceBindingContinuity(contract, state, report) {
78
111
  for (const { claim, target } of state.acceptanceBindings) {
@@ -7,6 +7,9 @@ export interface CanonicalSourceTarget {
7
7
  outcome_key?: string;
8
8
  risk_fact?: keyof DeliveryContractV2["risk"]["facts"];
9
9
  affected_outcome?: string;
10
+ execution_target_ref?: string;
10
11
  }
11
12
  export declare function buildCanonicalSourceTargetIndex(contract: DeliveryContractV2): Map<string, CanonicalSourceTarget>;
13
+ export declare function executionTargetSourceTargetRef(targetKey: string): string;
14
+ export declare function executionTargetSourceStatement(targetValue: DeliveryContractV2["task"]["execution_targets"][number]): string;
12
15
  export declare function sourceKindForTarget(target: CanonicalSourceTarget): SourceItemKind | null;
@@ -1,7 +1,13 @@
1
1
  import { controlFieldFacts } from "./long-task-control-fields.js";
2
2
  import { normalizeSourceItemText } from "./long-task-source-item-parser.js";
3
+ import { canonicalValueJson } from "./strict-codec.js";
3
4
  export function buildCanonicalSourceTargetIndex(contract) {
4
5
  const targets = [];
6
+ for (const executionTarget of contract.task.execution_targets)
7
+ targets.push({
8
+ ...target(executionTargetSourceTargetRef(executionTarget.key), "technical_obligation", executionTargetSourceStatement(executionTarget)),
9
+ execution_target_ref: executionTarget.key,
10
+ });
5
11
  for (const outcome of contract.outcomes) {
6
12
  targets.push(target(`${outcome.key}.result`, "outcome_result", outcome.product.observable_result, outcome.key));
7
13
  for (const requirement of outcome.product.requirements)
@@ -52,6 +58,19 @@ export function buildCanonicalSourceTargetIndex(contract) {
52
58
  targets.push(target(item.key, "external_confirmation", item.description));
53
59
  return new Map(targets.map((item) => [item.ref, item]));
54
60
  }
61
+ export function executionTargetSourceTargetRef(targetKey) {
62
+ return `execution_target.${targetKey}`;
63
+ }
64
+ export function executionTargetSourceStatement(targetValue) {
65
+ return `Execution target authority: ${canonicalValueJson({
66
+ key: targetValue.key,
67
+ role: targetValue.role,
68
+ runtime_family: targetValue.runtime_family,
69
+ root_entrypoint: targetValue.root_entrypoint,
70
+ root_argv: [...(targetValue.root_argv ?? [])],
71
+ capabilities: [...new Set(targetValue.capabilities)].sort(),
72
+ })}.`;
73
+ }
55
74
  function target(ref, kind, text, outcomeKey, scope) {
56
75
  return {
57
76
  ref,
@@ -1,3 +1,4 @@
1
+ import { outcomeResultExternallyBlocked } from "./long-task-claims.js";
1
2
  export function validateDeliveryStages(contract, report) {
2
3
  unique(contract.stages.map((stage) => stage.key), "stage_key_duplicate", report);
3
4
  const stages = new Map(contract.stages.map((stage) => [stage.key, stage]));
@@ -60,17 +61,22 @@ function validateStageGateClosure(contract, report) {
60
61
  issue(report, "stage_outcome_missing_gate_dependency", `${stage.key}:${outcome.key}:${dependencyGate}`);
61
62
  }
62
63
  const stageGateChecks = gate.acceptance.checks.filter((check) => check.journey_roles.includes("stage_gate"));
63
- if (!stageGateChecks.length)
64
+ const resultExternallyBlocked = outcomeResultExternallyBlocked(contract, gate.key);
65
+ if (!stageGateChecks.length && !resultExternallyBlocked)
64
66
  issue(report, "stage_gate_check_required", `${stage.key}:${gate.key}`);
65
- else if (!stageGateChecks.some((check) => provesGate(check, gate)))
67
+ else if (!resultExternallyBlocked &&
68
+ !stageGateChecks.some((check) => provesGate(check, gate)))
66
69
  issue(report, "stage_gate_target_runtime_result_required", `${stage.key}:${gate.key}`);
67
- for (const targetRef of contract.task.target_profile.required_target_refs)
70
+ for (const targetRef of resultExternallyBlocked
71
+ ? []
72
+ : contract.task.target_profile.required_target_refs)
68
73
  if (!stageGateChecks.some((check) => check.execution_target.target_ref === targetRef &&
69
74
  check.execution_target.entrypoint === "root" &&
70
75
  provesGate(check, gate)))
71
76
  issue(report, "stage_gate_required_target_proof_missing", `${stage.key}:${targetRef}`);
72
77
  const stageOutcomes = contract.outcomes.filter((candidate) => candidate.stage === stage.key);
73
- if (stageOutcomes.length > 1 &&
78
+ if (!resultExternallyBlocked &&
79
+ stageOutcomes.length > 1 &&
74
80
  !stageGateChecks.some((check) => [...check.positive_assertions, ...check.negative_assertions].some((assertion) => assertion.evidence_capabilities.includes("cross_surface_consistency"))))
75
81
  issue(report, "stage_gate_cross_surface_consistency_required", `${stage.key}:${stageOutcomes.map((outcome) => outcome.key).join(",")}`);
76
82
  }
@@ -0,0 +1,83 @@
1
+ import { type JsonPointerExactBudget, type JsonPointerExactLocator, type JsonPointerExactObservation } from "./long-task-json-pointer-observation.js";
2
+ import type { WorkspaceManifestV2 } from "./long-task-workspace-runtime-types.js";
3
+ export type StaticObservationFreezeErrorCode = "static_observation_not_in_pre_run_snapshot" | "static_observation_changed_by_runner" | "static_observation_manifest_invalid" | "static_observation_path_escape" | "static_observation_root_invalid" | "static_observation_parent_not_directory" | "static_observation_symlink_not_allowed" | "static_observation_hardlink_not_allowed" | "static_observation_not_regular_file" | "static_observation_size_limit";
4
+ export declare class StaticObservationFreezeError extends Error {
5
+ readonly code: StaticObservationFreezeErrorCode;
6
+ readonly artifact_path: string;
7
+ readonly cause_code: string | null;
8
+ constructor(code: StaticObservationFreezeErrorCode, artifactPath: string, causeCode?: string | null);
9
+ }
10
+ export interface StaticObservationManifestMembership {
11
+ path: string;
12
+ mode: number;
13
+ declared_size: number;
14
+ /** Git/blob identity from the workspace manifest; never a content digest. */
15
+ manifest_object_identity: string;
16
+ }
17
+ export interface StaticObservationFileIdentity {
18
+ device: string;
19
+ inode: string;
20
+ mode: number;
21
+ links: string;
22
+ size: number;
23
+ modified_time_ns: string;
24
+ changed_time_ns: string;
25
+ birth_time_ns: string;
26
+ content_sha256: string;
27
+ }
28
+ export interface VerifiedObservationInputFile {
29
+ readonly artifact_path: string;
30
+ readonly manifest_membership: StaticObservationManifestMembership;
31
+ readonly pre_run_identity: StaticObservationFileIdentity;
32
+ readonly post_run_identity: StaticObservationFileIdentity;
33
+ }
34
+ export interface VerifiedStaticObservationCarrier extends VerifiedObservationInputFile {
35
+ copyFrozenBytes(): Uint8Array;
36
+ extractJsonPointerExactObservation(input: {
37
+ locator: JsonPointerExactLocator;
38
+ sensitivity: string;
39
+ budget?: JsonPointerExactBudget;
40
+ }): JsonPointerExactObservation;
41
+ extractJsonPointerExactValue(input: {
42
+ locator: JsonPointerExactLocator;
43
+ sensitivity: string;
44
+ budget?: JsonPointerExactBudget;
45
+ }): {
46
+ raw_value: unknown;
47
+ observation: JsonPointerExactObservation;
48
+ };
49
+ }
50
+ export interface FrozenObservationInputFile {
51
+ readonly artifact_path: string;
52
+ readonly manifest_membership: StaticObservationManifestMembership;
53
+ readonly pre_run_identity: StaticObservationFileIdentity;
54
+ verifyPostRun(): Promise<VerifiedObservationInputFile>;
55
+ dispose(): void;
56
+ }
57
+ export interface FrozenStaticObservationCarrier extends FrozenObservationInputFile {
58
+ verifyPostRun(): Promise<VerifiedStaticObservationCarrier>;
59
+ }
60
+ export interface ObservationInputFreezeBudget {
61
+ readonly seen_artifact_paths: Set<string>;
62
+ total_artifact_bytes: number;
63
+ readonly max_artifacts: number;
64
+ readonly max_total_artifact_bytes: number;
65
+ }
66
+ export declare function createObservationInputFreezeBudget(input: {
67
+ max_artifacts: number;
68
+ max_total_artifact_bytes: number;
69
+ }): ObservationInputFreezeBudget;
70
+ export declare function freezeStaticObservationCarrier(input: {
71
+ snapshot_root: string;
72
+ workspace_manifest: WorkspaceManifestV2;
73
+ artifact_path: string;
74
+ budget?: JsonPointerExactBudget;
75
+ input_freeze_budget?: ObservationInputFreezeBudget;
76
+ }): Promise<FrozenStaticObservationCarrier>;
77
+ export declare function freezeObservationInputFile(input: {
78
+ snapshot_root: string;
79
+ workspace_manifest: WorkspaceManifestV2;
80
+ artifact_path: string;
81
+ max_file_bytes: number;
82
+ budget?: ObservationInputFreezeBudget;
83
+ }): Promise<FrozenObservationInputFile>;