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
@@ -30,6 +30,8 @@ export function validateRuntimeEvidenceRecord(check, record, artifactHashes) {
30
30
  return validateDesignConformance(check, record, artifactHashes);
31
31
  case "design_method":
32
32
  return validateDesignMethod(check, record, artifactHashes);
33
+ case "design_symbolic_certificate":
34
+ return validateDesignSymbolicCertificate(check, record, artifactHashes);
33
35
  case "semantic_fact":
34
36
  return validateSemanticFactEvidence(check, record, artifactHashes);
35
37
  case "target_runtime":
@@ -39,6 +41,11 @@ export function validateRuntimeEvidenceRecord(check, record, artifactHashes) {
39
41
  }
40
42
  }
41
43
  function validateDesignMethod(check, record, artifactHashes) {
44
+ return "fact_model" in record
45
+ ? validateSymbolicDesignMethod(check, record, artifactHashes)
46
+ : validateGroundDesignMethod(check, record, artifactHashes);
47
+ }
48
+ function validateGroundDesignMethod(check, record, artifactHashes) {
42
49
  const target = (check.design_conformance_targets ?? []).find((item) => item.key === record.design_target_ref &&
43
50
  item.verification_method_bindings.some((binding) => binding.assertion_ref === record.assertion_key &&
44
51
  binding.method === record.method));
@@ -49,6 +56,9 @@ function validateDesignMethod(check, record, artifactHashes) {
49
56
  return "target_mismatch";
50
57
  const binding = target.verification_method_bindings.find((item) => item.assertion_ref === record.assertion_key &&
51
58
  item.method === record.method);
59
+ return validateGroundDesignCells(target, binding, record, artifactHashes);
60
+ }
61
+ function validateGroundDesignCells(target, binding, record, artifactHashes) {
52
62
  if (!same([...record.cells.map((item) => item.condition_key)].sort(), [...target.condition_keys].sort()))
53
63
  return "design_method_conditions_mismatch";
54
64
  const expected = new Map(binding.evidence_artifacts.map((item) => [
@@ -62,6 +72,9 @@ function validateDesignMethod(check, record, artifactHashes) {
62
72
  ]));
63
73
  if (record.cells.length !== expected.size)
64
74
  return "design_method_cell_count_mismatch";
75
+ return validateGroundCellSet(record, expected, artifactHashes);
76
+ }
77
+ function validateGroundCellSet(record, expected, artifactHashes) {
65
78
  for (const cell of record.cells) {
66
79
  const expectedCell = expected.get(cell.condition_key);
67
80
  if (expectedCell?.artifact_path !== cell.artifact_path ||
@@ -75,68 +88,262 @@ function validateDesignMethod(check, record, artifactHashes) {
75
88
  return "design_method_artifact_missing";
76
89
  if (!artifactHashes[cell.observation_artifact_path])
77
90
  return "design_method_observation_artifact_missing";
78
- const expectations = new Map((expectedCell?.fact_expectations ?? []).map((item) => [
79
- item.fact_ref,
80
- item,
81
- ]));
82
- const actualIdentities = new Set();
83
- const comparisonIdentities = new Set();
84
- for (const result of cell.fact_results) {
85
- const expectation = expectations.get(result.fact_ref);
86
- if (!expectation)
87
- return "design_method_fact_expectation_missing";
88
- if (result.subject_ref !== expectation.subject_ref ||
89
- result.variation_ref !== expectation.variation_ref ||
90
- result.property_ref !== expectation.property_ref ||
91
- result.actual_observation.sensitivity !==
92
- expectation.observation_sensitivity)
93
- return "design_method_fact_identity_mismatch";
94
- if ((result.actual_observation.sensitivity === "plain" &&
95
- result.actual_observation.redaction !== null) ||
96
- (result.actual_observation.sensitivity === "protected" &&
97
- result.actual_observation.redaction === null))
98
- return "design_method_observation_protection_mismatch";
99
- if (canonicalJson(result.expected) !== canonicalJson(expectation.expected))
100
- return "design_method_expected_value_mismatch";
101
- if (result.comparison.comparator !== expectation.comparison.comparator ||
102
- result.comparison.mode !== expectation.comparison.mode ||
103
- canonicalJson(result.comparison.parameters) !==
104
- canonicalJson(expectation.comparison.parameters) ||
105
- canonicalJson(result.comparison.tolerance) !==
106
- canonicalJson(expectation.comparison.tolerance) ||
107
- canonicalJson(result.comparison.mask) !==
108
- canonicalJson(expectation.comparison.mask))
109
- return "design_method_comparison_authority_mismatch";
110
- if (canonicalJson(result.oracle) !== canonicalJson(expectation.oracle) ||
111
- canonicalJson(result.environment) !==
112
- canonicalJson(expectation.environment))
113
- return "design_method_oracle_environment_mismatch";
114
- if (result.actual_observation.artifact_path !==
115
- cell.observation_artifact_path ||
116
- result.actual_observation.artifact_sha256 !==
117
- artifactHashes[cell.observation_artifact_path])
118
- return "design_method_actual_observation_mismatch";
119
- if (result.actual_environment.artifact_path !==
120
- cell.observation_artifact_path ||
121
- result.actual_environment.artifact_sha256 !==
122
- artifactHashes[cell.observation_artifact_path] ||
123
- result.actual_environment.value_sha256 !==
124
- expectation.environment.definition.sha256)
125
- return "design_method_actual_environment_mismatch";
126
- if (result.comparison.artifact_path !== cell.artifact_path ||
127
- result.comparison.artifact_sha256 !== artifactHashes[cell.artifact_path])
128
- return "design_method_comparison_artifact_mismatch";
129
- const actualIdentity = `${result.actual_observation.artifact_path}\0${canonicalJson(result.actual_observation.locator)}`;
130
- if (actualIdentities.has(actualIdentity))
131
- return "design_method_actual_observation_reused";
132
- actualIdentities.add(actualIdentity);
133
- const comparisonIdentity = `${result.comparison.artifact_path}\0${canonicalJson(result.comparison.locator)}`;
134
- if (comparisonIdentities.has(comparisonIdentity))
135
- return "design_method_comparison_result_reused";
136
- comparisonIdentities.add(comparisonIdentity);
137
- if (result.verdict !== "passed" || result.comparison.passed !== true)
138
- return "design_method_fact_failed";
139
- }
91
+ const resultIssue = validateGroundCellResults(cell, expectedCell, artifactHashes);
92
+ if (resultIssue)
93
+ return resultIssue;
94
+ }
95
+ return null;
96
+ }
97
+ function validateGroundCellResults(cell, expectedCell, artifactHashes) {
98
+ const expectations = new Map(expectedCell.fact_expectations.map((item) => [item.fact_ref, item]));
99
+ const actualIdentities = new Set();
100
+ const comparisonIdentities = new Set();
101
+ for (const result of cell.fact_results) {
102
+ const expectation = expectations.get(result.fact_ref);
103
+ if (!expectation)
104
+ return "design_method_fact_expectation_missing";
105
+ const identityIssue = validateGroundFactIdentity(result, expectation);
106
+ if (identityIssue)
107
+ return identityIssue;
108
+ const authorityIssue = validateGroundFactAuthority(result, expectation);
109
+ if (authorityIssue)
110
+ return authorityIssue;
111
+ const artifactIssue = validateGroundFactArtifacts(result, expectation, cell, artifactHashes);
112
+ if (artifactIssue)
113
+ return artifactIssue;
114
+ const actualIdentity = `${result.actual_observation.artifact_path}\0${canonicalJson(result.actual_observation.locator)}`;
115
+ if (actualIdentities.has(actualIdentity))
116
+ return "design_method_actual_observation_reused";
117
+ actualIdentities.add(actualIdentity);
118
+ const comparisonIdentity = `${result.comparison.artifact_path}\0${canonicalJson(result.comparison.locator)}`;
119
+ if (comparisonIdentities.has(comparisonIdentity))
120
+ return "design_method_comparison_result_reused";
121
+ comparisonIdentities.add(comparisonIdentity);
122
+ if (result.verdict !== "passed" || result.comparison.passed !== true)
123
+ return "design_method_fact_failed";
124
+ }
125
+ return null;
126
+ }
127
+ function validateGroundFactIdentity(result, expectation) {
128
+ if (result.subject_ref !== expectation.subject_ref ||
129
+ result.variation_ref !== expectation.variation_ref ||
130
+ result.property_ref !== expectation.property_ref ||
131
+ result.actual_observation.sensitivity !==
132
+ expectation.observation_sensitivity)
133
+ return "design_method_fact_identity_mismatch";
134
+ if ((result.actual_observation.sensitivity === "plain" &&
135
+ result.actual_observation.redaction !== null) ||
136
+ (result.actual_observation.sensitivity === "protected" &&
137
+ result.actual_observation.redaction === null))
138
+ return "design_method_observation_protection_mismatch";
139
+ return canonicalJson(result.expected) === canonicalJson(expectation.expected)
140
+ ? null
141
+ : "design_method_expected_value_mismatch";
142
+ }
143
+ function validateGroundFactAuthority(result, expectation) {
144
+ if (result.comparison.comparator !== expectation.comparison.comparator ||
145
+ result.comparison.mode !== expectation.comparison.mode ||
146
+ canonicalJson(result.comparison.parameters) !==
147
+ canonicalJson(expectation.comparison.parameters) ||
148
+ canonicalJson(result.comparison.tolerance) !==
149
+ canonicalJson(expectation.comparison.tolerance) ||
150
+ canonicalJson(result.comparison.mask) !==
151
+ canonicalJson(expectation.comparison.mask))
152
+ return "design_method_comparison_authority_mismatch";
153
+ return canonicalJson(result.oracle) === canonicalJson(expectation.oracle) &&
154
+ canonicalJson(result.environment) === canonicalJson(expectation.environment)
155
+ ? null
156
+ : "design_method_oracle_environment_mismatch";
157
+ }
158
+ function validateGroundFactArtifacts(result, expectation, cell, artifactHashes) {
159
+ if (result.actual_observation.artifact_path !==
160
+ cell.observation_artifact_path ||
161
+ result.actual_observation.artifact_sha256 !==
162
+ artifactHashes[cell.observation_artifact_path])
163
+ return "design_method_actual_observation_mismatch";
164
+ if (result.actual_environment.artifact_path !==
165
+ cell.observation_artifact_path ||
166
+ result.actual_environment.artifact_sha256 !==
167
+ artifactHashes[cell.observation_artifact_path] ||
168
+ result.actual_environment.value_sha256 !==
169
+ expectation.environment.definition.sha256)
170
+ return "design_method_actual_environment_mismatch";
171
+ return result.comparison.artifact_path === cell.artifact_path &&
172
+ result.comparison.artifact_sha256 === artifactHashes[cell.artifact_path]
173
+ ? null
174
+ : "design_method_comparison_artifact_mismatch";
175
+ }
176
+ function validateSymbolicDesignMethod(check, record, artifactHashes) {
177
+ const target = (check.design_conformance_targets ?? []).find((item) => item.key === record.design_target_ref &&
178
+ item.fact_model === "symbolic_rules_v2" &&
179
+ (item.symbolic_method_bindings ?? []).some((binding) => binding.assertion_ref === record.assertion_key &&
180
+ binding.method === record.method));
181
+ if (!target)
182
+ return "design_symbolic_method_binding_unknown";
183
+ if (target.target_ref !== record.target_ref ||
184
+ target.target_ref !== check.execution_target.target_ref)
185
+ return "target_mismatch";
186
+ const binding = target.symbolic_method_bindings.find((item) => item.assertion_ref === record.assertion_key &&
187
+ item.method === record.method);
188
+ if (binding.artifact_path !== record.artifact_path ||
189
+ binding.observation_path !== record.observation_artifact_path)
190
+ return "design_symbolic_method_artifact_path_mismatch";
191
+ if (!artifactHashes[record.artifact_path])
192
+ return "design_symbolic_method_artifact_missing";
193
+ if (!artifactHashes[record.observation_artifact_path])
194
+ return "design_symbolic_method_observation_artifact_missing";
195
+ const expectedRefs = binding.rule_expectations
196
+ .map((item) => item.obligation_ref)
197
+ .sort();
198
+ const actualRefs = record.rule_results
199
+ .map((item) => item.obligation_ref)
200
+ .sort();
201
+ if (new Set(actualRefs).size !== actualRefs.length ||
202
+ !same(actualRefs, expectedRefs))
203
+ return "design_symbolic_method_obligations_mismatch";
204
+ return validateSymbolicRuleResults(binding, record, artifactHashes);
205
+ }
206
+ function validateSymbolicRuleResults(binding, record, artifactHashes) {
207
+ const expectations = new Map(binding.rule_expectations.map((item) => [item.obligation_ref, item]));
208
+ const actualIdentities = new Set();
209
+ const comparisonIdentities = new Set();
210
+ for (const result of record.rule_results) {
211
+ const expectation = expectations.get(result.obligation_ref);
212
+ if (!expectation)
213
+ return "design_symbolic_method_expectation_missing";
214
+ const identityIssue = validateSymbolicResultIdentity(result, expectation);
215
+ if (identityIssue)
216
+ return identityIssue;
217
+ const authorityIssue = validateSymbolicResultAuthority(result, expectation);
218
+ if (authorityIssue)
219
+ return authorityIssue;
220
+ const artifactIssue = validateSymbolicResultArtifacts(result, expectation, record, artifactHashes);
221
+ if (artifactIssue)
222
+ return artifactIssue;
223
+ const actualIdentity = `${result.actual_observation.artifact_path}\0${canonicalJson(result.actual_observation.locator)}`;
224
+ if (actualIdentities.has(actualIdentity))
225
+ return "design_symbolic_method_actual_observation_reused";
226
+ actualIdentities.add(actualIdentity);
227
+ const comparisonIdentity = `${result.comparison.artifact_path}\0${canonicalJson(result.comparison.locator)}`;
228
+ if (comparisonIdentities.has(comparisonIdentity))
229
+ return "design_symbolic_method_comparison_result_reused";
230
+ comparisonIdentities.add(comparisonIdentity);
231
+ if (result.verdict !== "passed" || result.comparison.passed !== true)
232
+ return "design_symbolic_method_obligation_failed";
233
+ }
234
+ return null;
235
+ }
236
+ function validateSymbolicResultIdentity(result, expectation) {
237
+ if (result.fact_rule_ref !== expectation.fact_rule_ref ||
238
+ result.region_sha256 !== expectation.region_sha256 ||
239
+ result.subject_or_relation_ref !== expectation.subject_or_relation_ref ||
240
+ result.property_ref !== expectation.property_ref ||
241
+ result.population_ref !== expectation.population_ref ||
242
+ canonicalJson(result.quantifier) !==
243
+ canonicalJson(expectation.quantifier) ||
244
+ result.observation_sensitivity !== expectation.observation_sensitivity)
245
+ return "design_symbolic_method_identity_mismatch";
246
+ if (result.actual_observation.sensitivity !==
247
+ expectation.observation_sensitivity ||
248
+ (result.actual_observation.sensitivity === "plain" &&
249
+ result.actual_observation.redaction !== null) ||
250
+ (result.actual_observation.sensitivity === "protected" &&
251
+ result.actual_observation.redaction === null))
252
+ return "design_symbolic_method_observation_protection_mismatch";
253
+ return canonicalJson(result.expected) === canonicalJson(expectation.expected)
254
+ ? null
255
+ : "design_symbolic_method_expected_value_mismatch";
256
+ }
257
+ function validateSymbolicResultAuthority(result, expectation) {
258
+ if (result.proof_surface !== expectation.proof_surface ||
259
+ result.observation_boundary !== expectation.observation_boundary ||
260
+ result.protected_value_policy !== expectation.protected_value_policy ||
261
+ result.completion_effect !== expectation.completion_effect)
262
+ return "design_symbolic_method_proof_denotation_mismatch";
263
+ if (result.comparison.comparator !== expectation.comparison.comparator ||
264
+ result.comparison.mode !== expectation.comparison.mode ||
265
+ canonicalJson(result.comparison.parameters) !==
266
+ canonicalJson(expectation.comparison.parameters) ||
267
+ canonicalJson(result.comparison.tolerance) !==
268
+ canonicalJson(expectation.comparison.tolerance) ||
269
+ canonicalJson(result.comparison.mask) !==
270
+ canonicalJson(expectation.comparison.mask))
271
+ return "design_symbolic_method_comparison_authority_mismatch";
272
+ return canonicalJson(result.oracle) === canonicalJson(expectation.oracle) &&
273
+ canonicalJson(result.environment) === canonicalJson(expectation.environment)
274
+ ? null
275
+ : "design_symbolic_method_oracle_environment_mismatch";
276
+ }
277
+ function validateSymbolicResultArtifacts(result, expectation, record, artifactHashes) {
278
+ if (result.actual_observation.artifact_path !==
279
+ record.observation_artifact_path ||
280
+ result.actual_observation.artifact_sha256 !==
281
+ artifactHashes[record.observation_artifact_path])
282
+ return "design_symbolic_method_actual_observation_mismatch";
283
+ if (result.actual_environment.artifact_path !==
284
+ record.observation_artifact_path ||
285
+ result.actual_environment.artifact_sha256 !==
286
+ artifactHashes[record.observation_artifact_path] ||
287
+ result.actual_environment.value_sha256 !==
288
+ expectation.environment.definition.sha256)
289
+ return "design_symbolic_method_actual_environment_mismatch";
290
+ return result.comparison.artifact_path === record.artifact_path &&
291
+ result.comparison.artifact_sha256 === artifactHashes[record.artifact_path]
292
+ ? null
293
+ : "design_symbolic_method_comparison_artifact_mismatch";
294
+ }
295
+ function validateDesignSymbolicCertificate(check, record, artifactHashes) {
296
+ const target = (check.design_conformance_targets ?? []).find((item) => item.key === record.design_target_ref &&
297
+ item.fact_model === "symbolic_rules_v2" &&
298
+ item.symbolic_certificate_binding?.assertion_ref === record.assertion_key);
299
+ if (!target)
300
+ return "design_symbolic_certificate_binding_unknown";
301
+ if (target.target_ref !== record.target_ref ||
302
+ target.target_ref !== check.execution_target.target_ref)
303
+ return "target_mismatch";
304
+ const binding = target.symbolic_certificate_binding;
305
+ if (record.artifact_path !== binding.artifact_path)
306
+ return "design_symbolic_certificate_artifact_path_mismatch";
307
+ if (artifactHashes[record.artifact_path] !== record.artifact_sha256)
308
+ return "design_symbolic_certificate_artifact_hash_mismatch";
309
+ if (canonicalJson(record.metrics) !== canonicalJson(binding.metrics))
310
+ return "design_symbolic_certificate_metrics_mismatch";
311
+ const expectedRefs = binding.expectations
312
+ .map((item) => item.certificate_ref)
313
+ .sort();
314
+ const actualRefs = record.certificate_results
315
+ .map((item) => item.certificate_ref)
316
+ .sort();
317
+ if (new Set(actualRefs).size !== actualRefs.length ||
318
+ !same(actualRefs, expectedRefs))
319
+ return "design_symbolic_certificate_results_mismatch";
320
+ const expectations = new Map(binding.expectations.map((item) => [item.certificate_ref, item]));
321
+ for (const result of record.certificate_results) {
322
+ const expectation = expectations.get(result.certificate_ref);
323
+ if (!expectation)
324
+ return "design_symbolic_certificate_expectation_missing";
325
+ if (canonicalJson({
326
+ certificate_ref: result.certificate_ref,
327
+ fact_rule_refs: result.fact_rule_refs,
328
+ omitted_axis_refs: result.omitted_axis_refs,
329
+ dependency_edge_refs: result.dependency_edge_refs,
330
+ canonical_rule_dag_sha256: result.canonical_rule_dag_sha256,
331
+ ...(result.source_noninterference_proof_sha256 === undefined
332
+ ? {}
333
+ : {
334
+ source_noninterference_proof_sha256: result.source_noninterference_proof_sha256,
335
+ }),
336
+ ...(result.production_noninterference_proof_sha256 === undefined
337
+ ? {}
338
+ : {
339
+ production_noninterference_proof_sha256: result.production_noninterference_proof_sha256,
340
+ }),
341
+ }) !== canonicalJson(expectation))
342
+ return "design_symbolic_certificate_denotation_mismatch";
343
+ if (result.recomputed !== true)
344
+ return "design_symbolic_certificate_not_recomputed";
345
+ if (result.verdict !== "passed")
346
+ return "design_symbolic_certificate_failed";
140
347
  }
141
348
  return null;
142
349
  }
@@ -171,7 +378,8 @@ function validateDesignConformance(check, record, artifactHashes) {
171
378
  }
172
379
  function designTargetUsesAssertion(target, assertionKey) {
173
380
  return (target.conformance_assertion_ref === assertionKey ||
174
- target.verification_method_bindings.some((item) => item.assertion_ref === assertionKey));
381
+ target.verification_method_bindings.some((item) => item.assertion_ref === assertionKey) ||
382
+ (target.symbolic_method_bindings ?? []).some((item) => item.assertion_ref === assertionKey));
175
383
  }
176
384
  function validateInteractionTrace(check, record) {
177
385
  if (record.target_ref !== check.execution_target.target_ref)
@@ -77,7 +77,7 @@ export interface TargetRuntimeEvidenceV2 extends EvidenceRecordBaseV2 {
77
77
  session_id: string;
78
78
  cold_start: boolean;
79
79
  }
80
- export interface DesignMethodEvidenceV2 extends EvidenceRecordBaseV2 {
80
+ export interface DesignGroundMethodEvidenceV2 extends EvidenceRecordBaseV2 {
81
81
  capability: "design_method";
82
82
  design_target_ref: string;
83
83
  target_ref: string;
@@ -140,12 +140,80 @@ export interface DesignFactResultV2 {
140
140
  definition: DesignResourceLocatedDigestV1;
141
141
  };
142
142
  }
143
+ export interface DesignSymbolicMethodEvidenceV2 extends EvidenceRecordBaseV2 {
144
+ capability: "design_method";
145
+ fact_model: "symbolic_rules_v2";
146
+ design_target_ref: string;
147
+ target_ref: string;
148
+ method: DesignResourceVerificationMethod;
149
+ artifact_path: string;
150
+ observation_artifact_path: string;
151
+ rule_results: DesignSymbolicRuleResultV2[];
152
+ }
153
+ export interface DesignSymbolicRuleResultV2 {
154
+ obligation_ref: string;
155
+ fact_rule_ref: string;
156
+ region_sha256: string;
157
+ subject_or_relation_ref: string;
158
+ property_ref: string;
159
+ population_ref: string | null;
160
+ quantifier: {
161
+ kind: "one" | "all" | "any" | "none" | "exactly" | "at_least" | "at_most" | "range";
162
+ minimum: number | null;
163
+ maximum: number | null;
164
+ };
165
+ actual_observation: DesignFactResultV2["actual_observation"];
166
+ actual_environment: DesignFactResultV2["actual_environment"];
167
+ observation_sensitivity: "plain" | "protected";
168
+ expected: DesignResourceLocatedDigestV1;
169
+ proof_surface: string;
170
+ observation_boundary: string;
171
+ comparison: DesignFactResultV2["comparison"];
172
+ verdict: "passed" | "failed";
173
+ oracle: DesignFactResultV2["oracle"];
174
+ environment: DesignFactResultV2["environment"];
175
+ protected_value_policy: string;
176
+ completion_effect: string;
177
+ }
178
+ export type DesignMethodEvidenceV2 = DesignGroundMethodEvidenceV2 | DesignSymbolicMethodEvidenceV2;
179
+ export interface DesignSymbolicCertificateEvidenceV2 extends EvidenceRecordBaseV2 {
180
+ capability: "design_symbolic_certificate";
181
+ design_target_ref: string;
182
+ target_ref: string;
183
+ artifact_path: string;
184
+ artifact_sha256: string;
185
+ metrics: {
186
+ semantic_obligations: number;
187
+ certificate_obligations: number;
188
+ certificate_covered_omitted_axes: number;
189
+ certificate_covered_dependency_edges: number;
190
+ canonical_dag_nodes: number;
191
+ canonical_partition_edges: number;
192
+ canonical_bytes: number;
193
+ theoretical_ground_cardinality: string;
194
+ };
195
+ certificate_results: Array<{
196
+ certificate_ref: string;
197
+ fact_rule_refs: string[];
198
+ omitted_axis_refs: string[];
199
+ dependency_edge_refs: string[];
200
+ canonical_rule_dag_sha256: string;
201
+ source_noninterference_proof_sha256?: string;
202
+ production_noninterference_proof_sha256?: string;
203
+ recomputed: true;
204
+ verdict: "passed" | "failed";
205
+ }>;
206
+ }
143
207
  export interface SemanticFactEvidenceV2 extends EvidenceRecordBaseV2 {
144
208
  capability: "semantic_fact";
145
209
  manifest_ref: string;
146
210
  manifest_sha256: string;
147
211
  outcome_ref: string;
148
212
  target_ref: string;
213
+ fact_key?: string;
214
+ fact_revision_digest?: string;
215
+ obligation_key?: string;
216
+ obligation_revision_digest?: string;
149
217
  fact_ref: string;
150
218
  proof_ref: string;
151
219
  method: string;
@@ -204,5 +272,5 @@ export interface InputVariationEvidenceV2 extends EvidenceRecordBaseV2 {
204
272
  }>;
205
273
  failure_case_observed: boolean;
206
274
  }
207
- export type EvidenceCapabilityRecordV2 = InteractionTraceEvidenceV2 | StateDeltaEvidenceV2 | CrossSurfaceConsistencyEvidenceV2 | DurableReadbackEvidenceV2 | BoundaryInvocationEvidenceV2 | ExternalSideEffectEvidenceV2 | FailureInjectionEvidenceV2 | VisualRenderEvidenceV2 | DesignConformanceEvidenceV2 | DesignMethodEvidenceV2 | SemanticFactEvidenceV2 | TargetRuntimeEvidenceV2 | InputVariationEvidenceV2;
275
+ export type EvidenceCapabilityRecordV2 = InteractionTraceEvidenceV2 | StateDeltaEvidenceV2 | CrossSurfaceConsistencyEvidenceV2 | DurableReadbackEvidenceV2 | BoundaryInvocationEvidenceV2 | ExternalSideEffectEvidenceV2 | FailureInjectionEvidenceV2 | VisualRenderEvidenceV2 | DesignConformanceEvidenceV2 | DesignMethodEvidenceV2 | DesignSymbolicCertificateEvidenceV2 | SemanticFactEvidenceV2 | TargetRuntimeEvidenceV2 | InputVariationEvidenceV2;
208
276
  export {};
@@ -1,5 +1,5 @@
1
1
  import type { CheckExecutionResultV2, CompiledCheckV2, CompiledDeliveryContractV2, CompiledOutcomeV2, LongTaskFindingV2, RawCommandExecutionV2, WorkspaceManifestV2 } from "./long-task-delivery-types.js";
2
2
  export declare function evaluateCheckEvidence(check: CompiledCheckV2, raw: RawCommandExecutionV2, snapshotRoot: string, outcome?: CompiledOutcomeV2): Promise<CheckExecutionResultV2>;
3
- export declare function evaluateOutcomeCounterfactuals(outcome: CompiledOutcomeV2, snapshotRoot: string, manifest?: WorkspaceManifestV2): Promise<LongTaskFindingV2[]>;
3
+ export declare function evaluateOutcomeCounterfactuals(outcome: CompiledOutcomeV2, snapshotRoot: string, manifest?: WorkspaceManifestV2, protectedAuthorityPaths?: readonly string[]): Promise<LongTaskFindingV2[]>;
4
4
  export declare function evaluateGlobalCounterfactuals(compiled: CompiledDeliveryContractV2, snapshotRoot: string, selectedCheckKeys?: ReadonlySet<string>, manifest?: WorkspaceManifestV2): Promise<LongTaskFindingV2[]>;
5
5
  export declare function isValidCounterfactualCheckResult(result: CheckExecutionResultV2, expectedAssertionFailures: string[]): boolean;
@@ -93,7 +93,7 @@ function collectExecutionFindings(check, raw, outcome, artifacts, assertionResul
93
93
  result.passed && capabilityEvaluation.complete[result.key] === true;
94
94
  return findings;
95
95
  }
96
- export async function evaluateOutcomeCounterfactuals(outcome, snapshotRoot, manifest) {
96
+ export async function evaluateOutcomeCounterfactuals(outcome, snapshotRoot, manifest, protectedAuthorityPaths = []) {
97
97
  return evaluateCounterfactualSet(outcome.acceptance.counterfactual_controls.map((control) => ({
98
98
  control,
99
99
  check: outcome.acceptance.checks.find((item) => item.key === control.check_key),
@@ -101,7 +101,7 @@ export async function evaluateOutcomeCounterfactuals(outcome, snapshotRoot, mani
101
101
  findingOutcomeKey: outcome.key,
102
102
  owningOutcome: outcome,
103
103
  bindingRef: `${outcome.key}.${control.binding_key}`,
104
- })), snapshotRoot, manifest);
104
+ })), snapshotRoot, manifest, protectedAuthorityPaths);
105
105
  }
106
106
  export async function evaluateGlobalCounterfactuals(compiled, snapshotRoot, selectedCheckKeys, manifest) {
107
107
  return evaluateCounterfactualSet((compiled.global.acceptance.counterfactual_controls ?? [])
@@ -115,14 +115,14 @@ export async function evaluateGlobalCounterfactuals(compiled, snapshotRoot, sele
115
115
  owningOutcome: compiled.outcomes.find((outcome) => outcome.key === outcomeKey),
116
116
  bindingRef: control.binding_ref,
117
117
  };
118
- }), snapshotRoot, manifest);
118
+ }), snapshotRoot, manifest, compiled.context_snapshot.files);
119
119
  }
