project-tiny-context-harness 0.8.4 → 0.8.6

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 (254) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +394 -363
  3. package/assets/README.md +570 -514
  4. package/assets/README.zh-CN.md +331 -300
  5. package/assets/agents/.gitkeep +1 -1
  6. package/assets/agents/AGENTS_CORE.md +45 -25
  7. package/assets/context_templates/architecture.md +26 -25
  8. package/assets/context_templates/area.md +32 -31
  9. package/assets/context_templates/context.toml +30 -24
  10. package/assets/context_templates/deployment.md +35 -35
  11. package/assets/context_templates/global.md +57 -57
  12. package/assets/context_templates/product-surface-contract.md +70 -70
  13. package/assets/context_templates/screen-contract.md +189 -189
  14. package/assets/context_templates/verification.md +31 -30
  15. package/assets/github/.gitkeep +1 -1
  16. package/assets/github/harness.yml +39 -39
  17. package/assets/make/.gitkeep +1 -1
  18. package/assets/make/ty-context.mk +48 -48
  19. package/assets/skills/context_development_engineer/SKILL.md +155 -122
  20. package/assets/skills/context_full_project_export/SKILL.md +28 -28
  21. package/assets/skills/context_harness_upgrade/SKILL.md +60 -60
  22. package/assets/skills/context_product_plan/SKILL.md +99 -79
  23. package/assets/skills/context_surface_contract/SKILL.md +191 -191
  24. package/assets/skills/context_uiux_design/SKILL.md +171 -171
  25. package/assets/skills/design-resource-authoring/SKILL.md +86 -84
  26. package/assets/skills/design-resource-authoring/references/downstream-handoff.md +138 -123
  27. package/assets/skills/design-resource-authoring/references/open-design-provider.md +132 -127
  28. package/assets/skills/design-resource-authoring/references/resource-selection.md +181 -154
  29. package/assets/skills/design-system-authoring/SKILL.md +57 -57
  30. package/assets/skills/design-system-authoring/agents/openai.yaml +6 -6
  31. package/assets/skills/design-system-authoring/references/authority-adoption.md +48 -48
  32. package/assets/skills/design-system-authoring/references/open-design-design-system-provider.md +110 -110
  33. package/assets/skills/long-task-workflow/SKILL.md +98 -92
  34. package/assets/skills/long-task-workflow/agents/openai.yaml +3 -1
  35. package/assets/skills/long-task-workflow/references/authority-lifecycle.md +72 -72
  36. package/assets/skills/long-task-workflow/references/contract-authoring.md +122 -101
  37. package/assets/skills/long-task-workflow/references/evidence-design.md +82 -61
  38. package/assets/skills/long-task-workflow/references/source-authoring.md +109 -90
  39. package/assets/skills/source-plan-authoring/SKILL.md +14 -14
  40. package/assets/tools/validate_context.py +442 -442
  41. package/dist/commands/long-task-authoring.js +27 -2
  42. package/dist/lib/context-default-footprint.js +2 -0
  43. package/dist/lib/context-manifest.js +6 -0
  44. package/dist/lib/context-templates.js +1 -1
  45. package/dist/lib/design-resource-fact-enums.d.ts +20 -0
  46. package/dist/lib/design-resource-fact-enums.js +170 -0
  47. package/dist/lib/design-resource-fact-locator-extractors.d.ts +8 -0
  48. package/dist/lib/design-resource-fact-locator-extractors.js +108 -0
  49. package/dist/lib/design-resource-fact-locator-resolver.d.ts +3 -0
  50. package/dist/lib/design-resource-fact-locator-resolver.js +112 -0
  51. package/dist/lib/design-resource-fact-locator-validation.d.ts +5 -0
  52. package/dist/lib/design-resource-fact-locator-validation.js +16 -0
  53. package/dist/lib/design-resource-fact-manifest-catalog.d.ts +4 -0
  54. package/dist/lib/design-resource-fact-manifest-catalog.js +249 -0
  55. package/dist/lib/design-resource-fact-manifest-model.d.ts +91 -0
  56. package/dist/lib/design-resource-fact-manifest-model.js +21 -0
  57. package/dist/lib/design-resource-fact-manifest-shape-axes.d.ts +6 -0
  58. package/dist/lib/design-resource-fact-manifest-shape-axes.js +159 -0
  59. package/dist/lib/design-resource-fact-manifest-shape-evidence.d.ts +4 -0
  60. package/dist/lib/design-resource-fact-manifest-shape-evidence.js +59 -0
  61. package/dist/lib/design-resource-fact-manifest-shape-facts.d.ts +4 -0
  62. package/dist/lib/design-resource-fact-manifest-shape-facts.js +109 -0
  63. package/dist/lib/design-resource-fact-manifest-shape-inspector.d.ts +5 -0
  64. package/dist/lib/design-resource-fact-manifest-shape-inspector.js +144 -0
  65. package/dist/lib/design-resource-fact-manifest-shape.d.ts +7 -0
  66. package/dist/lib/design-resource-fact-manifest-shape.js +75 -0
  67. package/dist/lib/design-resource-fact-manifest-types.d.ts +3 -0
  68. package/dist/lib/design-resource-fact-manifest-types.js +3 -0
  69. package/dist/lib/design-resource-fact-manifest-universe.d.ts +5 -0
  70. package/dist/lib/design-resource-fact-manifest-universe.js +50 -0
  71. package/dist/lib/design-resource-fact-manifest-validation.d.ts +3 -0
  72. package/dist/lib/design-resource-fact-manifest-validation.js +106 -0
  73. package/dist/lib/design-resource-fact-policy.d.ts +18 -0
  74. package/dist/lib/design-resource-fact-policy.js +72 -1
  75. package/dist/lib/design-resource-fact-property-methods.d.ts +3 -0
  76. package/dist/lib/design-resource-fact-property-methods.js +158 -0
  77. package/dist/lib/design-resource-fact-shape-primitives.d.ts +3 -0
  78. package/dist/lib/design-resource-fact-shape-primitives.js +18 -0
  79. package/dist/lib/design-resource-fact-types.d.ts +164 -0
  80. package/dist/lib/design-resource-fact-types.js +1 -0
  81. package/dist/lib/design-resource-fact-universe-assets.d.ts +4 -0
  82. package/dist/lib/design-resource-fact-universe-assets.js +71 -0
  83. package/dist/lib/design-resource-fact-universe-catalog.d.ts +4 -0
  84. package/dist/lib/design-resource-fact-universe-catalog.js +151 -0
  85. package/dist/lib/design-resource-fact-universe-conditions.d.ts +2 -0
  86. package/dist/lib/design-resource-fact-universe-conditions.js +92 -0
  87. package/dist/lib/design-resource-fact-universe-facts.d.ts +4 -0
  88. package/dist/lib/design-resource-fact-universe-facts.js +108 -0
  89. package/dist/lib/design-resource-fact-universe-helpers.d.ts +30 -0
  90. package/dist/lib/design-resource-fact-universe-helpers.js +167 -0
  91. package/dist/lib/design-resource-fact-universe-inspector.d.ts +7 -0
  92. package/dist/lib/design-resource-fact-universe-inspector.js +119 -0
  93. package/dist/lib/design-resource-fact-universe-proof.d.ts +4 -0
  94. package/dist/lib/design-resource-fact-universe-proof.js +113 -0
  95. package/dist/lib/design-resource-fact-universe-subjects.d.ts +5 -0
  96. package/dist/lib/design-resource-fact-universe-subjects.js +97 -0
  97. package/dist/lib/design-resource-fact-universe-variations.d.ts +2 -0
  98. package/dist/lib/design-resource-fact-universe-variations.js +75 -0
  99. package/dist/lib/design-resource-fact-value-validation.d.ts +2 -0
  100. package/dist/lib/design-resource-fact-value-validation.js +80 -0
  101. package/dist/lib/design-resource-handoff-file-primitives.js +2 -0
  102. package/dist/lib/design-resource-handoff-file-validation.js +13 -100
  103. package/dist/lib/design-resource-handoff-policy.d.ts +1 -0
  104. package/dist/lib/design-resource-handoff-policy.js +118 -11
  105. package/dist/lib/design-resource-handoff-shape-evidence.js +46 -3
  106. package/dist/lib/design-resource-handoff-shape-primitives.d.ts +5 -0
  107. package/dist/lib/design-resource-handoff-shape-primitives.js +28 -0
  108. package/dist/lib/design-resource-handoff-shape-structure.js +143 -22
  109. package/dist/lib/design-resource-handoff-shape.js +25 -0
  110. package/dist/lib/design-resource-handoff-types.d.ts +97 -21
  111. package/dist/lib/design-resource-handoff-types.js +22 -0
  112. package/dist/lib/design-resource-handoff-validation-coverage.d.ts +1 -1
  113. package/dist/lib/design-resource-handoff-validation-coverage.js +145 -118
  114. package/dist/lib/design-resource-handoff-validation-fact-cells.d.ts +2 -0
  115. package/dist/lib/design-resource-handoff-validation-fact-cells.js +60 -0
  116. package/dist/lib/design-resource-handoff-validation-fact-records.d.ts +2 -0
  117. package/dist/lib/design-resource-handoff-validation-fact-records.js +90 -0
  118. package/dist/lib/design-resource-handoff-validation-facts.js +10 -94
  119. package/dist/lib/design-resource-handoff-validation-proofs.d.ts +2 -0
  120. package/dist/lib/design-resource-handoff-validation-proofs.js +67 -0
  121. package/dist/lib/design-resource-handoff-validation-resource-closure.d.ts +3 -0
  122. package/dist/lib/design-resource-handoff-validation-resource-closure.js +88 -0
  123. package/dist/lib/design-resource-handoff-validation-structure.js +43 -14
  124. package/dist/lib/design-resource-handoff-validation.js +32 -0
  125. package/dist/lib/design-resource-handoff-web-dependency-validation.d.ts +2 -1
  126. package/dist/lib/design-resource-handoff-web-dependency-validation.js +67 -7
  127. package/dist/lib/execution-target-capabilities.d.ts +1 -1
  128. package/dist/lib/execution-target-capabilities.js +14 -0
  129. package/dist/lib/long-task-activation-validation.js +6 -2
  130. package/dist/lib/long-task-applicability-shape.js +3 -3
  131. package/dist/lib/long-task-authoring-authority-preview.js +1 -0
  132. package/dist/lib/long-task-authority-policy.d.ts +1 -0
  133. package/dist/lib/long-task-authority-policy.js +1 -0
  134. package/dist/lib/long-task-authority.js +13 -0
  135. package/dist/lib/long-task-claim-definitions.js +13 -1
  136. package/dist/lib/long-task-claims.js +23 -1
  137. package/dist/lib/long-task-contract-types.d.ts +3 -0
  138. package/dist/lib/long-task-delivery-compiler.js +1 -0
  139. package/dist/lib/long-task-delivery-parser.js +11 -1
  140. package/dist/lib/long-task-delivery-types.d.ts +1 -0
  141. package/dist/lib/long-task-delivery-types.js +1 -0
  142. package/dist/lib/long-task-delivery-validation.js +17 -0
  143. package/dist/lib/long-task-design-resource-handoff.js +62 -38
  144. package/dist/lib/long-task-design-target-capabilities.d.ts +14 -0
  145. package/dist/lib/long-task-design-target-capabilities.js +126 -0
  146. package/dist/lib/long-task-evidence-capability-codec.d.ts +94 -0
  147. package/dist/lib/long-task-evidence-capability-codec.js +395 -22
  148. package/dist/lib/long-task-evidence-capability-policy.js +18 -0
  149. package/dist/lib/long-task-evidence-capability-runtime.js +78 -0
  150. package/dist/lib/long-task-evidence-capability-types.d.ts +114 -1
  151. package/dist/lib/long-task-outcome-parser.js +4 -0
  152. package/dist/lib/long-task-playwright-capability-records.d.ts +5 -0
  153. package/dist/lib/long-task-playwright-capability-records.js +146 -0
  154. package/dist/lib/long-task-playwright-case-evidence.d.ts +3 -2
  155. package/dist/lib/long-task-playwright-case-evidence.js +10 -79
  156. package/dist/lib/long-task-playwright-case-primitives.d.ts +28 -0
  157. package/dist/lib/long-task-playwright-case-primitives.js +143 -0
  158. package/dist/lib/long-task-playwright-evidence.d.ts +1 -1
  159. package/dist/lib/long-task-playwright-evidence.js +10 -75
  160. package/dist/lib/long-task-runner-freeze.d.ts +2 -2
  161. package/dist/lib/long-task-runner-freeze.js +15 -1
  162. package/dist/lib/long-task-runtime-types.d.ts +4 -1
  163. package/dist/lib/long-task-semantic-contract-types.d.ts +1 -1
  164. package/dist/lib/long-task-semantic-drift-migration.js +2 -2
  165. package/dist/lib/long-task-semantic-fact-binding-types.d.ts +57 -0
  166. package/dist/lib/long-task-semantic-fact-binding-types.js +1 -0
  167. package/dist/lib/long-task-semantic-fact-closure-primitives.d.ts +5 -0
  168. package/dist/lib/long-task-semantic-fact-closure-primitives.js +43 -0
  169. package/dist/lib/long-task-semantic-fact-closure.d.ts +13 -0
  170. package/dist/lib/long-task-semantic-fact-closure.js +48 -0
  171. package/dist/lib/long-task-semantic-fact-contract-closure.d.ts +4 -0
  172. package/dist/lib/long-task-semantic-fact-contract-closure.js +24 -0
  173. package/dist/lib/long-task-semantic-fact-contract-facts.d.ts +4 -0
  174. package/dist/lib/long-task-semantic-fact-contract-facts.js +30 -0
  175. package/dist/lib/long-task-semantic-fact-contract-proofs.d.ts +4 -0
  176. package/dist/lib/long-task-semantic-fact-contract-proofs.js +97 -0
  177. package/dist/lib/long-task-semantic-fact-evidence.d.ts +21 -0
  178. package/dist/lib/long-task-semantic-fact-evidence.js +165 -0
  179. package/dist/lib/long-task-semantic-fact-input-closure.d.ts +4 -0
  180. package/dist/lib/long-task-semantic-fact-input-closure.js +101 -0
  181. package/dist/lib/long-task-semantic-fact-provenance-closure.d.ts +4 -0
  182. package/dist/lib/long-task-semantic-fact-provenance-closure.js +140 -0
  183. package/dist/lib/long-task-semantic-fact-shape.d.ts +3 -0
  184. package/dist/lib/long-task-semantic-fact-shape.js +89 -0
  185. package/dist/lib/long-task-semantic-fact-value-closure.d.ts +3 -0
  186. package/dist/lib/long-task-semantic-fact-value-closure.js +110 -0
  187. package/dist/lib/long-task-shape-primitives.d.ts +2 -1
  188. package/dist/lib/long-task-shape-primitives.js +7 -0
  189. package/dist/lib/long-task-source-item-parser.js +25 -6
  190. package/dist/lib/long-task-source-target-continuity.js +4 -1
  191. package/dist/lib/long-task-source-target-index.d.ts +1 -1
  192. package/dist/lib/long-task-source-target-index.js +5 -1
  193. package/dist/lib/long-task-ui-design-policy.js +8 -4
  194. package/dist/lib/long-task-ui-surface-shape.js +83 -1
  195. package/dist/lib/long-task-ui-surface-types.d.ts +29 -0
  196. package/dist/lib/modularity.js +7 -1
  197. package/dist/lib/semantic-fact-base-types.d.ts +14 -0
  198. package/dist/lib/semantic-fact-base-types.js +1 -0
  199. package/dist/lib/semantic-fact-catalog.d.ts +8 -0
  200. package/dist/lib/semantic-fact-catalog.js +191 -0
  201. package/dist/lib/semantic-fact-condition-shape.d.ts +48 -0
  202. package/dist/lib/semantic-fact-condition-shape.js +111 -0
  203. package/dist/lib/semantic-fact-input-shape.d.ts +34 -0
  204. package/dist/lib/semantic-fact-input-shape.js +111 -0
  205. package/dist/lib/semantic-fact-inventory-types.d.ts +147 -0
  206. package/dist/lib/semantic-fact-inventory-types.js +1 -0
  207. package/dist/lib/semantic-fact-manifest-shape.d.ts +4 -0
  208. package/dist/lib/semantic-fact-manifest-shape.js +135 -0
  209. package/dist/lib/semantic-fact-manifest-types.d.ts +58 -0
  210. package/dist/lib/semantic-fact-manifest-types.js +19 -0
  211. package/dist/lib/semantic-fact-policy-authority.d.ts +8 -0
  212. package/dist/lib/semantic-fact-policy-authority.js +79 -0
  213. package/dist/lib/semantic-fact-policy-census.d.ts +2 -0
  214. package/dist/lib/semantic-fact-policy-census.js +80 -0
  215. package/dist/lib/semantic-fact-policy-condition-references.d.ts +7 -0
  216. package/dist/lib/semantic-fact-policy-condition-references.js +19 -0
  217. package/dist/lib/semantic-fact-policy-conditions.d.ts +2 -0
  218. package/dist/lib/semantic-fact-policy-conditions.js +105 -0
  219. package/dist/lib/semantic-fact-policy-facts.d.ts +3 -0
  220. package/dist/lib/semantic-fact-policy-facts.js +73 -0
  221. package/dist/lib/semantic-fact-policy-primitives.d.ts +26 -0
  222. package/dist/lib/semantic-fact-policy-primitives.js +169 -0
  223. package/dist/lib/semantic-fact-policy-proofs.d.ts +2 -0
  224. package/dist/lib/semantic-fact-policy-proofs.js +75 -0
  225. package/dist/lib/semantic-fact-policy-properties.d.ts +3 -0
  226. package/dist/lib/semantic-fact-policy-properties.js +84 -0
  227. package/dist/lib/semantic-fact-policy-units.d.ts +4 -0
  228. package/dist/lib/semantic-fact-policy-units.js +103 -0
  229. package/dist/lib/semantic-fact-policy.d.ts +17 -0
  230. package/dist/lib/semantic-fact-policy.js +41 -0
  231. package/dist/lib/semantic-fact-proof-shape.d.ts +51 -0
  232. package/dist/lib/semantic-fact-proof-shape.js +121 -0
  233. package/dist/lib/semantic-fact-proof-types.d.ts +74 -0
  234. package/dist/lib/semantic-fact-proof-types.js +1 -0
  235. package/dist/lib/semantic-fact-property-shape.d.ts +29 -0
  236. package/dist/lib/semantic-fact-property-shape.js +77 -0
  237. package/dist/lib/semantic-fact-shape-constants.d.ts +3 -0
  238. package/dist/lib/semantic-fact-shape-constants.js +38 -0
  239. package/dist/lib/semantic-fact-shape-primitives.d.ts +15 -0
  240. package/dist/lib/semantic-fact-shape-primitives.js +68 -0
  241. package/dist/lib/semantic-fact-source-parser.d.ts +9 -0
  242. package/dist/lib/semantic-fact-source-parser.js +46 -0
  243. package/dist/lib/semantic-fact-support-shape.d.ts +21 -0
  244. package/dist/lib/semantic-fact-support-shape.js +59 -0
  245. package/dist/lib/semantic-fact-types.d.ts +5 -0
  246. package/dist/lib/semantic-fact-types.js +5 -0
  247. package/dist/lib/semantic-fact-unit-shape.d.ts +34 -0
  248. package/dist/lib/semantic-fact-unit-shape.js +89 -0
  249. package/dist/lib/semantic-fact-value-shape.d.ts +12 -0
  250. package/dist/lib/semantic-fact-value-shape.js +39 -0
  251. package/dist/schemas/long-task-delivery-v2/long-task-delivery-v2.schema.json +1339 -131
  252. package/migrations/README.md +15 -15
  253. package/package.json +84 -84
  254. package/source-mappings.yaml +25 -25
