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,7 +1,7 @@
1
1
  import { copyFile, cp, lstat, mkdir, mkdtemp, readlink, realpath, rm, symlink, } from "node:fs/promises";
2
2
  import os from "node:os";
3
3
  import path from "node:path";
4
- import { matchesRepoPattern } from "./long-task-paths.js";
4
+ import { matchesRepoPattern, normalizeRepositoryFile, } from "./long-task-paths.js";
5
5
  const TRANSIENT_REMOVE_CODES = new Set([
6
6
  "EBUSY",
7
7
  "EMFILE",
@@ -11,7 +11,7 @@ const TRANSIENT_REMOVE_CODES = new Set([
11
11
  ]);
12
12
  const REMOVE_RETRY_LIMIT = process.platform === "win32" ? 6 : 2;
13
13
  const REMOVE_RETRY_DELAY_MS = 100;
14
- export async function createCounterfactualSandbox(snapshotRoot, check, control, bindingCarrierPaths, manifest) {
14
+ export async function createCounterfactualSandbox(snapshotRoot, check, control, bindingCarrierPaths, manifest, protectedAuthorityPaths = []) {
15
15
  const root = await mkdtemp(path.join(os.tmpdir(), "ty-context-counterfactual-"));
16
16
  if (!manifest) {
17
17
  await cp(snapshotRoot, root, {
@@ -24,6 +24,7 @@ export async function createCounterfactualSandbox(snapshotRoot, check, control,
24
24
  const exactPaths = new Set([
25
25
  ...Object.keys(check.runner.frozen_files),
26
26
  ...Object.keys(check.verification_input_hashes),
27
+ ...(check.process_runtime_closure?.allowed_runtime_files ?? []),
27
28
  check.runner.resolved_target,
28
29
  ...(control.mutation.type === "replace_file"
29
30
  ? [control.mutation.fixture_path]
@@ -44,9 +45,11 @@ export async function createCounterfactualSandbox(snapshotRoot, check, control,
44
45
  if (requirement.kind === "directory")
45
46
  patterns.push(`${requirement.target}/**`);
46
47
  }
47
- const selected = manifest.files
48
- .map((file) => file.path)
49
- .filter((relative) => exactPaths.has(relative) ||
48
+ const candidates = new Set([
49
+ ...manifest.files.map((file) => file.path),
50
+ ...protectedAuthorityPaths.map((file, index) => normalizeRepositoryFile(file, `counterfactual.protected_authority_paths[${index}]`)),
51
+ ]);
52
+ const selected = [...candidates].filter((relative) => exactPaths.has(relative) ||
50
53
  patterns.some((pattern) => matchesRepoPattern(relative, pattern)));
51
54
  await copyInBatches(snapshotRoot, root, selected);
52
55
  await mkdir(path.join(root, check.runner.resolved_cwd), { recursive: true });
@@ -24,6 +24,7 @@ export interface CounterfactualControlV2 {
24
24
  mutation: CounterfactualMutationV2;
25
25
  expected_assertion_failures: string[];
26
26
  preserved_assertions: string[];
27
+ allowed_fanout_assertions: string[];
27
28
  }
28
29
  export interface GlobalCounterfactualControlV2 {
29
30
  key: string;
@@ -33,4 +34,5 @@ export interface GlobalCounterfactualControlV2 {
33
34
  mutation: CounterfactualMutationV2;
34
35
  expected_assertion_failures: string[];
35
36
  preserved_assertions: string[];
37
+ allowed_fanout_assertions: string[];
36
38
  }
@@ -86,6 +86,8 @@ export async function compileDeliveryContract(workdirInput, projectRootInput = p
86
86
  verification_inputs: check.verification_input_hashes,
87
87
  raw_execution_identity: check.raw_execution_identity,
88
88
  evidence_adapter: check.evidence_adapter,
89
+ observation_authorities: check.observation_authorities,
90
+ process_runtime_closure: check.process_runtime_closure,
89
91
  })),
90
92
  }));
91
93
  let authorityRevision = options.authority_revision ?? previous?.authority_revision ?? 1;
@@ -11,3 +11,4 @@ export interface ParseDeliveryContractOptions {
11
11
  export declare function parseDeliveryContract(workdir: string): Promise<DeliveryContractV2>;
12
12
  export declare function parseDeliveryContractBundle(workdirInput: string, repositoryInput?: string, options?: ParseDeliveryContractOptions): Promise<ParsedDeliveryContractV2>;
13
13
  export declare function parseDeliveryContractText(raw: string): DeliveryContractV2;
14
+ export declare function parseDeliveryContractTextForMigration(raw: string): DeliveryContractV2;
@@ -1,5 +1,6 @@
1
1
  import { readFile } from "node:fs/promises";
2
2
  import path from "node:path";
3
+ import { materializeLongTaskCompactCarrier, materializeLongTaskCompactCarrierForMigration, } from "./long-task-compact-carrier.js";
3
4
  import { parseStrictYaml, sha256Hex } from "./strict-codec.js";
4
5
  import { validateDeliveryContractStructure } from "./long-task-delivery-validation.js";
5
6
  import { parseOutcome, parseOutcomeFragment, safeFragmentPath, } from "./long-task-outcome-parser.js";
@@ -20,7 +21,11 @@ export async function parseDeliveryContractBundle(workdirInput, repositoryInput,
20
21
  ? path.resolve(repositoryInput)
21
22
  : await repositoryRoot(workdir);
22
23
  const raw = await readFile(await assertProtectedRepositoryFile(repository, file, "delivery_contract"), "utf8");
23
- const root = parseRoot(raw, true);
24
+ let root = parseRoot(raw, true);
25
+ if (Object.hasOwn(root, "compact_semantic_carrier")) {
26
+ root = materializeLongTaskCompactCarrier(root).root;
27
+ assertNoSemanticDriftMigration(semanticDriftMigrationFields(root));
28
+ }
24
29
  const hasInline = Object.hasOwn(root, "outcomes");
25
30
  const hasFiles = Object.hasOwn(root, "outcome_files");
26
31
  if (hasInline === hasFiles)
@@ -64,7 +69,19 @@ export async function parseDeliveryContractBundle(workdirInput, repositoryInput,
64
69
  };
65
70
  }
66
71
  export function parseDeliveryContractText(raw) {
67
- const root = parseRoot(raw, false);
72
+ return parseDeliveryContractTextInternal(raw, false);
73
+ }
74
+ export function parseDeliveryContractTextForMigration(raw) {
75
+ return parseDeliveryContractTextInternal(raw, true);
76
+ }
77
+ function parseDeliveryContractTextInternal(raw, allowLegacyCarrier) {
78
+ let root = parseRoot(raw, false);
79
+ if (Object.hasOwn(root, "compact_semantic_carrier")) {
80
+ root = (allowLegacyCarrier
81
+ ? materializeLongTaskCompactCarrierForMigration(root)
82
+ : materializeLongTaskCompactCarrier(root)).root;
83
+ assertNoSemanticDriftMigration(semanticDriftMigrationFields(root));
84
+ }
68
85
  const contract = parseContractRoot(root, array(root.outcomes, "outcomes").map((item, index) => parseOutcome(item, `outcomes[${index}]`)));
69
86
  validateDeliveryContractStructure(contract);
70
87
  return contract;
@@ -77,16 +94,31 @@ function parseRoot(raw, bundle) {
77
94
  decoded.schema_version ===
78
95
  "long-task-delivery-v1")
79
96
  throw new Error("long_task_delivery_v1_retired_use_v2");
80
- assertNoSemanticDriftMigration(semanticDriftMigrationFields(decoded));
81
- return object(decoded, "$", [
97
+ if (!decoded ||
98
+ typeof decoded !== "object" ||
99
+ Array.isArray(decoded) ||
100
+ !Object.hasOwn(decoded, "compact_semantic_carrier"))
101
+ assertNoSemanticDriftMigration(semanticDriftMigrationFields(decoded));
102
+ const root = object(decoded, "$", [
82
103
  "schema_version",
83
104
  "semantic_fact_manifest",
84
105
  "task",
85
- "source_claims",
86
106
  "stages",
87
107
  "risk",
88
108
  "global",
89
- ], bundle ? ["outcomes", "outcome_files"] : ["outcomes"]);
109
+ ], bundle
110
+ ? [
111
+ "source_claims",
112
+ "compact_semantic_carrier",
113
+ "outcomes",
114
+ "outcome_files",
115
+ ]
116
+ : ["source_claims", "compact_semantic_carrier", "outcomes"]);
117
+ const hasExpanded = Object.hasOwn(root, "source_claims");
118
+ const hasCompact = Object.hasOwn(root, "compact_semantic_carrier");
119
+ if (hasExpanded === hasCompact)
120
+ throw new Error("delivery_contract_invalid:$:exactly one of source_claims or compact_semantic_carrier is required");
121
+ return root;
90
122
  }
91
123
  function parseContractRoot(root, outcomes) {
92
124
  literal(root.schema_version, ["long-task-delivery-v2"], "schema_version");
@@ -1,4 +1,5 @@
1
1
  import type { DesignResourceHandoffPreflightV1, DesignResourceHandoffTargetV1 } from "./design-resource-handoff-types.js";
2
+ import type { DesignResourceHandoffPreflightV2 } from "./design-resource-symbolic-fact-types.js";
2
3
  import type { DeliveryContractV2 } from "./long-task-delivery-types.js";
3
4
  export interface ContractDesignTarget {
4
5
  outcome_key: string;
@@ -10,7 +11,7 @@ export interface IndexedHandoffTarget {
10
11
  target: DesignResourceHandoffTargetV1;
11
12
  }
12
13
  export interface LongTaskDesignHandoffConsumer {
13
- consume(preflight: DesignResourceHandoffPreflightV1): void;
14
+ consume(preflight: DesignResourceHandoffPreflightV1 | DesignResourceHandoffPreflightV2): void;
14
15
  finish(): void;
15
16
  }
16
17
  export declare function validateLongTaskDesignResourceHandoffs(contract: DeliveryContractV2, repository: string): Promise<void>;
@@ -2,8 +2,8 @@ import { readFile } from "node:fs/promises";
2
2
  import path from "node:path";
3
3
  import { containsDesignResourceHandoff, parseDesignResourceHandoffMarkdown, } from "./design-resource-handoff-parser.js";
4
4
  import { createDesignResourceHandoffSetIntegrity } from "./design-resource-handoff-set-integrity.js";
5
- import { preflightParsedDesignResourceHandoff } from "./design-resource-handoff-validation.js";
6
- import { assertSameSet, designSourceItemClaims, invalid, validateTargetIdentity, validateVerificationMethodBindings, } from "./long-task-design-resource-method-binding.js";
5
+ import { preflightParsedDesignResourceHandoffAny } from "./design-resource-handoff-validation.js";
6
+ import { assertSameSet, designSourceItemClaims, invalid, validateTargetIdentity, validateSymbolicTargetIdentity, validateSymbolicVerificationMethodBindings, validateVerificationMethodBindings, } from "./long-task-design-resource-method-binding.js";
7
7
  import { validateLongTaskDesignTargetCapabilities } from "./long-task-design-target-capabilities.js";
8
8
  import { assertProtectedRepositoryFile } from "./long-task-protected-files.js";
9
9
  export async function validateLongTaskDesignResourceHandoffs(contract, repository) {
@@ -15,7 +15,7 @@ export async function validateLongTaskDesignResourceHandoffs(contract, repositor
15
15
  const content = await readFile(file, "utf8");
16
16
  if (!containsDesignResourceHandoff(content))
17
17
  continue;
18
- consumer.consume(await preflightParsedDesignResourceHandoff(repository, parseDesignResourceHandoffMarkdown(sourcePath, content)));
18
+ consumer.consume(await preflightParsedDesignResourceHandoffAny(repository, parseDesignResourceHandoffMarkdown(sourcePath, content)));
19
19
  }
20
20
  consumer.finish();
21
21
  }
@@ -32,9 +32,30 @@ export function createLongTaskDesignHandoffConsumer(contract) {
32
32
  let duplicate = null;
33
33
  const unbound = [];
34
34
  const handoffSetIntegrity = createDesignResourceHandoffSetIntegrity(invalid);
35
+ const allSourceItems = new Set();
36
+ const resourcePaths = new Map();
37
+ let crossVersionIssue = null;
38
+ const recordCrossVersionIssue = (code, detail) => {
39
+ crossVersionIssue ??= { code, detail };
40
+ };
35
41
  return {
36
42
  consume(preflight) {
37
- handoffSetIntegrity.consume(preflight);
43
+ for (const sourceItem of preflight.source_item_keys) {
44
+ if (allSourceItems.has(sourceItem))
45
+ recordCrossVersionIssue("handoff_set_source_item_duplicate", sourceItem);
46
+ else
47
+ allSourceItems.add(sourceItem);
48
+ }
49
+ for (const resource of preflight.handoff.resources) {
50
+ const identity = JSON.stringify(resource);
51
+ const previous = resourcePaths.get(resource.path);
52
+ if (previous && previous !== identity)
53
+ recordCrossVersionIssue("handoff_set_resource_path_conflict", resource.path);
54
+ else
55
+ resourcePaths.set(resource.path, identity);
56
+ }
57
+ if (!("preflight_schema_version" in preflight))
58
+ handoffSetIntegrity.consume(preflight);
38
59
  for (const target of preflight.handoff.targets) {
39
60
  if (indexedTargetKeys.has(target.key)) {
40
61
  duplicate ??= target.key;
@@ -46,13 +67,27 @@ export function createLongTaskDesignHandoffConsumer(contract) {
46
67
  unbound.push(target.key);
47
68
  continue;
48
69
  }
49
- const indexedTarget = { preflight, target };
50
70
  consumed.add(target.key);
51
71
  try {
52
- validateTargetIdentity(contractTarget, indexedTarget);
53
- validateLongTaskDesignTargetCapabilities(contract, contractTarget, indexedTarget);
54
- validateCoverageClaims(contract, contractTarget, indexedTarget);
55
- validateBlockerBindings(contract, contractTarget, indexedTarget);
72
+ if ("preflight_schema_version" in preflight) {
73
+ const indexedTarget = {
74
+ preflight,
75
+ target,
76
+ };
77
+ validateSymbolicTargetIdentity(contractTarget, indexedTarget);
78
+ validateSymbolicCoverageClaims(contract, contractTarget, indexedTarget);
79
+ validateBlockerBindings(contract, contractTarget, indexedTarget);
80
+ }
81
+ else {
82
+ const indexedTarget = {
83
+ preflight,
84
+ target: target,
85
+ };
86
+ validateTargetIdentity(contractTarget, indexedTarget);
87
+ validateLongTaskDesignTargetCapabilities(contract, contractTarget, indexedTarget);
88
+ validateCoverageClaims(contract, contractTarget, indexedTarget);
89
+ validateBlockerBindings(contract, contractTarget, indexedTarget);
90
+ }
56
91
  }
57
92
  catch (error) {
58
93
  validationErrors.set(target.key, error);
@@ -63,6 +98,8 @@ export function createLongTaskDesignHandoffConsumer(contract) {
63
98
  if (duplicate)
64
99
  invalid("handoff_target_duplicate", duplicate);
65
100
  handoffSetIntegrity.finish();
101
+ if (crossVersionIssue)
102
+ invalid(crossVersionIssue.code, crossVersionIssue.detail);
66
103
  for (const contractTarget of contractTargets) {
67
104
  if (!consumed.has(contractTarget.target.key))
68
105
  invalid("target_handoff_missing", contractTarget.target.key);
@@ -74,6 +111,23 @@ export function createLongTaskDesignHandoffConsumer(contract) {
74
111
  },
75
112
  };
76
113
  }
114
+ function validateSymbolicCoverageClaims(contract, contractTarget, indexed) {
115
+ const claims = new Map(contract.source_claims.map((item) => [item.key, item]));
116
+ const rows = indexed.preflight.handoff.coverage.filter((row) => row.target_ref === contractTarget.target.key);
117
+ if (!rows.length)
118
+ invalid("v2_target_covered_claims_required", contractTarget.target.key);
119
+ const sourceItemRefs = [
120
+ ...new Set([
121
+ ...rows.flatMap((row) => row.source_item_refs),
122
+ ...indexed.preflight.manifest.fact_rules.flatMap((rule) => rule.source_item_refs),
123
+ ...indexed.preflight.manifest.disposition_regions.flatMap((region) => region.source_item_refs),
124
+ ]),
125
+ ];
126
+ const claimsBySourceItem = new Map();
127
+ for (const sourceItemRef of sourceItemRefs)
128
+ claimsBySourceItem.set(sourceItemRef, designSourceItemClaims(contract, contractTarget, indexed, sourceItemRef, claims));
129
+ validateSymbolicVerificationMethodBindings(contract, contractTarget, indexed, claimsBySourceItem);
130
+ }
77
131
  function validateCoverageClaims(contract, contractTarget, indexed) {
78
132
  const target = contractTarget.target;
79
133
  const check = contract.outcomes
@@ -103,8 +157,14 @@ function validateBlockerBindings(contract, contractTarget, indexed) {
103
157
  item.key,
104
158
  item,
105
159
  ]));
106
- const availableMethods = new Set(contractTarget.target.verification_method_bindings.map((item) => item.method));
107
- for (const blocker of indexed.preflight.handoff.acceptance_blockers) {
160
+ const availableMethods = new Set([
161
+ ...contractTarget.target.verification_method_bindings,
162
+ ...(contractTarget.target.symbolic_method_bindings ?? []),
163
+ ].map((item) => item.method));
164
+ const blockers = "preflight_schema_version" in indexed.preflight
165
+ ? indexed.preflight.manifest.acceptance_blockers
166
+ : indexed.preflight.handoff.acceptance_blockers;
167
+ for (const blocker of blockers) {
108
168
  if (!blocker.target_refs.includes(contractTarget.target.key))
109
169
  continue;
110
170
  const contractBlocker = bound.get(blocker.key);
@@ -1,8 +1,15 @@
1
1
  import type { DesignResourceHandoffPreflightV1 } from "./design-resource-handoff-types.js";
2
+ import type { DesignResourceHandoffPreflightV2, DesignResourceSymbolicHandoffTargetV2 } from "./design-resource-symbolic-fact-types.js";
2
3
  import type { DeliveryContractV2 } from "./long-task-delivery-types.js";
3
4
  import type { ContractDesignTarget, IndexedHandoffTarget } from "./long-task-design-resource-handoff.js";
4
5
  export declare function validateTargetIdentity(contractTarget: ContractDesignTarget, indexed: IndexedHandoffTarget): void;
5
- export declare function designSourceItemClaims(contract: DeliveryContractV2, contractTarget: ContractDesignTarget, indexed: IndexedHandoffTarget, sourceItemRef: string, claims?: Map<string, import("./long-task-contract-types.js").SourceClaimV2>): string[];
6
+ export interface IndexedSymbolicHandoffTarget {
7
+ preflight: DesignResourceHandoffPreflightV2;
8
+ target: DesignResourceSymbolicHandoffTargetV2;
9
+ }
10
+ export declare function validateSymbolicTargetIdentity(contractTarget: ContractDesignTarget, indexed: IndexedSymbolicHandoffTarget): void;
11
+ export declare function validateSymbolicVerificationMethodBindings(contract: DeliveryContractV2, contractTarget: ContractDesignTarget, indexed: IndexedSymbolicHandoffTarget, claimsBySourceItem: Map<string, string[]>): void;
12
+ export declare function designSourceItemClaims(contract: DeliveryContractV2, contractTarget: ContractDesignTarget, indexed: IndexedHandoffTarget | IndexedSymbolicHandoffTarget, sourceItemRef: string, claims?: Map<string, import("./long-task-contract-types.js").SourceClaimV2>): string[];
6
13
  export declare function validateVerificationMethodBindings(target: ContractDesignTarget["target"], check: DeliveryContractV2["outcomes"][number]["acceptance"]["checks"][number], facts: DesignResourceHandoffPreflightV1["handoff"]["facts"], proofs: DesignResourceHandoffPreflightV1["handoff"]["proof_obligations"], indexed: IndexedHandoffTarget, claimsBySourceItem: Map<string, string[]>): void;
7
14
  export declare function assertSameSet(actual: string[], expected: string[], code: string, detail: string): void;
8
15
  export declare function invalid(code: string, detail: string): never;
@@ -1,5 +1,9 @@
1
+ import { designResourceSymbolicNoninterferenceProofDigest } from "./design-resource-symbolic-validation-support.js";
2
+ import { matchesRepoPattern } from "./long-task-paths.js";
1
3
  export function validateTargetIdentity(contractTarget, indexed) {
2
4
  const { target } = contractTarget;
5
+ if (target.fact_model !== undefined)
6
+ invalid("v1_target_fact_model_must_be_absent", target.key);
3
7
  const handoffTarget = indexed.target;
4
8
  if (target.interpretation !== handoffTarget.interpretation)
5
9
  invalid("target_interpretation_mismatch", `${target.key}:${target.interpretation}:${handoffTarget.interpretation}`);
@@ -8,6 +12,110 @@ export function validateTargetIdentity(contractTarget, indexed) {
8
12
  .path);
9
13
  assertSameSet(target.source_paths, [indexed.preflight.handoff_path, ...resourcePaths], "target_source_paths_mismatch", target.key);
10
14
  }
15
+ export function validateSymbolicTargetIdentity(contractTarget, indexed) {
16
+ const { target } = contractTarget;
17
+ const handoffTarget = indexed.target;
18
+ if (target.fact_model !== "symbolic_rules_v2")
19
+ invalid("v2_target_fact_model_required", target.key);
20
+ if (target.interpretation !== handoffTarget.interpretation)
21
+ invalid("target_interpretation_mismatch", `${target.key}:${target.interpretation}:${handoffTarget.interpretation}`);
22
+ if (target.condition_keys.length)
23
+ invalid("v2_ground_condition_keys_forbidden", target.key);
24
+ if (target.verification_method_bindings.length)
25
+ invalid("v2_ground_method_bindings_forbidden", target.key);
26
+ const resourcePaths = handoffTarget.resource_refs.map((ref) => indexed.preflight.handoff.resources.find((item) => item.key === ref)
27
+ .path);
28
+ assertSameSet(target.source_paths, [indexed.preflight.handoff_path, ...resourcePaths], "target_source_paths_mismatch", target.key);
29
+ }
30
+ export function validateSymbolicVerificationMethodBindings(contract, contractTarget, indexed, claimsBySourceItem) {
31
+ const target = contractTarget.target;
32
+ const preflight = indexed.preflight;
33
+ const check = contract.outcomes
34
+ .find((item) => item.key === contractTarget.outcome_key)
35
+ .acceptance.checks.find((item) => item.key === target.conformance_check_ref);
36
+ const bindings = target.symbolic_method_bindings ?? [];
37
+ const expectedMethods = [
38
+ ...new Set(preflight.manifest.semantic_proof_obligations.map((item) => item.method)),
39
+ ];
40
+ assertSameSet(bindings.map((item) => item.method), expectedMethods, "v2_verification_methods_mismatch", target.key);
41
+ const assertionRefs = bindings.map((item) => item.assertion_ref);
42
+ if (new Set(assertionRefs).size !== assertionRefs.length)
43
+ invalid("v2_verification_method_assertion_duplicate", target.key);
44
+ if (assertionRefs.includes(target.conformance_assertion_ref))
45
+ invalid("v2_verification_method_assertion_must_be_independent", target.key);
46
+ const boundObligationRefs = [];
47
+ const artifactPaths = new Set();
48
+ for (const binding of bindings) {
49
+ const assertion = check.positive_assertions.find((item) => item.key === binding.assertion_ref);
50
+ if (!assertion)
51
+ invalid("v2_verification_method_assertion_unknown", `${target.key}:${binding.method}:${binding.assertion_ref}`);
52
+ for (const capability of requiredCapabilities(binding.method))
53
+ if (!assertion.evidence_capabilities.includes(capability))
54
+ invalid("v2_verification_method_capability_required", `${target.key}:${binding.method}:${capability}`);
55
+ const expected = preflight.manifest.semantic_proof_obligations
56
+ .filter((obligation) => obligation.method === binding.method)
57
+ .map((obligation) => symbolicRuleExpectation(preflight, obligation.key));
58
+ assertCanonicalRowsByKey(binding.rule_expectations, expected, "obligation_ref", "v2_rule_expectations_mismatch", `${target.key}:${binding.method}`);
59
+ for (const expectation of expected) {
60
+ const rule = preflight.manifest.fact_rules.find((item) => item.key === expectation.fact_rule_ref);
61
+ for (const sourceItemRef of rule.source_item_refs)
62
+ for (const claimRef of claimsBySourceItem.get(sourceItemRef) ?? [])
63
+ if (!assertion.claims.includes(claimRef))
64
+ invalid("v2_verification_method_claim_not_asserted", `${target.key}:${binding.method}:${sourceItemRef}:${claimRef}`);
65
+ boundObligationRefs.push(expectation.obligation_ref);
66
+ }
67
+ for (const artifactPath of [
68
+ binding.artifact_path,
69
+ binding.observation_path,
70
+ ]) {
71
+ if (artifactPaths.has(artifactPath))
72
+ invalid("v2_evidence_artifact_reused", `${target.key}:${artifactPath}`);
73
+ artifactPaths.add(artifactPath);
74
+ if (!check.artifact_globs.some((pattern) => matchesRepoPattern(artifactPath, pattern)))
75
+ invalid("v2_evidence_artifact_glob_missing", artifactPath);
76
+ }
77
+ }
78
+ assertSameSet(boundObligationRefs, preflight.manifest.semantic_proof_obligations.map((item) => item.key), "v2_semantic_obligation_binding_mismatch", target.key);
79
+ validateSymbolicCertificateBinding(target, preflight, check, assertionRefs, artifactPaths);
80
+ }
81
+ function validateSymbolicCertificateBinding(target, preflight, check, assertionRefs, artifactPaths) {
82
+ const certificateBinding = target.symbolic_certificate_binding;
83
+ if (!certificateBinding)
84
+ invalid("v2_certificate_binding_required", target.key);
85
+ const certificateAssertion = check.positive_assertions.find((item) => item.key === certificateBinding.assertion_ref);
86
+ if (!certificateAssertion)
87
+ invalid("v2_certificate_assertion_unknown", `${target.key}:${certificateBinding.assertion_ref}`);
88
+ if (certificateBinding.assertion_ref === target.conformance_assertion_ref ||
89
+ assertionRefs.includes(certificateBinding.assertion_ref))
90
+ invalid("v2_certificate_assertion_must_be_independent", target.key);
91
+ if (!certificateAssertion.evidence_capabilities.includes("design_symbolic_certificate"))
92
+ invalid("v2_certificate_capability_required", `${target.key}:${certificateBinding.assertion_ref}`);
93
+ const expectedCertificates = preflight.manifest.noninterference_certificates.map((certificate) => {
94
+ const sourceProofDigest = designResourceSymbolicNoninterferenceProofDigest(certificate.source_noninterference_proof);
95
+ const productionProofDigest = designResourceSymbolicNoninterferenceProofDigest(certificate.production_noninterference_proof);
96
+ return {
97
+ certificate_ref: certificate.key,
98
+ fact_rule_refs: [...certificate.fact_rule_refs],
99
+ omitted_axis_refs: [...certificate.omitted_axis_refs],
100
+ dependency_edge_refs: [...certificate.dependency_edge_refs],
101
+ canonical_rule_dag_sha256: certificate.canonical_rule_dag_sha256,
102
+ ...(sourceProofDigest
103
+ ? { source_noninterference_proof_sha256: sourceProofDigest }
104
+ : {}),
105
+ ...(productionProofDigest
106
+ ? { production_noninterference_proof_sha256: productionProofDigest }
107
+ : {}),
108
+ };
109
+ });
110
+ assertCanonicalRowsByKey(certificateBinding.expectations, expectedCertificates, "certificate_ref", "v2_certificate_expectations_mismatch", target.key);
111
+ if (canonicalJson(certificateBinding.metrics) !==
112
+ canonicalJson(preflight.metrics))
113
+ invalid("v2_certificate_metrics_mismatch", target.key);
114
+ if (!check.artifact_globs.some((pattern) => matchesRepoPattern(certificateBinding.artifact_path, pattern)))
115
+ invalid("v2_certificate_artifact_glob_missing", certificateBinding.artifact_path);
116
+ if (artifactPaths.has(certificateBinding.artifact_path))
117
+ invalid("v2_certificate_artifact_reused", `${target.key}:${certificateBinding.artifact_path}`);
118
+ }
11
119
  export function designSourceItemClaims(contract, contractTarget, indexed, sourceItemRef, claims = new Map(contract.source_claims.map((item) => [item.key, item]))) {
12
120
  const claim = claims.get(sourceItemRef);
13
121
  if (!claim)
@@ -93,6 +201,40 @@ function designFactExpectation(indexed, factRef, proofRef) {
93
201
  },
94
202
  };
95
203
  }
204
+ function symbolicRuleExpectation(preflight, obligationRef) {
205
+ const obligation = preflight.manifest.semantic_proof_obligations.find((item) => item.key === obligationRef);
206
+ const rule = preflight.manifest.fact_rules.find((item) => item.key === obligation.fact_rule_ref);
207
+ const oracle = preflight.manifest.oracles.find((item) => item.key === obligation.oracle_ref);
208
+ const environment = preflight.manifest.environments.find((item) => item.key === obligation.environment_ref);
209
+ return {
210
+ obligation_ref: obligation.key,
211
+ fact_rule_ref: rule.key,
212
+ region_sha256: obligation.region_sha256,
213
+ subject_or_relation_ref: rule.subject_or_relation_ref,
214
+ property_ref: rule.property_ref,
215
+ population_ref: rule.population_ref,
216
+ quantifier: structuredClone(rule.quantifier),
217
+ observation_sensitivity: rule.observation_sensitivity,
218
+ expected: structuredClone(rule.expected),
219
+ proof_surface: obligation.proof_surface,
220
+ observation_boundary: obligation.observation_boundary,
221
+ comparison: structuredClone(obligation.comparison),
222
+ oracle: {
223
+ key: oracle.key,
224
+ trust: oracle.trust,
225
+ identity: oracle.identity,
226
+ version: oracle.version,
227
+ sha256: oracle.sha256,
228
+ },
229
+ environment: {
230
+ key: environment.key,
231
+ identity: environment.identity,
232
+ definition: structuredClone(environment.definition),
233
+ },
234
+ protected_value_policy: obligation.protected_value_policy,
235
+ completion_effect: obligation.completion_effect,
236
+ };
237
+ }
96
238
  function assertCanonicalRows(actual, expected, code, detail) {
97
239
  const left = new Map(actual.map((item) => [item.fact_ref, canonicalJson(item)]));
98
240
  const right = new Map(expected.map((item) => [item.fact_ref, canonicalJson(item)]));
@@ -101,6 +243,14 @@ function assertCanonicalRows(actual, expected, code, detail) {
101
243
  if (left.get(key) !== value)
102
244
  invalid(code, `${detail}:${key}`);
103
245
  }
246
+ function assertCanonicalRowsByKey(actual, expected, keyName, code, detail) {
247
+ const left = new Map(actual.map((item) => [String(item[keyName]), canonicalJson(item)]));
248
+ const right = new Map(expected.map((item) => [String(item[keyName]), canonicalJson(item)]));
249
+ assertSameSet([...left.keys()], [...right.keys()], code, detail);
250
+ for (const [key, value] of right)
251
+ if (left.get(key) !== value)
252
+ invalid(code, `${detail}:${key}`);
253
+ }
104
254
  function canonicalJson(value) {
105
255
  if (Array.isArray(value))
106
256
  return `[${value.map((item) => canonicalJson(item)).join(",")}]`;