120
- async function evaluateCounterfactualSet(entries, snapshotRoot, manifest) {
120
+ async function evaluateCounterfactualSet(entries, snapshotRoot, manifest, protectedAuthorityPaths = []) {
121
121
  const findings = [];
122
122
  for (const entry of entries) {
123
123
  const { control, check } = entry;
124
124
  const owningBinding = entry.owningOutcome.technical.bindings.find((binding) => `${entry.owningOutcome.key}.${binding.key}` === entry.bindingRef);
125
- const sandbox = await createCounterfactualSandbox(snapshotRoot, check, control, owningBinding?.carrier_paths ?? [], manifest);
125
+ const sandbox = await createCounterfactualSandbox(snapshotRoot, check, control, owningBinding?.carrier_paths ?? [], manifest, protectedAuthorityPaths);
126
126
  const root = sandbox.root;
127
127
  try {
128
128
  const mutationTargets = control.mutation.type === "remove_paths"
@@ -1,6 +1,23 @@
1
+ import { type Stats } from "node:fs";
1
2
  import type { SyncReport } from "./sync-engine.js";
2
- export declare function installLongTaskHooks(projectRoot: string, report: SyncReport): Promise<void>;
3
- export declare function uninstallLongTaskHooks(projectRoot: string, report: SyncReport): Promise<void>;
3
+ export declare const LONG_TASK_HOOK_TRUST_REVIEW_NOTICE = "Codex Hook review required: open /hooks and trust the current Tiny Context project Hook before relying on PreToolUse, SubagentStart, SessionStart or Stop behavior. Tiny Context cannot observe or persist Codex Hook trust.";
4
+ export interface LongTaskHookFileOperations {
5
+ lstat(target: string): Promise<Stats>;
6
+ readFile(target: string, encoding: "utf8"): Promise<string>;
7
+ mkdir(target: string, options: {
8
+ recursive: true;
9
+ }): Promise<unknown>;
10
+ writeFile(target: string, content: string, options: {
11
+ flag: "wx";
12
+ }): Promise<void>;
13
+ rename(source: string, destination: string): Promise<void>;
14
+ rm(target: string, options: {
15
+ force: true;
16
+ }): Promise<void>;
17
+ randomId(): string;
18
+ }
19
+ export declare function installLongTaskHooks(projectRoot: string, report: SyncReport, fileOperations?: Partial<LongTaskHookFileOperations>): Promise<void>;
20
+ export declare function uninstallLongTaskHooks(projectRoot: string, report: SyncReport, fileOperations?: Partial<LongTaskHookFileOperations>): Promise<void>;
4
21
  export declare function packageOwnedCommand(entry: string): string;
5
22
  export declare function removeManagedHookEntries(groups: unknown, currentPackageCommand?: string): {
6
23
  groups: unknown[];