@@ -4,20 +4,47 @@
4
4
  "title": "Single-Goal Delivery Contract V2",
5
5
  "type": "object",
6
6
  "additionalProperties": false,
7
- "required": ["schema_version", "task", "source_claims", "stages", "risk", "global"],
7
+ "required": [
8
+ "schema_version",
9
+ "semantic_fact_manifest",
10
+ "task",
11
+ "source_claims",
12
+ "stages",
13
+ "risk",
14
+ "global"
15
+ ],
8
16
  "properties": {
9
17
  "schema_version": { "const": "long-task-delivery-v2" },
18
+ "semantic_fact_manifest": {
19
+ "$ref": "#/$defs/semanticFactManifestRef"
20
+ },
10
21
  "task": {
11
22
  "type": "object",
12
23
  "additionalProperties": false,
13
- "required": ["id", "title", "goal", "target_profile", "execution_targets", "source_paths", "context_refs"],
24
+ "required": [
25
+ "id",
26
+ "title",
27
+ "goal",
28
+ "target_profile",
29
+ "execution_targets",
30
+ "source_paths",
31
+ "context_refs"
32
+ ],
14
33
  "properties": {
15
34
  "id": { "$ref": "#/$defs/key" },
16
35
  "title": { "$ref": "#/$defs/nonEmpty" },
17
36
  "goal": { "$ref": "#/$defs/nonEmpty" },
18
37
  "target_profile": { "$ref": "#/$defs/targetProfile" },
19
- "execution_targets": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/executionTarget" } },
20
- "source_paths": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/nonEmpty" } },
38
+ "execution_targets": {
39
+ "type": "array",
40
+ "minItems": 1,
41
+ "items": { "$ref": "#/$defs/executionTarget" }
42
+ },
43
+ "source_paths": {
44
+ "type": "array",
45
+ "minItems": 1,
46
+ "items": { "$ref": "#/$defs/nonEmpty" }
47
+ },
21
48
  "context_refs": { "$ref": "#/$defs/nonEmptyStrings" },
22
49
  "context_snapshot_mode": { "const": "full", "default": "full" }
23
50
  }
@@ -27,10 +54,18 @@
27
54
  "minItems": 1,
28
55
  "items": { "$ref": "#/$defs/sourceClaim" }
29
56
  },
30
- "stages": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/stage" } },
57
+ "stages": {
58
+ "type": "array",
59
+ "minItems": 1,
60
+ "items": { "$ref": "#/$defs/stage" }
61
+ },
31
62
  "risk": { "$ref": "#/$defs/risk" },
32
63
  "global": { "$ref": "#/$defs/global" },
33
- "outcomes": { "type": "array", "items": { "$ref": "#/$defs/outcome" }, "minItems": 1 },
64
+ "outcomes": {
65
+ "type": "array",
66
+ "items": { "$ref": "#/$defs/outcome" },
67
+ "minItems": 1
68
+ },
34
69
  "outcome_files": { "$ref": "#/$defs/nonEmptyStrings" }
35
70
  },
