project-tiny-context-harness 0.8.11 → 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 (272) 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 -3
  48. package/dist/index.js +2 -0
  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-policy.d.ts +2 -2
  63. package/dist/lib/design-resource-fact-types.d.ts +2 -2
  64. package/dist/lib/design-resource-handoff-bundle-draft.js +4 -2
  65. package/dist/lib/design-resource-handoff-input-types.d.ts +3 -0
  66. package/dist/lib/design-resource-handoff-parser.d.ts +2 -2
  67. package/dist/lib/design-resource-handoff-parser.js +2 -2
  68. package/dist/lib/design-resource-handoff-shape.d.ts +2 -0
  69. package/dist/lib/design-resource-handoff-shape.js +10 -0
  70. package/dist/lib/design-resource-handoff-snapshot.js +4 -0
  71. package/dist/lib/design-resource-handoff-validation.d.ts +4 -1
  72. package/dist/lib/design-resource-handoff-validation.js +11 -0
  73. package/dist/lib/design-resource-handoff-web-dependency-validation.d.ts +4 -2
  74. package/dist/lib/design-resource-symbolic-applicability-authority.d.ts +7 -0
  75. package/dist/lib/design-resource-symbolic-applicability-authority.js +19 -0
  76. package/dist/lib/design-resource-symbolic-applicability-policy.d.ts +12 -0
  77. package/dist/lib/design-resource-symbolic-applicability-policy.js +79 -0
  78. package/dist/lib/design-resource-symbolic-applicability-profiles.d.ts +8 -0
  79. package/dist/lib/design-resource-symbolic-applicability-profiles.js +55 -0
  80. package/dist/lib/design-resource-symbolic-applicability-shape.d.ts +2 -0
  81. package/dist/lib/design-resource-symbolic-applicability-shape.js +76 -0
  82. package/dist/lib/design-resource-symbolic-applicability-validation.d.ts +7 -0
  83. package/dist/lib/design-resource-symbolic-applicability-validation.js +128 -0
  84. package/dist/lib/design-resource-symbolic-compilation.d.ts +3 -0
  85. package/dist/lib/design-resource-symbolic-compilation.js +13 -0
  86. package/dist/lib/design-resource-symbolic-denotation.d.ts +3 -0
  87. package/dist/lib/design-resource-symbolic-denotation.js +167 -0
  88. package/dist/lib/design-resource-symbolic-disposition-validation.d.ts +4 -0
  89. package/dist/lib/design-resource-symbolic-disposition-validation.js +28 -0
  90. package/dist/lib/design-resource-symbolic-fact-policy.d.ts +12 -0
  91. package/dist/lib/design-resource-symbolic-fact-policy.js +12 -0
  92. package/dist/lib/design-resource-symbolic-fact-shape.d.ts +3 -0
  93. package/dist/lib/design-resource-symbolic-fact-shape.js +138 -0
  94. package/dist/lib/design-resource-symbolic-fact-types.d.ts +213 -0
  95. package/dist/lib/design-resource-symbolic-fact-types.js +1 -0
  96. package/dist/lib/design-resource-symbolic-fact-validation.d.ts +3 -0
  97. package/dist/lib/design-resource-symbolic-fact-validation.js +86 -0
  98. package/dist/lib/design-resource-symbolic-indexes.d.ts +23 -0
  99. package/dist/lib/design-resource-symbolic-indexes.js +54 -0
  100. package/dist/lib/design-resource-symbolic-manifest-shape.d.ts +3 -0
  101. package/dist/lib/design-resource-symbolic-manifest-shape.js +155 -0
  102. package/dist/lib/design-resource-symbolic-manifest-validation.d.ts +6 -0
  103. package/dist/lib/design-resource-symbolic-manifest-validation.js +132 -0
  104. package/dist/lib/design-resource-symbolic-noninterference-artifact.d.ts +33 -0
  105. package/dist/lib/design-resource-symbolic-noninterference-artifact.js +110 -0
  106. package/dist/lib/design-resource-symbolic-noninterference-equivalence.d.ts +3 -0
  107. package/dist/lib/design-resource-symbolic-noninterference-equivalence.js +77 -0
  108. package/dist/lib/design-resource-symbolic-noninterference-recompute.d.ts +4 -0
  109. package/dist/lib/design-resource-symbolic-noninterference-recompute.js +146 -0
  110. package/dist/lib/design-resource-symbolic-noninterference-scope.d.ts +7 -0
  111. package/dist/lib/design-resource-symbolic-noninterference-scope.js +49 -0
  112. package/dist/lib/design-resource-symbolic-noninterference-shape.d.ts +2 -0
  113. package/dist/lib/design-resource-symbolic-noninterference-shape.js +152 -0
  114. package/dist/lib/design-resource-symbolic-noninterference-types.d.ts +103 -0
  115. package/dist/lib/design-resource-symbolic-noninterference-types.js +1 -0
  116. package/dist/lib/design-resource-symbolic-noninterference-validation.d.ts +5 -0
  117. package/dist/lib/design-resource-symbolic-noninterference-validation.js +62 -0
  118. package/dist/lib/design-resource-symbolic-oracle-fingerprint.d.ts +1 -0
  119. package/dist/lib/design-resource-symbolic-oracle-fingerprint.js +47 -0
  120. package/dist/lib/design-resource-symbolic-predicate-shape.d.ts +6 -0
  121. package/dist/lib/design-resource-symbolic-predicate-shape.js +123 -0
  122. package/dist/lib/design-resource-symbolic-production-closure.d.ts +4 -0
  123. package/dist/lib/design-resource-symbolic-production-closure.js +144 -0
  124. package/dist/lib/design-resource-symbolic-proof-authority-validation.d.ts +10 -0
  125. package/dist/lib/design-resource-symbolic-proof-authority-validation.js +68 -0
  126. package/dist/lib/design-resource-symbolic-proof-validation.d.ts +10 -0
  127. package/dist/lib/design-resource-symbolic-proof-validation.js +89 -0
  128. package/dist/lib/design-resource-symbolic-region-validation.d.ts +19 -0
  129. package/dist/lib/design-resource-symbolic-region-validation.js +146 -0
  130. package/dist/lib/design-resource-symbolic-resource-validation.d.ts +5 -0
  131. package/dist/lib/design-resource-symbolic-resource-validation.js +90 -0
  132. package/dist/lib/design-resource-symbolic-rule-shape.d.ts +27 -0
  133. package/dist/lib/design-resource-symbolic-rule-shape.js +158 -0
  134. package/dist/lib/design-resource-symbolic-safety-validation.d.ts +6 -0
  135. package/dist/lib/design-resource-symbolic-safety-validation.js +29 -0
  136. package/dist/lib/design-resource-symbolic-source-ir-evaluation.d.ts +19 -0
  137. package/dist/lib/design-resource-symbolic-source-ir-evaluation.js +74 -0
  138. package/dist/lib/design-resource-symbolic-source-ir-evidence.d.ts +44 -0
  139. package/dist/lib/design-resource-symbolic-source-ir-evidence.js +88 -0
  140. package/dist/lib/design-resource-symbolic-source-ir-oracle.d.ts +13 -0
  141. package/dist/lib/design-resource-symbolic-source-ir-oracle.js +96 -0
  142. package/dist/lib/design-resource-symbolic-source-ir-proof.d.ts +14 -0
  143. package/dist/lib/design-resource-symbolic-source-ir-proof.js +98 -0
  144. package/dist/lib/design-resource-symbolic-source-ir-shape.d.ts +2 -0
  145. package/dist/lib/design-resource-symbolic-source-ir-shape.js +38 -0
  146. package/dist/lib/design-resource-symbolic-source-ir-types.d.ts +17 -0
  147. package/dist/lib/design-resource-symbolic-source-ir-types.js +2 -0
  148. package/dist/lib/design-resource-symbolic-static-dependency-validation.d.ts +2 -0
  149. package/dist/lib/design-resource-symbolic-static-dependency-validation.js +83 -0
  150. package/dist/lib/design-resource-symbolic-structural-closure-validation.d.ts +6 -0
  151. package/dist/lib/design-resource-symbolic-structural-closure-validation.js +79 -0
  152. package/dist/lib/design-resource-symbolic-validation-support.d.ts +29 -0
  153. package/dist/lib/design-resource-symbolic-validation-support.js +111 -0
  154. package/dist/lib/design-resource-v1-capacity-header.d.ts +8 -0
  155. package/dist/lib/design-resource-v1-capacity-header.js +231 -0
  156. package/dist/lib/design-resource-v1-capacity.d.ts +5 -0
  157. package/dist/lib/design-resource-v1-capacity.js +45 -0
  158. package/dist/lib/init.js +1 -0
  159. package/dist/lib/long-task-activation-validation.js +2 -2
  160. package/dist/lib/long-task-authority-policy.d.ts +3 -0
  161. package/dist/lib/long-task-authority-policy.js +3 -0
  162. package/dist/lib/long-task-codex-agent-profile.d.ts +42 -0
  163. package/dist/lib/long-task-codex-agent-profile.js +276 -0
  164. package/dist/lib/long-task-compact-authoring-projections.d.ts +12 -0
  165. package/dist/lib/long-task-compact-authoring-projections.js +67 -0
  166. package/dist/lib/long-task-compact-authoring.d.ts +3 -0
  167. package/dist/lib/long-task-compact-authoring.js +173 -0
  168. package/dist/lib/long-task-compact-carrier.d.ts +7 -0
  169. package/dist/lib/long-task-compact-carrier.js +132 -0
  170. package/dist/lib/long-task-compact-parser.d.ts +14 -0
  171. package/dist/lib/long-task-compact-parser.js +123 -0
  172. package/dist/lib/long-task-compact-primitives.d.ts +22 -0
  173. package/dist/lib/long-task-compact-primitives.js +132 -0
  174. package/dist/lib/long-task-compact-projections.d.ts +4 -0
  175. package/dist/lib/long-task-compact-projections.js +153 -0
  176. package/dist/lib/long-task-compact-structure-targets.d.ts +2 -0
  177. package/dist/lib/long-task-compact-structure-targets.js +90 -0
  178. package/dist/lib/long-task-counterfactual-sandbox.d.ts +1 -1
  179. package/dist/lib/long-task-counterfactual-sandbox.js +7 -5
  180. package/dist/lib/long-task-delivery-parser.d.ts +1 -0
  181. package/dist/lib/long-task-delivery-parser.js +38 -6
  182. package/dist/lib/long-task-design-resource-handoff.d.ts +2 -1
  183. package/dist/lib/long-task-design-resource-handoff.js +71 -11
  184. package/dist/lib/long-task-design-resource-method-binding.d.ts +8 -1
  185. package/dist/lib/long-task-design-resource-method-binding.js +150 -0
  186. package/dist/lib/long-task-evidence-capability-codec.js +256 -34
  187. package/dist/lib/long-task-evidence-capability-policy.js +28 -0
  188. package/dist/lib/long-task-evidence-capability-runtime.js +271 -63
  189. package/dist/lib/long-task-evidence-capability-types.d.ts +70 -2
  190. package/dist/lib/long-task-evidence-v2.d.ts +1 -1
  191. package/dist/lib/long-task-evidence-v2.js +5 -5
  192. package/dist/lib/long-task-hook-install.d.ts +19 -2
  193. package/dist/lib/long-task-hook-install.js +288 -91
  194. package/dist/lib/long-task-playwright-capability-records.d.ts +2 -0
  195. package/dist/lib/long-task-playwright-capability-records.js +74 -2
  196. package/dist/lib/long-task-runner-freeze.d.ts +1 -1
  197. package/dist/lib/long-task-runner-freeze.js +4 -2
  198. package/dist/lib/long-task-semantic-contract-types.d.ts +1 -1
  199. package/dist/lib/long-task-semantic-fact-binding-types.d.ts +8 -0
  200. package/dist/lib/long-task-semantic-fact-closure.js +4 -1
  201. package/dist/lib/long-task-semantic-fact-contract-closure.d.ts +1 -1
  202. package/dist/lib/long-task-semantic-fact-contract-closure.js +15 -3
  203. package/dist/lib/long-task-semantic-fact-contract-facts.d.ts +1 -1
  204. package/dist/lib/long-task-semantic-fact-contract-facts.js +4 -1
  205. package/dist/lib/long-task-semantic-fact-contract-proofs.d.ts +1 -1
  206. package/dist/lib/long-task-semantic-fact-contract-proofs.js +12 -3
  207. package/dist/lib/long-task-semantic-fact-evidence.d.ts +5 -1
  208. package/dist/lib/long-task-semantic-fact-evidence.js +47 -4
  209. package/dist/lib/long-task-semantic-fact-shape.js +17 -6
  210. package/dist/lib/long-task-shape-primitives.d.ts +1 -1
  211. package/dist/lib/long-task-shape-primitives.js +1 -0
  212. package/dist/lib/long-task-source-item-parser.d.ts +2 -2
  213. package/dist/lib/long-task-source-item-parser.js +20 -11
  214. package/dist/lib/long-task-ui-design-policy.js +64 -4
  215. package/dist/lib/long-task-ui-surface-shape.js +195 -0
  216. package/dist/lib/long-task-ui-surface-types.d.ts +53 -0
  217. package/dist/lib/long-task-verifier-v2.js +1 -1
  218. package/dist/lib/long-task-worker-selection.d.ts +2 -0
  219. package/dist/lib/long-task-worker-selection.js +7 -0
  220. package/dist/lib/long-task-workspace-scope.js +3 -1
  221. package/dist/lib/long-task-workspace.js +11 -1
  222. package/dist/lib/migrations.js +58 -0
  223. package/dist/lib/profiles.js +0 -1
  224. package/dist/lib/semantic-fact-compact-authoring.d.ts +2 -0
  225. package/dist/lib/semantic-fact-compact-authoring.js +160 -0
  226. package/dist/lib/semantic-fact-compact-capacity.d.ts +9 -0
  227. package/dist/lib/semantic-fact-compact-capacity.js +40 -0
  228. package/dist/lib/semantic-fact-compact-carrier.d.ts +16 -0
  229. package/dist/lib/semantic-fact-compact-carrier.js +146 -0
  230. package/dist/lib/semantic-fact-compact-parser.d.ts +17 -0
  231. package/dist/lib/semantic-fact-compact-parser.js +168 -0
  232. package/dist/lib/semantic-fact-compact-revision.d.ts +11 -0
  233. package/dist/lib/semantic-fact-compact-revision.js +64 -0
  234. package/dist/lib/semantic-fact-compact-support.d.ts +23 -0
  235. package/dist/lib/semantic-fact-compact-support.js +159 -0
  236. package/dist/lib/semantic-fact-policy-census.d.ts +1 -0
  237. package/dist/lib/semantic-fact-policy-census.js +43 -0
  238. package/dist/lib/semantic-fact-proof-shape.d.ts +1 -1
  239. package/dist/lib/semantic-fact-property-shape.d.ts +1 -1
  240. package/dist/lib/semantic-fact-source-parser.d.ts +5 -0
  241. package/dist/lib/semantic-fact-source-parser.js +47 -6
  242. package/dist/lib/structural-closure-cost.d.ts +79 -0
  243. package/dist/lib/structural-closure-cost.js +91 -0
  244. package/dist/lib/symbolic-denotation-dag-builder.d.ts +25 -0
  245. package/dist/lib/symbolic-denotation-dag-builder.js +176 -0
  246. package/dist/lib/symbolic-denotation-domain-validation.d.ts +3 -0
  247. package/dist/lib/symbolic-denotation-domain-validation.js +56 -0
  248. package/dist/lib/symbolic-denotation-engine.d.ts +32 -0
  249. package/dist/lib/symbolic-denotation-engine.js +140 -0
  250. package/dist/lib/symbolic-denotation-public.d.ts +11 -0
  251. package/dist/lib/symbolic-denotation-public.js +12 -0
  252. package/dist/lib/symbolic-denotation-runtime.d.ts +20 -0
  253. package/dist/lib/symbolic-denotation-runtime.js +90 -0
  254. package/dist/lib/symbolic-denotation-support.d.ts +11 -0
  255. package/dist/lib/symbolic-denotation-support.js +49 -0
  256. package/dist/lib/symbolic-denotation-types.d.ts +133 -0
  257. package/dist/lib/symbolic-denotation-types.js +18 -0
  258. package/dist/lib/symbolic-denotation-validation.d.ts +6 -0
  259. package/dist/lib/symbolic-denotation-validation.js +126 -0
  260. package/dist/lib/sync-engine.d.ts +1 -0
  261. package/dist/lib/sync-engine.js +4 -1
  262. package/dist/lib/upgrade.js +1 -0
  263. package/dist/long-task-hook.js +40 -1
  264. package/dist/public-types.d.ts +8 -0
  265. package/dist/public-types.js +1 -0
  266. package/dist/schemas/design-resource-symbolic-noninterference-artifact-v2.schema.json +289 -0
  267. package/dist/schemas/design-resource-symbolic-source-ir-v1.schema.json +130 -0
  268. package/dist/schemas/long-task-delivery-v2/long-task-delivery-v2.schema.json +390 -5
  269. package/migrations/README.md +15 -15
  270. package/package.json +2 -2
  271. package/source-mappings.yaml +28 -25
  272. package/assets/skills/source-plan-authoring/SKILL.md +0 -14
