project-tiny-context-harness 0.8.10 → 0.8.12

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 (279) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +490 -472
  3. package/assets/README.md +762 -749
  4. package/assets/README.zh-CN.md +446 -431
  5. package/assets/agents/.gitkeep +1 -1
  6. package/assets/agents/AGENTS_CORE.md +17 -23
  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 +64 -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 +52 -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 +119 -119
  30. package/assets/skills/design-resource-authoring/references/resource-selection.md +158 -181
  31. package/assets/skills/design-system-authoring/SKILL.md +57 -57
  32. package/assets/skills/design-system-authoring/agents/openai.yaml +6 -6
  33. package/assets/skills/design-system-authoring/references/authority-adoption.md +48 -48
  34. package/assets/skills/design-system-authoring/references/open-design-design-system-provider.md +110 -110
  35. package/assets/skills/long-task-workflow/SKILL.md +71 -106
  36. package/assets/skills/long-task-workflow/agents/openai.yaml +1 -1
  37. package/assets/skills/long-task-workflow/references/authority-lifecycle.md +71 -69
  38. package/assets/skills/long-task-workflow/references/contract-authoring.md +98 -94
  39. package/assets/skills/long-task-workflow/references/evidence-design.md +67 -63
  40. package/assets/skills/long-task-workflow/references/source-authoring.md +90 -90
  41. package/assets/tools/validate_context.py +442 -442
  42. package/dist/commands/design-resource.js +9 -2
  43. package/dist/commands/enable.js +2 -0
  44. package/dist/commands/index.js +1 -1
  45. package/dist/commands/long-task-revision.js +8 -7
  46. package/dist/commands/sync.js +2 -0
  47. package/dist/index.d.ts +3 -4
  48. package/dist/index.js +2 -1
  49. package/dist/lib/compact-authoring-support.d.ts +22 -0
  50. package/dist/lib/compact-authoring-support.js +143 -0
  51. package/dist/lib/compact-shared-structure-authoring.d.ts +5 -0
  52. package/dist/lib/compact-shared-structure-authoring.js +9 -0
  53. package/dist/lib/compact-shared-structure-types.d.ts +61 -0
  54. package/dist/lib/compact-shared-structure-types.js +1 -0
  55. package/dist/lib/compact-shared-structure-validation.d.ts +2 -0
  56. package/dist/lib/compact-shared-structure-validation.js +159 -0
  57. package/dist/lib/compact-shared-structures.d.ts +3 -0
  58. package/dist/lib/compact-shared-structures.js +204 -0
  59. package/dist/lib/design-resource-fact-enums.d.ts +4 -0
  60. package/dist/lib/design-resource-fact-enums.js +12 -0
  61. package/dist/lib/design-resource-fact-manifest-shape-evidence.js +2 -2
  62. package/dist/lib/design-resource-fact-manifest-validation.d.ts +2 -1
  63. package/dist/lib/design-resource-fact-policy.d.ts +2 -2
  64. package/dist/lib/design-resource-fact-types.d.ts +2 -2
  65. package/dist/lib/design-resource-handoff-bundle-draft.d.ts +11 -0
  66. package/dist/lib/design-resource-handoff-bundle-draft.js +40 -0
  67. package/dist/lib/design-resource-handoff-bundle.js +4 -28
  68. package/dist/lib/design-resource-handoff-input-types.d.ts +14 -0
  69. package/dist/lib/design-resource-handoff-input-types.js +1 -0
  70. package/dist/lib/design-resource-handoff-manifest-projection.d.ts +2 -1
  71. package/dist/lib/design-resource-handoff-parser.d.ts +2 -2
  72. package/dist/lib/design-resource-handoff-parser.js +2 -2
  73. package/dist/lib/design-resource-handoff-shape.d.ts +4 -1
  74. package/dist/lib/design-resource-handoff-shape.js +10 -0
  75. package/dist/lib/design-resource-handoff-snapshot.d.ts +1 -1
  76. package/dist/lib/design-resource-handoff-snapshot.js +4 -0
  77. package/dist/lib/design-resource-handoff-types.d.ts +0 -10
  78. package/dist/lib/design-resource-handoff-validation.d.ts +6 -2
  79. package/dist/lib/design-resource-handoff-validation.js +11 -0
  80. package/dist/lib/design-resource-handoff-web-dependency-validation.d.ts +4 -2
  81. package/dist/lib/design-resource-symbolic-applicability-authority.d.ts +7 -0
  82. package/dist/lib/design-resource-symbolic-applicability-authority.js +19 -0
  83. package/dist/lib/design-resource-symbolic-applicability-policy.d.ts +12 -0
  84. package/dist/lib/design-resource-symbolic-applicability-policy.js +79 -0
  85. package/dist/lib/design-resource-symbolic-applicability-profiles.d.ts +8 -0
  86. package/dist/lib/design-resource-symbolic-applicability-profiles.js +55 -0
  87. package/dist/lib/design-resource-symbolic-applicability-shape.d.ts +2 -0
  88. package/dist/lib/design-resource-symbolic-applicability-shape.js +76 -0
  89. package/dist/lib/design-resource-symbolic-applicability-validation.d.ts +7 -0
  90. package/dist/lib/design-resource-symbolic-applicability-validation.js +128 -0
  91. package/dist/lib/design-resource-symbolic-compilation.d.ts +3 -0
  92. package/dist/lib/design-resource-symbolic-compilation.js +13 -0
  93. package/dist/lib/design-resource-symbolic-denotation.d.ts +3 -0
  94. package/dist/lib/design-resource-symbolic-denotation.js +167 -0
  95. package/dist/lib/design-resource-symbolic-disposition-validation.d.ts +4 -0
  96. package/dist/lib/design-resource-symbolic-disposition-validation.js +28 -0
  97. package/dist/lib/design-resource-symbolic-fact-policy.d.ts +12 -0
  98. package/dist/lib/design-resource-symbolic-fact-policy.js +12 -0
  99. package/dist/lib/design-resource-symbolic-fact-shape.d.ts +3 -0
  100. package/dist/lib/design-resource-symbolic-fact-shape.js +138 -0
  101. package/dist/lib/design-resource-symbolic-fact-types.d.ts +213 -0
  102. package/dist/lib/design-resource-symbolic-fact-types.js +1 -0
  103. package/dist/lib/design-resource-symbolic-fact-validation.d.ts +3 -0
  104. package/dist/lib/design-resource-symbolic-fact-validation.js +86 -0
  105. package/dist/lib/design-resource-symbolic-indexes.d.ts +23 -0
  106. package/dist/lib/design-resource-symbolic-indexes.js +54 -0
  107. package/dist/lib/design-resource-symbolic-manifest-shape.d.ts +3 -0
  108. package/dist/lib/design-resource-symbolic-manifest-shape.js +155 -0
  109. package/dist/lib/design-resource-symbolic-manifest-validation.d.ts +6 -0
  110. package/dist/lib/design-resource-symbolic-manifest-validation.js +132 -0
  111. package/dist/lib/design-resource-symbolic-noninterference-artifact.d.ts +33 -0
  112. package/dist/lib/design-resource-symbolic-noninterference-artifact.js +110 -0
  113. package/dist/lib/design-resource-symbolic-noninterference-equivalence.d.ts +3 -0
  114. package/dist/lib/design-resource-symbolic-noninterference-equivalence.js +77 -0
  115. package/dist/lib/design-resource-symbolic-noninterference-recompute.d.ts +4 -0
  116. package/dist/lib/design-resource-symbolic-noninterference-recompute.js +146 -0
  117. package/dist/lib/design-resource-symbolic-noninterference-scope.d.ts +7 -0
  118. package/dist/lib/design-resource-symbolic-noninterference-scope.js +49 -0
  119. package/dist/lib/design-resource-symbolic-noninterference-shape.d.ts +2 -0
  120. package/dist/lib/design-resource-symbolic-noninterference-shape.js +152 -0
  121. package/dist/lib/design-resource-symbolic-noninterference-types.d.ts +103 -0
  122. package/dist/lib/design-resource-symbolic-noninterference-types.js +1 -0
  123. package/dist/lib/design-resource-symbolic-noninterference-validation.d.ts +5 -0
  124. package/dist/lib/design-resource-symbolic-noninterference-validation.js +62 -0
  125. package/dist/lib/design-resource-symbolic-oracle-fingerprint.d.ts +1 -0
  126. package/dist/lib/design-resource-symbolic-oracle-fingerprint.js +47 -0
  127. package/dist/lib/design-resource-symbolic-predicate-shape.d.ts +6 -0
  128. package/dist/lib/design-resource-symbolic-predicate-shape.js +123 -0
  129. package/dist/lib/design-resource-symbolic-production-closure.d.ts +4 -0
  130. package/dist/lib/design-resource-symbolic-production-closure.js +144 -0
  131. package/dist/lib/design-resource-symbolic-proof-authority-validation.d.ts +10 -0
  132. package/dist/lib/design-resource-symbolic-proof-authority-validation.js +68 -0
  133. package/dist/lib/design-resource-symbolic-proof-validation.d.ts +10 -0
  134. package/dist/lib/design-resource-symbolic-proof-validation.js +89 -0
  135. package/dist/lib/design-resource-symbolic-region-validation.d.ts +19 -0
  136. package/dist/lib/design-resource-symbolic-region-validation.js +146 -0
  137. package/dist/lib/design-resource-symbolic-resource-validation.d.ts +5 -0
  138. package/dist/lib/design-resource-symbolic-resource-validation.js +90 -0
  139. package/dist/lib/design-resource-symbolic-rule-shape.d.ts +27 -0
  140. package/dist/lib/design-resource-symbolic-rule-shape.js +158 -0
  141. package/dist/lib/design-resource-symbolic-safety-validation.d.ts +6 -0
  142. package/dist/lib/design-resource-symbolic-safety-validation.js +29 -0
  143. package/dist/lib/design-resource-symbolic-source-ir-evaluation.d.ts +19 -0
  144. package/dist/lib/design-resource-symbolic-source-ir-evaluation.js +74 -0
  145. package/dist/lib/design-resource-symbolic-source-ir-evidence.d.ts +44 -0
  146. package/dist/lib/design-resource-symbolic-source-ir-evidence.js +88 -0
  147. package/dist/lib/design-resource-symbolic-source-ir-oracle.d.ts +13 -0
  148. package/dist/lib/design-resource-symbolic-source-ir-oracle.js +96 -0
  149. package/dist/lib/design-resource-symbolic-source-ir-proof.d.ts +14 -0
  150. package/dist/lib/design-resource-symbolic-source-ir-proof.js +98 -0
  151. package/dist/lib/design-resource-symbolic-source-ir-shape.d.ts +2 -0
  152. package/dist/lib/design-resource-symbolic-source-ir-shape.js +38 -0
  153. package/dist/lib/design-resource-symbolic-source-ir-types.d.ts +17 -0
  154. package/dist/lib/design-resource-symbolic-source-ir-types.js +2 -0
  155. package/dist/lib/design-resource-symbolic-static-dependency-validation.d.ts +2 -0
  156. package/dist/lib/design-resource-symbolic-static-dependency-validation.js +83 -0
  157. package/dist/lib/design-resource-symbolic-structural-closure-validation.d.ts +6 -0
  158. package/dist/lib/design-resource-symbolic-structural-closure-validation.js +79 -0
  159. package/dist/lib/design-resource-symbolic-validation-support.d.ts +29 -0
  160. package/dist/lib/design-resource-symbolic-validation-support.js +111 -0
  161. package/dist/lib/design-resource-v1-capacity-header.d.ts +8 -0
  162. package/dist/lib/design-resource-v1-capacity-header.js +231 -0
  163. package/dist/lib/design-resource-v1-capacity.d.ts +5 -0
  164. package/dist/lib/design-resource-v1-capacity.js +45 -0
  165. package/dist/lib/init.js +1 -0
  166. package/dist/lib/long-task-activation-validation.js +2 -2
  167. package/dist/lib/long-task-authority-policy.d.ts +3 -0
  168. package/dist/lib/long-task-authority-policy.js +3 -0
  169. package/dist/lib/long-task-codex-agent-profile.d.ts +42 -0
  170. package/dist/lib/long-task-codex-agent-profile.js +276 -0
  171. package/dist/lib/long-task-compact-authoring-projections.d.ts +12 -0
  172. package/dist/lib/long-task-compact-authoring-projections.js +67 -0
  173. package/dist/lib/long-task-compact-authoring.d.ts +3 -0
  174. package/dist/lib/long-task-compact-authoring.js +173 -0
  175. package/dist/lib/long-task-compact-carrier.d.ts +7 -0
  176. package/dist/lib/long-task-compact-carrier.js +132 -0
  177. package/dist/lib/long-task-compact-parser.d.ts +14 -0
  178. package/dist/lib/long-task-compact-parser.js +123 -0
  179. package/dist/lib/long-task-compact-primitives.d.ts +22 -0
  180. package/dist/lib/long-task-compact-primitives.js +132 -0
  181. package/dist/lib/long-task-compact-projections.d.ts +4 -0
  182. package/dist/lib/long-task-compact-projections.js +153 -0
  183. package/dist/lib/long-task-compact-structure-targets.d.ts +2 -0
  184. package/dist/lib/long-task-compact-structure-targets.js +90 -0
  185. package/dist/lib/long-task-counterfactual-sandbox.d.ts +1 -1
  186. package/dist/lib/long-task-counterfactual-sandbox.js +7 -5
  187. package/dist/lib/long-task-delivery-parser.d.ts +1 -0
  188. package/dist/lib/long-task-delivery-parser.js +38 -6
  189. package/dist/lib/long-task-design-resource-handoff.d.ts +2 -1
  190. package/dist/lib/long-task-design-resource-handoff.js +71 -11
  191. package/dist/lib/long-task-design-resource-method-binding.d.ts +8 -1
  192. package/dist/lib/long-task-design-resource-method-binding.js +150 -0
  193. package/dist/lib/long-task-evidence-capability-codec.js +256 -34
  194. package/dist/lib/long-task-evidence-capability-policy.js +28 -0
  195. package/dist/lib/long-task-evidence-capability-runtime.js +271 -63
  196. package/dist/lib/long-task-evidence-capability-types.d.ts +70 -2
  197. package/dist/lib/long-task-evidence-v2.d.ts +1 -1
  198. package/dist/lib/long-task-evidence-v2.js +5 -5
  199. package/dist/lib/long-task-hook-install.d.ts +19 -2
  200. package/dist/lib/long-task-hook-install.js +288 -91
  201. package/dist/lib/long-task-playwright-capability-records.d.ts +2 -0
  202. package/dist/lib/long-task-playwright-capability-records.js +74 -2
  203. package/dist/lib/long-task-runner-freeze.d.ts +1 -1
  204. package/dist/lib/long-task-runner-freeze.js +4 -2
  205. package/dist/lib/long-task-semantic-contract-types.d.ts +1 -1
  206. package/dist/lib/long-task-semantic-fact-binding-types.d.ts +8 -0
  207. package/dist/lib/long-task-semantic-fact-closure.js +4 -1
  208. package/dist/lib/long-task-semantic-fact-contract-closure.d.ts +1 -1
  209. package/dist/lib/long-task-semantic-fact-contract-closure.js +15 -3
  210. package/dist/lib/long-task-semantic-fact-contract-facts.d.ts +1 -1
  211. package/dist/lib/long-task-semantic-fact-contract-facts.js +4 -1
  212. package/dist/lib/long-task-semantic-fact-contract-proofs.d.ts +1 -1
  213. package/dist/lib/long-task-semantic-fact-contract-proofs.js +12 -3
  214. package/dist/lib/long-task-semantic-fact-evidence.d.ts +5 -1
  215. package/dist/lib/long-task-semantic-fact-evidence.js +47 -4
  216. package/dist/lib/long-task-semantic-fact-shape.js +17 -6
  217. package/dist/lib/long-task-shape-primitives.d.ts +1 -1
  218. package/dist/lib/long-task-shape-primitives.js +1 -0
  219. package/dist/lib/long-task-source-item-parser.d.ts +2 -2
  220. package/dist/lib/long-task-source-item-parser.js +20 -11
  221. package/dist/lib/long-task-ui-design-policy.js +64 -4
  222. package/dist/lib/long-task-ui-surface-shape.js +195 -0
  223. package/dist/lib/long-task-ui-surface-types.d.ts +53 -0
  224. package/dist/lib/long-task-verifier-v2.js +1 -1
  225. package/dist/lib/long-task-worker-selection.d.ts +2 -0
  226. package/dist/lib/long-task-worker-selection.js +7 -0
  227. package/dist/lib/long-task-workspace-scope.js +3 -1
  228. package/dist/lib/long-task-workspace.js +11 -1
  229. package/dist/lib/migrations.js +58 -0
  230. package/dist/lib/profiles.js +0 -1
  231. package/dist/lib/semantic-fact-compact-authoring.d.ts +2 -0
  232. package/dist/lib/semantic-fact-compact-authoring.js +160 -0
  233. package/dist/lib/semantic-fact-compact-capacity.d.ts +9 -0
  234. package/dist/lib/semantic-fact-compact-capacity.js +40 -0
  235. package/dist/lib/semantic-fact-compact-carrier.d.ts +16 -0
  236. package/dist/lib/semantic-fact-compact-carrier.js +146 -0
  237. package/dist/lib/semantic-fact-compact-parser.d.ts +17 -0
  238. package/dist/lib/semantic-fact-compact-parser.js +168 -0
  239. package/dist/lib/semantic-fact-compact-revision.d.ts +11 -0
  240. package/dist/lib/semantic-fact-compact-revision.js +64 -0
  241. package/dist/lib/semantic-fact-compact-support.d.ts +23 -0
  242. package/dist/lib/semantic-fact-compact-support.js +159 -0
  243. package/dist/lib/semantic-fact-policy-census.d.ts +1 -0
  244. package/dist/lib/semantic-fact-policy-census.js +43 -0
  245. package/dist/lib/semantic-fact-proof-shape.d.ts +1 -1
  246. package/dist/lib/semantic-fact-property-shape.d.ts +1 -1
  247. package/dist/lib/semantic-fact-source-parser.d.ts +5 -0
  248. package/dist/lib/semantic-fact-source-parser.js +47 -6
  249. package/dist/lib/structural-closure-cost.d.ts +79 -0
  250. package/dist/lib/structural-closure-cost.js +91 -0
  251. package/dist/lib/symbolic-denotation-dag-builder.d.ts +25 -0
  252. package/dist/lib/symbolic-denotation-dag-builder.js +176 -0
  253. package/dist/lib/symbolic-denotation-domain-validation.d.ts +3 -0
  254. package/dist/lib/symbolic-denotation-domain-validation.js +56 -0
  255. package/dist/lib/symbolic-denotation-engine.d.ts +32 -0
  256. package/dist/lib/symbolic-denotation-engine.js +140 -0
  257. package/dist/lib/symbolic-denotation-public.d.ts +11 -0
  258. package/dist/lib/symbolic-denotation-public.js +12 -0
  259. package/dist/lib/symbolic-denotation-runtime.d.ts +20 -0
  260. package/dist/lib/symbolic-denotation-runtime.js +90 -0
  261. package/dist/lib/symbolic-denotation-support.d.ts +11 -0
  262. package/dist/lib/symbolic-denotation-support.js +49 -0
  263. package/dist/lib/symbolic-denotation-types.d.ts +133 -0
  264. package/dist/lib/symbolic-denotation-types.js +18 -0
  265. package/dist/lib/symbolic-denotation-validation.d.ts +6 -0
  266. package/dist/lib/symbolic-denotation-validation.js +126 -0
  267. package/dist/lib/sync-engine.d.ts +1 -0
  268. package/dist/lib/sync-engine.js +4 -1
  269. package/dist/lib/upgrade.js +1 -0
  270. package/dist/long-task-hook.js +40 -1
  271. package/dist/public-types.d.ts +8 -0
  272. package/dist/public-types.js +1 -0
  273. package/dist/schemas/design-resource-symbolic-noninterference-artifact-v2.schema.json +289 -0
  274. package/dist/schemas/design-resource-symbolic-source-ir-v1.schema.json +130 -0
  275. package/dist/schemas/long-task-delivery-v2/long-task-delivery-v2.schema.json +390 -5
  276. package/migrations/README.md +15 -15
  277. package/package.json +2 -2
  278. package/source-mappings.yaml +28 -25
  279. package/assets/skills/source-plan-authoring/SKILL.md +0 -14