36
71
  "oneOf": [
@@ -40,32 +75,218 @@
40
75
  "$defs": {
41
76
  "key": { "type": "string", "pattern": "^[a-z0-9][a-z0-9-]*$" },
42
77
  "designFactKey": { "type": "string", "pattern": "^[a-z0-9][a-z0-9._-]*$" },
43
- "designFactRefs": { "type": "array", "items": { "$ref": "#/$defs/designFactKey" }, "uniqueItems": true },
78
+ "designFactRefs": {
79
+ "type": "array",
80
+ "items": { "$ref": "#/$defs/designFactKey" },
81
+ "uniqueItems": true
82
+ },
83
+ "semanticRef": {
84
+ "type": "string",
85
+ "pattern": "^[a-z0-9][a-z0-9._:-]*$"
86
+ },
87
+ "semanticFactManifestRef": {
88
+ "type": "object",
89
+ "additionalProperties": false,
90
+ "required": ["key", "source_path", "sha256"],
91
+ "properties": {
92
+ "key": { "$ref": "#/$defs/semanticRef" },
93
+ "source_path": { "$ref": "#/$defs/nonEmpty" },
94
+ "sha256": { "$ref": "#/$defs/sha256" }
95
+ }
96
+ },
97
+ "semanticFactBindings": {
98
+ "type": "object",
99
+ "additionalProperties": false,
100
+ "required": ["manifest_ref", "facts", "proofs"],
101
+ "properties": {
102
+ "manifest_ref": { "$ref": "#/$defs/semanticRef" },
103
+ "facts": {
104
+ "type": "array",
105
+ "minItems": 1,
106
+ "items": {
107
+ "type": "object",
108
+ "additionalProperties": false,
109
+ "required": ["fact_ref", "claim_ref", "applicability_ref"],
110
+ "properties": {
111
+ "fact_ref": { "$ref": "#/$defs/semanticRef" },
112
+ "claim_ref": { "$ref": "#/$defs/semanticRef" },
113
+ "applicability_ref": { "$ref": "#/$defs/semanticRef" }
114
+ }
115
+ }
116
+ },
117
+ "proofs": {
118
+ "type": "array",
119
+ "minItems": 1,
120
+ "items": {
121
+ "oneOf": [
122
+ {
123
+ "type": "object",
124
+ "additionalProperties": false,
125
+ "required": [
126
+ "proof_ref",
127
+ "fact_ref",
128
+ "method",
129
+ "proof_surface",
130
+ "evidence_capabilities",
131
+ "authority",
132
+ "check_ref",
133
+ "assertion_ref"
134
+ ],
135
+ "properties": {
136
+ "proof_ref": { "$ref": "#/$defs/semanticRef" },
137
+ "fact_ref": { "$ref": "#/$defs/semanticRef" },
138
+ "method": { "$ref": "#/$defs/semanticRef" },
139
+ "proof_surface": { "$ref": "#/$defs/proofSurface" },
140
+ "evidence_capabilities": {
141
+ "type": "array",
142
+ "minItems": 1,
143
+ "uniqueItems": true,
144
+ "items": { "$ref": "#/$defs/evidenceCapability" }
145
+ },
146
+ "authority": { "const": "machine" },
147
+ "check_ref": { "$ref": "#/$defs/semanticRef" },
148
+ "assertion_ref": { "$ref": "#/$defs/semanticRef" }
149
+ }
150
+ },
151
+ {
152
+ "type": "object",
153
+ "additionalProperties": false,
154
+ "required": [
155
+ "proof_ref",
156
+ "fact_ref",
157
+ "method",
158
+ "proof_surface",
159
+ "evidence_capabilities",
160
+ "authority",
161
+ "confirmation_ref"
162
+ ],
163
+ "properties": {
164
+ "proof_ref": { "$ref": "#/$defs/semanticRef" },
165
+ "fact_ref": { "$ref": "#/$defs/semanticRef" },
166
+ "method": { "$ref": "#/$defs/semanticRef" },
167
+ "proof_surface": { "$ref": "#/$defs/proofSurface" },
168
+ "evidence_capabilities": {
169
+ "type": "array",
170
+ "minItems": 1,
171
+ "uniqueItems": true,
172
+ "items": { "$ref": "#/$defs/evidenceCapability" }
173
+ },
174
+ "authority": { "const": "external_confirmation" },
175
+ "confirmation_ref": { "$ref": "#/$defs/semanticRef" }
176
+ }
177
+ }
178
+ ]
179
+ }
180
+ }
181
+ }
182
+ },
183
+ "sha256": { "type": "string", "pattern": "^[a-f0-9]{64}$" },
44
184
  "nonEmpty": { "type": "string", "minLength": 1 },
45
- "nonEmptyStrings": { "type": "array", "items": { "$ref": "#/$defs/nonEmpty" } },
46
- "executionTargetCapability": { "enum": ["browser-runtime", "native-runtime", "desktop-runtime", "service-runtime", "process-runtime", "external-runtime", "cold-start", "production-root", "pointer-input", "keyboard-input", "touch-input", "viewport-control", "pixel-density-observation", "safe-area-observation", "motion-observation", "reduced-motion", "color-scheme-control", "text-scale-control", "assistive-technology", "screen-reader", "physical-device", "device-orientation", "sensor-input", "camera-input", "haptic-output", "thermal-observation", "power-mode-control", "persistent-storage", "network-boundary"] },
185
+ "nonEmptyStrings": {
186
+ "type": "array",
187
+ "items": { "$ref": "#/$defs/nonEmpty" }
188
+ },
189
+ "executionTargetCapability": {
190
+ "enum": [
191
+ "browser-runtime",
192
+ "native-runtime",
193
+ "desktop-runtime",
194
+ "service-runtime",
195
+ "process-runtime",
196
+ "external-runtime",
197
+ "cold-start",
198
+ "production-root",
199
+ "pointer-input",
200
+ "keyboard-input",
201
+ "touch-input",
202
+ "viewport-control",
203
+ "pixel-density-observation",
204
+ "safe-area-observation",
205
+ "motion-observation",
206
+ "reduced-motion",
207
+ "color-scheme-control",
208
+ "text-scale-control",
209
+ "localization-control",
210
+ "rtl-control",
211
+ "assistive-technology",
212
+ "screen-reader",
213
+ "physical-device",
214
+ "device-orientation",
215
+ "sensor-input",
216
+ "camera-input",
217
+ "haptic-output",
218
+ "audio-output",
219
+ "reduced-transparency",
220
+ "increased-contrast",
221
+ "bold-text-control",
222
+ "button-shapes-control",
223
+ "system-ui-observation",
224
+ "ime-control",
225
+ "permission-control",
226
+ "network-state-control",
227
+ "lifecycle-control",
228
+ "window-state-control",
229
+ "fold-state-control",
230
+ "thermal-observation",
231
+ "power-mode-control",
232
+ "persistent-storage",
233
+ "network-boundary"
234
+ ]
235
+ },
47
236
  "targetProfile": {
48
237
  "type": "object",
49
238
  "additionalProperties": false,
50
- "required": ["key", "description", "required_state", "required_target_refs"],
239
+ "required": [
240
+ "key",
241
+ "description",
242
+ "required_state",
243
+ "required_target_refs"
244
+ ],
51
245
  "properties": {
52
246
  "key": { "$ref": "#/$defs/key" },
53
247
  "description": { "$ref": "#/$defs/nonEmpty" },
54
- "required_state": { "enum": ["implementation_complete", "target_profile_usable", "production_release_ready"] },
248
+ "required_state": {
249
+ "enum": [
250
+ "implementation_complete",
251
+ "target_profile_usable",
252
+ "production_release_ready"
253
+ ]
254
+ },
55
255
  "required_target_refs": { "$ref": "#/$defs/keys" }
56
256
  }
57
257
  },
58
258
  "executionTarget": {
59
259
  "type": "object",
60
260
  "additionalProperties": false,
61
- "required": ["key", "description", "role", "runtime_family", "root_entrypoint", "capabilities"],
261
+ "required": [
262
+ "key",
263
+ "description",
264
+ "role",
265
+ "runtime_family",
266
+ "root_entrypoint",
267
+ "capabilities"
268
+ ],
62
269
  "properties": {
63
270
  "key": { "$ref": "#/$defs/key" },
64
271
  "description": { "$ref": "#/$defs/nonEmpty" },
65
272
  "role": { "enum": ["product", "support", "observer"] },
66
- "runtime_family": { "enum": ["browser", "native", "desktop", "service", "process", "external"] },
273
+ "runtime_family": {
274
+ "enum": [
275
+ "browser",
276
+ "native",
277
+ "desktop",
278
+ "service",
279
+ "process",
280
+ "external"
281
+ ]
282
+ },
67
283
  "root_entrypoint": { "$ref": "#/$defs/nonEmpty" },
68
- "capabilities": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/executionTargetCapability" } }
284
+ "capabilities": {
285
+ "type": "array",
286
+ "minItems": 1,
287
+ "uniqueItems": true,
288
+ "items": { "$ref": "#/$defs/executionTargetCapability" }
289
+ }
69
290
  }
70
291
  },
71
292
  "stage": {
@@ -83,7 +304,10 @@
83
304
  "type": "object",
84
305
  "additionalProperties": false,
85
306
  "required": ["key", "statement"],
86
- "properties": { "key": { "$ref": "#/$defs/key" }, "statement": { "$ref": "#/$defs/nonEmpty" } }
307
+ "properties": {
308
+ "key": { "$ref": "#/$defs/key" },
309
+ "statement": { "$ref": "#/$defs/nonEmpty" }
310
+ }
87
311
  },
88
312
  "applicableStatement": {
89
313
  "type": "object",
@@ -92,27 +316,72 @@
92
316
  "properties": {
93
317
  "key": { "$ref": "#/$defs/key" },
94
318
  "statement": { "$ref": "#/$defs/nonEmpty" },
95
- "applicability_refs": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/key" } }
319
+ "applicability_refs": {
320
+ "type": "array",
321
+ "minItems": 1,
322
+ "uniqueItems": true,
323
+ "items": { "$ref": "#/$defs/key" }
324
+ }
96
325
  }
97
326
  },
98
327
  "claimApplicability": {
99
328
  "type": "object",
100
329
  "additionalProperties": false,
101
- "required": ["key", "target_ref", "journey_role", "dimensions", "given_refs", "when_refs"],
330
+ "required": [
331
+ "key",
332
+ "target_ref",
333
+ "journey_role",
334
+ "dimensions",
335
+ "given_refs",
336
+ "when_refs"
337
+ ],
102
338
  "properties": {
103
339
  "key": { "$ref": "#/$defs/key" },
104
340
  "target_ref": { "$ref": "#/$defs/key" },
105
- "journey_role": { "enum": ["success", "degradation", "recovery", "stage_gate", "conformance"] },
106
- "dimensions": { "type": "array", "minItems": 1, "items": { "type": "object", "additionalProperties": false, "required": ["key", "value"], "properties": { "key": { "$ref": "#/$defs/key" }, "value": { "$ref": "#/$defs/key" } } } },
107
- "given_refs": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/key" } },
108
- "when_refs": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/key" } }
341
+ "journey_role": {
342
+ "enum": [
343
+ "success",
344
+ "degradation",
345
+ "recovery",
346
+ "stage_gate",
347
+ "conformance"
348
+ ]
349
+ },
350
+ "dimensions": {
351
+ "type": "array",
352
+ "minItems": 1,
353
+ "items": {
354
+ "type": "object",
355
+ "additionalProperties": false,
356
+ "required": ["key", "value"],
357
+ "properties": {
358
+ "key": { "$ref": "#/$defs/semanticRef" },
359
+ "value": { "$ref": "#/$defs/semanticRef" }
360
+ }
361
+ }
362
+ },
363
+ "given_refs": {
364
+ "type": "array",
365
+ "minItems": 1,
366
+ "uniqueItems": true,
367
+ "items": { "$ref": "#/$defs/key" }
368
+ },
369
+ "when_refs": {
370
+ "type": "array",
371
+ "minItems": 1,
372
+ "uniqueItems": true,
373
+ "items": { "$ref": "#/$defs/key" }
374
+ }
109
375
  }
110
376
  },
111
377
  "keyedPath": {
112
378
  "type": "object",
113
379
  "additionalProperties": false,
114
380
  "required": ["key", "path"],
115
- "properties": { "key": { "$ref": "#/$defs/key" }, "path": { "$ref": "#/$defs/nonEmpty" } }
381
+ "properties": {
382
+ "key": { "$ref": "#/$defs/key" },
383
+ "path": { "$ref": "#/$defs/nonEmpty" }
384
+ }
116
385
  },
117
386
  "sourceClaim": {
118
387
  "type": "object",
@@ -124,10 +393,54 @@
124
393
  "statement": { "$ref": "#/$defs/nonEmpty" },
125
394
  "disposition": {
126
395
  "oneOf": [
127
- { "type": "object", "additionalProperties": false, "required": ["type", "refs"], "properties": { "type": { "enum": ["claim", "global_constraint", "risk_fact", "external_confirmation"] }, "refs": { "$ref": "#/$defs/nonEmptyStrings" } } },
128
- { "type": "object", "additionalProperties": false, "required": ["type", "refs"], "properties": { "type": { "const": "acceptance" }, "refs": { "type": "array", "minItems": 1, "maxItems": 1, "items": { "$ref": "#/$defs/nonEmpty" } } } },
129
- { "type": "object", "additionalProperties": false, "required": ["type", "ref"], "properties": { "type": { "const": "outcome_result" }, "ref": { "$ref": "#/$defs/nonEmpty" } } },
130
- { "type": "object", "additionalProperties": false, "required": ["type", "reason"], "properties": { "type": { "const": "decision_required" }, "reason": { "$ref": "#/$defs/nonEmpty" } } }
396
+ {
397
+ "type": "object",
398
+ "additionalProperties": false,
399
+ "required": ["type", "refs"],
400
+ "properties": {
401
+ "type": {
402
+ "enum": [
403
+ "claim",
404
+ "global_constraint",
405
+ "risk_fact",
406
+ "external_confirmation"
407
+ ]
408
+ },
409
+ "refs": { "$ref": "#/$defs/nonEmptyStrings" }
410
+ }
411
+ },
412
+ {
413
+ "type": "object",
414
+ "additionalProperties": false,
415
+ "required": ["type", "refs"],
416
+ "properties": {
417
+ "type": { "const": "acceptance" },
418
+ "refs": {
419
+ "type": "array",
420
+ "minItems": 1,
421
+ "maxItems": 1,
422
+ "items": { "$ref": "#/$defs/nonEmpty" }
423
+ }
424
+ }
425
+ },
426
+ {
427
+ "type": "object",
428
+ "additionalProperties": false,
429
+ "required": ["type", "ref"],
430
+ "properties": {
431
+ "type": { "const": "outcome_result" },
432
+ "ref": { "$ref": "#/$defs/nonEmpty" }
433
+ }
434
+ },
435
+ {
436
+ "type": "object",
437
+ "additionalProperties": false,
438
+ "required": ["type", "reason"],
439
+ "properties": {
440
+ "type": { "const": "decision_required" },
441
+ "reason": { "$ref": "#/$defs/nonEmpty" }
442
+ }
443
+ }
131
444
  ]
132
445
  }
133
446
  }
@@ -137,39 +450,91 @@
137
450
  "additionalProperties": false,
138
451
  "required": ["facts"],
139
452
  "properties": {
140
- "requested_level": { "enum": ["auto", "standard", "strict"], "default": "auto" },
453
+ "requested_level": {
454
+ "enum": ["auto", "standard", "strict"],
455
+ "default": "auto"
456
+ },
141
457
  "facts": {
142
458
  "type": "object",
143
459
  "additionalProperties": false,
144
460
  "properties": {
145
- "public_api_or_schema_change": { "$ref": "#/$defs/keys", "default": [] },
461
+ "public_api_or_schema_change": {
462
+ "$ref": "#/$defs/keys",
463
+ "default": []
464
+ },
146
465
  "persistent_data_change": { "$ref": "#/$defs/keys", "default": [] },
147
466
  "data_migration": { "$ref": "#/$defs/keys", "default": [] },
148
- "security_boundary_change": { "$ref": "#/$defs/keys", "default": [] },
149
- "permission_boundary_change": { "$ref": "#/$defs/keys", "default": [] },
150
- "irreversible_external_effect": { "$ref": "#/$defs/keys", "default": [] },
467
+ "security_boundary_change": {
468
+ "$ref": "#/$defs/keys",
469
+ "default": []
470
+ },
471
+ "permission_boundary_change": {
472
+ "$ref": "#/$defs/keys",
473
+ "default": []
474
+ },
475
+ "irreversible_external_effect": {
476
+ "$ref": "#/$defs/keys",
477
+ "default": []
478
+ },
151
479
  "critical_user_path": { "$ref": "#/$defs/keys", "default": [] },
152
- "full_population_operation": { "$ref": "#/$defs/keys", "default": [] },
153
- "multi_repository_change": { "$ref": "#/$defs/keys", "default": [] },
480
+ "full_population_operation": {
481
+ "$ref": "#/$defs/keys",
482
+ "default": []
483
+ },
484
+ "multi_repository_change": {
485
+ "$ref": "#/$defs/keys",
486
+ "default": []
487
+ },
154
488
  "weak_observability": { "$ref": "#/$defs/keys", "default": [] }
155
489
  }
156
490
  }
157
491
  }
158
492
  },
159
- "keys": { "type": "array", "items": { "$ref": "#/$defs/key" }, "uniqueItems": true },
493
+ "keys": {
494
+ "type": "array",
495
+ "items": { "$ref": "#/$defs/key" },
496
+ "uniqueItems": true
497
+ },
160
498
  "global": {
161
499
  "type": "object",
162
500
  "additionalProperties": false,
163
501
  "properties": {
164
- "applicability": { "type": "array", "items": { "$ref": "#/$defs/claimApplicability" }, "default": [] },
165
- "product": { "type": "object", "additionalProperties": false, "properties": { "non_goals": { "type": "array", "items": { "$ref": "#/$defs/applicableStatement" }, "default": [] } }, "default": {} },
502
+ "applicability": {
503
+ "type": "array",
504
+ "items": { "$ref": "#/$defs/claimApplicability" },
505
+ "default": []
506
+ },
507
+ "product": {
508
+ "type": "object",
509
+ "additionalProperties": false,
510
+ "properties": {
511
+ "non_goals": {
512
+ "type": "array",
513
+ "items": { "$ref": "#/$defs/applicableStatement" },
514
+ "default": []
515
+ }
516
+ },
517
+ "default": {}
518
+ },
166
519
  "technical": {
167
520
  "type": "object",
168
521
  "additionalProperties": false,
169
522
  "properties": {
170
- "constraints": { "type": "array", "items": { "$ref": "#/$defs/applicableStatement" }, "default": [] },
171
- "forbidden_paths": { "type": "array", "items": { "$ref": "#/$defs/keyedPath" }, "default": [] },
172
- "forbidden_shortcuts": { "type": "array", "items": { "$ref": "#/$defs/applicableStatement" }, "default": [] }
523
+ "constraints": {
524
+ "type": "array",
525
+ "items": { "$ref": "#/$defs/applicableStatement" },
526
+ "default": []
527
+ },
528
+ "forbidden_paths": {
529
+ "type": "array",
530
+ "items": { "$ref": "#/$defs/keyedPath" },
531
+ "default": []
532
+ },
533
+ "forbidden_shortcuts": {
534
+ "type": "array",
535
+ "items": { "$ref": "#/$defs/applicableStatement" },
536
+ "default": []
537
+ }
173
538
  },
174
539
  "default": {}
175
540
  },
@@ -177,9 +542,53 @@
177
542
  "type": "object",
178
543
  "additionalProperties": false,
179
544
  "properties": {
180
- "checks": { "type": "array", "items": { "$ref": "#/$defs/check" }, "default": [] },
181
- "counterfactual_controls": { "type": "array", "items": { "$ref": "#/$defs/globalCounterfactual" }, "default": [] },
182
- "external_confirmations": { "type": "array", "items": { "type": "object", "additionalProperties": false, "required": ["key", "description", "owner", "kind", "impact_claims", "blocks_target"], "properties": { "key": { "$ref": "#/$defs/key" }, "description": { "$ref": "#/$defs/nonEmpty" }, "owner": { "$ref": "#/$defs/nonEmpty" }, "kind": { "enum": ["functional_prerequisite", "field_validation", "production_release_gate", "commercial_activation", "expert_authority"] }, "impact_claims": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/nonEmpty" } }, "blocks_target": { "type": "boolean" } } }, "default": [] }
545
+ "checks": {
546
+ "type": "array",
547
+ "items": { "$ref": "#/$defs/check" },
548
+ "default": []
549
+ },
550
+ "counterfactual_controls": {
551
+ "type": "array",
552
+ "items": { "$ref": "#/$defs/globalCounterfactual" },
553
+ "default": []
554
+ },
555
+ "external_confirmations": {
556
+ "type": "array",
557
+ "items": {
558
+ "type": "object",
559
+ "additionalProperties": false,
560
+ "required": [
561
+ "key",
562
+ "description",
563
+ "owner",
564
+ "kind",
565
+ "impact_claims",
566
+ "blocks_target"
567
+ ],
568
+ "properties": {
569
+ "key": { "$ref": "#/$defs/key" },
570
+ "description": { "$ref": "#/$defs/nonEmpty" },
571
+ "owner": { "$ref": "#/$defs/nonEmpty" },
572
+ "kind": {
573
+ "enum": [
574
+ "functional_prerequisite",
575
+ "field_validation",
576
+ "production_release_gate",
577
+ "commercial_activation",
578
+ "expert_authority"
579
+ ]
580
+ },
581
+ "impact_claims": {
582
+ "type": "array",
583
+ "minItems": 1,
584
+ "uniqueItems": true,
585
+ "items": { "$ref": "#/$defs/nonEmpty" }
586
+ },
587
+ "blocks_target": { "type": "boolean" }
588
+ }
589
+ },
590
+ "default": []
591
+ }
183
592
  },
184
593
  "default": {}
185
594
  }
@@ -188,13 +597,29 @@
188
597
  "outcome": {
189
598
  "type": "object",
190
599
  "additionalProperties": false,
191
- "required": ["key", "title", "stage", "applicability", "product", "technical", "acceptance"],
600
+ "required": [
601
+ "key",
602
+ "title",
603
+ "stage",
604
+ "applicability",
605
+ "semantic_fact_bindings",
606
+ "product",
607
+ "technical",
608
+ "acceptance"
609
+ ],
192
610
  "properties": {
193
611
  "key": { "$ref": "#/$defs/key" },
194
612
  "title": { "$ref": "#/$defs/nonEmpty" },
195
613
  "stage": { "$ref": "#/$defs/key" },
196
614
  "depends_on": { "$ref": "#/$defs/keys", "default": [] },
197
- "applicability": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/claimApplicability" } },
615
+ "applicability": {
616
+ "type": "array",
617
+ "minItems": 1,
618
+ "items": { "$ref": "#/$defs/claimApplicability" }
619
+ },
620
+ "semantic_fact_bindings": {
621
+ "$ref": "#/$defs/semanticFactBindings"
622
+ },
198
623
  "product": { "$ref": "#/$defs/product" },
199
624
  "technical": { "$ref": "#/$defs/technical" },
200
625
  "acceptance": { "$ref": "#/$defs/acceptance" }
@@ -203,73 +628,317 @@
203
628
  "product": {
204
629
  "type": "object",
205
630
  "additionalProperties": false,
206
- "required": ["observable_result", "result_applicability_refs", "success_path_required", "degradation_path_required", "owner", "control_relation_closure"],
631
+ "required": [
632
+ "observable_result",
633
+ "result_applicability_refs",
634
+ "success_path_required",
635
+ "degradation_path_required",
636
+ "owner",
637
+ "control_relation_closure"
638
+ ],
207
639
  "properties": {
208
640
  "observable_result": { "$ref": "#/$defs/nonEmpty" },
209
- "result_applicability_refs": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/key" } },
641
+ "result_applicability_refs": {
642
+ "type": "array",
643
+ "minItems": 1,
644
+ "uniqueItems": true,
645
+ "items": { "$ref": "#/$defs/key" }
646
+ },
210
647
  "success_path_required": { "type": "boolean" },
211
648
  "degradation_path_required": { "type": "boolean" },
212
- "owner": { "type": "object", "additionalProperties": false, "required": ["label", "context_refs", "path_globs"], "properties": { "label": { "$ref": "#/$defs/nonEmpty" }, "context_refs": { "$ref": "#/$defs/nonEmptyStrings" }, "path_globs": { "$ref": "#/$defs/nonEmptyStrings" } } },
213
- "requirements": { "type": "array", "items": { "$ref": "#/$defs/requirement" }, "default": [] },
649
+ "owner": {
650
+ "type": "object",
651
+ "additionalProperties": false,
652
+ "required": ["label", "context_refs", "path_globs"],
653
+ "properties": {
654
+ "label": { "$ref": "#/$defs/nonEmpty" },
655
+ "context_refs": { "$ref": "#/$defs/nonEmptyStrings" },
656
+ "path_globs": { "$ref": "#/$defs/nonEmptyStrings" }
657
+ }
658
+ },
659
+ "requirements": {
660
+ "type": "array",
661
+ "items": { "$ref": "#/$defs/requirement" },
662
+ "default": []
663
+ },
214
664
  "owner_surfaces": { "$ref": "#/$defs/nonEmptyStrings", "default": [] },
215
- "controls": { "type": "array", "items": { "$ref": "#/$defs/control" }, "default": [] },
216
- "control_relation_closure": { "$ref": "#/$defs/controlRelationClosure" },
217
- "control_relations": { "type": "array", "items": { "$ref": "#/$defs/controlRelation" }, "default": [] },
218
- "surface_bindings": { "type": "array", "items": { "$ref": "#/$defs/surfaceBinding" }, "default": [] },
219
- "non_completing_outcomes": { "type": "array", "items": { "$ref": "#/$defs/applicableStatement" }, "default": [] }
665
+ "controls": {
666
+ "type": "array",
667
+ "items": { "$ref": "#/$defs/control" },
668
+ "default": []
669
+ },
670
+ "control_relation_closure": {
671
+ "$ref": "#/$defs/controlRelationClosure"
672
+ },
673
+ "control_relations": {
674
+ "type": "array",
675
+ "items": { "$ref": "#/$defs/controlRelation" },
676
+ "default": []
677
+ },
678
+ "surface_bindings": {
679
+ "type": "array",
680
+ "items": { "$ref": "#/$defs/surfaceBinding" },
681
+ "default": []
682
+ },
683
+ "non_completing_outcomes": {
684
+ "type": "array",
685
+ "items": { "$ref": "#/$defs/applicableStatement" },
686
+ "default": []
687
+ }
220
688
  },
221
689
  "allOf": [
222
690
  {
223
- "if": { "required": ["controls"], "properties": { "controls": { "minItems": 1 } } },
224
- "then": { "required": ["surface_bindings"], "properties": { "surface_bindings": { "minItems": 1 } } }
691
+ "if": {
692
+ "required": ["controls"],
693
+ "properties": { "controls": { "minItems": 1 } }
694
+ },
695
+ "then": {
696
+ "required": ["surface_bindings"],
697
+ "properties": { "surface_bindings": { "minItems": 1 } }
698
+ }
225
699
  }
226
700
  ]
227
701
  },
228
702
  "requirement": {
229
703
  "type": "object",
230
704
  "additionalProperties": false,
231
- "required": ["key", "statement", "required_proof_surfaces", "applicability_refs"],
232
- "properties": { "key": { "$ref": "#/$defs/key" }, "statement": { "$ref": "#/$defs/nonEmpty" }, "required_proof_surfaces": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/proofSurface" } }, "applicability_refs": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/key" } } }
705
+ "required": [
706
+ "key",
707
+ "statement",
708
+ "required_proof_surfaces",
709
+ "applicability_refs"
710
+ ],
711
+ "properties": {
712
+ "key": { "$ref": "#/$defs/key" },
713
+ "statement": { "$ref": "#/$defs/nonEmpty" },
714
+ "required_proof_surfaces": {
715
+ "type": "array",
716
+ "minItems": 1,
717
+ "uniqueItems": true,
718
+ "items": { "$ref": "#/$defs/proofSurface" }
719
+ },
720
+ "applicability_refs": {
721
+ "type": "array",
722
+ "minItems": 1,
723
+ "uniqueItems": true,
724
+ "items": { "$ref": "#/$defs/key" }
725
+ }
726
+ }
233
727
  },
234
728
  "control": {
235
729
  "type": "object",
236
730
  "additionalProperties": false,
237
731
  "required": ["key", "field_coverage"],
238
- "properties": { "key": { "$ref": "#/$defs/key" }, "surface": { "type": "string", "default": "" }, "region": { "type": "string", "default": "" }, "location": { "type": "string", "default": "" }, "control_type": { "type": "string", "default": "" }, "label_content": { "type": "string", "default": "" }, "user_task": { "type": "string", "default": "" }, "visibility": { "type": "string", "default": "" }, "availability": { "type": "string", "default": "" }, "trigger": { "type": "string", "default": "" }, "input": { "type": "string", "default": "" }, "validation": { "type": "string", "default": "" }, "default_value": { "type": "string", "default": "" }, "interaction": { "type": "string", "default": "" }, "navigation_result": { "type": "string", "default": "" }, "loading_state": { "type": "string", "default": "" }, "empty_state": { "type": "string", "default": "" }, "success_state": { "type": "string", "default": "" }, "failure_state": { "type": "string", "default": "" }, "recovery": { "type": "string", "default": "" }, "permission": { "type": "string", "default": "" }, "feedback": { "type": "string", "default": "" }, "accessibility": { "type": "string", "default": "" }, "field_coverage": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/controlFieldCoverage" } } }
732
+ "properties": {
733
+ "key": { "$ref": "#/$defs/key" },
734
+ "surface": { "type": "string", "default": "" },
735
+ "region": { "type": "string", "default": "" },
736
+ "location": { "type": "string", "default": "" },
737
+ "control_type": { "type": "string", "default": "" },
738
+ "label_content": { "type": "string", "default": "" },
739
+ "user_task": { "type": "string", "default": "" },
740
+ "visibility": { "type": "string", "default": "" },
741
+ "availability": { "type": "string", "default": "" },
742
+ "trigger": { "type": "string", "default": "" },
743
+ "input": { "type": "string", "default": "" },
744
+ "validation": { "type": "string", "default": "" },
745
+ "default_value": { "type": "string", "default": "" },
746
+ "interaction": { "type": "string", "default": "" },
747
+ "navigation_result": { "type": "string", "default": "" },
748
+ "loading_state": { "type": "string", "default": "" },
749
+ "empty_state": { "type": "string", "default": "" },
750
+ "success_state": { "type": "string", "default": "" },
751
+ "failure_state": { "type": "string", "default": "" },
752
+ "recovery": { "type": "string", "default": "" },
753
+ "permission": { "type": "string", "default": "" },
754
+ "feedback": { "type": "string", "default": "" },
755
+ "accessibility": { "type": "string", "default": "" },
756
+ "field_coverage": {
757
+ "type": "array",
758
+ "minItems": 1,
759
+ "items": { "$ref": "#/$defs/controlFieldCoverage" }
760
+ }
761
+ }
239
762
  },
240
763
  "controlField": {
241
- "enum": ["surface", "region", "location", "control_type", "label_content", "user_task", "visibility", "availability", "trigger", "input", "validation", "default_value", "interaction", "navigation_result", "loading_state", "empty_state", "success_state", "failure_state", "recovery", "permission", "feedback", "accessibility"]
764
+ "enum": [
765
+ "surface",
766
+ "region",
767
+ "location",
768
+ "control_type",
769
+ "label_content",
770
+ "user_task",
771
+ "visibility",
772
+ "availability",
773
+ "trigger",
774
+ "input",
775
+ "validation",
776
+ "default_value",
777
+ "interaction",
778
+ "navigation_result",
779
+ "loading_state",
780
+ "empty_state",
781
+ "success_state",
782
+ "failure_state",
783
+ "recovery",
784
+ "permission",
785
+ "feedback",
786
+ "accessibility"
787
+ ]
242
788
  },
243
789
  "controlFieldCoverage": {
244
790
  "oneOf": [
245
- { "type": "object", "additionalProperties": false, "required": ["fields", "state", "applicability_refs"], "properties": { "fields": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/controlField" } }, "state": { "const": "specified" }, "applicability_refs": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/key" } } } },
246
- { "type": "object", "additionalProperties": false, "required": ["fields", "state", "statement", "applicability_refs"], "properties": { "fields": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/controlField" } }, "state": { "const": "not_applicable" }, "statement": { "$ref": "#/$defs/nonEmpty" }, "applicability_refs": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/key" } } } },
247
- { "type": "object", "additionalProperties": false, "required": ["fields", "state", "statement"], "properties": { "fields": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/controlField" } }, "state": { "const": "unresolved" }, "statement": { "$ref": "#/$defs/nonEmpty" }, "applicability_refs": { "type": "array", "maxItems": 0 } } }
791
+ {
792
+ "type": "object",
793
+ "additionalProperties": false,
794
+ "required": ["fields", "state", "applicability_refs"],
795
+ "properties": {
796
+ "fields": {
797
+ "type": "array",
798
+ "minItems": 1,
799
+ "uniqueItems": true,
800
+ "items": { "$ref": "#/$defs/controlField" }
801
+ },
802
+ "state": { "const": "specified" },
803
+ "applicability_refs": {
804
+ "type": "array",
805
+ "minItems": 1,
806
+ "uniqueItems": true,
807
+ "items": { "$ref": "#/$defs/key" }
808
+ }
809
+ }
810
+ },
811
+ {
812
+ "type": "object",
813
+ "additionalProperties": false,
814
+ "required": ["fields", "state", "statement", "applicability_refs"],
815
+ "properties": {
816
+ "fields": {
817
+ "type": "array",
818
+ "minItems": 1,
819
+ "uniqueItems": true,
820
+ "items": { "$ref": "#/$defs/controlField" }
821
+ },
822
+ "state": { "const": "not_applicable" },
823
+ "statement": { "$ref": "#/$defs/nonEmpty" },
824
+ "applicability_refs": {
825
+ "type": "array",
826
+ "minItems": 1,
827
+ "uniqueItems": true,
828
+ "items": { "$ref": "#/$defs/key" }
829
+ }
830
+ }
831
+ },
832
+ {
833
+ "type": "object",
834
+ "additionalProperties": false,
835
+ "required": ["fields", "state", "statement"],
836
+ "properties": {
837
+ "fields": {
838
+ "type": "array",
839
+ "minItems": 1,
840
+ "uniqueItems": true,
841
+ "items": { "$ref": "#/$defs/controlField" }
842
+ },
843
+ "state": { "const": "unresolved" },
844
+ "statement": { "$ref": "#/$defs/nonEmpty" },
845
+ "applicability_refs": { "type": "array", "maxItems": 0 }
846
+ }
847
+ }
248
848
  ]
249
849
  },
250
850
  "controlRelationClosure": {
251
851
  "oneOf": [
252
- { "type": "object", "additionalProperties": false, "required": ["state", "statement", "applicability_refs"], "properties": { "state": { "const": "specified" }, "statement": { "$ref": "#/$defs/nonEmpty" }, "applicability_refs": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/key" } } } },
253
- { "type": "object", "additionalProperties": false, "required": ["state", "statement", "applicability_refs"], "properties": { "state": { "const": "not_applicable" }, "statement": { "$ref": "#/$defs/nonEmpty" }, "applicability_refs": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/key" } } } },
254
- { "type": "object", "additionalProperties": false, "required": ["state", "statement"], "properties": { "state": { "const": "unresolved" }, "statement": { "$ref": "#/$defs/nonEmpty" }, "applicability_refs": { "type": "array", "maxItems": 0 } } }
852
+ {
853
+ "type": "object",
854
+ "additionalProperties": false,
855
+ "required": ["state", "statement", "applicability_refs"],
856
+ "properties": {
857
+ "state": { "const": "specified" },
858
+ "statement": { "$ref": "#/$defs/nonEmpty" },
859
+ "applicability_refs": {
860
+ "type": "array",
861
+ "minItems": 1,
862
+ "uniqueItems": true,
863
+ "items": { "$ref": "#/$defs/key" }
864
+ }
865
+ }
866
+ },
867
+ {
868
+ "type": "object",
869
+ "additionalProperties": false,
870
+ "required": ["state", "statement", "applicability_refs"],
871
+ "properties": {
872
+ "state": { "const": "not_applicable" },
873
+ "statement": { "$ref": "#/$defs/nonEmpty" },
874
+ "applicability_refs": {
875
+ "type": "array",
876
+ "minItems": 1,
877
+ "uniqueItems": true,
878
+ "items": { "$ref": "#/$defs/key" }
879
+ }
880
+ }
881
+ },
882
+ {
883
+ "type": "object",
884
+ "additionalProperties": false,
885
+ "required": ["state", "statement"],
886
+ "properties": {
887
+ "state": { "const": "unresolved" },
888
+ "statement": { "$ref": "#/$defs/nonEmpty" },
889
+ "applicability_refs": { "type": "array", "maxItems": 0 }
890
+ }
891
+ }
255
892
  ]
256
893
  },
257
894
  "controlRelation": {
258
895
  "type": "object",
259
896
  "additionalProperties": false,
260
- "required": ["key", "statement", "control_refs", "required_proof_surfaces", "applicability_refs"],
897
+ "required": [
898
+ "key",
899
+ "statement",
900
+ "control_refs",
901
+ "required_proof_surfaces",
902
+ "applicability_refs"
903
+ ],
261
904
  "properties": {
262
905
  "key": { "$ref": "#/$defs/key" },
263
906
  "statement": { "$ref": "#/$defs/nonEmpty" },
264
- "control_refs": { "type": "array", "minItems": 2, "uniqueItems": true, "items": { "$ref": "#/$defs/key" } },
265
- "required_proof_surfaces": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/proofSurface" } },
266
- "applicability_refs": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/key" } }
907
+ "control_refs": {
908
+ "type": "array",
909
+ "minItems": 2,
910
+ "uniqueItems": true,
911
+ "items": { "$ref": "#/$defs/key" }
912
+ },
913
+ "required_proof_surfaces": {
914
+ "type": "array",
915
+ "minItems": 1,
916
+ "uniqueItems": true,
917
+ "items": { "$ref": "#/$defs/proofSurface" }
918
+ },
919
+ "applicability_refs": {
920
+ "type": "array",
921
+ "minItems": 1,
922
+ "uniqueItems": true,
923
+ "items": { "$ref": "#/$defs/key" }
924
+ }
267
925
  }
268
926
  },
269
927
  "surfaceBinding": {
270
928
  "type": "object",
271
929
  "additionalProperties": false,
272
- "required": ["key", "surface_ref", "target_ref", "control_refs", "route_binding_ref", "component_binding_refs", "root_journey_check_ref", "entry_action_ref", "design_targets", "acceptance_blockers"],
930
+ "required": [
931
+ "key",
932
+ "surface_ref",
933
+ "target_ref",
934
+ "control_refs",
935
+ "route_binding_ref",
936
+ "component_binding_refs",
937
+ "root_journey_check_ref",
938
+ "entry_action_ref",
939
+ "design_targets",
940
+ "acceptance_blockers"
941
+ ],
273
942
  "properties": {
274
943
  "key": { "$ref": "#/$defs/key" },
275
944
  "surface_ref": { "$ref": "#/$defs/nonEmpty" },
@@ -279,14 +948,31 @@
279
948
  "component_binding_refs": { "$ref": "#/$defs/keys" },
280
949
  "root_journey_check_ref": { "$ref": "#/$defs/key" },
281
950
  "entry_action_ref": { "$ref": "#/$defs/key" },
282
- "design_targets": { "type": "array", "items": { "$ref": "#/$defs/designTarget" } },
283
- "acceptance_blockers": { "type": "array", "items": { "$ref": "#/$defs/designAcceptanceBlocker" } }
951
+ "design_targets": {
952
+ "type": "array",
953
+ "items": { "$ref": "#/$defs/designTarget" }
954
+ },
955
+ "acceptance_blockers": {
956
+ "type": "array",
957
+ "items": { "$ref": "#/$defs/designAcceptanceBlocker" }
958
+ }
284
959
  }
285
960
  },
286
961
  "designTarget": {
287
962
  "type": "object",
288
963
  "additionalProperties": false,
289
- "required": ["key", "interpretation", "source_paths", "condition_keys", "claim_refs", "conformance_check_ref", "conformance_assertion_ref", "verification_method_bindings", "actual_artifact_path", "comparison_artifact_path"],
964
+ "required": [
965
+ "key",
966
+ "interpretation",
967
+ "source_paths",
968
+ "condition_keys",
969
+ "claim_refs",
970
+ "conformance_check_ref",
971
+ "conformance_assertion_ref",
972
+ "verification_method_bindings",
973
+ "actual_artifact_path",
974
+ "comparison_artifact_path"
975
+ ],
290
976
  "properties": {
291
977
  "key": { "$ref": "#/$defs/key" },
292
978
  "interpretation": { "enum": ["exact_target", "constraint"] },
@@ -306,7 +992,32 @@
306
992
  "properties": {
307
993
  "method": { "$ref": "#/$defs/designVerificationMethod" },
308
994
  "assertion_ref": { "$ref": "#/$defs/key" },
309
- "evidence_artifacts": { "type": "array", "minItems": 1, "items": { "type": "object", "additionalProperties": false, "required": ["condition_key", "path", "observation_path", "fact_refs"], "properties": { "condition_key": { "$ref": "#/$defs/key" }, "path": { "$ref": "#/$defs/nonEmpty" }, "observation_path": { "$ref": "#/$defs/nonEmpty" }, "fact_refs": { "$ref": "#/$defs/designFactRefs" } } } }
995
+ "evidence_artifacts": {
996
+ "type": "array",
997
+ "minItems": 1,
998
+ "items": {
999
+ "type": "object",
1000
+ "additionalProperties": false,
1001
+ "required": [
1002
+ "condition_key",
1003
+ "path",
1004
+ "observation_path",
1005
+ "fact_refs",
1006
+ "fact_expectations"
1007
+ ],
1008
+ "properties": {
1009
+ "condition_key": { "$ref": "#/$defs/key" },
1010
+ "path": { "$ref": "#/$defs/nonEmpty" },
1011
+ "observation_path": { "$ref": "#/$defs/nonEmpty" },
1012
+ "fact_refs": { "$ref": "#/$defs/designFactRefs" },
1013
+ "fact_expectations": {
1014
+ "type": "array",
1015
+ "minItems": 1,
1016
+ "items": { "$ref": "#/$defs/designFactExpectation" }
1017
+ }
1018
+ }
1019
+ }
1020
+ }
310
1021
  }
311
1022
  }
312
1023
  },
@@ -314,17 +1025,146 @@
314
1025
  "comparison_artifact_path": { "$ref": "#/$defs/nonEmpty" }
315
1026
  }
316
1027
  },
1028
+ "designTypedLocator": {
1029
+ "type": "object",
1030
+ "additionalProperties": false,
1031
+ "required": ["resource_ref", "kind", "value"],
1032
+ "properties": {
1033
+ "resource_ref": { "$ref": "#/$defs/designFactKey" },
1034
+ "kind": {
1035
+ "enum": [
1036
+ "html_selector",
1037
+ "html_inner_html",
1038
+ "markdown_anchor",
1039
+ "json_pointer",
1040
+ "css_selector",
1041
+ "css_custom_property",
1042
+ "html_attribute",
1043
+ "css_declaration",
1044
+ "javascript_export",
1045
+ "svg_selector",
1046
+ "svg_inner_xml",
1047
+ "svg_attribute",
1048
+ "whole_resource"
1049
+ ]
1050
+ },
1051
+ "value": { "$ref": "#/$defs/nonEmpty" }
1052
+ }
1053
+ },
1054
+ "designLocatedDigest": {
1055
+ "type": "object",
1056
+ "additionalProperties": false,
1057
+ "required": ["locator", "sha256"],
1058
+ "properties": {
1059
+ "locator": { "$ref": "#/$defs/designTypedLocator" },
1060
+ "sha256": { "$ref": "#/$defs/sha256" }
1061
+ }
1062
+ },
1063
+ "designFactExpectation": {
1064
+ "type": "object",
1065
+ "additionalProperties": false,
1066
+ "required": [
1067
+ "fact_ref",
1068
+ "subject_ref",
1069
+ "variation_ref",
1070
+ "property_ref",
1071
+ "observation_sensitivity",
1072
+ "expected",
1073
+ "comparison",
1074
+ "oracle",
1075
+ "environment"
1076
+ ],
1077
+ "properties": {
1078
+ "fact_ref": { "$ref": "#/$defs/designFactKey" },
1079
+ "subject_ref": { "$ref": "#/$defs/designFactKey" },
1080
+ "variation_ref": { "$ref": "#/$defs/designFactKey" },
1081
+ "property_ref": { "$ref": "#/$defs/designFactKey" },
1082
+ "observation_sensitivity": { "enum": ["plain", "protected"] },
1083
+ "expected": { "$ref": "#/$defs/designLocatedDigest" },
1084
+ "comparison": {
1085
+ "type": "object",
1086
+ "additionalProperties": false,
1087
+ "required": ["comparator", "mode", "parameters", "tolerance", "mask"],
1088
+ "properties": {
1089
+ "comparator": {
1090
+ "type": "string",
1091
+ "pattern": "^(?:exact_value|numeric_delta|geometry_delta|pixel_diff|token_resolution|content_equal|state_equal|trace_equal|timeline_equal|reflow_equal|semantic_equal|asset_equal|custom\\.[a-z0-9][a-z0-9._-]*)$"
1092
+ },
1093
+ "mode": { "enum": ["exact", "tolerance"] },
1094
+ "parameters": { "$ref": "#/$defs/designLocatedDigest" },
1095
+ "tolerance": {
1096
+ "oneOf": [
1097
+ { "type": "null" },
1098
+ { "$ref": "#/$defs/designLocatedDigest" }
1099
+ ]
1100
+ },
1101
+ "mask": {
1102
+ "oneOf": [
1103
+ { "type": "null" },
1104
+ { "$ref": "#/$defs/designLocatedDigest" }
1105
+ ]
1106
+ }
1107
+ }
1108
+ },
1109
+ "oracle": {
1110
+ "type": "object",
1111
+ "additionalProperties": false,
1112
+ "required": ["key", "trust", "identity", "version", "sha256"],
1113
+ "properties": {
1114
+ "key": { "$ref": "#/$defs/designFactKey" },
1115
+ "trust": { "enum": ["frozen_executable", "named_external_tcb"] },
1116
+ "identity": { "$ref": "#/$defs/nonEmpty" },
1117
+ "version": { "$ref": "#/$defs/nonEmpty" },
1118
+ "sha256": {
1119
+ "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/sha256" }]
1120
+ }
1121
+ }
1122
+ },
1123
+ "environment": {
1124
+ "type": "object",
1125
+ "additionalProperties": false,
1126
+ "required": ["key", "identity", "definition"],
1127
+ "properties": {
1128
+ "key": { "$ref": "#/$defs/designFactKey" },
1129
+ "identity": { "$ref": "#/$defs/nonEmpty" },
1130
+ "definition": { "$ref": "#/$defs/designLocatedDigest" }
1131
+ }
1132
+ }
1133
+ }
1134
+ },
317
1135
  "designAcceptanceBlocker": {
318
1136
  "type": "object",
319
1137
  "additionalProperties": false,
320
- "required": ["key", "status", "refs", "source_item_refs", "verification_methods", "required_capabilities", "rationale"],
1138
+ "required": [
1139
+ "key",
1140
+ "status",
1141
+ "refs",
1142
+ "source_item_refs",
1143
+ "verification_methods",
1144
+ "required_capabilities",
1145
+ "rationale"
1146
+ ],
321
1147
  "properties": {
322
1148
  "key": { "$ref": "#/$defs/key" },
323
1149
  "status": { "enum": ["machine_claim", "external_confirmation"] },
324
- "refs": { "type": "array", "uniqueItems": true, "items": { "$ref": "#/$defs/nonEmpty" } },
1150
+ "refs": {
1151
+ "type": "array",
1152
+ "uniqueItems": true,
1153
+ "items": { "$ref": "#/$defs/nonEmpty" }
1154
+ },
325
1155
  "source_item_refs": { "$ref": "#/$defs/nonEmptyStrings" },
326
- "verification_methods": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/designVerificationMethod" } },
327
- "required_capabilities": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/executionTargetCapability" } },
1156
+ "verification_methods": {
1157
+ "type": "array",
1158
+ "minItems": 1,
1159
+ "uniqueItems": true,
1160
+ "items": { "$ref": "#/$defs/designVerificationMethod" }
1161
+ },
1162
+ "required_capabilities": {
1163
+ "type": "array",
1164
+ "minItems": 1,
1165
+ "uniqueItems": true,
1166
+ "items": { "$ref": "#/$defs/executionTargetCapability" }
1167
+ },
328
1168
  "rationale": { "$ref": "#/$defs/nonEmpty" }
329
1169
  }
330
1170
  },
@@ -340,6 +1180,14 @@
340
1180
  "responsive_reflow",
341
1181
  "input_method",
342
1182
  "accessibility_semantics",
1183
+ "accessibility_navigation",
1184
+ "accessibility_visual",
1185
+ "gesture_trace",
1186
+ "scroll_navigation",
1187
+ "localization",
1188
+ "system_ui",
1189
+ "haptic_feedback",
1190
+ "sound_feedback",
343
1191
  "asset_integrity"
344
1192
  ]
345
1193
  },
@@ -348,33 +1196,92 @@
348
1196
  "additionalProperties": false,
349
1197
  "required": ["expected_change_paths"],
350
1198
  "properties": {
351
- "obligations": { "type": "array", "items": { "$ref": "#/$defs/obligation" }, "default": [] },
1199
+ "obligations": {
1200
+ "type": "array",
1201
+ "items": { "$ref": "#/$defs/obligation" },
1202
+ "default": []
1203
+ },
352
1204
  "expected_change_paths": { "$ref": "#/$defs/nonEmptyStrings" },
353
- "allowed_support_paths": { "$ref": "#/$defs/nonEmptyStrings", "default": [] },
1205
+ "allowed_support_paths": {
1206
+ "$ref": "#/$defs/nonEmptyStrings",
1207
+ "default": []
1208
+ },
354
1209
  "forbidden_paths": { "$ref": "#/$defs/nonEmptyStrings", "default": [] },
355
- "forbidden_shortcuts": { "type": "array", "items": { "$ref": "#/$defs/applicableStatement" }, "default": [] },
356
- "bindings": { "type": "array", "items": { "$ref": "#/$defs/binding" }, "default": [] },
357
- "rollback_and_recovery": { "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/rollback" }], "default": null }
1210
+ "forbidden_shortcuts": {
1211
+ "type": "array",
1212
+ "items": { "$ref": "#/$defs/applicableStatement" },
1213
+ "default": []
1214
+ },
1215
+ "bindings": {
1216
+ "type": "array",
1217
+ "items": { "$ref": "#/$defs/binding" },
1218
+ "default": []
1219
+ },
1220
+ "rollback_and_recovery": {
1221
+ "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/rollback" }],
1222
+ "default": null
1223
+ }
358
1224
  }
359
1225
  },
360
1226
  "obligation": {
361
1227
  "type": "object",
362
1228
  "additionalProperties": false,
363
- "required": ["key", "statement", "required_proof_surfaces", "applicability_refs"],
364
- "properties": { "key": { "$ref": "#/$defs/key" }, "statement": { "$ref": "#/$defs/nonEmpty" }, "required_proof_surfaces": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/proofSurface" } }, "applicability_refs": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/key" } } }
1229
+ "required": [
1230
+ "key",
1231
+ "statement",
1232
+ "required_proof_surfaces",
1233
+ "applicability_refs"
1234
+ ],
1235
+ "properties": {
1236
+ "key": { "$ref": "#/$defs/key" },
1237
+ "statement": { "$ref": "#/$defs/nonEmpty" },
1238
+ "required_proof_surfaces": {
1239
+ "type": "array",
1240
+ "minItems": 1,
1241
+ "uniqueItems": true,
1242
+ "items": { "$ref": "#/$defs/proofSurface" }
1243
+ },
1244
+ "applicability_refs": {
1245
+ "type": "array",
1246
+ "minItems": 1,
1247
+ "uniqueItems": true,
1248
+ "items": { "$ref": "#/$defs/key" }
1249
+ }
1250
+ }
1251
+ },
1252
+ "proofSurface": {
1253
+ "enum": [
1254
+ "ui_browser",
1255
+ "runtime_behavior",
1256
+ "api_contract",
1257
+ "data_state",
1258
+ "security_boundary",
1259
+ "population_coverage",
1260
+ "implementation_structure"
1261
+ ]
365
1262
  },