@@ -183,39 +183,11 @@ function decodeRecord(value, index) {
183
183
  cold_start: row.cold_start,
184
184
  };
185
185
  case "design_method":
186
- exact(row, label, [
187
- "assertion_key",
188
- "capability",
189
- "design_target_ref",
190
- "target_ref",
191
- "method",
192
- "cells",
193
- ]);
194
- return {
195
- ...base,
196
- capability,
197
- design_target_ref: key(row.design_target_ref, `${label}.design_target_ref`),
198
- target_ref: key(row.target_ref, `${label}.target_ref`),
199
- method: literal(row.method, DESIGN_RESOURCE_VERIFICATION_METHODS, `${label}.method`),
200
- cells: array(row.cells, `${label}.cells`).map((item, cellIndex) => {
201
- const cellLabel = `${label}.cells[${cellIndex}]`;
202
- const cell = record(item, cellLabel);
203
- exact(cell, cellLabel, [
204
- "condition_key",
205
- "artifact_path",
206
- "observation_artifact_path",
207
- "fact_refs",
208
- "fact_results",
209
- ]);
210
- return {
211
- condition_key: key(cell.condition_key, `${cellLabel}.condition_key`),
212
- artifact_path: nonEmpty(cell.artifact_path, `${cellLabel}.artifact_path`),
213
- observation_artifact_path: nonEmpty(cell.observation_artifact_path, `${cellLabel}.observation_artifact_path`),
214
- fact_refs: designFactRefs(cell.fact_refs, `${cellLabel}.fact_refs`),
215
- fact_results: array(cell.fact_results, `${cellLabel}.fact_results`).map((result, resultIndex) => decodeDesignFactResult(result, `${cellLabel}.fact_results[${resultIndex}]`)),
216
- };
217
- }),
218
- };
186
+ return Object.hasOwn(row, "fact_model")
187
+ ? decodeSymbolicDesignMethodEvidence(row, label, base)
188
+ : decodeGroundDesignMethodEvidence(row, label, base);
189
+ case "design_symbolic_certificate":
190
+ return decodeDesignSymbolicCertificateEvidence(row, label, base);
219
191
  case "semantic_fact":
