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,79 @@
1
+ export interface StructuralClosureCostBaseline {
2
+ schema_version: "structural-closure-cost-baseline-v1";
3
+ workload: string;
4
+ exact: {
5
+ K_fact: number;
6
+ K_rule: number;
7
+ M_value: number;
8
+ M_total: number;
9
+ };
10
+ maximum: {
11
+ N_dag: number;
12
+ source_bytes: number;
13
+ contract_bytes: number;
14
+ evidence_bytes: number;
15
+ default_context_bytes: number;
16
+ revision_changed_files: number;
17
+ revision_changed_lines: number;
18
+ revision_changed_bytes: number;
19
+ };
20
+ minimum: {
21
+ source_duplicate_saved_bytes: number;
22
+ contract_duplicate_saved_bytes: number;
23
+ };
24
+ profiles: Record<string, {
25
+ compile_ms: number;
26
+ preflight_ms: number;
27
+ final_gate_ms: number;
28
+ peak_rss_bytes: number;
29
+ }>;
30
+ }
31
+ export interface StructuralClosureCostObservation {
32
+ cardinality: {
33
+ K_fact: number;
34
+ K_rule: number;
35
+ M_value: number;
36
+ M_total: number;
37
+ N_dag: number;
38
+ };
39
+ bytes: {
40
+ source: number;
41
+ contract: number;
42
+ evidence: number;
43
+ default_context: number;
44
+ };
45
+ phases_ms: {
46
+ compile: number;
47
+ preflight: number;
48
+ final_gate: number;
49
+ };
50
+ peak_rss_bytes: number;
51
+ duplicate_blocks: {
52
+ source: {
53
+ saved_bytes: number;
54
+ remaining_beneficial_candidates: number;
55
+ };
56
+ contract: {
57
+ saved_bytes: number;
58
+ remaining_beneficial_candidates: number;
59
+ };
60
+ };
61
+ revision_blast_radius: {
62
+ changed_files: number;
63
+ changed_lines: number;
64
+ changed_bytes: number;
65
+ changed_fact_revision_keys: string[];
66
+ expected_changed_fact_revision_keys: string[];
67
+ changed_obligation_revision_keys: string[];
68
+ expected_changed_obligation_revision_keys: string[];
69
+ unrelated_fact_revision_identities_unchanged: boolean;
70
+ unrelated_obligation_revision_identities_unchanged: boolean;
71
+ shared_structure_catalog_unchanged: boolean;
72
+ };
73
+ unrelated_axis: {
74
+ K_fact_growth: number;
75
+ M_value_growth: number;
76
+ persisted_shared_metadata_growth_bytes: number;
77
+ };
78
+ }
79
+ export declare function evaluateStructuralClosureCost(observation: StructuralClosureCostObservation, baseline: StructuralClosureCostBaseline, profile: string): string[];
@@ -0,0 +1,91 @@
1
+ export function evaluateStructuralClosureCost(observation, baseline, profile) {
2
+ const findings = [];
3
+ if (baseline.schema_version !== "structural-closure-cost-baseline-v1")
4
+ findings.push("baseline_schema_version_invalid");
5
+ for (const field of ["K_fact", "K_rule", "M_value", "M_total"])
6
+ if (observation.cardinality[field] !== baseline.exact[field])
7
+ findings.push(`cardinality_${field}_mismatch:${observation.cardinality[field]}:${baseline.exact[field]}`);
8
+ compareMaximum(findings, "N_dag", observation.cardinality.N_dag, baseline.maximum.N_dag);
9
+ for (const [field, value] of [
10
+ ["source_bytes", observation.bytes.source],
11
+ ["contract_bytes", observation.bytes.contract],
12
+ ["evidence_bytes", observation.bytes.evidence],
13
+ ["default_context_bytes", observation.bytes.default_context],
14
+ ])
15
+ compareMaximum(findings, field, value, baseline.maximum[field]);
16
+ const phaseBudget = baseline.profiles[profile];
17
+ if (!phaseBudget)
18
+ findings.push(`baseline_profile_missing:${profile}`);
19
+ else {
20
+ compareMaximum(findings, "compile_ms", observation.phases_ms.compile, phaseBudget.compile_ms);
21
+ compareMaximum(findings, "preflight_ms", observation.phases_ms.preflight, phaseBudget.preflight_ms);
22
+ compareMaximum(findings, "final_gate_ms", observation.phases_ms.final_gate, phaseBudget.final_gate_ms);
23
+ compareMaximum(findings, "peak_rss_bytes", observation.peak_rss_bytes, phaseBudget.peak_rss_bytes);
24
+ }
25
+ compareMinimum(findings, "source_duplicate_saved_bytes", observation.duplicate_blocks.source.saved_bytes, baseline.minimum.source_duplicate_saved_bytes);
26
+ compareMinimum(findings, "contract_duplicate_saved_bytes", observation.duplicate_blocks.contract.saved_bytes, baseline.minimum.contract_duplicate_saved_bytes);
27
+ for (const [side, value] of [
28
+ [
29
+ "source",
30
+ observation.duplicate_blocks.source.remaining_beneficial_candidates,
31
+ ],
32
+ [
33
+ "contract",
34
+ observation.duplicate_blocks.contract.remaining_beneficial_candidates,
35
+ ],
36
+ ])
37
+ if (value !== 0)
38
+ findings.push(`remaining_beneficial_candidates:${side}:${value}`);
39
+ compareMaximum(findings, "revision_changed_files", observation.revision_blast_radius.changed_files, baseline.maximum.revision_changed_files);
40
+ compareMaximum(findings, "revision_changed_lines", observation.revision_blast_radius.changed_lines, baseline.maximum.revision_changed_lines);
41
+ compareMaximum(findings, "revision_changed_bytes", observation.revision_blast_radius.changed_bytes, baseline.maximum.revision_changed_bytes);
42
+ for (const [field, value] of [
43
+ [
44
+ "fact_revision_key_set",
45
+ sameStrings(observation.revision_blast_radius.changed_fact_revision_keys, observation.revision_blast_radius.expected_changed_fact_revision_keys),
46
+ ],
47
+ [
48
+ "obligation_revision_key_set",
49
+ sameStrings(observation.revision_blast_radius.changed_obligation_revision_keys, observation.revision_blast_radius
50
+ .expected_changed_obligation_revision_keys),
51
+ ],
52
+ [
53
+ "unrelated_fact_revision_identities",
54
+ observation.revision_blast_radius
55
+ .unrelated_fact_revision_identities_unchanged,
56
+ ],
57
+ [
58
+ "unrelated_obligation_revision_identities",
59
+ observation.revision_blast_radius
60
+ .unrelated_obligation_revision_identities_unchanged,
61
+ ],
62
+ [
63
+ "shared_structure_catalog",
64
+ observation.revision_blast_radius.shared_structure_catalog_unchanged,
65
+ ],
66
+ ])
67
+ if (!value)
68
+ findings.push(`revision_locality_failed:${field}`);
69
+ for (const [field, value] of [
70
+ ["K_fact_growth", observation.unrelated_axis.K_fact_growth],
71
+ ["M_value_growth", observation.unrelated_axis.M_value_growth],
72
+ [
73
+ "persisted_shared_metadata_growth_bytes",
74
+ observation.unrelated_axis.persisted_shared_metadata_growth_bytes,
75
+ ],
76
+ ])
77
+ if (value !== 0)
78
+ findings.push(`unrelated_axis_growth:${field}:${value}`);
79
+ return findings.sort();
80
+ }
81
+ function compareMaximum(findings, field, value, maximum) {
82
+ if (!Number.isFinite(value) || value > maximum)
83
+ findings.push(`maximum_exceeded:${field}:${value}:${maximum}`);
84
+ }
85
+ function compareMinimum(findings, field, value, minimum) {
86
+ if (!Number.isFinite(value) || value < minimum)
87
+ findings.push(`minimum_not_met:${field}:${value}:${minimum}`);
88
+ }
89
+ function sameStrings(left, right) {
90
+ return JSON.stringify([...left].sort()) === JSON.stringify([...right].sort());
91
+ }
@@ -0,0 +1,25 @@
1
+ import type { SymbolicDenotationCanonicalDagV1, SymbolicDenotationComplexityLimits, SymbolicDenotationPredicate } from "./symbolic-denotation-types.js";
2
+ import type { SymbolicRuntimeAxis } from "./symbolic-denotation-runtime.js";
3
+ export declare class SymbolicDecisionDagBuilder {
4
+ private readonly axes;
5
+ private readonly limits;
6
+ private readonly nodes;
7
+ private readonly unique;
8
+ private readonly predicateMemo;
9
+ private readonly applyMemo;
10
+ private readonly notMemo;
11
+ private constructedEdges;
12
+ constructor(axes: SymbolicRuntimeAxis[], limits: SymbolicDenotationComplexityLimits);
13
+ predicate(predicate: SymbolicDenotationPredicate, domainIndex: ReadonlyMap<string, number>): number;
14
+ private compilePredicate;
15
+ private inPredicate;
16
+ private rangePredicate;
17
+ private groupPredicate;
18
+ canonicalize(rootId: number): SymbolicDenotationCanonicalDagV1;
19
+ private checkCanonicalLimits;
20
+ private atom;
21
+ private negate;
22
+ private apply;
23
+ private reduceApply;
24
+ private node;
25
+ }
@@ -0,0 +1,176 @@
1
+ import { canonicalSymbolicEdges, symbolicSegmentMatches, } from "./symbolic-denotation-runtime.js";
2
+ import { compareText, invalid, neverValue, scalarEqual, sha256, stableJson, } from "./symbolic-denotation-support.js";
3
+ export class SymbolicDecisionDagBuilder {
4
+ axes;
5
+ limits;
6
+ nodes = [
7
+ { axis_index: -1, child_ids: [] },
8
+ { axis_index: -1, child_ids: [] },
9
+ ];
10
+ unique = new Map();
11
+ predicateMemo = new Map();
12
+ applyMemo = new Map();
13
+ notMemo = new Map();
14
+ constructedEdges = 0;
15
+ constructor(axes, limits) {
16
+ this.axes = axes;
17
+ this.limits = limits;
18
+ }
19
+ predicate(predicate, domainIndex) {
20
+ const memoKey = stableJson(predicate);
21
+ const cached = this.predicateMemo.get(memoKey);
22
+ if (cached !== undefined)
23
+ return cached;
24
+ const result = this.compilePredicate(predicate, domainIndex);
25
+ this.predicateMemo.set(memoKey, result);
26
+ return result;
27
+ }
28
+ compilePredicate(predicate, domainIndex) {
29
+ switch (predicate.op) {
30
+ case "eq":
31
+ return this.atom(predicate.axis_ref, domainIndex, (value) => scalarEqual(value, predicate.value));
32
+ case "in":
33
+ return this.inPredicate(predicate, domainIndex);
34
+ case "range":
35
+ return this.rangePredicate(predicate, domainIndex);
36
+ case "not":
37
+ return this.negate(this.predicate(predicate.predicate, domainIndex));
38
+ case "all":
39
+ return this.groupPredicate("and", predicate.predicates, domainIndex);
40
+ case "any":
41
+ return this.groupPredicate("or", predicate.predicates, domainIndex);
42
+ default:
43
+ return invalid("predicate_operator_unknown", neverValue(predicate));
44
+ }
45
+ }
46
+ inPredicate(predicate, domainIndex) {
47
+ return this.atom(predicate.axis_ref, domainIndex, (value) => predicate.values.some((candidate) => scalarEqual(value, candidate)));
48
+ }
49
+ rangePredicate(predicate, domainIndex) {
50
+ const minimum = predicate.minimum + (predicate.minimum_inclusive ? 0 : 1);
51
+ const maximum = predicate.maximum - (predicate.maximum_inclusive ? 0 : 1);
52
+ return this.atom(predicate.axis_ref, domainIndex, (value) => typeof value === "number" && value >= minimum && value <= maximum);
53
+ }
54
+ groupPredicate(operation, predicates, domainIndex) {
55
+ let result = operation === "and" ? 1 : 0;
56
+ for (const child of predicates)
57
+ result = this.apply(operation, result, this.predicate(child, domainIndex));
58
+ return result;
59
+ }
60
+ canonicalize(rootId) {
61
+ const output = new Map();
62
+ const memo = new Map([
63
+ [0, "terminal.false"],
64
+ [1, "terminal.true"],
65
+ ]);
66
+ const visit = (id) => {
67
+ const cached = memo.get(id);
68
+ if (cached)
69
+ return cached;
70
+ const node = this.nodes[id];
71
+ const axis = this.axes[node.axis_index];
72
+ const childRefs = node.child_ids.map(visit);
73
+ const edges = canonicalSymbolicEdges(axis, childRefs);
74
+ const body = { axis_ref: axis.domain.key, edges };
75
+ const key = `node.${sha256(stableJson(body))}`;
76
+ const existing = output.get(key);
77
+ if (existing && stableJson(existing.edges) !== stableJson(edges))
78
+ invalid("canonical_node_hash_collision", key);
79
+ output.set(key, { key, ...body });
80
+ memo.set(id, key);
81
+ return key;
82
+ };
83
+ const rootRef = visit(rootId);
84
+ const nodes = [...output.values()].sort((left, right) => compareText(left.key, right.key));
85
+ this.checkCanonicalLimits(nodes);
86
+ return {
87
+ schema_version: "symbolic-denotation-canonical-dag-v1",
88
+ root_ref: rootRef,
89
+ nodes,
90
+ };
91
+ }
92
+ checkCanonicalLimits(nodes) {
93
+ const partitionEdges = nodes.reduce((total, node) => total + node.edges.length, 0);
94
+ if (nodes.length > this.limits.max_canonical_dag_nodes)
95
+ invalid("canonical_dag_node_limit_exceeded", `actual=${nodes.length}:limit=${this.limits.max_canonical_dag_nodes}`);
96
+ if (partitionEdges > this.limits.max_partition_edges)
97
+ invalid("canonical_partition_edge_limit_exceeded", `actual=${partitionEdges}:limit=${this.limits.max_partition_edges}`);
98
+ }
99
+ atom(axisRef, domainIndex, matches) {
100
+ const axisIndex = domainIndex.get(axisRef);
101
+ if (axisIndex === undefined)
102
+ invalid("predicate_axis_unknown", axisRef);
103
+ const axis = this.axes[axisIndex];
104
+ return this.node(axisIndex, axis.segments.map((segment) => symbolicSegmentMatches(segment, matches) ? 1 : 0));
105
+ }
106
+ negate(id) {
107
+ if (id === 0)
108
+ return 1;
109
+ if (id === 1)
110
+ return 0;
111
+ const cached = this.notMemo.get(id);
112
+ if (cached !== undefined)
113
+ return cached;
114
+ const node = this.nodes[id];
115
+ const result = this.node(node.axis_index, node.child_ids.map((child) => this.negate(child)));
116
+ this.notMemo.set(id, result);
117
+ return result;
118
+ }
119
+ apply(operation, left, right) {
120
+ const reduced = this.reduceApply(operation, left, right);
121
+ if (reduced !== null)
122
+ return reduced;
123
+ const first = Math.min(left, right);
124
+ const second = Math.max(left, right);
125
+ const memoKey = `${operation}:${first}:${second}`;
126
+ const cached = this.applyMemo.get(memoKey);
127
+ if (cached !== undefined)
128
+ return cached;
129
+ const leftNode = this.nodes[left];
130
+ const rightNode = this.nodes[right];
131
+ const axisIndex = Math.min(leftNode.axis_index, rightNode.axis_index);
132
+ const segmentCount = this.axes[axisIndex].segments.length;
133
+ const children = Array.from({ length: segmentCount }, (_, index) => this.apply(operation, leftNode.axis_index === axisIndex ? leftNode.child_ids[index] : left, rightNode.axis_index === axisIndex ? rightNode.child_ids[index] : right));
134
+ const result = this.node(axisIndex, children);
135
+ this.applyMemo.set(memoKey, result);
136
+ return result;
137
+ }
138
+ reduceApply(operation, left, right) {
139
+ if (left === right)
140
+ return left;
141
+ if (operation === "and") {
142
+ if (left === 0 || right === 0)
143
+ return 0;
144
+ if (left === 1)
145
+ return right;
146
+ if (right === 1)
147
+ return left;
148
+ return null;
149
+ }
150
+ if (left === 1 || right === 1)
151
+ return 1;
152
+ if (left === 0)
153
+ return right;
154
+ if (right === 0)
155
+ return left;
156
+ return null;
157
+ }
158
+ node(axisIndex, childIds) {
159
+ if (childIds.every((child) => child === childIds[0]))
160
+ return childIds[0];
161
+ const key = `${axisIndex}:${childIds.join(",")}`;
162
+ const cached = this.unique.get(key);
163
+ if (cached !== undefined)
164
+ return cached;
165
+ const nextNodeCount = this.nodes.length - 1;
166
+ if (nextNodeCount > this.limits.max_canonical_dag_nodes)
167
+ invalid("constructed_dag_node_limit_exceeded", `actual=${nextNodeCount}:limit=${this.limits.max_canonical_dag_nodes}`);
168
+ this.constructedEdges += childIds.length;
169
+ if (this.constructedEdges > this.limits.max_partition_edges)
170
+ invalid("constructed_partition_edge_limit_exceeded", `actual=${this.constructedEdges}:limit=${this.limits.max_partition_edges}`);
171
+ const id = this.nodes.length;
172
+ this.nodes.push({ axis_index: axisIndex, child_ids: childIds });
173
+ this.unique.set(key, id);
174
+ return id;
175
+ }
176
+ }
@@ -0,0 +1,3 @@
1
+ import type { SymbolicDenotationAxisDomain, SymbolicDenotationComplexityLimits } from "./symbolic-denotation-types.js";
2
+ export declare function validateSymbolicLimits(limits: SymbolicDenotationComplexityLimits): SymbolicDenotationComplexityLimits;
3
+ export declare function validateSymbolicDomains(domainsInput: SymbolicDenotationAxisDomain[]): SymbolicDenotationAxisDomain[];
@@ -0,0 +1,56 @@
1
+ import { compareText, exactKeys, invalid, stableKey, } from "./symbolic-denotation-support.js";
2
+ export function validateSymbolicLimits(limits) {
3
+ exactKeys(limits, [
4
+ "max_predicate_depth",
5
+ "max_input_predicate_nodes",
6
+ "max_canonical_dag_nodes",
7
+ "max_partition_edges",
8
+ "max_canonical_bytes",
9
+ ], "complexity_limits");
10
+ for (const [key, value] of Object.entries(limits))
11
+ if (!Number.isSafeInteger(value) || value <= 0)
12
+ invalid("complexity_limit_invalid", `${key}:${value}`);
13
+ return { ...limits };
14
+ }
15
+ export function validateSymbolicDomains(domainsInput) {
16
+ if (!Array.isArray(domainsInput) || !domainsInput.length)
17
+ invalid("axis_domains_required", "");
18
+ const domains = domainsInput.map(validateDomain);
19
+ domains.sort((left, right) => compareText(left.key, right.key));
20
+ if (new Set(domains.map((domain) => domain.key)).size !== domains.length)
21
+ invalid("axis_domain_key_duplicate", "");
22
+ return domains;
23
+ }
24
+ function validateDomain(input, index) {
25
+ if (!input || typeof input !== "object" || Array.isArray(input))
26
+ invalid("axis_domain_invalid", String(index));
27
+ stableKey(input.key, `axis_domain:${index}`);
28
+ if (input.kind === "enum")
29
+ return validateEnumDomain(input);
30
+ if (input.kind === "bounded_number")
31
+ return validateNumberDomain(input);
32
+ return invalid("axis_domain_kind_unknown", String(input.kind));
33
+ }
34
+ function validateEnumDomain(input) {
35
+ exactKeys(input, ["key", "kind", "values"], `axis_domain:${input.key}`);
36
+ if (!Array.isArray(input.values) || !input.values.length)
37
+ invalid("enum_domain_values_required", input.key);
38
+ const values = input.values.map((value) => {
39
+ if (typeof value !== "string" || !value)
40
+ invalid("enum_domain_value_invalid", input.key);
41
+ return value;
42
+ });
43
+ if (new Set(values).size !== values.length)
44
+ invalid("enum_domain_value_duplicate", input.key);
45
+ return { ...input, values: [...values].sort(compareText) };
46
+ }
47
+ function validateNumberDomain(input) {
48
+ exactKeys(input, ["key", "kind", "minimum", "maximum", "integer"], `axis_domain:${input.key}`);
49
+ if (input.integer !== true ||
50
+ !Number.isSafeInteger(input.minimum) ||
51
+ !Number.isSafeInteger(input.maximum) ||
52
+ input.minimum > input.maximum ||
53
+ input.maximum >= Number.MAX_SAFE_INTEGER)
54
+ invalid("bounded_number_domain_invalid", input.key);
55
+ return { ...input };
56
+ }
@@ -0,0 +1,32 @@
1
+ import type { CompiledSymbolicDenotationV1, SymbolicDenotationAxisDomain, SymbolicDenotationCanonicalDagV1, SymbolicDenotationComplexityLimits, SymbolicDenotationPredicate, SymbolicDenotationScalar } from "./symbolic-denotation-types.js";
2
+ export declare const DEFAULT_SYMBOLIC_DENOTATION_COMPLEXITY_LIMITS: {
3
+ readonly max_predicate_depth: 32;
4
+ readonly max_input_predicate_nodes: 4096;
5
+ readonly max_canonical_dag_nodes: 8192;
6
+ readonly max_partition_edges: 65536;
7
+ readonly max_canonical_bytes: 4194304;
8
+ };
9
+ export declare function compileSymbolicDenotation(domainsInput: SymbolicDenotationAxisDomain[], predicateInput: SymbolicDenotationPredicate, limits?: SymbolicDenotationComplexityLimits): CompiledSymbolicDenotationV1;
10
+ export interface SymbolicDenotationCompilationStatisticsV1 {
11
+ axis_partition_builds: 1;
12
+ compile_requests: number;
13
+ compile_cache_hits: number;
14
+ unique_compiled_predicates: number;
15
+ }
16
+ export declare class SymbolicDenotationCompilationSession {
17
+ private readonly limits;
18
+ private readonly domains;
19
+ private readonly domainIndex;
20
+ private readonly numberCuts;
21
+ private readonly builder;
22
+ private readonly compiled;
23
+ private readonly theoreticalGroundCardinality;
24
+ private compileRequests;
25
+ private compileCacheHits;
26
+ constructor(domainsInput: SymbolicDenotationAxisDomain[], seedPredicates: readonly SymbolicDenotationPredicate[], limits?: SymbolicDenotationComplexityLimits);
27
+ compile(predicateInput: SymbolicDenotationPredicate): CompiledSymbolicDenotationV1;
28
+ statistics(): SymbolicDenotationCompilationStatisticsV1;
29
+ private inspect;
30
+ }
31
+ export declare function createSymbolicDenotationCompilationSession(domains: SymbolicDenotationAxisDomain[], seedPredicates: readonly SymbolicDenotationPredicate[], limits?: SymbolicDenotationComplexityLimits): SymbolicDenotationCompilationSession;
32
+ export declare function evaluateCanonicalSymbolicDenotation(dag: SymbolicDenotationCanonicalDagV1, assignment: Record<string, SymbolicDenotationScalar>): boolean;
@@ -0,0 +1,140 @@
1
+ import { DESIGN_RESOURCE_SYMBOLIC_FACT_POLICY } from "./design-resource-symbolic-fact-policy.js";
2
+ import { SymbolicDecisionDagBuilder } from "./symbolic-denotation-dag-builder.js";
3
+ import { validateSymbolicDomains, validateSymbolicLimits, } from "./symbolic-denotation-domain-validation.js";
4
+ import { buildSymbolicRuntimeAxes, symbolicEdgeMatches, } from "./symbolic-denotation-runtime.js";
5
+ import { compareText, domainCardinality, invalid, sha256, stableJson, } from "./symbolic-denotation-support.js";
6
+ import { validateSymbolicPredicate, } from "./symbolic-denotation-validation.js";
7
+ export const DEFAULT_SYMBOLIC_DENOTATION_COMPLEXITY_LIMITS = {
8
+ max_predicate_depth: 32,
9
+ max_input_predicate_nodes: 4_096,
10
+ max_canonical_dag_nodes: 8_192,
11
+ max_partition_edges: 65_536,
12
+ max_canonical_bytes: 4_194_304,
13
+ };
14
+ export function compileSymbolicDenotation(domainsInput, predicateInput, limits = DEFAULT_SYMBOLIC_DENOTATION_COMPLEXITY_LIMITS) {
15
+ return createSymbolicDenotationCompilationSession(domainsInput, [predicateInput], limits).compile(predicateInput);
16
+ }
17
+ export class SymbolicDenotationCompilationSession {
18
+ limits;
19
+ domains;
20
+ domainIndex;
21
+ numberCuts = new Map();
22
+ builder;
23
+ compiled = new Map();
24
+ theoreticalGroundCardinality;
25
+ compileRequests = 0;
26
+ compileCacheHits = 0;
27
+ constructor(domainsInput, seedPredicates, limits = DEFAULT_SYMBOLIC_DENOTATION_COMPLEXITY_LIMITS) {
28
+ if (!seedPredicates.length)
29
+ invalid("compilation_session_seeds_required", "");
30
+ this.limits = validateSymbolicLimits(limits);
31
+ this.domains = validateSymbolicDomains(domainsInput);
32
+ this.domainIndex = new Map(this.domains.map((domain, index) => [domain.key, index]));
33
+ const uniqueSeeds = new Map(seedPredicates.map((predicate) => [stableJson(predicate), predicate]));
34
+ for (const predicate of uniqueSeeds.values())
35
+ mergeNumberCuts(this.numberCuts, this.inspect(predicate).number_cuts);
36
+ const axes = buildSymbolicRuntimeAxes(this.domains, this.numberCuts);
37
+ this.builder = new SymbolicDecisionDagBuilder(axes, this.limits);
38
+ this.theoreticalGroundCardinality = this.domains
39
+ .reduce((total, domain) => total * domainCardinality(domain), 1n)
40
+ .toString();
41
+ }
42
+ compile(predicateInput) {
43
+ this.compileRequests += 1;
44
+ const inspection = this.inspect(predicateInput);
45
+ assertKnownNumberCuts(this.numberCuts, inspection.number_cuts);
46
+ const predicate = validateSymbolicPredicate(predicateInput, this.domains, this.domainIndex, { input_nodes: 0, number_cuts: new Map() }, 1, this.limits);
47
+ const memoKey = stableJson(predicate);
48
+ const cached = this.compiled.get(memoKey);
49
+ if (cached) {
50
+ this.compileCacheHits += 1;
51
+ return cached;
52
+ }
53
+ const rootId = this.builder.predicate(predicate, this.domainIndex);
54
+ const canonicalDag = this.builder.canonicalize(rootId);
55
+ const canonicalJson = stableJson(canonicalDag);
56
+ const canonicalBytes = Buffer.byteLength(canonicalJson, "utf8");
57
+ checkCanonicalBytes(canonicalBytes, this.limits.max_canonical_bytes);
58
+ const partitionEdges = canonicalDag.nodes.reduce((total, node) => total + node.edges.length, 0);
59
+ const referencedAxisRefs = [
60
+ ...new Set(canonicalDag.nodes.map((node) => node.axis_ref)),
61
+ ].sort(compareText);
62
+ const referenced = new Set(referencedAxisRefs);
63
+ const result = {
64
+ canonical_dag: canonicalDag,
65
+ canonical_sha256: sha256(canonicalJson),
66
+ canonical_bytes: canonicalBytes,
67
+ referenced_axis_refs: referencedAxisRefs,
68
+ omitted_axis_refs: this.domains
69
+ .map((domain) => domain.key)
70
+ .filter((axisRef) => !referenced.has(axisRef)),
71
+ theoretical_ground_cardinality: this.theoreticalGroundCardinality,
72
+ metrics: {
73
+ input_predicate_nodes: inspection.input_nodes,
74
+ canonical_dag_nodes: canonicalDag.nodes.length,
75
+ partition_edges: partitionEdges,
76
+ canonical_bytes: canonicalBytes,
77
+ },
78
+ };
79
+ this.compiled.set(memoKey, result);
80
+ return result;
81
+ }
82
+ statistics() {
83
+ return {
84
+ axis_partition_builds: 1,
85
+ compile_requests: this.compileRequests,
86
+ compile_cache_hits: this.compileCacheHits,
87
+ unique_compiled_predicates: this.compiled.size,
88
+ };
89
+ }
90
+ inspect(predicate) {
91
+ const inspection = {
92
+ input_nodes: 0,
93
+ number_cuts: new Map(),
94
+ };
95
+ validateSymbolicPredicate(predicate, this.domains, this.domainIndex, inspection, 1, this.limits);
96
+ return inspection;
97
+ }
98
+ }
99
+ export function createSymbolicDenotationCompilationSession(domains, seedPredicates, limits = DEFAULT_SYMBOLIC_DENOTATION_COMPLEXITY_LIMITS) {
100
+ return new SymbolicDenotationCompilationSession(domains, seedPredicates, limits);
101
+ }
102
+ function mergeNumberCuts(target, source) {
103
+ for (const [axisRef, cuts] of source) {
104
+ const values = target.get(axisRef) ?? new Set();
105
+ cuts.forEach((cut) => values.add(cut));
106
+ target.set(axisRef, values);
107
+ }
108
+ }
109
+ function assertKnownNumberCuts(known, actual) {
110
+ for (const [axisRef, cuts] of actual)
111
+ for (const cut of cuts)
112
+ if (!known.get(axisRef)?.has(cut))
113
+ invalid("compilation_session_axis_partition_stale", `${axisRef}:${cut}`);
114
+ }
115
+ function checkCanonicalBytes(actual, limit) {
116
+ if (actual > limit)
117
+ invalid("canonical_byte_limit_exceeded", `actual=${actual}:limit=${limit}`);
118
+ }
119
+ export function evaluateCanonicalSymbolicDenotation(dag, assignment) {
120
+ const nodes = new Map(dag.nodes.map((node) => [node.key, node]));
121
+ let current = dag.root_ref;
122
+ const visited = new Set();
123
+ while (current !== "terminal.true" && current !== "terminal.false") {
124
+ if (visited.has(current))
125
+ invalid("canonical_dag_cycle", current);
126
+ visited.add(current);
127
+ const node = nodes.get(current);
128
+ if (!node)
129
+ invalid("canonical_dag_node_unknown", current);
130
+ const value = assignment[node.axis_ref];
131
+ if (value === undefined)
132
+ invalid("canonical_dag_assignment_missing", node.axis_ref);
133
+ const matches = node.edges.filter((edge) => symbolicEdgeMatches(edge, value));
134
+ if (matches.length !== 1)
135
+ invalid("canonical_dag_assignment_partition_invalid", `${node.axis_ref}:matches=${matches.length}`);
136
+ current = matches[0].child_ref;
137
+ }
138
+ return current === "terminal.true";
139
+ }
140
+ void DESIGN_RESOURCE_SYMBOLIC_FACT_POLICY.symbolic_denotation_efficiency_delivery;
@@ -0,0 +1,11 @@
1
+ import { denoteDesignResourceSymbolicPoint } from "./design-resource-symbolic-denotation.js";
2
+ import { compileSymbolicDenotation, evaluateCanonicalSymbolicDenotation } from "./symbolic-denotation-engine.js";
3
+ export declare const symbolicDenotation: Readonly<{
4
+ compile: typeof compileSymbolicDenotation;
5
+ evaluate: typeof evaluateCanonicalSymbolicDenotation;
6
+ denoteDesignPoint: typeof denoteDesignResourceSymbolicPoint;
7
+ sourceIr: Readonly<{
8
+ mediaType: "application/vnd.ty-context.symbolic-source-ir+json";
9
+ schemaVersion: "design-resource-symbolic-source-ir-v1";
10
+ }>;
11
+ }>;
@@ -0,0 +1,12 @@
1
+ import { denoteDesignResourceSymbolicPoint } from "./design-resource-symbolic-denotation.js";
2
+ import { compileSymbolicDenotation, evaluateCanonicalSymbolicDenotation, } from "./symbolic-denotation-engine.js";
3
+ import { DESIGN_RESOURCE_SYMBOLIC_SOURCE_IR_MEDIA_TYPE, DESIGN_RESOURCE_SYMBOLIC_SOURCE_IR_SCHEMA_VERSION, } from "./design-resource-symbolic-source-ir-types.js";
4
+ export const symbolicDenotation = Object.freeze({
5
+ compile: compileSymbolicDenotation,
6
+ evaluate: evaluateCanonicalSymbolicDenotation,
7
+ denoteDesignPoint: denoteDesignResourceSymbolicPoint,
8
+ sourceIr: Object.freeze({
9
+ mediaType: DESIGN_RESOURCE_SYMBOLIC_SOURCE_IR_MEDIA_TYPE,
10
+ schemaVersion: DESIGN_RESOURCE_SYMBOLIC_SOURCE_IR_SCHEMA_VERSION,
11
+ }),
12
+ });
@@ -0,0 +1,20 @@
1
+ import type { SymbolicDenotationAxisDomain, SymbolicDenotationCanonicalEdgeV1, SymbolicDenotationScalar } from "./symbolic-denotation-types.js";
2
+ interface EnumSegment {
3
+ kind: "enum";
4
+ values: string[];
5
+ }
6
+ interface NumberSegment {
7
+ kind: "number";
8
+ minimum: number;
9
+ maximum: number;
10
+ }
11
+ export type SymbolicAxisSegment = EnumSegment | NumberSegment;
12
+ export interface SymbolicRuntimeAxis {
13
+ domain: SymbolicDenotationAxisDomain;
14
+ segments: SymbolicAxisSegment[];
15
+ }
16
+ export declare function buildSymbolicRuntimeAxes(domains: SymbolicDenotationAxisDomain[], numberCuts: ReadonlyMap<string, Set<number>>): SymbolicRuntimeAxis[];
17
+ export declare function canonicalSymbolicEdges(axis: SymbolicRuntimeAxis, childRefs: string[]): SymbolicDenotationCanonicalEdgeV1[];
18
+ export declare function symbolicEdgeMatches(edge: SymbolicDenotationCanonicalEdgeV1, value: SymbolicDenotationScalar): boolean;
19
+ export declare function symbolicSegmentMatches(segment: SymbolicAxisSegment, matches: (value: SymbolicDenotationScalar) => boolean): boolean;
20
+ export {};