366
- "proofSurface": { "enum": ["ui_browser", "runtime_behavior", "api_contract", "data_state", "security_boundary", "population_coverage", "implementation_structure"] },
367
1263
  "binding": {
368
1264
  "type": "object",
369
1265
  "additionalProperties": false,
370
1266
  "required": ["key", "kind", "target", "carrier_paths"],
371
- "properties": { "key": { "$ref": "#/$defs/key" }, "kind": { "enum": ["file", "path_glob", "verified"] }, "target": { "$ref": "#/$defs/nonEmpty" }, "carrier_paths": { "$ref": "#/$defs/nonEmptyStrings" }, "existence": { "enum": ["existing", "planned"] }, "verification_check_key": { "$ref": "#/$defs/key" } }
1267
+ "properties": {
1268
+ "key": { "$ref": "#/$defs/key" },
1269
+ "kind": { "enum": ["file", "path_glob", "verified"] },
1270
+ "target": { "$ref": "#/$defs/nonEmpty" },
1271
+ "carrier_paths": { "$ref": "#/$defs/nonEmptyStrings" },
1272
+ "existence": { "enum": ["existing", "planned"] },
1273
+ "verification_check_key": { "$ref": "#/$defs/key" }
1274
+ }
372
1275
  },
373
1276
  "rollback": {
374
1277
  "type": "object",
375
1278
  "additionalProperties": false,
376
1279
  "required": ["rollback", "recovery", "verification_check_keys"],
377
- "properties": { "rollback": { "$ref": "#/$defs/nonEmpty" }, "recovery": { "$ref": "#/$defs/nonEmpty" }, "verification_check_keys": { "$ref": "#/$defs/keys" } }
1280
+ "properties": {
1281
+ "rollback": { "$ref": "#/$defs/nonEmpty" },
1282
+ "recovery": { "$ref": "#/$defs/nonEmpty" },
1283
+ "verification_check_keys": { "$ref": "#/$defs/keys" }
1284
+ }
378
1285
  },
