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
@@ -0,0 +1,159 @@
1
+ import { createCompactSharedStructures } from "./compact-shared-structures.js";
2
+ import { canonicalValueJson, sha256Hex } from "./strict-codec.js";
3
+ const STABLE_BOUNDARY = /^[a-z0-9][a-z0-9._:-]*$/u;
4
+ const STRUCTURE_KEY = /^structure\.[a-f0-9]{24}$/u;
5
+ export function materializeCanonicalCompactSharedStructures(targets, catalogInput, label) {
6
+ const catalog = parseCatalog(catalogInput, `${label}.shared_structures`);
7
+ const encodedSlots = targets.map((target, index) => ({
8
+ boundary: validBoundary(target.boundary, `${label}.slots[${index}]`),
9
+ value: structuredClone(target.read()),
10
+ }));
11
+ const catalogByKey = new Map(catalog.map((item) => [item.key, item]));
12
+ const materializedSlots = encodedSlots.map((slot, index) => ({
13
+ boundary: slot.boundary,
14
+ value: resolveReference(slot.value, slot.boundary, catalogByKey, `${label}.slots[${index}]`),
15
+ }));
16
+ const canonical = createCompactSharedStructures(materializedSlots);
17
+ if (canonicalValueJson(canonical.catalog) !== canonicalValueJson(catalog) ||
18
+ canonicalValueJson(canonical.slots) !== canonicalValueJson(encodedSlots))
19
+ fail(label, "shared structure catalog is not canonical");
20
+ materializedSlots.forEach((slot, index) => targets[index].write(slot.value));
21
+ return canonical.statistics;
22
+ }
23
+ function parseCatalog(value, label) {
24
+ if (!Array.isArray(value))
25
+ fail(label, "must be an array");
26
+ const seen = new Set();
27
+ return value.map((item, index) => {
28
+ const itemLabel = `${label}[${index}]`;
29
+ if (!item || typeof item !== "object" || Array.isArray(item))
30
+ fail(itemLabel, "must be an object");
31
+ const row = item;
32
+ const fields = ["key", "digest", "boundary", "parameter_count", "template"];
33
+ const unknown = Object.keys(row).filter((key) => !fields.includes(key));
34
+ const missing = fields.filter((key) => !Object.hasOwn(row, key));
35
+ if (unknown.length)
36
+ fail(itemLabel, `unknown keys: ${unknown.join(",")}`);
37
+ if (missing.length)
38
+ fail(itemLabel, `missing keys: ${missing.join(",")}`);
39
+ if (typeof row.key !== "string" || !STRUCTURE_KEY.test(row.key))
40
+ fail(`${itemLabel}.key`, "must be a canonical structure key");
41
+ if (seen.has(row.key))
42
+ fail(itemLabel, `duplicate key: ${row.key}`);
43
+ seen.add(row.key);
44
+ if (typeof row.digest !== "string" || !/^[a-f0-9]{64}$/u.test(row.digest))
45
+ fail(`${itemLabel}.digest`, "must be a lowercase SHA-256");
46
+ const boundary = validBoundary(row.boundary, `${itemLabel}.boundary`);
47
+ if (!Number.isInteger(row.parameter_count) ||
48
+ Number(row.parameter_count) < 0)
49
+ fail(`${itemLabel}.parameter_count`, "must be an integer >= 0");
50
+ const parameterCount = Number(row.parameter_count);
51
+ const used = validateTemplate(row.template, parameterCount, itemLabel);
52
+ for (let parameter = 0; parameter < parameterCount; parameter += 1)
53
+ if (!used.has(parameter))
54
+ fail(`${itemLabel}.template`, `unused parameter: ${parameter}`);
55
+ const digest = sha256Hex(canonicalValueJson({
56
+ boundary,
57
+ parameter_count: parameterCount,
58
+ template: row.template,
59
+ }));
60
+ if (row.digest !== digest)
61
+ fail(`${itemLabel}.digest`, `digest mismatch: ${row.digest}:${digest}`);
62
+ if (row.key !== `structure.${digest.slice(0, 24)}`)
63
+ fail(`${itemLabel}.key`, "key does not match digest");
64
+ return {
65
+ key: row.key,
66
+ digest,
67
+ boundary,
68
+ parameter_count: parameterCount,
69
+ template: structuredClone(row.template),
70
+ };
71
+ });
72
+ }
73
+ function validateTemplate(value, parameterCount, label) {
74
+ const used = new Set();
75
+ const visit = (item, path) => {
76
+ if (Array.isArray(item)) {
77
+ item.forEach((child, index) => visit(child, `${path}[${index}]`));
78
+ return;
79
+ }
80
+ if (!item || typeof item !== "object") {
81
+ leafKind(item);
82
+ return;
83
+ }
84
+ const row = item;
85
+ if (Object.hasOwn(row, "structure_ref"))
86
+ fail(path, "templates cannot contain structure references");
87
+ if (Object.hasOwn(row, "parameter_index")) {
88
+ if (Object.keys(row).length !== 1 ||
89
+ !Number.isInteger(row.parameter_index) ||
90
+ Number(row.parameter_index) < 0 ||
91
+ Number(row.parameter_index) >= parameterCount)
92
+ fail(path, "invalid parameter placeholder");
93
+ used.add(Number(row.parameter_index));
94
+ return;
95
+ }
96
+ for (const [key, child] of Object.entries(row))
97
+ visit(child, `${path}.${key}`);
98
+ };
99
+ visit(value, `${label}.template`);
100
+ return used;
101
+ }
102
+ function resolveReference(value, boundary, catalog, label) {
103
+ if (!value || typeof value !== "object" || Array.isArray(value))
104
+ return structuredClone(value);
105
+ const row = value;
106
+ if (!Object.hasOwn(row, "structure_ref"))
107
+ return structuredClone(value);
108
+ if (Object.keys(row).length !== 2 ||
109
+ !Object.hasOwn(row, "arguments") ||
110
+ typeof row.structure_ref !== "string")
111
+ fail(label, "structure reference must contain only structure_ref/arguments");
112
+ const template = catalog.get(row.structure_ref);
113
+ if (!template)
114
+ fail(label, `unknown structure: ${String(row.structure_ref)}`);
115
+ if (template.boundary !== boundary)
116
+ fail(label, `structure boundary mismatch: ${template.boundary}:${boundary}`);
117
+ if (!Array.isArray(row.arguments))
118
+ fail(`${label}.arguments`, "must be an array");
119
+ if (row.arguments.length !== template.parameter_count)
120
+ fail(`${label}.arguments`, `parameter count mismatch: ${row.arguments.length}:${template.parameter_count}`);
121
+ row.arguments.forEach((argument, index) => {
122
+ if (argument && typeof argument === "object")
123
+ fail(`${label}.arguments[${index}]`, "arguments must be scalar");
124
+ leafKind(argument);
125
+ });
126
+ return instantiateTemplate(template.template, row.arguments);
127
+ }
128
+ function instantiateTemplate(template, arguments_) {
129
+ if (Array.isArray(template))
130
+ return template.map((item) => instantiateTemplate(item, arguments_));
131
+ if (!template || typeof template !== "object")
132
+ return structuredClone(template);
133
+ const row = template;
134
+ if (Object.keys(row).length === 1 && Object.hasOwn(row, "parameter_index"))
135
+ return structuredClone(arguments_[Number(row.parameter_index)]);
136
+ return Object.fromEntries(Object.entries(row).map(([key, value]) => [
137
+ key,
138
+ instantiateTemplate(value, arguments_),
139
+ ]));
140
+ }
141
+ function leafKind(value) {
142
+ if (value === null)
143
+ return "null";
144
+ if (typeof value === "string")
145
+ return "string";
146
+ if (typeof value === "boolean")
147
+ return "boolean";
148
+ if (typeof value === "number" && Number.isFinite(value))
149
+ return "number";
150
+ fail("value", `unsupported scalar: ${typeof value}`);
151
+ }
152
+ function validBoundary(value, label) {
153
+ if (typeof value !== "string" || !STABLE_BOUNDARY.test(value))
154
+ fail(label, "must be a stable lowercase boundary");
155
+ return value;
156
+ }
157
+ function fail(label, message) {
158
+ throw new Error(`compact_shared_structure_invalid:${label}:${message}`);
159
+ }
@@ -0,0 +1,3 @@
1
+ import type { CompactSharedStructureEncoding, CompactSharedStructureSlot } from "./compact-shared-structure-types.js";
2
+ export type { CompactSharedStructureEncoding, CompactSharedStructureFamilyStatistic, CompactSharedStructureSlot, CompactSharedStructureStatistics, CompactSharedStructureTarget, CompactSharedStructureTemplate, } from "./compact-shared-structure-types.js";
3
+ export declare function createCompactSharedStructures(slotsInput: CompactSharedStructureSlot[]): CompactSharedStructureEncoding;
@@ -0,0 +1,204 @@
1
+ import { Buffer } from "node:buffer";
2
+ import { canonicalValueJson, sha256Hex } from "./strict-codec.js";
3
+ const STABLE_BOUNDARY = /^[a-z0-9][a-z0-9._:-]*$/u;
4
+ const MINIMUM_NET_SAVING_BYTES = 32;
5
+ export function createCompactSharedStructures(slotsInput) {
6
+ const slots = slotsInput.map((slot, index) => ({
7
+ boundary: validBoundary(slot.boundary, `slots[${index}].boundary`),
8
+ value: structuredClone(slot.value),
9
+ }));
10
+ const grouped = new Map();
11
+ for (const [slotIndex, slot] of slots.entries()) {
12
+ if (!isCandidateComposite(slot.value))
13
+ continue;
14
+ const descriptor = describeStructure(slot.value);
15
+ const identity = `${slot.boundary}\0${canonicalValueJson(descriptor.shape)}`;
16
+ const occurrences = grouped.get(identity) ?? [];
17
+ occurrences.push({
18
+ slot_index: slotIndex,
19
+ value: slot.value,
20
+ leaves: descriptor.leaves,
21
+ original_bytes: byteLength(slot.value),
22
+ });
23
+ grouped.set(identity, occurrences);
24
+ }
25
+ const candidateClusters = [...grouped.values()]
26
+ .filter((occurrences) => occurrences.length > 1)
27
+ .flatMap(partitionStableCandidateFamilies)
28
+ .filter((group) => group.occurrences.length > 1);
29
+ const candidates = candidateClusters
30
+ .map(({ occurrences, parameter_positions }) => buildCandidate(slots, occurrences, parameter_positions))
31
+ .filter((candidate) => candidate !== null)
32
+ .sort((left, right) => left.row.key.localeCompare(right.row.key));
33
+ const bySlot = new Map();
34
+ for (const candidate of candidates)
35
+ for (const occurrence of candidate.occurrences)
36
+ bySlot.set(occurrence.slot_index, candidate);
37
+ for (const [slotIndex, candidate] of bySlot) {
38
+ const occurrenceIndex = candidate.occurrences.findIndex((item) => item.slot_index === slotIndex);
39
+ slots[slotIndex].value = structuredClone(candidate.references[occurrenceIndex]);
40
+ }
41
+ const catalog = candidates.map((candidate) => candidate.row);
42
+ const originalPayloadBytes = slotsInput.reduce((sum, slot) => sum + byteLength(slot.value), 0);
43
+ const encodedPayloadBytes = slots.reduce((sum, slot) => sum + byteLength(slot.value), 0);
44
+ const catalogBytes = byteLength(catalog);
45
+ const familyStatistics = candidates
46
+ .map((candidate) => candidate.statistic)
47
+ .sort((left, right) => right.saved_bytes - left.saved_bytes ||
48
+ left.key.localeCompare(right.key));
49
+ return {
50
+ slots,
51
+ catalog,
52
+ statistics: {
53
+ slot_count: slots.length,
54
+ composite_slot_count: slotsInput.filter((slot) => isCandidateComposite(slot.value)).length,
55
+ candidate_family_count: candidateClusters.length,
56
+ emitted_family_count: catalog.length,
57
+ exact_family_count: catalog.filter((item) => item.parameter_count === 0)
58
+ .length,
59
+ parameterized_family_count: catalog.filter((item) => item.parameter_count > 0).length,
60
+ reference_count: candidates.reduce((sum, candidate) => sum + candidate.occurrences.length, 0),
61
+ argument_count: candidates.reduce((sum, candidate) => sum + candidate.occurrences.length * candidate.row.parameter_count, 0),
62
+ original_payload_bytes: originalPayloadBytes,
63
+ encoded_payload_bytes: encodedPayloadBytes,
64
+ catalog_bytes: catalogBytes,
65
+ saved_bytes: originalPayloadBytes - encodedPayloadBytes - catalogBytes,
66
+ remaining_beneficial_candidates: 0,
67
+ families: familyStatistics,
68
+ },
69
+ };
70
+ }
71
+ function buildCandidate(slots, occurrences, parameterPositions) {
72
+ const boundary = slots[occurrences[0].slot_index].boundary;
73
+ const parameterByPosition = new Map(parameterPositions.map((position, index) => [position, index]));
74
+ const template = buildTemplate(occurrences[0].value, parameterByPosition);
75
+ const parameterCount = parameterPositions.length;
76
+ const digest = sha256Hex(canonicalValueJson({ boundary, parameter_count: parameterCount, template }));
77
+ const key = `structure.${digest.slice(0, 24)}`;
78
+ const row = {
79
+ key,
80
+ digest,
81
+ boundary,
82
+ parameter_count: parameterCount,
83
+ template,
84
+ };
85
+ const references = occurrences.map((occurrence) => ({
86
+ structure_ref: key,
87
+ arguments: parameterPositions.map((position) => structuredClone(occurrence.leaves[position])),
88
+ }));
89
+ const originalBytes = occurrences.reduce((sum, occurrence) => sum + occurrence.original_bytes, 0);
90
+ const encodedBytes = byteLength(row) +
91
+ references.reduce((sum, reference) => sum + byteLength(reference), 0);
92
+ const savedBytes = originalBytes - encodedBytes;
93
+ if (savedBytes < MINIMUM_NET_SAVING_BYTES)
94
+ return null;
95
+ return {
96
+ boundary,
97
+ occurrences,
98
+ parameter_positions: parameterPositions,
99
+ template,
100
+ row,
101
+ references,
102
+ statistic: {
103
+ key,
104
+ boundary,
105
+ occurrences: occurrences.length,
106
+ parameter_count: parameterCount,
107
+ original_bytes: originalBytes,
108
+ encoded_bytes: encodedBytes,
109
+ saved_bytes: savedBytes,
110
+ },
111
+ };
112
+ }
113
+ function partitionStableCandidateFamilies(occurrences) {
114
+ const leafCount = occurrences[0].leaves.length;
115
+ const parameterPositions = [];
116
+ const constantPositions = [];
117
+ for (let index = 0; index < leafCount; index += 1) {
118
+ const distinct = new Set(occurrences.map((occurrence) => canonicalValueJson(occurrence.leaves[index]))).size;
119
+ if (distinct >= 3 && distinct / occurrences.length >= 0.2)
120
+ parameterPositions.push(index);
121
+ else
122
+ constantPositions.push(index);
123
+ }
124
+ const clusters = new Map();
125
+ for (const occurrence of occurrences) {
126
+ const identity = canonicalValueJson(constantPositions.map((position) => occurrence.leaves[position]));
127
+ const cluster = clusters.get(identity) ?? [];
128
+ cluster.push(occurrence);
129
+ clusters.set(identity, cluster);
130
+ }
131
+ return [...clusters.values()].map((cluster) => ({
132
+ occurrences: cluster,
133
+ parameter_positions: parameterPositions,
134
+ }));
135
+ }
136
+ function describeStructure(value) {
137
+ const leaves = [];
138
+ const visit = (item) => {
139
+ if (Array.isArray(item))
140
+ return ["array", item.map(visit)];
141
+ if (item && typeof item === "object")
142
+ return [
143
+ "object",
144
+ Object.keys(item)
145
+ .sort()
146
+ .map((key) => [key, visit(item[key])]),
147
+ ];
148
+ leaves.push(item);
149
+ return ["leaf", leafKind(item)];
150
+ };
151
+ return { shape: visit(value), leaves };
152
+ }
153
+ function buildTemplate(value, parameterByPosition) {
154
+ let leafIndex = 0;
155
+ const visit = (item) => {
156
+ if (Array.isArray(item))
157
+ return item.map(visit);
158
+ if (item && typeof item === "object")
159
+ return Object.fromEntries(Object.keys(item)
160
+ .sort()
161
+ .map((key) => [key, visit(item[key])]));
162
+ const parameterIndex = parameterByPosition.get(leafIndex);
163
+ leafIndex += 1;
164
+ return parameterIndex === undefined
165
+ ? structuredClone(item)
166
+ : { parameter_index: parameterIndex };
167
+ };
168
+ return visit(value);
169
+ }
170
+ function isCandidateComposite(value) {
171
+ if (!value || typeof value !== "object")
172
+ return false;
173
+ if (!Array.isArray(value)) {
174
+ const row = value;
175
+ if (Object.keys(row).length === 1 &&
176
+ (Object.hasOwn(row, "selector_ref") ||
177
+ Object.hasOwn(row, "structure_ref") ||
178
+ Object.hasOwn(row, "parameter_index")))
179
+ return false;
180
+ }
181
+ return true;
182
+ }
183
+ function leafKind(value) {
184
+ if (value === null)
185
+ return "null";
186
+ if (typeof value === "string")
187
+ return "string";
188
+ if (typeof value === "boolean")
189
+ return "boolean";
190
+ if (typeof value === "number" && Number.isFinite(value))
191
+ return "number";
192
+ fail("value", `unsupported scalar: ${typeof value}`);
193
+ }
194
+ function validBoundary(value, label) {
195
+ if (typeof value !== "string" || !STABLE_BOUNDARY.test(value))
196
+ fail(label, "must be a stable lowercase boundary");
197
+ return value;
198
+ }
199
+ function byteLength(value) {
200
+ return Buffer.byteLength(canonicalValueJson(value), "utf8");
201
+ }
202
+ function fail(label, message) {
203
+ throw new Error(`compact_shared_structure_invalid:${label}:${message}`);
204
+ }
@@ -16,5 +16,9 @@ export declare const DESIGN_RESOURCE_COMPARATORS: readonly ["exact_value", "nume
16
16
  export type DesignResourceComparator = (typeof DESIGN_RESOURCE_COMPARATORS)[number];
17
17
  export declare const DESIGN_RESOURCE_INSPECTOR_CAPABILITIES: readonly ["html_dom", "css_cascade", "javascript_static", "json", "svg", "markdown", "assets", "design_tokens", "component_anatomy", "prototype_transitions", "responsive_rules", "input_rules", "accessibility", "motion", "localization", "system_ui", "haptics", "audio", "render_capture", "geometry_measurement", "custom_properties", "relations", "dynamic_population"];
18
18
  export type DesignResourceInspectorCapability = (typeof DESIGN_RESOURCE_INSPECTOR_CAPABILITIES)[number];
19
+ export declare const DESIGN_RESOURCE_SYMBOLIC_NONINTERFERENCE_ORACLE_CAPABILITIES: readonly ["symbolic_noninterference.source.closed_world_static_dependency_closure", "symbolic_noninterference.source.restricted_ir_symbolic_equivalence", "symbolic_noninterference.source.finite_complete_domain_exhaustive_equivalence", "symbolic_noninterference.production.closed_world_static_dependency_closure", "symbolic_noninterference.production.restricted_ir_symbolic_equivalence", "symbolic_noninterference.production.finite_complete_domain_exhaustive_equivalence"];
20
+ export type DesignResourceSymbolicNoninterferenceOracleCapability = (typeof DESIGN_RESOURCE_SYMBOLIC_NONINTERFERENCE_ORACLE_CAPABILITIES)[number];
21
+ export declare const DESIGN_RESOURCE_ORACLE_CAPABILITIES: readonly ["html_dom", "css_cascade", "javascript_static", "json", "svg", "markdown", "assets", "design_tokens", "component_anatomy", "prototype_transitions", "responsive_rules", "input_rules", "accessibility", "motion", "localization", "system_ui", "haptics", "audio", "render_capture", "geometry_measurement", "custom_properties", "relations", "dynamic_population", "symbolic_noninterference.source.closed_world_static_dependency_closure", "symbolic_noninterference.source.restricted_ir_symbolic_equivalence", "symbolic_noninterference.source.finite_complete_domain_exhaustive_equivalence", "symbolic_noninterference.production.closed_world_static_dependency_closure", "symbolic_noninterference.production.restricted_ir_symbolic_equivalence", "symbolic_noninterference.production.finite_complete_domain_exhaustive_equivalence"];
22
+ export type DesignResourceOracleCapability = (typeof DESIGN_RESOURCE_ORACLE_CAPABILITIES)[number];
19
23
  export declare const DESIGN_RESOURCE_CENSUS_KINDS: readonly ["resource", "node", "declaration", "token", "asset_reference", "relation", "custom_property", "variant", "state", "interaction_phase", "dynamic_population"];
20
24
  export type DesignResourceCensusKind = (typeof DESIGN_RESOURCE_CENSUS_KINDS)[number];
@@ -155,6 +155,18 @@ export const DESIGN_RESOURCE_INSPECTOR_CAPABILITIES = [
155
155
  "relations",
156
156
  "dynamic_population",
157
157
  ];
158
+ export const DESIGN_RESOURCE_SYMBOLIC_NONINTERFERENCE_ORACLE_CAPABILITIES = [
159
+ "symbolic_noninterference.source.closed_world_static_dependency_closure",
160
+ "symbolic_noninterference.source.restricted_ir_symbolic_equivalence",
161
+ "symbolic_noninterference.source.finite_complete_domain_exhaustive_equivalence",
162
+ "symbolic_noninterference.production.closed_world_static_dependency_closure",
163
+ "symbolic_noninterference.production.restricted_ir_symbolic_equivalence",
164
+ "symbolic_noninterference.production.finite_complete_domain_exhaustive_equivalence",
165
+ ];
166
+ export const DESIGN_RESOURCE_ORACLE_CAPABILITIES = [
167
+ ...DESIGN_RESOURCE_INSPECTOR_CAPABILITIES,
168
+ ...DESIGN_RESOURCE_SYMBOLIC_NONINTERFERENCE_ORACLE_CAPABILITIES,
169
+ ];
158
170
  export const DESIGN_RESOURCE_CENSUS_KINDS = [
159
171
  "resource",
160
172
  "node",
@@ -1,4 +1,4 @@
1
- import { DESIGN_RESOURCE_INSPECTOR_CAPABILITIES, } from "./design-resource-fact-manifest-types.js";
1
+ import { DESIGN_RESOURCE_ORACLE_CAPABILITIES, } from "./design-resource-fact-manifest-types.js";
2
2
  import { parseDesignResourceLocatedDigest } from "./design-resource-fact-shape-primitives.js";
3
3
  import { contractKeys, sha256, stableKey, stableKeys, } from "./design-resource-handoff-shape-primitives.js";
4
4
  import { array, literal, nullable, object, string, } from "./long-task-shape-primitives.js";
@@ -19,7 +19,7 @@ export function parseDesignResourceOracles(value, label = "design_resource_hando
19
19
  identity: string(row.identity, `${itemLabel}.identity`),
20
20
  version: string(row.version, `${itemLabel}.version`),
21
21
  sha256: nullable(row.sha256, (item) => sha256(item, `${itemLabel}.sha256`)),
22
- capability_refs: array(row.capability_refs, `${itemLabel}.capability_refs`).map((capability, capabilityIndex) => literal(capability, DESIGN_RESOURCE_INSPECTOR_CAPABILITIES, `${itemLabel}.capability_refs[${capabilityIndex}]`)),
22
+ capability_refs: array(row.capability_refs, `${itemLabel}.capability_refs`).map((capability, capabilityIndex) => literal(capability, DESIGN_RESOURCE_ORACLE_CAPABILITIES, `${itemLabel}.capability_refs[${capabilityIndex}]`)),
23
23
  };
24
24
  });