@@ -0,0 +1,79 @@
1
+ import { DESIGN_RESOURCE_STANDARD_PROPERTIES } from "./design-resource-fact-manifest-catalog.js";
2
+ import { compareText } from "./design-resource-symbolic-validation-support.js";
3
+ export const DESIGN_RESOURCE_SYMBOLIC_APPLICABILITY_POLICY_VERSION = "package-subject-capability-algebra-v1";
4
+ const BASE_VISUAL_PROPERTIES = ["geometry.width", "color.background"];
5
+ const SUBJECT_FAMILIES = {
6
+ surface: [],
7
+ flow: ["navigation"],
8
+ region: [],
9
+ overlay: ["interaction", "accessibility"],
10
+ system_ui: ["system", "accessibility"],
11
+ component_family: [],
12
+ component_instance: [],
13
+ control: ["interaction", "accessibility"],
14
+ anatomy_part: [],
15
+ slot: [],
16
+ primitive: [],
17
+ text: ["typography", "content"],
18
+ icon: ["icon", "asset", "accessibility"],
19
+ media: ["media", "asset", "accessibility"],
20
+ asset: ["asset"],
21
+ relation: ["relation"],
22
+ };
23
+ const CENSUS_FAMILIES = {
24
+ asset_reference: ["asset"],
25
+ relation: ["relation"],
26
+ dynamic_population: ["content"],
27
+ interaction_phase: ["interaction"],
28
+ };
29
+ const propertyRefsByFamily = new Map();
30
+ for (const property of DESIGN_RESOURCE_STANDARD_PROPERTIES) {
31
+ const values = propertyRefsByFamily.get(property.family) ?? [];
32
+ values.push(property.key);
33
+ propertyRefsByFamily.set(property.family, values);
34
+ }
35
+ export function symbolicApplicabilitySubjectPolicyRef(kind) {
36
+ return `package-policy.subject-kind.${kind}.v1`;
37
+ }
38
+ export function symbolicApplicabilityCensusPolicyRef(kind) {
39
+ return `package-policy.census-kind.${kind.replaceAll("_", "-")}.v1`;
40
+ }
41
+ export const SYMBOLIC_APPLICABILITY_POPULATION_POLICY_REF = "package-policy.subject-population.v1";
42
+ export function deriveRequiredSymbolicStandardApplicability(subject, census) {
43
+ const properties = new Set();
44
+ const policyBasis = new Set();
45
+ for (const propertyRef of BASE_VISUAL_PROPERTIES)
46
+ properties.add(propertyRef);
47
+ addFamilies(properties, SUBJECT_FAMILIES[subject.kind] ?? []);
48
+ policyBasis.add(symbolicApplicabilitySubjectPolicyRef(subject.kind));
49
+ for (const censusRef of subject.census_refs) {
50
+ const kind = census.get(censusRef)?.kind;
51
+ if (!kind)
52
+ continue;
53
+ const families = CENSUS_FAMILIES[kind] ?? [];
54
+ if (!families.length)
55
+ continue;
56
+ addFamilies(properties, families);
57
+ policyBasis.add(symbolicApplicabilityCensusPolicyRef(kind));
58
+ }
59
+ if (subject.population_ref !== null) {
60
+ addFamilies(properties, ["content"]);
61
+ policyBasis.add(SYMBOLIC_APPLICABILITY_POPULATION_POLICY_REF);
62
+ }
63
+ return {
64
+ property_refs: [...properties].sort(compareText),
65
+ policy_basis_refs: [...policyBasis].sort(compareText),
66
+ };
67
+ }
68
+ export function isKnownSymbolicApplicabilityPolicyRef(value) {
69
+ if (value === SYMBOLIC_APPLICABILITY_POPULATION_POLICY_REF)
70
+ return true;
71
+ if (Object.keys(SUBJECT_FAMILIES).some((kind) => value === symbolicApplicabilitySubjectPolicyRef(kind)))
72
+ return true;
73
+ return Object.keys(CENSUS_FAMILIES).some((kind) => value === symbolicApplicabilityCensusPolicyRef(kind));
74
+ }
75
+ function addFamilies(properties, families) {
76
+ for (const family of families)
77
+ for (const propertyRef of propertyRefsByFamily.get(family) ?? [])
78
+ properties.add(propertyRef);
79
+ }
@@ -0,0 +1,8 @@
1
+ export declare const DESIGN_RESOURCE_SYMBOLIC_APPLICABILITY_PROFILE_CATALOG: "package-subject-property-applicability-v1";
2
+ export interface DesignResourceSymbolicApplicabilityProfileV1 {
3
+ key: string;
4
+ property_refs: readonly string[];
5
+ }
6
+ export declare const DESIGN_RESOURCE_SYMBOLIC_APPLICABILITY_PROFILES: readonly DesignResourceSymbolicApplicabilityProfileV1[];
7
+ export declare function symbolicPropertyProfileKey(propertyRef: string): string;
8
+ export declare function resolveSymbolicApplicabilityProfiles(profileRefs: readonly string[], label: string): Set<string>;
@@ -0,0 +1,55 @@
1
+ import { DESIGN_RESOURCE_STANDARD_PROPERTIES, DESIGN_RESOURCE_STANDARD_PROPERTY_KEYS, } from "./design-resource-fact-manifest-catalog.js";
2
+ import { DESIGN_RESOURCE_INSPECTOR_CAPABILITIES, DESIGN_RESOURCE_PROPERTY_FAMILIES, } from "./design-resource-fact-manifest-types.js";
3
+ import { compareText, invalid, } from "./design-resource-symbolic-validation-support.js";
4
+ export const DESIGN_RESOURCE_SYMBOLIC_APPLICABILITY_PROFILE_CATALOG = "package-subject-property-applicability-v1";
5
+ const profiles = buildProfiles();
6
+ export const DESIGN_RESOURCE_SYMBOLIC_APPLICABILITY_PROFILES = Object.freeze(profiles);
7
+ const profileByKey = new Map(profiles.map((profile) => [profile.key, profile]));
8
+ export function symbolicPropertyProfileKey(propertyRef) {
9
+ return `profile.property.${propertyRef}`;
10
+ }
11
+ export function resolveSymbolicApplicabilityProfiles(profileRefs, label) {
12
+ const propertyRefs = new Set();
13
+ for (const profileRef of profileRefs) {
14
+ const profile = profileByKey.get(profileRef);
15
+ if (!profile)
16
+ invalid("v2_applicability_profile_unknown", `${label}:${profileRef}`);
17
+ for (const propertyRef of profile.property_refs)
18
+ propertyRefs.add(propertyRef);
19
+ }
20
+ return propertyRefs;
21
+ }
22
+ function buildProfiles() {
23
+ const result = [
24
+ {
25
+ key: "profile.all-standard",
26
+ property_refs: [...DESIGN_RESOURCE_STANDARD_PROPERTY_KEYS],
27
+ },
28
+ ];
29
+ for (const property of DESIGN_RESOURCE_STANDARD_PROPERTIES)
30
+ result.push({
31
+ key: symbolicPropertyProfileKey(property.key),
32
+ property_refs: [property.key],
33
+ });
34
+ for (const family of DESIGN_RESOURCE_PROPERTY_FAMILIES)
35
+ result.push({
36
+ key: `profile.family.${family}`,
37
+ property_refs: DESIGN_RESOURCE_STANDARD_PROPERTIES.filter((property) => property.family === family).map((property) => property.key),
38
+ });
39
+ for (const capability of DESIGN_RESOURCE_INSPECTOR_CAPABILITIES)
40
+ result.push({
41
+ key: `profile.capability.${capability}`,
42
+ property_refs: DESIGN_RESOURCE_STANDARD_PROPERTIES.filter((property) => property.inspector_capability_refs.includes(capability)).map((property) => property.key),
43
+ });
44
+ result.sort((left, right) => compareText(left.key, right.key));
45
+ if (new Set(result.map((profile) => profile.key)).size !== result.length)
46
+ invalid("v2_applicability_profile_catalog_duplicate", "");
47
+ const covered = new Set(result.flatMap((profile) => profile.property_refs));
48
+ if (covered.size !== DESIGN_RESOURCE_STANDARD_PROPERTY_KEYS.length ||
49
+ DESIGN_RESOURCE_STANDARD_PROPERTY_KEYS.some((key) => !covered.has(key)))
50
+ invalid("v2_applicability_profile_catalog_incomplete", "");
51
+ return result.map((profile) => Object.freeze({
52
+ ...profile,
53
+ property_refs: Object.freeze([...profile.property_refs].sort(compareText)),
54
+ }));
55
+ }
@@ -0,0 +1,2 @@
1
+ import type { DesignResourceSymbolicStructuralApplicabilityV2 } from "./design-resource-symbolic-fact-types.js";
2
+ export declare function parseSymbolicStructuralApplicability(value: unknown, label: string): DesignResourceSymbolicStructuralApplicabilityV2;
@@ -0,0 +1,76 @@
1
+ import { sourceItemKeys, stableKey, stableKeys, } from "./design-resource-handoff-shape-primitives.js";
2
+ import { array, literal, object, string, } from "./long-task-shape-primitives.js";
3
+ export function parseSymbolicStructuralApplicability(value, label) {
4
+ const root = object(value, label, [
5
+ "profile_catalog",
6
+ "subject_profile_bindings",
7
+ "inspector_custom_property_closure",
8
+ "instance_exceptions",
9
+ ]);
10
+ return {
11
+ profile_catalog: literal(root.profile_catalog, ["package-subject-property-applicability-v1"], `${label}.profile_catalog`),
12
+ subject_profile_bindings: array(root.subject_profile_bindings, `${label}.subject_profile_bindings`).map((item, index) => parseProfileBinding(item, `${label}.subject_profile_bindings[${index}]`)),
13
+ inspector_custom_property_closure: array(root.inspector_custom_property_closure, `${label}.inspector_custom_property_closure`).map((item, index) => parseCustomPropertyClosure(item, `${label}.inspector_custom_property_closure[${index}]`)),
14
+ instance_exceptions: array(root.instance_exceptions, `${label}.instance_exceptions`).map((item, index) => parseInstanceException(item, `${label}.instance_exceptions[${index}]`)),
15
+ };
16
+ }
17
+ function parseProfileBinding(value, label) {
18
+ const row = object(value, label, [
19
+ "key",
20
+ "subject_refs",
21
+ "profile_refs",
22
+ "census_refs",
23
+ "source_item_refs",
24
+ "basis_refs",
25
+ "rationale",
26
+ ]);
27
+ return {
28
+ key: stableKey(row.key, `${label}.key`),
29
+ subject_refs: stableKeys(row.subject_refs, `${label}.subject_refs`),
30
+ profile_refs: stableKeys(row.profile_refs, `${label}.profile_refs`),
31
+ census_refs: stableKeys(row.census_refs, `${label}.census_refs`),
32
+ source_item_refs: sourceItemKeys(row.source_item_refs, `${label}.source_item_refs`),
33
+ basis_refs: stableKeys(row.basis_refs, `${label}.basis_refs`),
34
+ rationale: string(row.rationale, `${label}.rationale`),
35
+ };
36
+ }
37
+ function parseCustomPropertyClosure(value, label) {
38
+ const row = object(value, label, [
39
+ "property_ref",
40
+ "applicable_subject_refs",
41
+ "census_refs",
42
+ "source_item_refs",
43
+ "basis_refs",
44
+ "rationale",
45
+ ]);
46
+ return {
47
+ property_ref: stableKey(row.property_ref, `${label}.property_ref`),
48
+ applicable_subject_refs: stableKeys(row.applicable_subject_refs, `${label}.applicable_subject_refs`),
49
+ census_refs: stableKeys(row.census_refs, `${label}.census_refs`),
50
+ source_item_refs: sourceItemKeys(row.source_item_refs, `${label}.source_item_refs`),
51
+ basis_refs: stableKeys(row.basis_refs, `${label}.basis_refs`),
52
+ rationale: string(row.rationale, `${label}.rationale`),
53
+ };
54
+ }
55
+ function parseInstanceException(value, label) {
56
+ const row = object(value, label, [
57
+ "key",
58
+ "subject_ref",
59
+ "property_ref",
60
+ "disposition",
61
+ "census_refs",
62
+ "source_item_refs",
63
+ "basis_refs",
64
+ "rationale",
65
+ ]);
66
+ return {
67
+ key: stableKey(row.key, `${label}.key`),
68
+ subject_ref: stableKey(row.subject_ref, `${label}.subject_ref`),
69
+ property_ref: stableKey(row.property_ref, `${label}.property_ref`),
70
+ disposition: literal(row.disposition, ["applicable", "not_applicable"], `${label}.disposition`),
71
+ census_refs: stableKeys(row.census_refs, `${label}.census_refs`),
72
+ source_item_refs: sourceItemKeys(row.source_item_refs, `${label}.source_item_refs`),
73
+ basis_refs: stableKeys(row.basis_refs, `${label}.basis_refs`),
74
+ rationale: string(row.rationale, `${label}.rationale`),
75
+ };
76
+ }
@@ -0,0 +1,7 @@
1
+ import type { DesignResourceObservableRuleManifestV2 } from "./design-resource-symbolic-fact-types.js";
2
+ import type { SymbolicManifestIndexes } from "./design-resource-symbolic-indexes.js";
3
+ export interface SymbolicApplicabilityIndex {
4
+ mode: "legacy_physical_partitions" | "package_profiles";
5
+ isApplicable(subjectRef: string, propertyRef: string): boolean;
6
+ }
7
+ export declare function buildSymbolicApplicabilityIndex(manifest: DesignResourceObservableRuleManifestV2, indexes: SymbolicManifestIndexes): SymbolicApplicabilityIndex;
@@ -0,0 +1,128 @@
1
+ import { DESIGN_RESOURCE_SYMBOLIC_APPLICABILITY_PROFILE_CATALOG, resolveSymbolicApplicabilityProfiles, } from "./design-resource-symbolic-applicability-profiles.js";
2
+ import { deriveRequiredSymbolicStandardApplicability } from "./design-resource-symbolic-applicability-policy.js";
3
+ import { validateSymbolicApplicabilityAuthorityRefs as validateAuthorityRefs } from "./design-resource-symbolic-applicability-authority.js";
4
+ import { assertSameSet, invalid, requireKnownRefs, unique, } from "./design-resource-symbolic-validation-support.js";
5
+ export function buildSymbolicApplicabilityIndex(manifest, indexes) {
6
+ const compact = manifest.structural_applicability;
7
+ if (!compact)
8
+ return {
9
+ mode: "legacy_physical_partitions",
10
+ isApplicable: () => true,
11
+ };
12
+ if (compact.profile_catalog !==
13
+ DESIGN_RESOURCE_SYMBOLIC_APPLICABILITY_PROFILE_CATALOG)
14
+ invalid("v2_applicability_profile_catalog_unknown", compact.profile_catalog);
15
+ const artifactRefs = new Set(manifest.noninterference_certificates.flatMap((certificate) => [
16
+ certificate.source_noninterference_proof,
17
+ certificate.production_noninterference_proof,
18
+ ]
19
+ .filter((proof) => proof != null)
20
+ .map((proof) => proof.artifact_resource_ref)));
21
+ const { effective, expected } = validateProfileBindings(manifest, indexes, artifactRefs);
22
+ validateCustomPropertyClosure(manifest, indexes, effective, expected, artifactRefs);
23
+ validateInstanceExceptions(manifest, indexes, effective, expected, artifactRefs);
24
+ for (const subjectRef of indexes.subjects.keys())
25
+ assertSameSet([...(effective.get(subjectRef) ?? [])], [...(expected.get(subjectRef) ?? [])], "v2_applicability_package_derived_set_mismatch", subjectRef);
26
+ return {
27
+ mode: "package_profiles",
28
+ isApplicable(subjectRef, propertyRef) {
29
+ const properties = effective.get(subjectRef);
30
+ if (!properties)
31
+ invalid("v2_applicability_subject_unknown", subjectRef);
32
+ if (!indexes.properties.has(propertyRef))
33
+ invalid("v2_applicability_property_unknown", propertyRef);
34
+ return properties.has(propertyRef);
35
+ },
36
+ };
37
+ }
38
+ function validateProfileBindings(manifest, indexes, artifactRefs) {
39
+ const bindings = manifest.structural_applicability.subject_profile_bindings;
40
+ unique(bindings.map((binding) => binding.key), "v2_applicability_profile_binding_key_duplicate");
41
+ const boundSubjects = bindings.flatMap((binding) => binding.subject_refs);
42
+ unique(boundSubjects, "v2_applicability_subject_profile_ambiguous");
43
+ assertSameSet(boundSubjects, [...indexes.subjects.keys()], "v2_applicability_subject_profile_set_mismatch", manifest.target_key);
44
+ const effective = new Map();
45
+ const expected = new Map();
46
+ for (const binding of bindings) {
47
+ if (!binding.subject_refs.length || !binding.profile_refs.length)
48
+ invalid("v2_applicability_profile_binding_empty", binding.key);
49
+ validateAuthorityRefs(binding, indexes, artifactRefs, binding.key);
50
+ unique(binding.profile_refs, `v2_applicability_profile_ref_duplicate:${binding.key}`);
51
+ const properties = resolveSymbolicApplicabilityProfiles(binding.profile_refs, binding.key);
52
+ const subjectCensusRefs = binding.subject_refs.flatMap((subjectRef) => {
53
+ const subject = indexes.subjects.get(subjectRef);
54
+ if (!subject)
55
+ invalid("v2_applicability_profile_subject_unknown", subjectRef);
56
+ return subject.census_refs;
57
+ });
58
+ assertSameSet(binding.census_refs, subjectCensusRefs, "v2_applicability_subject_census_set_mismatch", binding.key);
59
+ for (const subjectRef of binding.subject_refs) {
60
+ const subject = indexes.subjects.get(subjectRef);
61
+ if (!subject)
62
+ invalid("v2_applicability_profile_subject_unknown", subjectRef);
63
+ const derived = deriveRequiredSymbolicStandardApplicability(subject, indexes.census);
64
+ for (const basisRef of derived.policy_basis_refs)
65
+ if (!binding.basis_refs.includes(basisRef))
66
+ invalid("v2_applicability_package_policy_basis_missing", `${binding.key}:${subjectRef}:${basisRef}`);
67
+ effective.set(subjectRef, new Set(properties));
68
+ expected.set(subjectRef, new Set(derived.property_refs));
69
+ }
70
+ }
71
+ return { effective, expected };
72
+ }
73
+ function validateCustomPropertyClosure(manifest, indexes, effective, expected, artifactRefs) {
74
+ const rows = manifest.structural_applicability.inspector_custom_property_closure;
75
+ unique(rows.map((row) => row.property_ref), "v2_custom_property_closure_duplicate");
76
+ const customProperties = manifest.properties.filter((property) => !property.standard);
77
+ assertSameSet(rows.map((row) => row.property_ref), customProperties.map((property) => property.key), "v2_custom_property_closure_set_mismatch", manifest.target_key);
78
+ for (const row of rows) {
79
+ const property = indexes.properties.get(row.property_ref);
80
+ if (!property || property.standard)
81
+ invalid("v2_custom_property_closure_property_unknown", row.property_ref);
82
+ validateAuthorityRefs(row, indexes, artifactRefs, row.property_ref);
83
+ requireKnownRefs(row.applicable_subject_refs, indexes.subjects, "v2_custom_property_subject_unknown");
84
+ unique(row.applicable_subject_refs, `v2_custom_property_subject_duplicate:${row.property_ref}`);
85
+ assertSameSet(row.census_refs, property.census_refs, "v2_custom_property_census_set_mismatch", row.property_ref);
86
+ for (const censusRef of row.census_refs) {
87
+ const census = indexes.census.get(censusRef);
88
+ if (census?.kind !== "custom_property" ||
89
+ census.disposition !== "covered")
90
+ invalid("v2_custom_property_census_authority_invalid", `${row.property_ref}:${censusRef}`);
91
+ }
92
+ for (const subjectRef of row.applicable_subject_refs)
93
+ for (const index of [effective, expected])
94
+ index.get(subjectRef).add(row.property_ref);
95
+ }
96
+ assertSameSet(rows.flatMap((row) => row.census_refs), manifest.inspector.census
97
+ .filter((row) => row.kind === "custom_property")
98
+ .map((row) => row.key), "v2_custom_property_census_closure_mismatch", manifest.target_key);
99
+ }
100
+ function validateInstanceExceptions(manifest, indexes, effective, expected, artifactRefs) {
101
+ const exceptions = manifest.structural_applicability.instance_exceptions;
102
+ unique(exceptions.map((item) => item.key), "v2_applicability_exception_key_duplicate");
103
+ const tupleKeys = exceptions.map((item) => `${item.subject_ref}\u0000${item.property_ref}`);
104
+ unique(tupleKeys, "v2_applicability_exception_tuple_duplicate");
105
+ for (const exception of exceptions) {
106
+ const subject = indexes.subjects.get(exception.subject_ref);
107
+ if (!subject)
108
+ invalid("v2_applicability_exception_subject_unknown", exception.key);
109
+ const property = indexes.properties.get(exception.property_ref);
110
+ if (!property)
111
+ invalid("v2_applicability_exception_property_unknown", exception.key);
112
+ validateAuthorityRefs(exception, indexes, artifactRefs, exception.key);
113
+ assertSameSet(exception.census_refs, [...subject.census_refs, ...property.census_refs], "v2_applicability_exception_census_set_mismatch", exception.key);
114
+ const properties = effective.get(exception.subject_ref);
115
+ const requestedApplicability = exception.disposition === "applicable";
116
+ if (properties.has(exception.property_ref) === requestedApplicability)
117
+ invalid("v2_applicability_exception_noop", exception.key);
118
+ if (exception.disposition === "applicable")
119
+ properties.add(exception.property_ref);
120
+ else
121
+ properties.delete(exception.property_ref);
122
+ const expectedProperties = expected.get(exception.subject_ref);
123
+ if (exception.disposition === "applicable")
124
+ expectedProperties.add(exception.property_ref);
125
+ else
126
+ expectedProperties.delete(exception.property_ref);
127
+ }
128
+ }
@@ -0,0 +1,3 @@
1
+ import type { DesignResourceObservableRuleManifestV2 } from "./design-resource-symbolic-fact-types.js";
2
+ export declare function createDesignResourceSymbolicCompilationSession(manifest: DesignResourceObservableRuleManifestV2): import("./symbolic-denotation-engine.js").SymbolicDenotationCompilationSession;
3
+ export type DesignResourceSymbolicCompilationSession = ReturnType<typeof createDesignResourceSymbolicCompilationSession>;
@@ -0,0 +1,13 @@
1
+ import { createSymbolicDenotationCompilationSession } from "./symbolic-denotation-engine.js";
2
+ export function createDesignResourceSymbolicCompilationSession(manifest) {
3
+ return createSymbolicDenotationCompilationSession(manifest.axis_domains, [
4
+ manifest.reachable_region,
5
+ ...manifest.fact_rules.map((rule) => rule.region),
6
+ ...manifest.disposition_regions.map((row) => row.region),
7
+ ...manifest.populations.flatMap((population) => population.exclusions.map((exclusion) => exclusion.region)),
8
+ ...manifest.noninterference_certificates.flatMap((certificate) => [certificate.production_noninterference_proof].flatMap((proof) => proof?.equivalence_cases.flatMap((item) => [
9
+ item.side_predicate,
10
+ item.axis_erased_predicate,
11
+ ]) ?? [])),
12
+ ]);
13
+ }
@@ -0,0 +1,3 @@
1
+ import type { DesignResourceHandoffPreflightV2 } from "./design-resource-symbolic-fact-types.js";
2
+ import type { SymbolicExtensionalPointV1, SymbolicPointDenotationV1 } from "./symbolic-denotation-types.js";
3
+ export declare function denoteDesignResourceSymbolicPoint(preflight: DesignResourceHandoffPreflightV2, point: SymbolicExtensionalPointV1): SymbolicPointDenotationV1;
@@ -0,0 +1,167 @@
1
+ import { buildSymbolicApplicabilityIndex } from "./design-resource-symbolic-applicability-validation.js";
2
+ import { createDesignResourceSymbolicCompilationSession } from "./design-resource-symbolic-compilation.js";
3
+ import { buildSymbolicManifestIndexes, symbolicSemanticTupleKey, } from "./design-resource-symbolic-indexes.js";
4
+ import { evaluateCanonicalSymbolicDenotation } from "./symbolic-denotation-engine.js";
5
+ const queryIndexCache = new WeakMap();
6
+ export function denoteDesignResourceSymbolicPoint(preflight, point) {
7
+ const manifest = preflight.manifest;
8
+ const assignment = {
9
+ ...point.condition_assignment,
10
+ ...point.variation_assignment,
11
+ };
12
+ validateCompleteAssignment(manifest.axis_domains, assignment);
13
+ const query = queryIndex(preflight);
14
+ validatePointTupleAuthority(preflight, query.indexes, point);
15
+ const reachable = query.reachable;
16
+ if (!evaluateCanonicalSymbolicDenotation(reachable.canonical_dag, assignment))
17
+ invalid("extensional_point_unreachable", pointIdentity(point));
18
+ if (!query.applicability.isApplicable(point.subject_or_relation_ref, point.property_ref))
19
+ return {
20
+ disposition: "not_applicable",
21
+ expected_semantics: null,
22
+ proof_obligations: [],
23
+ };
24
+ const tupleKey = symbolicSemanticTupleKey(point);
25
+ const rules = (query.rulesByTuple.get(tupleKey) ?? []).filter((projection) => evaluateCanonicalSymbolicDenotation(projection.compiled_region.canonical_dag, assignment));
26
+ const dispositions = (query.dispositionsByTuple.get(tupleKey) ?? []).filter((projection) => evaluateCanonicalSymbolicDenotation(projection.compiled.canonical_dag, assignment));
27
+ if (rules.length + dispositions.length !== 1)
28
+ invalid("extensional_point_effective_region_invalid", `${pointIdentity(point)}:rules=${rules.length}:dispositions=${dispositions.length}`);
29
+ if (dispositions.length)
30
+ return {
31
+ disposition: dispositions[0].row.disposition,
32
+ expected_semantics: null,
33
+ proof_obligations: [],
34
+ };
35
+ const rule = rules[0].rule;
36
+ const obligations = rule.semantic_obligation_refs
37
+ .map((ref) => query.indexes.obligations.get(ref))
38
+ .map((obligation) => {
39
+ if (!obligation)
40
+ invalid("semantic_obligation_unknown", rule.key);
41
+ const oracle = query.indexes.oracles.get(obligation.oracle_ref);
42
+ const environment = query.indexes.environments.get(obligation.environment_ref);
43
+ if (!oracle || !environment)
44
+ invalid("semantic_obligation_authority_unknown", obligation.key);
45
+ return {
46
+ method: obligation.method,
47
+ proof_surface: obligation.proof_surface,
48
+ observation_boundary: obligation.observation_boundary,
49
+ comparison: structuredClone(obligation.comparison),
50
+ oracle: structuredClone(oracle),
51
+ environment: structuredClone(environment),
52
+ protected_value_policy: obligation.protected_value_policy,
53
+ completion_effect: obligation.completion_effect,
54
+ };
55
+ })
56
+ .sort((left, right) => compareText(left.method, right.method));
57
+ return {
58
+ disposition: "specified",
59
+ expected_semantics: {
60
+ value_type: rule.value_kind,
61
+ expected: structuredClone(rule.expected),
62
+ provenance_ref: rule.provenance_ref,
63
+ sensitivity: rule.observation_sensitivity,
64
+ population_ref: rule.population_ref,
65
+ quantifier: structuredClone(rule.quantifier),
66
+ lineage: structuredClone(rule.lineage),
67
+ },
68
+ proof_obligations: obligations,
69
+ };
70
+ }
71
+ function validatePointTupleAuthority(preflight, indexes, point) {
72
+ const manifest = preflight.manifest;
73
+ const subject = indexes.subjects.get(point.subject_or_relation_ref);
74
+ if (!subject || point.target_ref !== manifest.target_key)
75
+ invalid("extensional_point_subject_target_unknown", pointIdentity(point));
76
+ if (!indexes.properties.has(point.property_ref))
77
+ invalid("extensional_point_property_unknown", point.property_ref);
78
+ const expectedQuantifier = subject.population_ref
79
+ ? indexes.populations.get(subject.population_ref)?.quantifier
80
+ : { kind: "one", minimum: 1, maximum: 1 };
81
+ if (point.population_ref !== subject.population_ref ||
82
+ canonicalJson(point.quantifier) !== canonicalJson(expectedQuantifier))
83
+ invalid("extensional_point_population_quantifier_mismatch", pointIdentity(point));
84
+ }
85
+ function queryIndex(preflight) {
86
+ const cached = queryIndexCache.get(preflight);
87
+ if (cached)
88
+ return cached;
89
+ const built = buildQueryIndex(preflight);
90
+ queryIndexCache.set(preflight, built);
91
+ return built;
92
+ }
93
+ function buildQueryIndex(preflight) {
94
+ const indexes = buildSymbolicManifestIndexes(preflight.manifest, preflight);
95
+ const applicability = buildSymbolicApplicabilityIndex(preflight.manifest, indexes);
96
+ const compilation = createDesignResourceSymbolicCompilationSession(preflight.manifest);
97
+ const rulesByTuple = new Map();
98
+ for (const projection of preflight.rule_projections) {
99
+ const key = symbolicSemanticTupleKey(projection.rule);
100
+ const values = rulesByTuple.get(key);
101
+ if (values)
102
+ values.push(projection);
103
+ else
104
+ rulesByTuple.set(key, [projection]);
105
+ }
106
+ const dispositionsByTuple = new Map();
107
+ for (const row of preflight.manifest.disposition_regions) {
108
+ const key = symbolicSemanticTupleKey(row);
109
+ const projection = { row, compiled: compilation.compile(row.region) };
110
+ const values = dispositionsByTuple.get(key);
111
+ if (values)
112
+ values.push(projection);
113
+ else
114
+ dispositionsByTuple.set(key, [projection]);
115
+ }
116
+ return {
117
+ indexes,
118
+ applicability,
119
+ rulesByTuple,
120
+ dispositionsByTuple,
121
+ reachable: compilation.compile(preflight.manifest.reachable_region),
122
+ };
123
+ }
124
+ function validateCompleteAssignment(domains, assignment) {
125
+ const actual = Object.keys(assignment).sort(compareText);
126
+ const expected = domains.map((domain) => domain.key).sort(compareText);
127
+ if (actual.length !== expected.length ||
128
+ actual.some((key, index) => key !== expected[index]))
129
+ invalid("extensional_assignment_axis_set_mismatch", `${actual.join(",")}:${expected.join(",")}`);
130
+ for (const domain of domains) {
131
+ const value = assignment[domain.key];
132
+ if (domain.kind === "enum"
133
+ ? typeof value !== "string" || !domain.values.includes(value)
134
+ : typeof value !== "number" ||
135
+ !Number.isSafeInteger(value) ||
136
+ value < domain.minimum ||
137
+ value > domain.maximum)
138
+ invalid("extensional_assignment_value_outside_domain", `${domain.key}:${String(value)}`);
139
+ }
140
+ }
141
+ function pointIdentity(point) {
142
+ return [
143
+ point.subject_or_relation_ref,
144
+ point.target_ref,
145
+ point.property_ref,
146
+ point.population_ref ?? "none",
147
+ canonicalJson(point.quantifier),
148
+ canonicalJson(point.condition_assignment),
149
+ canonicalJson(point.variation_assignment),
150
+ ].join(":");
151
+ }
152
+ function canonicalJson(value) {
153
+ if (Array.isArray(value))
154
+ return `[${value.map((item) => canonicalJson(item)).join(",")}]`;
155
+ if (value && typeof value === "object")
156
+ return `{${Object.entries(value)
157
+ .sort(([left], [right]) => compareText(left, right))
158
+ .map(([key, entry]) => `${JSON.stringify(key)}:${canonicalJson(entry)}`)
159
+ .join(",")}}`;
160
+ return JSON.stringify(value);
161
+ }
162
+ function compareText(left, right) {
163
+ return left < right ? -1 : left > right ? 1 : 0;
164
+ }
165
+ function invalid(code, detail) {
166
+ throw new Error(`design_resource_symbolic_denotation_invalid:${code}:${detail}`);
167
+ }
@@ -0,0 +1,4 @@
1
+ import type { DesignResourceObservableRuleManifestV2 } from "./design-resource-symbolic-fact-types.js";
2
+ import type { DesignResourceSymbolicCompilationSession } from "./design-resource-symbolic-compilation.js";
3
+ import type { SymbolicManifestIndexes } from "./design-resource-symbolic-indexes.js";
4
+ export declare function validateSymbolicDispositions(manifest: DesignResourceObservableRuleManifestV2, targetKey: string, indexes: SymbolicManifestIndexes, compilation: DesignResourceSymbolicCompilationSession): void;
@@ -0,0 +1,28 @@
1
+ import { assertNoUnprovedOmittedAxes } from "./design-resource-symbolic-safety-validation.js";
2
+ import { validateSymbolicPopulationAndQuantifier, validateSymbolicRegionWithinReachable, } from "./design-resource-symbolic-region-validation.js";
3
+ import { invalid, requireKnownRefs, unique, } from "./design-resource-symbolic-validation-support.js";
4
+ export function validateSymbolicDispositions(manifest, targetKey, indexes, compilation) {
5
+ for (const disposition of manifest.disposition_regions) {
6
+ const subject = indexes.subjects.get(disposition.subject_or_relation_ref);
7
+ if (!subject)
8
+ invalid("v2_disposition_subject_unknown", disposition.key);
9
+ if (!indexes.properties.has(disposition.property_ref))
10
+ invalid("v2_disposition_property_unknown", disposition.key);
11
+ if (disposition.target_ref !== targetKey)
12
+ invalid("v2_disposition_target_mismatch", disposition.key);
13
+ validateSymbolicPopulationAndQuantifier(disposition, subject.population_ref, indexes.populations);
14
+ if (!disposition.basis_refs.length || !disposition.source_item_refs.length)
15
+ invalid("v2_disposition_basis_source_required", disposition.key);
16
+ unique(disposition.census_refs, `v2_disposition_census_duplicate:${disposition.key}`);
17
+ unique(disposition.source_item_refs, `v2_disposition_source_item_duplicate:${disposition.key}`);
18
+ unique(disposition.basis_refs, `v2_disposition_basis_duplicate:${disposition.key}`);
19
+ requireKnownRefs(disposition.census_refs, indexes.census, "v2_disposition_census_unknown");
20
+ requireKnownRefs(disposition.source_item_refs, indexes.sourceItems, "v2_disposition_source_item_unknown");
21
+ validateSymbolicRegionWithinReachable(disposition.region, manifest.reachable_region, disposition.key, compilation);
22
+ assertNoUnprovedOmittedAxes(compilation.compile(disposition.region), disposition.key);
23
+ if (disposition.disposition === "decision_required" ||
24
+ disposition.disposition === "unavailable" ||
25
+ disposition.disposition === "blocking")
26
+ invalid("v2_unresolved_disposition", `${disposition.key}:${disposition.disposition}`);
27
+ }
28
+ }
@@ -0,0 +1,12 @@
1
+ export declare const DESIGN_RESOURCE_SYMBOLIC_FACT_POLICY: {
2
+ readonly symbolic_denotation_efficiency_delivery: true;
3
+ readonly control_relations_unchanged: true;
4
+ readonly forbidden_symbolic_shortcuts_absent: true;
5
+ readonly symbolic_inventory_is_not_completion: true;
6
+ readonly v1_capacity: {
7
+ readonly embedded_handoff_max_bytes: 8388608;
8
+ readonly canonical_manifest_max_bytes: 33554432;
9
+ readonly expected_fact_cells_max: 16384;
10
+ readonly capacity_header_prefix_max_bytes: 65536;
11
+ };
12
+ };
@@ -0,0 +1,12 @@
1
+ export const DESIGN_RESOURCE_SYMBOLIC_FACT_POLICY = {
2
+ symbolic_denotation_efficiency_delivery: true,
3
+ control_relations_unchanged: true,
4
+ forbidden_symbolic_shortcuts_absent: true,
5
+ symbolic_inventory_is_not_completion: true,
6
+ v1_capacity: {
7
+ embedded_handoff_max_bytes: 8_388_608,
8
+ canonical_manifest_max_bytes: 33_554_432,
9
+ expected_fact_cells_max: 16_384,
10
+ capacity_header_prefix_max_bytes: 65_536,
11
+ },
12
+ };
@@ -0,0 +1,3 @@
1
+ import type { DesignResourceHandoffV2 } from "./design-resource-symbolic-fact-types.js";
2
+ export { parseDesignResourceObservableRuleManifestJson, parseDesignResourceObservableRuleManifestShape, } from "./design-resource-symbolic-manifest-shape.js";
3
+ export declare function parseDesignResourceSymbolicHandoffShape(value: unknown): DesignResourceHandoffV2;