379
1286
  "acceptance": {
380
1287
  "type": "object",
@@ -382,28 +1289,79 @@
382
1289
  "required": ["checks"],
383
1290
  "properties": {
384
1291
  "checks": { "type": "array", "items": { "$ref": "#/$defs/check" } },
385
- "population": { "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/population" }], "default": null },
386
- "counterfactual_controls": { "type": "array", "items": { "$ref": "#/$defs/counterfactual" }, "default": [] }
1292
+ "population": {
1293
+ "oneOf": [{ "type": "null" }, { "$ref": "#/$defs/population" }],
1294
+ "default": null
1295
+ },
1296
+ "counterfactual_controls": {
1297
+ "type": "array",
1298
+ "items": { "$ref": "#/$defs/counterfactual" },
1299
+ "default": []
1300
+ }
387
1301
  }
388
1302
  },
389
1303
  "check": {
390
1304
  "type": "object",
391
1305
  "additionalProperties": false,
392
- "required": ["key", "journey_roles", "execution_target", "scenario", "proof_surface", "runner", "verification_inputs"],
1306
+ "required": [
1307
+ "key",
1308
+ "journey_roles",
1309
+ "execution_target",
1310
+ "scenario",
1311
+ "proof_surface",
1312
+ "runner",
1313
+ "verification_inputs"
1314
+ ],
393
1315
  "properties": {
394
1316
  "key": { "$ref": "#/$defs/key" },
395
- "journey_roles": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "enum": ["success", "degradation", "recovery", "stage_gate", "conformance"] } },
396
- "execution_target": { "type": "object", "additionalProperties": false, "required": ["target_ref", "entrypoint"], "properties": { "target_ref": { "$ref": "#/$defs/key" }, "entrypoint": { "enum": ["root", "internal"] } } },
1317
+ "journey_roles": {
1318
+ "type": "array",
1319
+ "minItems": 1,
1320
+ "uniqueItems": true,
1321
+ "items": {
1322
+ "enum": [
1323
+ "success",
1324
+ "degradation",
1325
+ "recovery",
1326
+ "stage_gate",
1327
+ "conformance"
1328
+ ]
1329
+ }
1330
+ },
1331
+ "execution_target": {
1332
+ "type": "object",
1333
+ "additionalProperties": false,
1334
+ "required": ["target_ref", "entrypoint"],
1335
+ "properties": {
1336
+ "target_ref": { "$ref": "#/$defs/key" },
1337
+ "entrypoint": { "enum": ["root", "internal"] }
1338
+ }
1339
+ },
397
1340
  "scenario": { "$ref": "#/$defs/scenario" },