25
25
  }
@@ -1,5 +1,5 @@
1
1
  import type { DesignResourceDimension, DesignResourceEvidenceKind, DesignResourceVerificationMethod } from "./design-resource-handoff-types.js";
2
- import type { DesignResourceInspectorCapability } from "./design-resource-fact-manifest-types.js";
2
+ import type { DesignResourceOracleCapability } from "./design-resource-fact-manifest-types.js";
3
3
  export declare const DESIGN_RESOURCE_FACT_INVARIANTS: Readonly<{
4
4
  readonly complete_observable_design_fact_delivery: true;
5
5
  readonly resource_fact_inventory_closure_required: true;
@@ -40,4 +40,4 @@ export declare function designFactMethodIsCompatible(dimension: DesignResourceDi
40
40
  export declare function designFactEvidenceIsCompatible(dimension: DesignResourceDimension, kind: DesignResourceEvidenceKind): boolean;
41
41
  export declare function designFactEvidenceSupportsMethod(method: DesignResourceVerificationMethod, kind: DesignResourceEvidenceKind): boolean;
42
42
  export declare function designFactComparatorSupportsMethod(method: DesignResourceVerificationMethod, comparator: string): boolean;
43
- export declare function designFactOracleSupportsMethod(method: DesignResourceVerificationMethod, capabilities: readonly DesignResourceInspectorCapability[]): boolean;
43
+ export declare function designFactOracleSupportsMethod(method: DesignResourceVerificationMethod, capabilities: readonly DesignResourceOracleCapability[]): boolean;
@@ -1,5 +1,5 @@
1
1
  import type { DesignResourceCoverageDisposition, DesignResourceDimension, DesignResourceLocatorKind, DesignResourceVerificationMethod } from "./design-resource-handoff-types.js";
2
- import type { DesignResourceComparator, DesignResourceInspectorCapability, DesignResourceLineageNodeKind, DesignResourcePropertyFamily, DesignResourceStandardConditionAxis, DesignResourceSubjectKind, DesignResourceSubjectPresenceKind, DesignResourceValueKind, DesignResourceVariationAxis } from "./design-resource-fact-enums.js";
2
+ import type { DesignResourceComparator, DesignResourceInspectorCapability, DesignResourceLineageNodeKind, DesignResourceOracleCapability, DesignResourcePropertyFamily, DesignResourceStandardConditionAxis, DesignResourceSubjectKind, DesignResourceSubjectPresenceKind, DesignResourceValueKind, DesignResourceVariationAxis } from "./design-resource-fact-enums.js";
3
3
  export interface DesignResourceTypedLocatorV1 {
4
4
  resource_ref: string;
5
5
  kind: DesignResourceLocatorKind;
@@ -131,7 +131,7 @@ export interface DesignResourceOracleV1 {
131
131
  identity: string;
132
132
  version: string;
133
133
  sha256: string | null;
134
- capability_refs: DesignResourceInspectorCapability[];
134
+ capability_refs: DesignResourceOracleCapability[];
135
135
  }
136
136
  export interface DesignResourceEnvironmentV1 {
137
137
  key: string;
@@ -17,7 +17,9 @@ export async function stageDesignResourceHandoffDraft(repository, draftDirectory
17
17
  await writeFile(stagedFile, bytes, { flag: "wx" });
18
18
  const stagedPath = repoRelative(repository, stagedFile);
19
19
  const parsed = parseDesignResourceHandoffMarkdown(stagedPath, content);
20
- if (!("representation" in parsed.handoff))
20
+ if (parsed.handoff.schema_version !== "design-resource-handoff-v1" ||
21
+ !("representation" in parsed.handoff) ||
22
+ parsed.handoff.representation !== "manifest_backed")
21
23
  fail("manifest_backed_representation_required", entryName);
22
24
  if (parsed.handoff.targets.length !== 1)
23
25
  fail("one_target_per_handoff_required", `${entryName}:${parsed.handoff.targets.length}`);
@@ -27,7 +29,7 @@ export async function stageDesignResourceHandoffDraft(repository, draftDirectory
27
29
  fail("target_manifest_resource_missing", target.key);
28
30
  return {
29
31
  bytes,
30
- parsed,
32
+ parsed: parsed,
31
33
  target,
32
34
  manifest_resource: manifestResource,
33
35
  };
@@ -1,4 +1,5 @@
1
1
  import type { DesignResourceHandoffV1 } from "./design-resource-handoff-types.js";
2
+ import type { DesignResourceHandoffV2, ParsedDesignResourceHandoffV2 } from "./design-resource-symbolic-fact-types.js";
2
3
  export type DesignResourceHandoffManifestBackedV1 = Pick<DesignResourceHandoffV1, "schema_version" | "intent" | "scope" | "provenance" | "resources" | "targets" | "resource_fact_closure" | "coverage" | "proposal"> & {
3
4
  representation: "manifest_backed";
4
5
  };
@@ -9,3 +10,5 @@ export interface ParsedDesignResourceHandoffInputV1 {
9
10
  source_item_keys: string[];
10
11
  source_item_kinds: Record<string, string>;
11
12
  }
13
+ export type DesignResourceHandoffInput = DesignResourceHandoffInputV1 | DesignResourceHandoffV2;
14
+ export type ParsedDesignResourceHandoffInput = ParsedDesignResourceHandoffInputV1 | ParsedDesignResourceHandoffV2;
@@ -1,8 +1,8 @@
1
- import type { ParsedDesignResourceHandoffInputV1 } from "./design-resource-handoff-input-types.js";
1
+ import type { ParsedDesignResourceHandoffInput } from "./design-resource-handoff-input-types.js";
2
2
  export interface DesignResourceHandoffBlockSpan {
3
3
  bodyStartOffset: number;
4
4
  bodyEndOffset: number;
5
5
  }
6
6
  export declare function containsDesignResourceHandoff(content: string): boolean;
7
7
  export declare function scanDesignResourceHandoffBlocks(content: string): DesignResourceHandoffBlockSpan[];
8
- export declare function parseDesignResourceHandoffMarkdown(handoffPath: string, content: string): ParsedDesignResourceHandoffInputV1;
8
+ export declare function parseDesignResourceHandoffMarkdown(handoffPath: string, content: string): ParsedDesignResourceHandoffInput;
@@ -1,6 +1,6 @@
1
1
  import { parseSourceDocument } from "./long-task-source-item-parser.js";
2
2
  import { forEachSourceLine } from "./source-line-scanner.js";
3
- const DESIGN_RESOURCE_START = /^```yaml[ \t]+design-resource-handoff-v1[ \t]*$/u;
3
+ const DESIGN_RESOURCE_START = /^```yaml[ \t]+design-resource-handoff-(?:v1|v2)[ \t]*$/u;
4
4
  const FORMAL_BLOCK_END = /^```[ \t]*$/u;
5
5
  export function containsDesignResourceHandoff(content) {
6
6
  return scanDesignResourceHandoffBlocks(content).length > 0;
@@ -32,7 +32,7 @@ export function parseDesignResourceHandoffMarkdown(handoffPath, content) {
32
32
  const parsedSource = parseSourceDocument(handoffPath, content);
33
33
  const handoff = parsedSource.designResourceHandoff;
34
34
  if (!handoff)
35
- throw new Error("design-resource-handoff-v1 block was not decoded");
35
+ throw new Error("design-resource-handoff block was not decoded");
36
36
  return {
37
37
  handoff_path: handoffPath,
38
38
  handoff,
@@ -1,4 +1,6 @@
1
1
  import type { DesignResourceHandoffInputV1 } from "./design-resource-handoff-input-types.js";
2
+ import type { DesignResourceHandoffInput } from "./design-resource-handoff-input-types.js";
2
3
  import type { DesignResourceHandoffV1 } from "./design-resource-handoff-types.js";
3
4
  export declare function parseDesignResourceHandoffInputShape(value: unknown): DesignResourceHandoffInputV1;
5
+ export declare function parseAnyDesignResourceHandoffInputShape(value: unknown): DesignResourceHandoffInput;
4
6
  export declare function parseDesignResourceHandoffShape(value: unknown): DesignResourceHandoffV1;
@@ -1,3 +1,4 @@
1
+ import { parseDesignResourceSymbolicHandoffShape } from "./design-resource-symbolic-fact-shape.js";
1
2
  import { parseDesignResourceAssetBindings, parseDesignResourceAxisDispositions, parseDesignResourceConditionExclusions, parseDesignResourceEnvironments, parseDesignResourceFactCells, parseDesignResourceLineageNodes, parseDesignResourceOracles, parseDesignResourceProofObligations, parseDesignResourceProperties, parseDesignResourceVariationAxisDispositions, parseDesignResourceVariationExclusions, parseDesignResourceVariations, } from "./design-resource-fact-manifest-shape.js";
2
3
  import { parseDesignResourceHandoffBlockers, parseDesignResourceHandoffCoverage, parseDesignResourceHandoffEvidence, parseDesignResourceHandoffFacts, parseDesignResourceHandoffResourceFactClosure, } from "./design-resource-handoff-shape-evidence.js";
3
4
  import { contractKey, stableKeys, } from "./design-resource-handoff-shape-primitives.js";
@@ -11,6 +12,15 @@ export function parseDesignResourceHandoffInputShape(value) {
11
12
  return parseManifestBackedDesignResourceHandoffShape(value);
12
13
  return parseDesignResourceHandoffShape(value);
13
14
  }
15
+ export function parseAnyDesignResourceHandoffInputShape(value) {
16
+ if (value &&
17
+ typeof value === "object" &&
18
+ !Array.isArray(value) &&
19
+ value.schema_version ===
20
+ "design-resource-handoff-v2")
21
+ return parseDesignResourceSymbolicHandoffShape(value);
22
+ return parseDesignResourceHandoffInputShape(value);
23
+ }
14
24
  export function parseDesignResourceHandoffShape(value) {
15
25
  const root = object(value, "design_resource_handoff", [
16
26
  "schema_version",
@@ -3,13 +3,17 @@ import path from "node:path";
3
3
  import { invalidDesignResourceHandoff } from "./design-resource-handoff-validation-primitives.js";
4
4
  import { assertProtectedRepositoryFile } from "./long-task-protected-files.js";
5
5
  import { sha256Hex } from "./strict-codec.js";
6
+ import { assertDesignResourceV1ManifestCapacity } from "./design-resource-v1-capacity.js";
6
7
  export async function readDesignResourceSnapshot(repository, parsed) {
7
8
  const contents = new Map();
8
9
  const hashes = {};
10
+ const manifestResourceRefs = new Set(parsed.handoff.targets.map((target) => target.source_profile.fact_manifest_resource_ref));
9
11
  for (const resource of parsed.handoff.resources) {
10
12
  if (resource.path === parsed.handoff_path)
11
13
  invalidDesignResourceHandoff("resource_must_not_be_handoff", resource.key);
12
14
  const file = await assertProtectedRepositoryFile(repository, path.resolve(repository, ...resource.path.split("/")), `design_resource:${resource.key}`);
15
+ if (manifestResourceRefs.has(resource.key))
16
+ await assertDesignResourceV1ManifestCapacity(file);
13
17
  const bytes = await readFile(file);
14
18
  const digest = sha256Hex(bytes);
15
19
  if (digest !== resource.sha256)
@@ -1,5 +1,8 @@
1
1
  import type { ParsedDesignResourceHandoffInputV1 } from "./design-resource-handoff-input-types.js";
2
2
  import type { DesignResourceHandoffPreflightV1, ParsedDesignResourceHandoffV1 } from "./design-resource-handoff-types.js";
3
- export declare function preflightDesignResourceHandoff(repository: string, handoffPath: string): Promise<DesignResourceHandoffPreflightV1>;
3
+ import type { DesignResourceHandoffPreflightV2 } from "./design-resource-symbolic-fact-types.js";
4
+ import type { ParsedDesignResourceHandoffInput } from "./design-resource-handoff-input-types.js";
5
+ export declare function preflightDesignResourceHandoff(repository: string, handoffPath: string): Promise<DesignResourceHandoffPreflightV1 | DesignResourceHandoffPreflightV2>;
6
+ export declare function preflightParsedDesignResourceHandoffAny(repository: string, parsed: ParsedDesignResourceHandoffInput): Promise<DesignResourceHandoffPreflightV1 | DesignResourceHandoffPreflightV2>;
4
7
  export declare function preflightParsedDesignResourceHandoff(repository: string, parsed: ParsedDesignResourceHandoffInputV1): Promise<DesignResourceHandoffPreflightV1>;
5
8
  export declare function validateDesignResourceHandoffSemantics(parsed: ParsedDesignResourceHandoffV1): void;
@@ -6,15 +6,26 @@ import { parseDesignResourceFactManifests, validateDesignResourceFactManifests,
6
6
  import { hydrateManifestBackedDesignResourceHandoff } from "./design-resource-handoff-manifest-projection.js";
7
7
  import { readDesignResourceSnapshot } from "./design-resource-handoff-snapshot.js";
8
8
  import { validateDesignResourceFacts } from "./design-resource-handoff-validation-facts.js";
9
+ import { preflightParsedDesignResourceSymbolicHandoff } from "./design-resource-symbolic-fact-validation.js";
9
10
  import { validateDesignResourceBlockers, validateDesignResourceCoverage, validateDesignResourceReachability, } from "./design-resource-handoff-validation-coverage.js";
10
11
  import { indexDesignResourceItems, invalidDesignResourceHandoff, requireNonemptyDesignResourceValues, requireUniqueDesignResourceObjects, requireUniqueDesignResourceValues, } from "./design-resource-handoff-validation-primitives.js";
11
12
  import { validateDesignResourceConditions, validateDesignResourceEvidence, validateDesignResourceScope, validateDesignResourceSubjects, validateDesignResourceTargets, } from "./design-resource-handoff-validation-structure.js";
12
13
  import { assertProtectedRepositoryFile } from "./long-task-protected-files.js";
14
+ import { assertDesignResourceV1HandoffCapacity } from "./design-resource-v1-capacity.js";
13
15
  export async function preflightDesignResourceHandoff(repository, handoffPath) {
14
16
  const handoffFile = await assertProtectedRepositoryFile(repository, path.resolve(repository, ...handoffPath.split("/")), "design_resource_handoff");
17
+ await assertDesignResourceV1HandoffCapacity(handoffFile);
15
18
  const parsed = parseDesignResourceHandoffMarkdown(handoffPath, await readFile(handoffFile, "utf8"));
19
+ return preflightParsedDesignResourceHandoffAny(repository, parsed);
20
+ }
21
+ export async function preflightParsedDesignResourceHandoffAny(repository, parsed) {
22
+ if (isParsedSymbolicHandoff(parsed))
23
+ return preflightParsedDesignResourceSymbolicHandoff(repository, parsed);
16
24
  return preflightParsedDesignResourceHandoff(repository, parsed);
17
25
  }
26
+ function isParsedSymbolicHandoff(parsed) {
27
+ return parsed.handoff.schema_version === "design-resource-handoff-v2";
28
+ }
18
29
  export async function preflightParsedDesignResourceHandoff(repository, parsed) {
19
30
  const inputHandoff = parsed.handoff;
20
31
  if (isManifestBacked(inputHandoff) && inputHandoff.targets.length !== 1)
@@ -1,4 +1,6 @@
1
- import type { ParsedDesignResourceHandoffV1 } from "./design-resource-handoff-types.js";
2
1
  import { type DesignResource } from "./design-resource-handoff-file-primitives.js";
3
- export declare function validateDesignResourceImplementationDependencyClosure(target: ParsedDesignResourceHandoffV1["handoff"]["targets"][number], resources: Map<string, DesignResource>, contents: Map<string, Buffer>): void;
2
+ export declare function validateDesignResourceImplementationDependencyClosure(target: {
3
+ key: string;
4
+ resource_refs: string[];
5
+ }, resources: Map<string, DesignResource>, contents: Map<string, Buffer>): void;
4
6
  export declare const validateDesignResourceWebDependencyClosure: typeof validateDesignResourceImplementationDependencyClosure;
@@ -0,0 +1,2 @@
1
+ import type { DesignResourceReconciliationAudit } from "./design-resource-reconciliation-types.js";
2
+ export declare function parseDesignResourceReconciliationAudit(content: string): DesignResourceReconciliationAudit;