220
192
  return decodeSemanticFactEvidence(row, label, base);
221
193
  case "input_variation":
@@ -224,6 +196,217 @@ function decodeRecord(value, index) {
224
196
  throw invalidRecord(`${label}.capability_unsupported:${capability}`);
225
197
  }
226
198
  }
199
+ function decodeGroundDesignMethodEvidence(row, label, base) {
200
+ exact(row, label, [
201
+ "assertion_key",
202
+ "capability",
203
+ "design_target_ref",
204
+ "target_ref",
205
+ "method",
206
+ "cells",
207
+ ]);
208
+ return {
209
+ ...base,
210
+ capability: "design_method",
211
+ design_target_ref: key(row.design_target_ref, `${label}.design_target_ref`),
212
+ target_ref: key(row.target_ref, `${label}.target_ref`),
213
+ method: literal(row.method, DESIGN_RESOURCE_VERIFICATION_METHODS, `${label}.method`),
214
+ cells: array(row.cells, `${label}.cells`).map((item, cellIndex) => {
215
+ const cellLabel = `${label}.cells[${cellIndex}]`;
216
+ const cell = record(item, cellLabel);
217
+ exact(cell, cellLabel, [
218
+ "condition_key",
219
+ "artifact_path",
220
+ "observation_artifact_path",
221
+ "fact_refs",
222
+ "fact_results",
223
+ ]);
224
+ return {
225
+ condition_key: key(cell.condition_key, `${cellLabel}.condition_key`),
226
+ artifact_path: nonEmpty(cell.artifact_path, `${cellLabel}.artifact_path`),
227
+ observation_artifact_path: nonEmpty(cell.observation_artifact_path, `${cellLabel}.observation_artifact_path`),
228
+ fact_refs: designFactRefs(cell.fact_refs, `${cellLabel}.fact_refs`),
229
+ fact_results: array(cell.fact_results, `${cellLabel}.fact_results`).map((result, resultIndex) => decodeDesignFactResult(result, `${cellLabel}.fact_results[${resultIndex}]`)),
230
+ };
231
+ }),
232
+ };
233
+ }
234
+ function decodeSymbolicDesignMethodEvidence(row, label, base) {
235
+ exact(row, label, [
236
+ "assertion_key",
237
+ "capability",
238
+ "fact_model",
239
+ "design_target_ref",
240
+ "target_ref",
241
+ "method",
242
+ "artifact_path",
243
+ "observation_artifact_path",
244
+ "rule_results",
245
+ ]);
246
+ return {
247
+ ...base,
248
+ capability: "design_method",
249
+ fact_model: literal(row.fact_model, ["symbolic_rules_v2"], `${label}.fact_model`),
250
+ design_target_ref: key(row.design_target_ref, `${label}.design_target_ref`),
251
+ target_ref: key(row.target_ref, `${label}.target_ref`),
252
+ method: literal(row.method, DESIGN_RESOURCE_VERIFICATION_METHODS, `${label}.method`),
253
+ artifact_path: nonEmpty(row.artifact_path, `${label}.artifact_path`),
254
+ observation_artifact_path: nonEmpty(row.observation_artifact_path, `${label}.observation_artifact_path`),
255
+ rule_results: array(row.rule_results, `${label}.rule_results`).map((item, index) => decodeDesignSymbolicRuleResult(item, `${label}.rule_results[${index}]`)),
256
+ };
257
+ }
258
+ function decodeDesignSymbolicRuleResult(value, label) {
259
+ const row = record(value, label);
260
+ exact(row, label, [
261
+ "obligation_ref",
262
+ "fact_rule_ref",
263
+ "region_sha256",
264
+ "subject_or_relation_ref",
265
+ "property_ref",
266
+ "population_ref",
267
+ "quantifier",
268
+ "actual_observation",
269
+ "actual_environment",
270
+ "observation_sensitivity",
271
+ "expected",
272
+ "proof_surface",
273
+ "observation_boundary",
274
+ "comparison",
275
+ "verdict",
276
+ "oracle",
277
+ "environment",
278
+ "protected_value_policy",
279
+ "completion_effect",
280
+ ]);
281
+ const decoded = decodeDesignFactResult({
282
+ fact_ref: row.fact_rule_ref,
283
+ subject_ref: row.subject_or_relation_ref,
284
+ variation_ref: "symbolic",
285
+ property_ref: row.property_ref,
286
+ actual_observation: row.actual_observation,
287
+ actual_environment: row.actual_environment,
288
+ expected: row.expected,
289
+ comparison: row.comparison,
290
+ verdict: row.verdict,
291
+ oracle: row.oracle,
292
+ environment: row.environment,
293
+ }, label);
294
+ const quantifier = record(row.quantifier, `${label}.quantifier`);
295
+ exact(quantifier, `${label}.quantifier`, ["kind", "minimum", "maximum"]);
296
+ return {
297
+ obligation_ref: designFactRef(row.obligation_ref, `${label}.obligation_ref`),
298
+ fact_rule_ref: decoded.fact_ref,
299
+ region_sha256: sha(row.region_sha256, `${label}.region_sha256`),
300
+ subject_or_relation_ref: decoded.subject_ref,
301
+ property_ref: decoded.property_ref,
302
+ population_ref: nullable(row.population_ref, (item) => designFactRef(item, `${label}.population_ref`)),
303
+ quantifier: {
304
+ kind: literal(quantifier.kind, [
305
+ "one",
306
+ "all",
307
+ "any",
308
+ "none",
309
+ "exactly",
310
+ "at_least",
311
+ "at_most",
312
+ "range",
313
+ ], `${label}.quantifier.kind`),
314
+ minimum: nullable(quantifier.minimum, (item) => nonnegativeInteger(item, `${label}.quantifier.minimum`)),
315
+ maximum: nullable(quantifier.maximum, (item) => nonnegativeInteger(item, `${label}.quantifier.maximum`)),
316
+ },
317
+ actual_observation: decoded.actual_observation,
318
+ actual_environment: decoded.actual_environment,
319
+ observation_sensitivity: literal(row.observation_sensitivity, ["plain", "protected"], `${label}.observation_sensitivity`),
320
+ expected: decoded.expected,
321
+ proof_surface: nonEmpty(row.proof_surface, `${label}.proof_surface`),
322
+ observation_boundary: nonEmpty(row.observation_boundary, `${label}.observation_boundary`),
323
+ comparison: decoded.comparison,
324
+ verdict: decoded.verdict,
325
+ oracle: decoded.oracle,
326
+ environment: decoded.environment,
327
+ protected_value_policy: nonEmpty(row.protected_value_policy, `${label}.protected_value_policy`),
328
+ completion_effect: nonEmpty(row.completion_effect, `${label}.completion_effect`),
329
+ };
330
+ }
331
+ function decodeDesignSymbolicCertificateEvidence(row, label, base) {
332
+ exact(row, label, [
333
+ "assertion_key",
334
+ "capability",
335
+ "design_target_ref",
336
+ "target_ref",
337
+ "artifact_path",
338
+ "artifact_sha256",
339
+ "metrics",
340
+ "certificate_results",
341
+ ]);
342
+ const metrics = record(row.metrics, `${label}.metrics`);
343
+ exact(metrics, `${label}.metrics`, [
344
+ "semantic_obligations",
345
+ "certificate_obligations",
346
+ "certificate_covered_omitted_axes",
347
+ "certificate_covered_dependency_edges",
348
+ "canonical_dag_nodes",
349
+ "canonical_partition_edges",
350
+ "canonical_bytes",
351
+ "theoretical_ground_cardinality",
352
+ ]);
353
+ return {
354
+ ...base,
355
+ capability: "design_symbolic_certificate",
356
+ design_target_ref: key(row.design_target_ref, `${label}.design_target_ref`),
357
+ target_ref: key(row.target_ref, `${label}.target_ref`),
358
+ artifact_path: nonEmpty(row.artifact_path, `${label}.artifact_path`),
359
+ artifact_sha256: sha(row.artifact_sha256, `${label}.artifact_sha256`),
360
+ metrics: {
361
+ semantic_obligations: nonnegativeInteger(metrics.semantic_obligations, `${label}.metrics.semantic_obligations`),
362
+ certificate_obligations: nonnegativeInteger(metrics.certificate_obligations, `${label}.metrics.certificate_obligations`),
363
+ certificate_covered_omitted_axes: nonnegativeInteger(metrics.certificate_covered_omitted_axes, `${label}.metrics.certificate_covered_omitted_axes`),
364
+ certificate_covered_dependency_edges: nonnegativeInteger(metrics.certificate_covered_dependency_edges, `${label}.metrics.certificate_covered_dependency_edges`),
365
+ canonical_dag_nodes: nonnegativeInteger(metrics.canonical_dag_nodes, `${label}.metrics.canonical_dag_nodes`),
366
+ canonical_partition_edges: nonnegativeInteger(metrics.canonical_partition_edges, `${label}.metrics.canonical_partition_edges`),
367
+ canonical_bytes: nonnegativeInteger(metrics.canonical_bytes, `${label}.metrics.canonical_bytes`),
368
+ theoretical_ground_cardinality: decimalCardinality(metrics.theoretical_ground_cardinality, `${label}.metrics.theoretical_ground_cardinality`),
369
+ },
370
+ certificate_results: array(row.certificate_results, `${label}.certificate_results`).map((item, index) => {
371
+ const itemLabel = `${label}.certificate_results[${index}]`;
372
+ const result = record(item, itemLabel);
373
+ exact(result, itemLabel, [
374
+ "certificate_ref",
375
+ "fact_rule_refs",
376
+ "omitted_axis_refs",
377
+ "dependency_edge_refs",
378
+ "canonical_rule_dag_sha256",
379
+ "recomputed",
380
+ "verdict",
381
+ ...[
382
+ "source_noninterference_proof_sha256",
383
+ "production_noninterference_proof_sha256",
384
+ ].filter((field) => Object.hasOwn(result, field)),
385
+ ]);
386
+ if (result.recomputed !== true)
387
+ throw invalidRecord(`${itemLabel}.recomputed`);
388
+ return {
389
+ certificate_ref: designFactRef(result.certificate_ref, `${itemLabel}.certificate_ref`),
390
+ fact_rule_refs: designFactRefs(result.fact_rule_refs, `${itemLabel}.fact_rule_refs`),
391
+ omitted_axis_refs: designFactRefs(result.omitted_axis_refs, `${itemLabel}.omitted_axis_refs`),
392
+ dependency_edge_refs: designFactRefs(result.dependency_edge_refs, `${itemLabel}.dependency_edge_refs`),
393
+ canonical_rule_dag_sha256: sha(result.canonical_rule_dag_sha256, `${itemLabel}.canonical_rule_dag_sha256`),
394
+ ...(result.source_noninterference_proof_sha256 === undefined
395
+ ? {}
396
+ : {
397
+ source_noninterference_proof_sha256: sha(result.source_noninterference_proof_sha256, `${itemLabel}.source_noninterference_proof_sha256`),
398
+ }),
399
+ ...(result.production_noninterference_proof_sha256 === undefined
400
+ ? {}
401
+ : {
402
+ production_noninterference_proof_sha256: sha(result.production_noninterference_proof_sha256, `${itemLabel}.production_noninterference_proof_sha256`),
403
+ }),
404
+ recomputed: true,
405
+ verdict: literal(result.verdict, ["passed", "failed"], `${itemLabel}.verdict`),
406
+ };
407
+ }),
408
+ };
409
+ }
227
410
  function decodeInputVariationEvidence(row, label, base) {
228
411
  exact(row, label, [
229
412
  "assertion_key",
@@ -249,7 +432,7 @@ function decodeInputVariationEvidence(row, label, base) {
249
432
  };
250
433
  }
251
434
  function decodeSemanticFactEvidence(row, label, base) {
252
- exact(row, label, [
435
+ exactOptional(row, label, [
253
436
  "assertion_key",
254
437
  "capability",
255
438
  "manifest_ref",
@@ -270,7 +453,21 @@ function decodeSemanticFactEvidence(row, label, base) {
270
453
  "oracle",
271
454
  "environment",
272
455
  "observer_results",
456
+ ], [
457
+ "fact_key",
458
+ "fact_revision_digest",
459
+ "obligation_key",
460
+ "obligation_revision_digest",
273
461
  ]);
462
+ const revisionFields = [
463
+ "fact_key",
464
+ "fact_revision_digest",
465
+ "obligation_key",
466
+ "obligation_revision_digest",
467
+ ];
468
+ const revisionFieldCount = revisionFields.filter((field) => Object.hasOwn(row, field)).length;
469
+ if (revisionFieldCount !== 0 && revisionFieldCount !== revisionFields.length)
470
+ throw invalidRecord(`${label}.revision_identity.shape`);
274
471
  const actual = record(row.actual_observation, `${label}.actual_observation`);
275
472
  exact(actual, `${label}.actual_observation`, [
276
473
  "artifact_path",
@@ -320,6 +517,14 @@ function decodeSemanticFactEvidence(row, label, base) {
320
517
  manifest_sha256: sha(row.manifest_sha256, `${label}.manifest_sha256`),
321
518
  outcome_ref: semanticFactRef(row.outcome_ref, `${label}.outcome_ref`),
322
519
  target_ref: key(row.target_ref, `${label}.target_ref`),
520
+ ...(revisionFieldCount
521
+ ? {
522
+ fact_key: semanticFactRef(row.fact_key, `${label}.fact_key`),
523
+ fact_revision_digest: sha(row.fact_revision_digest, `${label}.fact_revision_digest`),
524
+ obligation_key: semanticFactRef(row.obligation_key, `${label}.obligation_key`),
525
+ obligation_revision_digest: sha(row.obligation_revision_digest, `${label}.obligation_revision_digest`),
526
+ }
527
+ : {}),
323
528
  fact_ref: semanticFactRef(row.fact_ref, `${label}.fact_ref`),
324
529
  proof_ref: semanticFactRef(row.proof_ref, `${label}.proof_ref`),
325
530
  method: semanticFactRef(row.method, `${label}.method`),
@@ -611,6 +816,12 @@ function exact(row, label, fields) {
611
816
  Object.keys(row).some((field) => !allowed.has(field)))
612
817
  throw invalidRecord(`${label}.shape`);
613
818
  }
819
+ function exactOptional(row, label, required, optional) {
820
+ const allowed = new Set([...required, ...optional]);
821
+ if (required.some((field) => !Object.hasOwn(row, field)) ||
822
+ Object.keys(row).some((field) => !allowed.has(field)))
823
+ throw invalidRecord(`${label}.shape`);
824
+ }
614
825
  function array(value, label) {
615
826
  if (!Array.isArray(value))
616
827
  throw invalidRecord(label);
@@ -621,6 +832,17 @@ function nonEmpty(value, label) {
621
832
  throw invalidRecord(label);
622
833
  return value;
623
834
  }
835
+ function nonnegativeInteger(value, label) {
836
+ if (!Number.isSafeInteger(value) || value < 0)
837
+ throw invalidRecord(label);
838
+ return value;
839
+ }
840
+ function decimalCardinality(value, label) {
841
+ const result = nonEmpty(value, label);
842
+ if (!/^(0|[1-9][0-9]*)$/u.test(result))
843
+ throw invalidRecord(label);
844
+ return result;
845
+ }
624
846
  function key(value, label) {
625
847
  const result = nonEmpty(value, label);
626
848
  if (!/^[a-z0-9][a-z0-9-]*$/u.test(result))
@@ -45,6 +45,9 @@ function validateArtifactCapabilityDeclarations(assertion, check, label, report)
45
45
  if (assertion.evidence_capabilities.includes("design_method") &&
46
46
  !check.artifact_globs.length)
47
47
  issue(report, "design_method_artifact_required", label);
48
+ if (assertion.evidence_capabilities.includes("design_symbolic_certificate") &&
49
+ !check.artifact_globs.length)
50
+ issue(report, "design_symbolic_certificate_artifact_required", label);
48
51
  if (assertion.evidence_capabilities.includes("semantic_fact") &&
49
52
  !check.artifact_globs.length)
50
53
  issue(report, "semantic_fact_artifact_required", label);
@@ -58,6 +61,7 @@ function validateRunnerCapabilityDeclarations(assertion, check, targets, label,
58
61
  capability !== "interaction_trace" &&
59
62
  capability !== "design_conformance" &&
60
63
  capability !== "design_method" &&
64
+ capability !== "design_symbolic_certificate" &&
61
65
  capability !== "semantic_fact" &&
62
66
  capability !== "target_runtime"))
63
67
  issue(report, "playwright_evidence_capability_unsupported", label);
@@ -161,8 +165,17 @@ function validateDistinctDesignMethodArtifacts(check, records, artifactHashes, f
161
165
  const pathOwners = new Map();
162
166
  const digestOwners = new Map();
163
167
  for (const record of records) {
168
+ if (record.capability === "design_symbolic_certificate") {
169
+ addDistinctArtifact(check, findings, pathOwners, digestOwners, record.assertion_key, `symbolic-certificate:${record.design_target_ref}`, record.artifact_path, artifactHashes);
170
+ continue;
171
+ }
164
172
  if (record.capability !== "design_method")
165
173
  continue;
174
+ if ("fact_model" in record) {
175
+ addDistinctArtifact(check, findings, pathOwners, digestOwners, record.assertion_key, `symbolic-method:${record.design_target_ref}:${record.method}:observation`, record.observation_artifact_path, artifactHashes);
176
+ addDistinctArtifact(check, findings, pathOwners, digestOwners, record.assertion_key, `symbolic-method:${record.design_target_ref}:${record.method}:comparison`, record.artifact_path, artifactHashes);
177
+ continue;
178
+ }
166
179
  for (const cell of record.cells) {
167
180
  const currentOwner = `${record.method}:${cell.condition_key}`;
168
181
  const pathOwner = pathOwners.get(cell.observation_artifact_path);
@@ -181,6 +194,21 @@ function validateDistinctDesignMethodArtifacts(check, records, artifactHashes, f
181
194
  }
182
195
  }
183
196
  }
197
+ function addDistinctArtifact(check, findings, pathOwners, digestOwners, assertionKey, currentOwner, path, artifactHashes) {
198
+ const pathOwner = pathOwners.get(path);
199
+ if (pathOwner)
200
+ findings.push(reusedDesignMethodArtifactFinding(check, assertionKey, currentOwner, pathOwner, "path", path));
201
+ else
202
+ pathOwners.set(path, currentOwner);
203
+ const digest = artifactHashes[path];
204
+ if (!digest)
205
+ return;
206
+ const digestOwner = digestOwners.get(digest);
207
+ if (digestOwner)
208
+ findings.push(reusedDesignMethodArtifactFinding(check, assertionKey, currentOwner, digestOwner, "sha256", digest));
209
+ else
210
+ digestOwners.set(digest, currentOwner);
211
+ }
184
212
  function reusedDesignMethodArtifactFinding(check, assertionKey, currentOwner, previousOwner, identityKind, identity) {
185
213
  return {
186
214
  ...checkFinding(check, "design_method_evidence_reused", `Design-method evidence ${identityKind} ${identity} is reused by ${previousOwner} and ${currentOwner}.`, "Emit method-and-condition evidence whose path and current content digest are both distinct for every verification-method cell."),