398
1341
  "proof_surface": { "$ref": "#/$defs/proofSurface" },
399
1342
  "runner": { "$ref": "#/$defs/runner" },
400
1343
  "verification_inputs": { "$ref": "#/$defs/nonEmptyStrings" },
401
1344
  "input_paths": { "$ref": "#/$defs/nonEmptyStrings", "default": [] },
402
- "expected_output_paths": { "$ref": "#/$defs/nonEmptyStrings", "default": [] },
1345
+ "expected_output_paths": {
1346
+ "$ref": "#/$defs/nonEmptyStrings",
1347
+ "default": []
1348
+ },
403
1349
  "artifact_globs": { "$ref": "#/$defs/nonEmptyStrings", "default": [] },
404
- "positive_assertions": { "type": "array", "items": { "$ref": "#/$defs/assertion" }, "default": [] },
405
- "negative_assertions": { "type": "array", "items": { "$ref": "#/$defs/assertion" }, "default": [] },
406
- "environment_requirements": { "type": "array", "items": { "$ref": "#/$defs/environment" }, "default": [] }
1350
+ "positive_assertions": {
1351
+ "type": "array",
1352
+ "items": { "$ref": "#/$defs/assertion" },
1353
+ "default": []
1354
+ },
1355
+ "negative_assertions": {
1356
+ "type": "array",
1357
+ "items": { "$ref": "#/$defs/assertion" },
1358
+ "default": []
1359
+ },
1360
+ "environment_requirements": {
1361
+ "type": "array",
1362
+ "items": { "$ref": "#/$defs/environment" },
1363
+ "default": []
1364
+ }
407
1365
  }
408
1366
  },
409
1367
  "runner": {
@@ -411,28 +1369,73 @@
411
1369
  "additionalProperties": false,
412
1370
  "required": ["type", "target", "effect"],
413
1371
  "properties": {
414
- "type": { "enum": ["package_script", "project_binary", "node_oracle", "playwright_test"] },
1372
+ "type": {
1373
+ "enum": [
1374
+ "package_script",
1375
+ "project_binary",
1376
+ "node_oracle",
1377
+ "playwright_test"
1378
+ ]
1379
+ },
415
1380
  "target": { "$ref": "#/$defs/nonEmpty" },
416
1381
  "argv": { "$ref": "#/$defs/nonEmptyStrings", "default": [] },
417
1382
  "cwd": { "$ref": "#/$defs/nonEmpty", "default": "." },
418
- "timeout_ms": { "type": "integer", "minimum": 100, "maximum": 3600000, "default": 30000 },
1383
+ "timeout_ms": {
1384
+ "type": "integer",
1385
+ "minimum": 100,
1386
+ "maximum": 3600000,
1387
+ "default": 30000
1388
+ },
419
1389
  "effect": { "enum": ["read_only", "test_sandbox"] },
420
- "retry_policy": { "enum": ["none", "transient_once"], "default": "none" },
1390
+ "retry_policy": {
1391
+ "enum": ["none", "transient_once"],
1392
+ "default": "none"
1393
+ },
421
1394
  "idempotent": { "type": "boolean", "default": false }
422
1395
  }
423
1396
  },
424
1397
  "assertion": {
425
1398
  "type": "object",
426
1399
  "additionalProperties": false,
427
- "required": ["key", "claims", "observation", "operator", "evidence_capabilities"],
1400
+ "required": [
1401
+ "key",
1402
+ "claims",
1403
+ "observation",
1404
+ "operator",
1405
+ "evidence_capabilities"
1406
+ ],
428
1407
  "properties": {
429
1408
  "key": { "$ref": "#/$defs/key" },
430
1409
  "criterion": { "$ref": "#/$defs/nonEmpty" },
431
1410
  "claims": { "$ref": "#/$defs/nonEmptyStrings" },
432
1411
  "applicability_ref": { "$ref": "#/$defs/key" },
433
1412
  "observation": { "$ref": "#/$defs/nonEmpty" },
434
- "evidence_capabilities": { "type": "array", "minItems": 1, "uniqueItems": true, "items": { "$ref": "#/$defs/evidenceCapability" } },
435
- "operator": { "enum": ["equals", "not_equals", "contains", "not_contains", "matches", "not_matches", "greater_than", "greater_or_equal", "less_than", "less_or_equal", "truthy", "falsy", "exists", "set_equals", "subset_of", "superset_of"] },
1413
+ "evidence_capabilities": {
1414
+ "type": "array",
1415
+ "minItems": 1,
1416
+ "uniqueItems": true,
1417
+ "items": { "$ref": "#/$defs/evidenceCapability" }
1418
+ },
1419
+ "operator": {
1420
+ "enum": [
1421
+ "equals",
1422
+ "not_equals",
1423
+ "contains",
1424
+ "not_contains",
1425
+ "matches",
1426
+ "not_matches",
1427
+ "greater_than",
1428
+ "greater_or_equal",
1429
+ "less_than",
1430
+ "less_or_equal",
1431
+ "truthy",
1432
+ "falsy",
1433
+ "exists",
1434
+ "set_equals",
1435
+ "subset_of",
1436
+ "superset_of"
1437
+ ]
1438
+ },
436
1439
  "expected": true
437
1440
  },
438
1441
  "allOf": [
@@ -442,23 +1445,68 @@
442
1445
  "else": { "not": { "required": ["applicability_ref"] } }
443
1446
  },
444
1447
  {
445
- "if": { "properties": { "operator": { "enum": ["equals", "not_equals", "contains", "not_contains", "matches", "not_matches", "greater_than", "greater_or_equal", "less_than", "less_or_equal", "set_equals", "subset_of", "superset_of"] } } },
1448
+ "if": {
1449
+ "properties": {
1450
+ "operator": {
1451
+ "enum": [
1452
+ "equals",
1453
+ "not_equals",
1454
+ "contains",
1455
+ "not_contains",
1456
+ "matches",
1457
+ "not_matches",
1458
+ "greater_than",
1459
+ "greater_or_equal",
1460
+ "less_than",
1461
+ "less_or_equal",
1462
+ "set_equals",
1463
+ "subset_of",
1464
+ "superset_of"
1465
+ ]
1466
+ }
1467
+ }
1468
+ },
446
1469
  "then": { "required": ["expected"] }
447
1470
  },
448
1471
  {
449
- "if": { "properties": { "operator": { "enum": ["exists", "truthy", "falsy"] } } },
1472
+ "if": {
1473
+ "properties": {
1474
+ "operator": { "enum": ["exists", "truthy", "falsy"] }
1475
+ }
1476
+ },
450
1477
  "then": { "not": { "required": ["expected"] } }
451
1478
  },
452
1479
  {
453
- "if": { "properties": { "operator": { "enum": ["matches", "not_matches"] } } },
454
- "then": { "properties": { "expected": { "type": "string", "format": "regex" } } }
1480
+ "if": {
1481
+ "properties": { "operator": { "enum": ["matches", "not_matches"] } }
1482
+ },
1483
+ "then": {
1484
+ "properties": {
1485
+ "expected": { "type": "string", "format": "regex" }
1486
+ }
1487
+ }
455
1488
  },
456
1489
  {
457
- "if": { "properties": { "operator": { "enum": ["greater_than", "greater_or_equal", "less_than", "less_or_equal"] } } },
1490
+ "if": {
1491
+ "properties": {
1492
+ "operator": {
1493
+ "enum": [
1494
+ "greater_than",
1495
+ "greater_or_equal",
1496
+ "less_than",
1497
+ "less_or_equal"
1498
+ ]
1499
+ }
1500
+ }
1501
+ },
458
1502
  "then": { "properties": { "expected": { "type": "number" } } }
459
1503
  },
460
1504
  {
461
- "if": { "properties": { "operator": { "enum": ["set_equals", "subset_of", "superset_of"] } } },
1505
+ "if": {
1506
+ "properties": {
1507
+ "operator": { "enum": ["set_equals", "subset_of", "superset_of"] }
1508
+ }
1509
+ },
462
1510
  "then": { "properties": { "expected": { "type": "array" } } }
463
1511
  }
464
1512
  ]
@@ -468,31 +1516,72 @@
468
1516
  "additionalProperties": false,
469
1517
  "required": ["given", "when"],
470
1518
  "properties": {
471
- "given": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/keyedStatement" } },
472
- "when": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/keyedStatement" } }
1519
+ "given": {
1520
+ "type": "array",
1521
+ "minItems": 1,
1522
+ "items": { "$ref": "#/$defs/keyedStatement" }
1523
+ },
1524
+ "when": {
1525
+ "type": "array",
1526
+ "minItems": 1,
1527
+ "items": { "$ref": "#/$defs/keyedStatement" }
1528
+ }
473
1529
  }
474
1530
  },
475
- "evidenceCapability": { "enum": ["presence", "interaction_trace", "state_delta", "cross_surface_consistency", "durable_readback", "boundary_invocation", "external_side_effect", "failure_injection", "visual_render", "design_conformance", "design_method", "target_runtime", "input_variation"] },
1531
+ "evidenceCapability": {
1532
+ "enum": [
1533
+ "presence",
1534
+ "interaction_trace",
1535
+ "state_delta",
1536
+ "cross_surface_consistency",
1537
+ "durable_readback",
1538
+ "boundary_invocation",
1539
+ "external_side_effect",
1540
+ "failure_injection",
1541
+ "visual_render",
1542
+ "design_conformance",
1543
+ "design_method",
1544
+ "semantic_fact",
1545
+ "target_runtime",
1546
+ "input_variation"
1547
+ ]
1548
+ },
476
1549
  "environment": {
477
1550
  "oneOf": [
478
1551
  {
479
1552
  "type": "object",
480
1553
  "additionalProperties": false,
481
1554
  "required": ["key", "kind", "target"],
482
- "properties": { "key": { "$ref": "#/$defs/key" }, "kind": { "enum": ["executable", "file", "directory", "env_var"] }, "target": { "$ref": "#/$defs/nonEmpty" } }
1555
+ "properties": {
1556
+ "key": { "$ref": "#/$defs/key" },
1557
+ "kind": { "enum": ["executable", "file", "directory", "env_var"] },
1558
+ "target": { "$ref": "#/$defs/nonEmpty" }
1559
+ }
483
1560
  },
484
1561
  {
485
1562
  "type": "object",
486
1563
  "additionalProperties": false,
487
1564
  "required": ["key", "kind", "host", "port", "timeout_ms"],
488
- "properties": { "key": { "$ref": "#/$defs/key" }, "kind": { "const": "loopback_tcp" }, "host": { "enum": ["127.0.0.1", "::1", "localhost"] }, "port": { "type": "integer", "minimum": 1, "maximum": 65535 }, "timeout_ms": { "type": "integer", "minimum": 10, "maximum": 60000 } }
1565
+ "properties": {
1566
+ "key": { "$ref": "#/$defs/key" },
1567
+ "kind": { "const": "loopback_tcp" },
1568
+ "host": { "enum": ["127.0.0.1", "::1", "localhost"] },
1569
+ "port": { "type": "integer", "minimum": 1, "maximum": 65535 },
1570
+ "timeout_ms": { "type": "integer", "minimum": 10, "maximum": 60000 }
1571
+ }
489
1572
  }
490
1573
  ]
491
1574
  },
492
1575
  "population": {
493
1576
  "type": "object",
494
1577
  "additionalProperties": false,
495
- "required": ["check_key", "universe_binding_key", "claims", "observations", "exclusion_rules"],
1578
+ "required": [
1579
+ "check_key",
1580
+ "universe_binding_key",
1581
+ "claims",
1582
+ "observations",
1583
+ "exclusion_rules"
1584
+ ],
496
1585
  "properties": {
497
1586
  "check_key": { "$ref": "#/$defs/key" },
498
1587
  "universe_binding_key": { "$ref": "#/$defs/key" },
@@ -500,16 +1589,36 @@
500
1589
  "observations": {
501
1590
  "type": "object",
502
1591
  "additionalProperties": false,
503
- "required": ["universe_ids", "eligible_ids", "observed_ids", "excluded_items"],
504
- "properties": { "universe_ids": { "$ref": "#/$defs/nonEmpty" }, "eligible_ids": { "$ref": "#/$defs/nonEmpty" }, "observed_ids": { "$ref": "#/$defs/nonEmpty" }, "excluded_items": { "$ref": "#/$defs/nonEmpty" } }
1592
+ "required": [
1593
+ "universe_ids",
1594
+ "eligible_ids",
1595
+ "observed_ids",
1596
+ "excluded_items"
1597
+ ],
1598
+ "properties": {
1599
+ "universe_ids": { "$ref": "#/$defs/nonEmpty" },
1600
+ "eligible_ids": { "$ref": "#/$defs/nonEmpty" },
1601
+ "observed_ids": { "$ref": "#/$defs/nonEmpty" },
1602
+ "excluded_items": { "$ref": "#/$defs/nonEmpty" }
1603
+ }
505
1604
  },
506
- "exclusion_rules": { "type": "array", "items": { "$ref": "#/$defs/keyedStatement" } }
1605
+ "exclusion_rules": {
1606
+ "type": "array",
1607
+ "items": { "$ref": "#/$defs/keyedStatement" }
1608
+ }
507
1609
  }
508
1610
  },
509
1611
  "counterfactual": {
510
1612
  "type": "object",
511
1613
  "additionalProperties": false,
512
- "required": ["key", "binding_key", "claims", "check_key", "mutation", "expected_assertion_failures"],
1614
+ "required": [
1615
+ "key",
1616
+ "binding_key",
1617
+ "claims",
1618
+ "check_key",
1619
+ "mutation",
1620
+ "expected_assertion_failures"
1621
+ ],
513
1622
  "properties": {
514
1623
  "key": { "$ref": "#/$defs/key" },
515
1624
  "binding_key": { "$ref": "#/$defs/key" },
@@ -519,10 +1628,50 @@
519
1628
  "preserved_assertions": { "$ref": "#/$defs/keys", "default": [] },
520
1629
  "mutation": {
521
1630
  "oneOf": [
522
- { "type": "object", "additionalProperties": false, "required": ["type", "paths"], "properties": { "type": { "const": "remove_paths" }, "paths": { "$ref": "#/$defs/nonEmptyStrings" } } },
523
- { "type": "object", "additionalProperties": false, "required": ["type", "path", "fixture_path"], "properties": { "type": { "const": "replace_file" }, "path": { "$ref": "#/$defs/nonEmpty" }, "fixture_path": { "$ref": "#/$defs/nonEmpty" } } },
524
- { "type": "object", "additionalProperties": false, "required": ["type", "path", "pointer", "value"], "properties": { "type": { "const": "replace_json_value" }, "path": { "$ref": "#/$defs/nonEmpty" }, "pointer": { "type": "string", "pattern": "^/(?:[^~/]|~[01])+(?:/(?:[^~/]|~[01])+)*$" }, "value": true } },
525
- { "type": "object", "additionalProperties": false, "required": ["type", "path", "match", "replacement"], "properties": { "type": { "const": "replace_text" }, "path": { "$ref": "#/$defs/nonEmpty" }, "match": { "$ref": "#/$defs/nonEmpty" }, "replacement": { "type": "string" } } }
1631
+ {
1632
+ "type": "object",
1633
+ "additionalProperties": false,
1634
+ "required": ["type", "paths"],
1635
+ "properties": {
1636
+ "type": { "const": "remove_paths" },
1637
+ "paths": { "$ref": "#/$defs/nonEmptyStrings" }
1638
+ }
1639
+ },
1640
+ {
1641
+ "type": "object",
1642
+ "additionalProperties": false,
1643
+ "required": ["type", "path", "fixture_path"],
1644
+ "properties": {
1645
+ "type": { "const": "replace_file" },
1646
+ "path": { "$ref": "#/$defs/nonEmpty" },
1647
+ "fixture_path": { "$ref": "#/$defs/nonEmpty" }
1648
+ }
1649
+ },
1650
+ {
1651
+ "type": "object",
1652
+ "additionalProperties": false,
1653
+ "required": ["type", "path", "pointer", "value"],
1654
+ "properties": {
1655
+ "type": { "const": "replace_json_value" },
1656
+ "path": { "$ref": "#/$defs/nonEmpty" },
1657
+ "pointer": {
1658
+ "type": "string",
1659
+ "pattern": "^/(?:[^~/]|~[01])+(?:/(?:[^~/]|~[01])+)*$"
1660
+ },
1661
+ "value": true
1662
+ }
1663
+ },
1664
+ {
1665
+ "type": "object",
1666
+ "additionalProperties": false,
1667
+ "required": ["type", "path", "match", "replacement"],
1668
+ "properties": {
1669
+ "type": { "const": "replace_text" },
1670
+ "path": { "$ref": "#/$defs/nonEmpty" },
1671
+ "match": { "$ref": "#/$defs/nonEmpty" },
1672
+ "replacement": { "type": "string" }
1673
+ }
1674
+ }
526
1675
  ]
527
1676
  }
528
1677
  }
@@ -530,20 +1679,79 @@
530
1679
  "globalCounterfactual": {
531
1680
  "type": "object",
532
1681
  "additionalProperties": false,
533
- "required": ["key", "binding_ref", "claims", "check_key", "mutation", "expected_assertion_failures"],
1682
+ "required": [
1683
+ "key",
1684
+ "binding_ref",
1685
+ "claims",
1686
+ "check_key",
1687
+ "mutation",
1688
+ "expected_assertion_failures"
1689
+ ],
534
1690
  "properties": {
535
1691
  "key": { "$ref": "#/$defs/key" },
536
- "binding_ref": { "type": "string", "pattern": "^[a-z0-9][a-z0-9-]*\\.[a-z0-9][a-z0-9-]*$" },
537
- "claims": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/nonEmpty" } },
1692
+ "binding_ref": {
1693
+ "type": "string",
1694
+ "pattern": "^[a-z0-9][a-z0-9-]*\\.[a-z0-9][a-z0-9-]*$"
1695
+ },
1696
+ "claims": {
1697
+ "type": "array",
1698
+ "minItems": 1,
1699
+ "items": { "$ref": "#/$defs/nonEmpty" }
1700
+ },
538
1701
  "check_key": { "$ref": "#/$defs/key" },
539
- "expected_assertion_failures": { "type": "array", "minItems": 1, "items": { "$ref": "#/$defs/key" }, "uniqueItems": true },
1702
+ "expected_assertion_failures": {
1703
+ "type": "array",
1704
+ "minItems": 1,
1705
+ "items": { "$ref": "#/$defs/key" },
1706
+ "uniqueItems": true
1707
+ },
540
1708
  "preserved_assertions": { "$ref": "#/$defs/keys", "default": [] },
541
1709
  "mutation": {
542
1710
  "oneOf": [
543
- { "type": "object", "additionalProperties": false, "required": ["type", "paths"], "properties": { "type": { "const": "remove_paths" }, "paths": { "$ref": "#/$defs/nonEmptyStrings" } } },
544
- { "type": "object", "additionalProperties": false, "required": ["type", "path", "fixture_path"], "properties": { "type": { "const": "replace_file" }, "path": { "$ref": "#/$defs/nonEmpty" }, "fixture_path": { "$ref": "#/$defs/nonEmpty" } } },
545
- { "type": "object", "additionalProperties": false, "required": ["type", "path", "pointer", "value"], "properties": { "type": { "const": "replace_json_value" }, "path": { "$ref": "#/$defs/nonEmpty" }, "pointer": { "type": "string", "pattern": "^/(?:[^~/]|~[01])+(?:/(?:[^~/]|~[01])+)*$" }, "value": true } },
546
- { "type": "object", "additionalProperties": false, "required": ["type", "path", "match", "replacement"], "properties": { "type": { "const": "replace_text" }, "path": { "$ref": "#/$defs/nonEmpty" }, "match": { "$ref": "#/$defs/nonEmpty" }, "replacement": { "type": "string" } } }
1711
+ {
1712
+ "type": "object",
1713
+ "additionalProperties": false,
1714
+ "required": ["type", "paths"],
1715
+ "properties": {
1716
+ "type": { "const": "remove_paths" },
1717
+ "paths": { "$ref": "#/$defs/nonEmptyStrings" }
1718
+ }
1719
+ },
1720
+ {
1721
+ "type": "object",
1722
+ "additionalProperties": false,
1723
+ "required": ["type", "path", "fixture_path"],
1724
+ "properties": {
1725
+ "type": { "const": "replace_file" },
1726
+ "path": { "$ref": "#/$defs/nonEmpty" },
1727
+ "fixture_path": { "$ref": "#/$defs/nonEmpty" }
1728
+ }
1729
+ },
1730
+ {
1731
+ "type": "object",
1732
+ "additionalProperties": false,
1733
+ "required": ["type", "path", "pointer", "value"],
1734
+ "properties": {
1735
+ "type": { "const": "replace_json_value" },
1736
+ "path": { "$ref": "#/$defs/nonEmpty" },
1737
+ "pointer": {
1738
+ "type": "string",
1739
+ "pattern": "^/(?:[^~/]|~[01])+(?:/(?:[^~/]|~[01])+)*$"
1740
+ },
1741
+ "value": true
1742
+ }
1743
+ },
1744
+ {
1745
+ "type": "object",
1746
+ "additionalProperties": false,
1747
+ "required": ["type", "path", "match", "replacement"],
1748
+ "properties": {
1749
+ "type": { "const": "replace_text" },
1750
+ "path": { "$ref": "#/$defs/nonEmpty" },
1751
+ "match": { "$ref": "#/$defs/nonEmpty" },
1752
+ "replacement": { "type": "string" }
1753
+ }
1754
+ }
547
1755
  ]
548
1756
  }
549
1757
  }