@davesheffer/hunch 1.31.0 → 1.32.0

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 (228) hide show
  1. package/README.md +3 -6
  2. package/dist/cli/automaticReviewMemory.d.ts +13 -0
  3. package/dist/cli/dna.d.ts +2 -0
  4. package/dist/cli/index.d.ts +16 -0
  5. package/dist/cli/index.js +602 -43
  6. package/dist/cli/integrations.d.ts +2 -0
  7. package/dist/cli/integrations.js +5 -2
  8. package/dist/cli/invocation.d.ts +35 -0
  9. package/dist/cli/preflight.d.ts +1 -0
  10. package/dist/cli/reviewMemory.d.ts +4 -0
  11. package/dist/cli/reviewMemoryProvider.d.ts +14 -0
  12. package/dist/cli/serve.d.ts +2 -0
  13. package/dist/cli/taskReport.d.ts +6 -0
  14. package/dist/cli/taskReport.js +124 -0
  15. package/dist/cli/update.d.ts +14 -0
  16. package/dist/client/state.d.ts +248 -0
  17. package/dist/client/state.js +2 -0
  18. package/dist/constitution/adapters.d.ts +29 -0
  19. package/dist/constitution/behaviorAttestationBinding.d.ts +3 -0
  20. package/dist/constitution/behaviorEvaluator.d.ts +8 -0
  21. package/dist/constitution/behaviorProof.d.ts +9 -0
  22. package/dist/constitution/behaviorWorkspace.d.ts +25 -0
  23. package/dist/constitution/bootstrap.d.ts +30 -0
  24. package/dist/constitution/canonical.d.ts +15 -0
  25. package/dist/constitution/card.d.ts +58 -0
  26. package/dist/constitution/compiler.d.ts +52 -0
  27. package/dist/constitution/composition.d.ts +10 -0
  28. package/dist/constitution/corpus.d.ts +7 -0
  29. package/dist/constitution/correctionPolicyMaterializer.d.ts +57 -0
  30. package/dist/constitution/delta.d.ts +4 -0
  31. package/dist/constitution/disposition.d.ts +20 -0
  32. package/dist/constitution/evaluator.d.ts +47 -0
  33. package/dist/constitution/experiment.d.ts +466 -0
  34. package/dist/constitution/experimentRunner.d.ts +7 -0
  35. package/dist/constitution/g2.d.ts +209 -0
  36. package/dist/constitution/g2BehaviorAttestation.d.ts +45 -0
  37. package/dist/constitution/g2BehaviorCandidates.d.ts +123 -0
  38. package/dist/constitution/g2BehaviorDependencies.d.ts +83 -0
  39. package/dist/constitution/g2BehaviorMaterialization.d.ts +77 -0
  40. package/dist/constitution/g2BehaviorPolicyMaterializer.d.ts +48 -0
  41. package/dist/constitution/g2CandidateAttestation.d.ts +43 -0
  42. package/dist/constitution/g2Candidates.d.ts +80 -0
  43. package/dist/constitution/g2Drills.d.ts +33 -0
  44. package/dist/constitution/g3.d.ts +311 -0
  45. package/dist/constitution/g3Conformance.d.ts +33 -0
  46. package/dist/constitution/lifecycle.d.ts +25 -0
  47. package/dist/constitution/mutation.d.ts +15 -0
  48. package/dist/constitution/nodeTestEvidence.d.ts +13 -0
  49. package/dist/constitution/plan.d.ts +18 -0
  50. package/dist/constitution/policyRuntime.d.ts +5 -0
  51. package/dist/constitution/proof.d.ts +11 -0
  52. package/dist/constitution/repairPolicies.d.ts +34 -0
  53. package/dist/constitution/replacementFreeGit.d.ts +14 -0
  54. package/dist/constitution/replay.d.ts +40 -0
  55. package/dist/constitution/replayCache.d.ts +14 -0
  56. package/dist/constitution/replayWorker.d.ts +1 -0
  57. package/dist/constitution/repository.d.ts +129 -0
  58. package/dist/constitution/safeCheckout.d.ts +9 -0
  59. package/dist/constitution/schema.d.ts +1763 -0
  60. package/dist/constitution/scorecard.d.ts +219 -0
  61. package/dist/constitution/service.d.ts +398 -0
  62. package/dist/constitution/shadow.d.ts +54 -0
  63. package/dist/constitution/sourceMutation.d.ts +15 -0
  64. package/dist/constitution/staticGraphBaseline.d.ts +13 -0
  65. package/dist/constitution/structural.d.ts +64 -0
  66. package/dist/core/agenthook.d.ts +63 -0
  67. package/dist/core/agenthook.js +1 -0
  68. package/dist/core/automaticReviewMemory.d.ts +60 -0
  69. package/dist/core/autoreview.d.ts +66 -0
  70. package/dist/core/canonicalOrder.d.ts +3 -0
  71. package/dist/core/capturetoken.d.ts +19 -0
  72. package/dist/core/changeIdentity.d.ts +22 -0
  73. package/dist/core/changeProof.d.ts +14 -0
  74. package/dist/core/checkreport.d.ts +140 -0
  75. package/dist/core/commitrepair.d.ts +171 -0
  76. package/dist/core/commitrepair.js +238 -0
  77. package/dist/core/compare.d.ts +21 -0
  78. package/dist/core/config.d.ts +20 -0
  79. package/dist/core/conformance.d.ts +35 -0
  80. package/dist/core/constraintmatch.d.ts +54 -0
  81. package/dist/core/correction.d.ts +42 -0
  82. package/dist/core/correctionStage.d.ts +224 -0
  83. package/dist/core/declarationClusters.d.ts +149 -0
  84. package/dist/core/delivery.d.ts +110 -0
  85. package/dist/core/docanchors.d.ts +32 -0
  86. package/dist/core/docscan.d.ts +26 -0
  87. package/dist/core/drift.d.ts +13 -0
  88. package/dist/core/drift.js +31 -1
  89. package/dist/core/dupdetect.d.ts +43 -0
  90. package/dist/core/escalations.d.ts +129 -0
  91. package/dist/core/escalations.js +165 -0
  92. package/dist/core/events.d.ts +29 -0
  93. package/dist/core/evidenceMap.d.ts +164 -0
  94. package/dist/core/externalImports.d.ts +8 -0
  95. package/dist/core/format.d.ts +13 -0
  96. package/dist/core/glob.d.ts +9 -0
  97. package/dist/core/groundingLag.d.ts +84 -0
  98. package/dist/core/groundingLag.js +16 -2
  99. package/dist/core/groundingMerge.d.ts +15 -0
  100. package/dist/core/groundingMerge.js +95 -0
  101. package/dist/core/hookcache.d.ts +10 -0
  102. package/dist/core/hookpolicy.d.ts +47 -0
  103. package/dist/core/ids.d.ts +36 -0
  104. package/dist/core/importReview.d.ts +30 -0
  105. package/dist/core/io.d.ts +23 -0
  106. package/dist/core/jsonc.d.ts +4 -0
  107. package/dist/core/landscapeAdoption.d.ts +66 -0
  108. package/dist/core/landscapeDelivery.d.ts +76 -0
  109. package/dist/core/memorylog.d.ts +37 -0
  110. package/dist/core/migrate.d.ts +28 -0
  111. package/dist/core/outcomeExperience.d.ts +89 -0
  112. package/dist/core/overlaySafety.d.ts +24 -0
  113. package/dist/core/overlaySafety.js +7 -1
  114. package/dist/core/paths.d.ts +31 -0
  115. package/dist/core/pipeline.d.ts +289 -0
  116. package/dist/core/premises.d.ts +43 -0
  117. package/dist/core/provenance.d.ts +21 -0
  118. package/dist/core/publication.d.ts +54 -0
  119. package/dist/core/refrepair.d.ts +24 -0
  120. package/dist/core/refrepair.js +1 -1
  121. package/dist/core/relativeImports.d.ts +11 -0
  122. package/dist/core/repair.d.ts +44 -0
  123. package/dist/core/repairqueue.d.ts +40 -0
  124. package/dist/core/repairqueue.js +133 -0
  125. package/dist/core/reviewMemory.d.ts +40 -0
  126. package/dist/core/reviewqueue.d.ts +54 -0
  127. package/dist/core/safeRepoFile.d.ts +20 -0
  128. package/dist/core/served.d.ts +57 -0
  129. package/dist/core/served.js +14 -0
  130. package/dist/core/stateContract.d.ts +979 -0
  131. package/dist/core/stateContract.js +87 -4
  132. package/dist/core/stateDelivery.d.ts +78 -0
  133. package/dist/core/stateRecords.d.ts +383 -0
  134. package/dist/core/stateRecords.js +16 -1
  135. package/dist/core/stats.d.ts +88 -0
  136. package/dist/core/strictgate.d.ts +33 -0
  137. package/dist/core/taskReport.d.ts +226 -0
  138. package/dist/core/taskReport.js +514 -0
  139. package/dist/core/taskReportCapture.d.ts +8 -0
  140. package/dist/core/taskReportCapture.js +36 -0
  141. package/dist/core/taskReportEvidence.d.ts +26 -0
  142. package/dist/core/taskReportEvidence.js +268 -0
  143. package/dist/core/taskReportHook.d.ts +20 -0
  144. package/dist/core/taskReportHook.js +76 -0
  145. package/dist/core/taskReportPaths.d.ts +3 -0
  146. package/dist/core/taskReportPaths.js +23 -0
  147. package/dist/core/taskReportPublic.d.ts +31 -0
  148. package/dist/core/taskReportPublic.js +45 -0
  149. package/dist/core/taskReportRender.d.ts +6 -0
  150. package/dist/core/taskReportRender.js +97 -0
  151. package/dist/core/topics.d.ts +73 -0
  152. package/dist/core/types.d.ts +1239 -0
  153. package/dist/core/version.d.ts +10 -0
  154. package/dist/eval/guards.d.ts +45 -0
  155. package/dist/eval/harness.d.ts +58 -0
  156. package/dist/extractors/adrImport.d.ts +59 -0
  157. package/dist/extractors/comments.d.ts +7 -0
  158. package/dist/extractors/correctionSources.d.ts +11 -0
  159. package/dist/extractors/diff.d.ts +40 -0
  160. package/dist/extractors/git.d.ts +304 -0
  161. package/dist/extractors/git.js +208 -20
  162. package/dist/extractors/helm.d.ts +31 -0
  163. package/dist/extractors/indexer.d.ts +55 -0
  164. package/dist/extractors/landscapeDiscovery.d.ts +41 -0
  165. package/dist/extractors/languages.d.ts +77 -0
  166. package/dist/extractors/nativeTreeSitter.d.ts +16 -0
  167. package/dist/extractors/parse.d.ts +54 -0
  168. package/dist/extractors/php.d.ts +26 -0
  169. package/dist/extractors/repoSource.d.ts +53 -0
  170. package/dist/extractors/testreport.d.ts +36 -0
  171. package/dist/integrations/ciAction.d.ts +8 -0
  172. package/dist/integrations/claudeConfig.d.ts +44 -0
  173. package/dist/integrations/claudemd.d.ts +13 -0
  174. package/dist/integrations/claudemd.js +11 -2
  175. package/dist/integrations/gitignore.d.ts +16 -0
  176. package/dist/integrations/gitignore.js +7 -0
  177. package/dist/integrations/health.d.ts +74 -0
  178. package/dist/integrations/hooks.d.ts +41 -0
  179. package/dist/integrations/hooks.js +92 -66
  180. package/dist/integrations/madrExport.d.ts +39 -0
  181. package/dist/integrations/madrManifest.d.ts +69 -0
  182. package/dist/integrations/mergeDriver.d.ts +3 -0
  183. package/dist/integrations/mergeDriver.js +25 -8
  184. package/dist/integrations/probe.d.ts +4 -0
  185. package/dist/integrations/providers.d.ts +103 -0
  186. package/dist/integrations/scaffold.d.ts +29 -0
  187. package/dist/integrations/sync.d.ts +30 -0
  188. package/dist/integrations/sync.js +3 -2
  189. package/dist/integrations/team.d.ts +70 -0
  190. package/dist/integrations/worktree.d.ts +8 -0
  191. package/dist/mcp/roots.d.ts +16 -0
  192. package/dist/mcp/server.d.ts +36 -0
  193. package/dist/mcp/server.js +114 -25
  194. package/dist/mcp/taskReportTools.d.ts +3 -0
  195. package/dist/mcp/taskReportTools.js +106 -0
  196. package/dist/serve/app.d.ts +36 -0
  197. package/dist/serve/app.js +20 -0
  198. package/dist/serve/config.d.ts +100 -0
  199. package/dist/serve/writelock.d.ts +22 -0
  200. package/dist/store/changeLedger.d.ts +132 -0
  201. package/dist/store/changeLedger.js +40 -9
  202. package/dist/store/compact.d.ts +33 -0
  203. package/dist/store/db.d.ts +9 -0
  204. package/dist/store/embedder.d.ts +32 -0
  205. package/dist/store/hunchStore.d.ts +624 -0
  206. package/dist/store/hunchStore.js +13 -5
  207. package/dist/store/jsonStore.d.ts +125 -0
  208. package/dist/store/jsonStore.js +15 -0
  209. package/dist/store/merge.d.ts +39 -0
  210. package/dist/store/privateMigrate.d.ts +24 -0
  211. package/dist/store/replay.d.ts +56 -0
  212. package/dist/store/schema.d.ts +17 -0
  213. package/dist/store/stateBinding.d.ts +145 -0
  214. package/dist/store/stateBinding.js +110 -15
  215. package/dist/store/stateCapture.d.ts +15 -0
  216. package/dist/store/stateCapture.js +145 -0
  217. package/dist/synthesis/cliAdapter.d.ts +22 -0
  218. package/dist/synthesis/initiator.d.ts +13 -0
  219. package/dist/synthesis/provider.d.ts +307 -0
  220. package/dist/synthesis/synthesize.d.ts +117 -0
  221. package/dist/synthesis/tripwires.d.ts +9 -0
  222. package/dist/taskReports.d.ts +76 -0
  223. package/dist/taskReports.js +67 -0
  224. package/dist/wiki/adopt.d.ts +22 -0
  225. package/dist/wiki/graph.d.ts +87 -0
  226. package/dist/wiki/wiki.d.ts +242 -0
  227. package/package.json +6 -5
  228. package/server.json +2 -2
@@ -0,0 +1,466 @@
1
+ import { z } from "zod";
2
+ import type { HunchStore } from "../store/hunchStore.js";
3
+ import type { ExperimentPreregistration, G3RequiredExperiment } from "./g3.js";
4
+ export declare const EXPERIMENT_ANALYSIS_SPEC: {
5
+ readonly implementation: "hunch-g3-experiment-report-v1";
6
+ readonly binary_interval: "wilson-95";
7
+ readonly small_cell_test: "fisher-exact-two-sided";
8
+ readonly reviewer_rate_interval: "seeded-nonparametric-bootstrap-4000";
9
+ readonly effect_sizes: readonly ["absolute-difference", "relative-risk-or-rate"];
10
+ readonly missingness: "all-assigned-denominators";
11
+ };
12
+ export declare const EXPERIMENT_ANALYSIS_HASH: string;
13
+ export declare const Exp01CaseSchema: z.ZodObject<{
14
+ id: z.ZodString;
15
+ block: z.ZodString;
16
+ created_at: z.ZodString;
17
+ held_out: z.ZodLiteral<true>;
18
+ used_for_tuning: z.ZodLiteral<false>;
19
+ strata: z.ZodRecord<z.ZodString, z.ZodString>;
20
+ prompt: z.ZodString;
21
+ context: z.ZodObject<{
22
+ decision: z.ZodString;
23
+ rationale: z.ZodString;
24
+ executable_policy: z.ZodString;
25
+ causal_incident: z.ZodString;
26
+ }, z.core.$strict>;
27
+ setup: z.ZodNullable<z.ZodObject<{
28
+ command: z.ZodString;
29
+ args: z.ZodArray<z.ZodString>;
30
+ timeout_ms: z.ZodNumber;
31
+ artifact: z.ZodString;
32
+ artifact_hash: z.ZodString;
33
+ }, z.core.$strict>>;
34
+ evaluator: z.ZodObject<{
35
+ command: z.ZodString;
36
+ args: z.ZodArray<z.ZodString>;
37
+ timeout_ms: z.ZodNumber;
38
+ artifact: z.ZodString;
39
+ artifact_hash: z.ZodString;
40
+ visibility: z.ZodLiteral<"hidden_external">;
41
+ }, z.core.$strict>;
42
+ }, z.core.$strict>;
43
+ export declare const Exp03CaseSchema: z.ZodObject<{
44
+ id: z.ZodString;
45
+ block: z.ZodString;
46
+ created_at: z.ZodString;
47
+ held_out: z.ZodLiteral<true>;
48
+ used_for_tuning: z.ZodLiteral<false>;
49
+ strata: z.ZodRecord<z.ZodString, z.ZodString>;
50
+ evidence: z.ZodString;
51
+ required_relationship: z.ZodOptional<z.ZodString>;
52
+ manual_brief: z.ZodString;
53
+ compiler_candidate: z.ZodString;
54
+ proof_card: z.ZodString;
55
+ editable_bindings: z.ZodArray<z.ZodString>;
56
+ target_commitment_hash: z.ZodString;
57
+ }, z.core.$strict>;
58
+ export declare const ExperimentCaseBankSchema: z.ZodObject<{
59
+ id: z.ZodString;
60
+ content_hash: z.ZodString;
61
+ experiment: z.ZodEnum<{
62
+ "EXP-03": "EXP-03";
63
+ "EXP-01": "EXP-01";
64
+ }>;
65
+ preregistration_id: z.ZodString;
66
+ preregistration_hash: z.ZodString;
67
+ repository_root: z.ZodString;
68
+ base_commit: z.ZodString;
69
+ cases: z.ZodArray<z.ZodUnion<readonly [z.ZodObject<{
70
+ id: z.ZodString;
71
+ block: z.ZodString;
72
+ created_at: z.ZodString;
73
+ held_out: z.ZodLiteral<true>;
74
+ used_for_tuning: z.ZodLiteral<false>;
75
+ strata: z.ZodRecord<z.ZodString, z.ZodString>;
76
+ prompt: z.ZodString;
77
+ context: z.ZodObject<{
78
+ decision: z.ZodString;
79
+ rationale: z.ZodString;
80
+ executable_policy: z.ZodString;
81
+ causal_incident: z.ZodString;
82
+ }, z.core.$strict>;
83
+ setup: z.ZodNullable<z.ZodObject<{
84
+ command: z.ZodString;
85
+ args: z.ZodArray<z.ZodString>;
86
+ timeout_ms: z.ZodNumber;
87
+ artifact: z.ZodString;
88
+ artifact_hash: z.ZodString;
89
+ }, z.core.$strict>>;
90
+ evaluator: z.ZodObject<{
91
+ command: z.ZodString;
92
+ args: z.ZodArray<z.ZodString>;
93
+ timeout_ms: z.ZodNumber;
94
+ artifact: z.ZodString;
95
+ artifact_hash: z.ZodString;
96
+ visibility: z.ZodLiteral<"hidden_external">;
97
+ }, z.core.$strict>;
98
+ }, z.core.$strict>, z.ZodObject<{
99
+ id: z.ZodString;
100
+ block: z.ZodString;
101
+ created_at: z.ZodString;
102
+ held_out: z.ZodLiteral<true>;
103
+ used_for_tuning: z.ZodLiteral<false>;
104
+ strata: z.ZodRecord<z.ZodString, z.ZodString>;
105
+ evidence: z.ZodString;
106
+ required_relationship: z.ZodOptional<z.ZodString>;
107
+ manual_brief: z.ZodString;
108
+ compiler_candidate: z.ZodString;
109
+ proof_card: z.ZodString;
110
+ editable_bindings: z.ZodArray<z.ZodString>;
111
+ target_commitment_hash: z.ZodString;
112
+ }, z.core.$strict>]>>;
113
+ actor: z.ZodString;
114
+ reason: z.ZodString;
115
+ data_class: z.ZodLiteral<"private">;
116
+ authority: z.ZodLiteral<"none">;
117
+ locked_at: z.ZodString;
118
+ }, z.core.$strict>;
119
+ export type ExperimentCaseBank = z.infer<typeof ExperimentCaseBankSchema>;
120
+ export type Exp01Case = z.infer<typeof Exp01CaseSchema>;
121
+ export type Exp03Case = z.infer<typeof Exp03CaseSchema>;
122
+ export type CompileExperimentCaseBankInput = Omit<ExperimentCaseBank, "id" | "content_hash" | "data_class" | "authority" | "locked_at">;
123
+ export declare function experimentCaseBankContentHash(bank: ExperimentCaseBank): string;
124
+ export declare function compileExperimentCaseBank(input: CompileExperimentCaseBankInput, preregistration: ExperimentPreregistration, opts?: {
125
+ now?: string;
126
+ }): ExperimentCaseBank;
127
+ declare const AssignmentSchema: z.ZodObject<{
128
+ id: z.ZodString;
129
+ case_id: z.ZodString;
130
+ arm: z.ZodString;
131
+ block: z.ZodString;
132
+ order: z.ZodNumber;
133
+ treatment_hash: z.ZodString;
134
+ }, z.core.$strict>;
135
+ export type ExperimentAssignment = z.infer<typeof AssignmentSchema>;
136
+ export declare const ExperimentRunSchema: z.ZodObject<{
137
+ id: z.ZodString;
138
+ content_hash: z.ZodString;
139
+ experiment: z.ZodEnum<{
140
+ "EXP-03": "EXP-03";
141
+ "EXP-01": "EXP-01";
142
+ }>;
143
+ preregistration_id: z.ZodString;
144
+ preregistration_hash: z.ZodString;
145
+ case_bank_id: z.ZodString;
146
+ case_bank_hash: z.ZodString;
147
+ seed: z.ZodString;
148
+ sample_per_arm: z.ZodNumber;
149
+ assignment_strategy: z.ZodEnum<{
150
+ crossed_blocked: "crossed_blocked";
151
+ exclusive_blocked: "exclusive_blocked";
152
+ }>;
153
+ assignments: z.ZodArray<z.ZodObject<{
154
+ id: z.ZodString;
155
+ case_id: z.ZodString;
156
+ arm: z.ZodString;
157
+ block: z.ZodString;
158
+ order: z.ZodNumber;
159
+ treatment_hash: z.ZodString;
160
+ }, z.core.$strict>>;
161
+ runner: z.ZodObject<{
162
+ implementation: z.ZodLiteral<"hunch-g3-experiment-v1">;
163
+ provider: z.ZodNullable<z.ZodEnum<{
164
+ "claude-cli": "claude-cli";
165
+ "codex-cli": "codex-cli";
166
+ }>>;
167
+ provider_version: z.ZodNullable<z.ZodString>;
168
+ model_version: z.ZodNullable<z.ZodString>;
169
+ max_turns: z.ZodNullable<z.ZodNumber>;
170
+ }, z.core.$strict>;
171
+ actor: z.ZodString;
172
+ reason: z.ZodString;
173
+ data_class: z.ZodLiteral<"private">;
174
+ authority: z.ZodLiteral<"none">;
175
+ created_at: z.ZodString;
176
+ }, z.core.$strict>;
177
+ export type ExperimentRun = z.infer<typeof ExperimentRunSchema>;
178
+ export interface CompileExperimentRunInput {
179
+ sample_per_arm: number;
180
+ provider?: "claude-cli" | "codex-cli";
181
+ provider_version?: string;
182
+ model_version?: string;
183
+ max_turns?: number;
184
+ actor: string;
185
+ reason: string;
186
+ }
187
+ export declare function assignmentTreatment(bank: ExperimentCaseBank, run: ExperimentRun, assignment: ExperimentAssignment): unknown;
188
+ export interface ExperimentReviewGuide {
189
+ title: string;
190
+ question: string;
191
+ action: string;
192
+ answer_template: string;
193
+ warning: string;
194
+ choices: Array<{
195
+ value: "accepted_precise" | "accepted_edited" | "rejected" | "uncompilable";
196
+ label: string;
197
+ use_when: string;
198
+ }>;
199
+ }
200
+ /** Human-facing help is deliberately outside the hash-bound treatment. It may
201
+ * explain the review task, but must never interpret the assigned evidence. */
202
+ export declare function experimentReviewGuide(arm: string): ExperimentReviewGuide;
203
+ export declare function experimentRunContentHash(run: ExperimentRun): string;
204
+ export declare function compileExperimentRun(input: CompileExperimentRunInput, preregistration: ExperimentPreregistration, bank: ExperimentCaseBank, opts?: {
205
+ now?: string;
206
+ }): ExperimentRun;
207
+ export declare const ExperimentOutcomeSchema: z.ZodObject<{
208
+ id: z.ZodString;
209
+ content_hash: z.ZodString;
210
+ run_id: z.ZodString;
211
+ assignment_id: z.ZodString;
212
+ experiment: z.ZodEnum<{
213
+ "EXP-03": "EXP-03";
214
+ "EXP-01": "EXP-01";
215
+ }>;
216
+ arm: z.ZodString;
217
+ status: z.ZodEnum<{
218
+ completed: "completed";
219
+ refused: "refused";
220
+ invalid_completion: "invalid_completion";
221
+ infrastructure_failure: "infrastructure_failure";
222
+ aborted: "aborted";
223
+ }>;
224
+ invocation_started: z.ZodBoolean;
225
+ metrics: z.ZodNullable<z.ZodUnion<readonly [z.ZodObject<{
226
+ valid_completion: z.ZodBoolean;
227
+ policy_violation: z.ZodNullable<z.ZodBoolean>;
228
+ task_success: z.ZodBoolean;
229
+ build_success: z.ZodBoolean;
230
+ unknown_or_error: z.ZodBoolean;
231
+ refusal: z.ZodBoolean;
232
+ turns: z.ZodNullable<z.ZodNumber>;
233
+ edits: z.ZodNullable<z.ZodNumber>;
234
+ tokens: z.ZodNullable<z.ZodNumber>;
235
+ latency_ms: z.ZodNumber;
236
+ }, z.core.$strict>, z.ZodObject<{
237
+ decision: z.ZodEnum<{
238
+ rejected: "rejected";
239
+ abandoned: "abandoned";
240
+ uncompilable: "uncompilable";
241
+ timeout: "timeout";
242
+ cannot_decide: "cannot_decide";
243
+ accepted_precise: "accepted_precise";
244
+ accepted_edited: "accepted_edited";
245
+ }>;
246
+ precise: z.ZodBoolean;
247
+ proof_inspected: z.ZodBoolean;
248
+ result_hash: z.ZodNullable<z.ZodString>;
249
+ semantic_edit_distance: z.ZodNullable<z.ZodNumber>;
250
+ silent_semantic_substitution: z.ZodBoolean;
251
+ rejection_reason: z.ZodNullable<z.ZodString>;
252
+ duration_ms: z.ZodNumber;
253
+ }, z.core.$strict>]>>;
254
+ output_hash: z.ZodNullable<z.ZodString>;
255
+ diff_hash: z.ZodNullable<z.ZodString>;
256
+ evaluator_hash: z.ZodNullable<z.ZodString>;
257
+ error_code: z.ZodNullable<z.ZodString>;
258
+ incidents: z.ZodObject<{
259
+ confirmed_private_leak: z.ZodBoolean;
260
+ data_loss_or_corruption: z.ZodBoolean;
261
+ unsafe_evaluator_behavior: z.ZodBoolean;
262
+ }, z.core.$strict>;
263
+ recorder: z.ZodString;
264
+ reason: z.ZodString;
265
+ supersedes: z.ZodNullable<z.ZodString>;
266
+ data_class: z.ZodLiteral<"private">;
267
+ authority: z.ZodLiteral<"none">;
268
+ recorded_at: z.ZodString;
269
+ }, z.core.$strict>;
270
+ export type ExperimentOutcome = z.infer<typeof ExperimentOutcomeSchema>;
271
+ export type CompileExperimentOutcomeInput = Omit<ExperimentOutcome, "id" | "content_hash" | "experiment" | "arm" | "data_class" | "authority" | "recorded_at">;
272
+ export declare function experimentOutcomeContentHash(outcome: ExperimentOutcome): string;
273
+ export declare function normalizedEditDistance(from: string, to: string): number;
274
+ export declare function compileExperimentOutcome(input: CompileExperimentOutcomeInput, run: ExperimentRun, opts?: {
275
+ now?: string;
276
+ }): ExperimentOutcome;
277
+ export declare const EXP03_REVIEW_CHOICES: readonly ["accept", "edit", "reject", "cannot_decide"];
278
+ export type Exp03ReviewChoice = (typeof EXP03_REVIEW_CHOICES)[number];
279
+ export interface Exp03ReviewResponse {
280
+ choice: Exp03ReviewChoice;
281
+ /** the rule exactly as it should be recorded; required for accept/edit, blank otherwise. */
282
+ rule_text?: string | null;
283
+ /** one plain-language sentence. */
284
+ reason: string;
285
+ /** arm C only: the reviewer looked at the supporting checks before answering. */
286
+ inspected_supporting_checks?: boolean;
287
+ }
288
+ declare const CHOICE_TO_DECISION: {
289
+ readonly accept: "accepted_precise";
290
+ readonly edit: "accepted_edited";
291
+ readonly reject: "rejected";
292
+ readonly cannot_decide: "cannot_decide";
293
+ };
294
+ export declare function compileExp03ReviewResponse(item: Exp03Case, arm: string, response: Exp03ReviewResponse): {
295
+ decision: (typeof CHOICE_TO_DECISION)[Exp03ReviewChoice];
296
+ precise: boolean;
297
+ proof_inspected: boolean;
298
+ result: string | null;
299
+ silent_semantic_substitution: boolean;
300
+ rejection_reason: string | null;
301
+ };
302
+ export declare const ExperimentReviewStartSchema: z.ZodObject<{
303
+ id: z.ZodString;
304
+ content_hash: z.ZodString;
305
+ run_id: z.ZodString;
306
+ assignment_id: z.ZodString;
307
+ reviewer: z.ZodString;
308
+ treatment_hash: z.ZodString;
309
+ data_class: z.ZodLiteral<"private">;
310
+ authority: z.ZodLiteral<"none">;
311
+ started_at: z.ZodString;
312
+ }, z.core.$strict>;
313
+ export type ExperimentReviewStart = z.infer<typeof ExperimentReviewStartSchema>;
314
+ export declare function experimentReviewStartContentHash(record: ExperimentReviewStart): string;
315
+ export declare function compileExperimentReviewStart(run: ExperimentRun, assignment: ExperimentAssignment, reviewer: string, opts?: {
316
+ now?: string;
317
+ }): ExperimentReviewStart;
318
+ export declare const ExperimentReviewerQualificationSchema: z.ZodObject<{
319
+ id: z.ZodString;
320
+ content_hash: z.ZodString;
321
+ preregistration_id: z.ZodString;
322
+ preregistration_hash: z.ZodString;
323
+ reviewer: z.ZodString;
324
+ protocol: z.ZodLiteral<"exp03-plain-language-comprehension-v2">;
325
+ cases_hash: z.ZodString;
326
+ passed: z.ZodLiteral<true>;
327
+ reason: z.ZodString;
328
+ data_class: z.ZodLiteral<"private">;
329
+ authority: z.ZodLiteral<"none">;
330
+ recorded_at: z.ZodString;
331
+ }, z.core.$strict>;
332
+ export type ExperimentReviewerQualification = z.infer<typeof ExperimentReviewerQualificationSchema>;
333
+ export type CompileExperimentReviewerQualificationInput = Pick<ExperimentReviewerQualification, "preregistration_id" | "preregistration_hash" | "reviewer" | "protocol" | "cases_hash" | "passed" | "reason">;
334
+ export declare function experimentReviewerQualificationContentHash(record: ExperimentReviewerQualification): string;
335
+ export declare function compileExperimentReviewerQualification(input: CompileExperimentReviewerQualificationInput, preregistration: ExperimentPreregistration, opts?: {
336
+ now?: string;
337
+ }): ExperimentReviewerQualification;
338
+ export declare const ExperimentFollowupSchema: z.ZodObject<{
339
+ id: z.ZodString;
340
+ content_hash: z.ZodString;
341
+ run_id: z.ZodString;
342
+ assignment_id: z.ZodString;
343
+ outcome_id: z.ZodString;
344
+ reviewer: z.ZodString;
345
+ reversed: z.ZodNullable<z.ZodBoolean>;
346
+ missing_reason: z.ZodNullable<z.ZodString>;
347
+ notes: z.ZodString;
348
+ supersedes: z.ZodNullable<z.ZodString>;
349
+ data_class: z.ZodLiteral<"private">;
350
+ authority: z.ZodLiteral<"none">;
351
+ measured_at: z.ZodString;
352
+ }, z.core.$strict>;
353
+ export type ExperimentFollowup = z.infer<typeof ExperimentFollowupSchema>;
354
+ export declare function experimentFollowupContentHash(record: ExperimentFollowup): string;
355
+ export declare function compileExperimentFollowup(input: Omit<ExperimentFollowup, "id" | "content_hash" | "run_id" | "assignment_id" | "outcome_id" | "data_class" | "authority" | "measured_at">, run: ExperimentRun, outcome: ExperimentOutcome, opts?: {
356
+ now?: string;
357
+ }): ExperimentFollowup;
358
+ export declare function currentExperimentOutcomes(records: ExperimentOutcome[]): ExperimentOutcome[];
359
+ export declare function currentExperimentFollowups(records: ExperimentFollowup[]): ExperimentFollowup[];
360
+ export declare const ExperimentStopSchema: z.ZodObject<{
361
+ id: z.ZodString;
362
+ content_hash: z.ZodString;
363
+ run_id: z.ZodString;
364
+ category: z.ZodEnum<{
365
+ confirmed_private_leak: "confirmed_private_leak";
366
+ data_loss_or_corruption: "data_loss_or_corruption";
367
+ unsafe_evaluator_behavior: "unsafe_evaluator_behavior";
368
+ unsafe_semantic_substitution: "unsafe_semantic_substitution";
369
+ provider_wide_unavailability: "provider_wide_unavailability";
370
+ }>;
371
+ actor: z.ZodString;
372
+ reason: z.ZodString;
373
+ evidence_hashes: z.ZodArray<z.ZodString>;
374
+ data_class: z.ZodLiteral<"private">;
375
+ authority: z.ZodLiteral<"none">;
376
+ effect: z.ZodLiteral<"irreversible_run_stop">;
377
+ recorded_at: z.ZodString;
378
+ }, z.core.$strict>;
379
+ export type ExperimentStop = z.infer<typeof ExperimentStopSchema>;
380
+ export declare function experimentStopContentHash(record: ExperimentStop): string;
381
+ export declare function compileExperimentStop(input: Omit<ExperimentStop, "id" | "content_hash" | "run_id" | "data_class" | "authority" | "effect" | "recorded_at">, run: ExperimentRun, opts?: {
382
+ now?: string;
383
+ }): ExperimentStop;
384
+ export interface ExperimentArmReport {
385
+ arm: string;
386
+ assigned: number;
387
+ terminal: number;
388
+ infrastructure_failures: number;
389
+ invalid_or_refused: number;
390
+ valid_completions: number;
391
+ violations: number | null;
392
+ violation_rate: number | null;
393
+ wilson_95: [number, number] | null;
394
+ accepted_precise: number | null;
395
+ reviewer_hours: number | null;
396
+ accepted_per_reviewer_hour: number | null;
397
+ bootstrap_95: [number, number] | null;
398
+ reversals: number | null;
399
+ followups_missing: number | null;
400
+ /** EXP-03 only: raw count per decision token (all tokens present, zeros kept) —
401
+ * the preregistered "raw use-as-written / corrected / rejected / cannot-decide /
402
+ * abandoned / timeout counts" visibility (expreg_ba6aef4ecd analysis plan). */
403
+ decisions: Record<string, number> | null;
404
+ }
405
+ export interface ExperimentReport {
406
+ id: string;
407
+ content_hash: string;
408
+ run_id: string;
409
+ preregistration_hash: string;
410
+ case_bank_hash: string;
411
+ experiment: G3RequiredExperiment;
412
+ analysis: typeof EXPERIMENT_ANALYSIS_SPEC & {
413
+ deterministic_hash: string;
414
+ };
415
+ status: "registered" | "running" | "awaiting_followup" | "completed" | "guardrail_stopped";
416
+ arms: ExperimentArmReport[];
417
+ strata: Array<{
418
+ key: string;
419
+ value: string;
420
+ arm: string;
421
+ assigned: number;
422
+ terminal: number;
423
+ valid_completions: number;
424
+ violations: number | null;
425
+ accepted_precise: number | null;
426
+ reviewer_ms: number | null;
427
+ }>;
428
+ assignments: number;
429
+ terminal: number;
430
+ unresolved: string[];
431
+ contrasts: Record<string, number | null>;
432
+ deviations: string[];
433
+ guardrails: {
434
+ confirmed_private_leaks: number;
435
+ silent_semantic_substitutions: number;
436
+ data_loss_or_corruption: number;
437
+ unsafe_evaluator_behavior: number;
438
+ };
439
+ stop_receipts: ExperimentStop[];
440
+ claim_allowed: false;
441
+ authority: "none";
442
+ }
443
+ export declare function buildExperimentReport(run: ExperimentRun, bank: ExperimentCaseBank, outcomes: ExperimentOutcome[], followups: ExperimentFollowup[], stops?: ExperimentStop[]): ExperimentReport;
444
+ /** Private-only, content-addressed experiment execution ledger. */
445
+ export declare class ExperimentRepository {
446
+ private readonly store;
447
+ constructor(store: HunchStore);
448
+ private requirePrivate;
449
+ private load;
450
+ private put;
451
+ listCaseBanks(): ExperimentCaseBank[];
452
+ putCaseBank(bank: ExperimentCaseBank): ExperimentCaseBank;
453
+ listRuns(): ExperimentRun[];
454
+ putRun(run: ExperimentRun): ExperimentRun;
455
+ listOutcomes(): ExperimentOutcome[];
456
+ putOutcome(outcome: ExperimentOutcome): ExperimentOutcome;
457
+ listReviewStarts(): ExperimentReviewStart[];
458
+ putReviewStart(record: ExperimentReviewStart): ExperimentReviewStart;
459
+ listReviewerQualifications(): ExperimentReviewerQualification[];
460
+ putReviewerQualification(record: ExperimentReviewerQualification): ExperimentReviewerQualification;
461
+ listFollowups(): ExperimentFollowup[];
462
+ putFollowup(record: ExperimentFollowup): ExperimentFollowup;
463
+ listStops(): ExperimentStop[];
464
+ putStop(record: ExperimentStop): ExperimentStop;
465
+ }
466
+ export {};
@@ -0,0 +1,7 @@
1
+ import { ExperimentRepository, type ExperimentAssignment, type ExperimentCaseBank, type ExperimentOutcome, type ExperimentRun } from "./experiment.js";
2
+ export interface Exp01ExecutionOptions {
3
+ timeoutMs?: number;
4
+ now?: string;
5
+ }
6
+ export declare function subscriptionCliVersion(provider: "claude-cli" | "codex-cli"): string;
7
+ export declare function executeExp01Assignment(repository: ExperimentRepository, run: ExperimentRun, bank: ExperimentCaseBank, assignment: ExperimentAssignment, opts?: Exp01ExecutionOptions): ExperimentOutcome;
@@ -0,0 +1,209 @@
1
+ import { z } from "zod";
2
+ import type { Runbook } from "../core/types.js";
3
+ import type { HunchStore } from "../store/hunchStore.js";
4
+ export declare const G2_RUNBOOK_CATEGORIES: readonly ["evaluator_error", "false_positive", "private_leak", "stale_policy", "provider_outage", "corrupt_graph", "adapter_break"];
5
+ export type G2RunbookCategory = (typeof G2_RUNBOOK_CATEGORIES)[number];
6
+ export declare const G2PlanSchema: z.ZodObject<{
7
+ id: z.ZodString;
8
+ content_hash: z.ZodString;
9
+ gate: z.ZodLiteral<"G2">;
10
+ policy_ids: z.ZodArray<z.ZodString>;
11
+ runbooks: z.ZodObject<{
12
+ evaluator_error: z.ZodString;
13
+ false_positive: z.ZodString;
14
+ private_leak: z.ZodString;
15
+ stale_policy: z.ZodString;
16
+ provider_outage: z.ZodString;
17
+ corrupt_graph: z.ZodString;
18
+ adapter_break: z.ZodString;
19
+ }, z.core.$strict>;
20
+ min_shadow_applicable: z.ZodNumber;
21
+ actor: z.ZodString;
22
+ reason: z.ZodString;
23
+ supersedes: z.ZodNullable<z.ZodString>;
24
+ data_class: z.ZodLiteral<"private">;
25
+ authority: z.ZodLiteral<"none">;
26
+ created_at: z.ZodString;
27
+ }, z.core.$strict>;
28
+ export type G2Plan = z.infer<typeof G2PlanSchema>;
29
+ export interface CompileG2PlanInput {
30
+ policy_ids: string[];
31
+ runbooks: Record<G2RunbookCategory, string>;
32
+ min_shadow_applicable?: number;
33
+ actor: string;
34
+ reason: string;
35
+ supersedes?: string | null;
36
+ }
37
+ export declare function g2PlanContentHash(plan: G2Plan): string;
38
+ export declare function compileG2Plan(input: CompileG2PlanInput, opts?: {
39
+ now?: string;
40
+ }): G2Plan;
41
+ export declare const RunbookRehearsalSchema: z.ZodObject<{
42
+ id: z.ZodString;
43
+ content_hash: z.ZodString;
44
+ runbook_id: z.ZodString;
45
+ runbook_hash: z.ZodString;
46
+ result: z.ZodEnum<{
47
+ passed: "passed";
48
+ failed: "failed";
49
+ }>;
50
+ actor: z.ZodString;
51
+ evidence_hashes: z.ZodArray<z.ZodString>;
52
+ notes: z.ZodString;
53
+ supersedes: z.ZodNullable<z.ZodString>;
54
+ data_class: z.ZodLiteral<"private">;
55
+ authority: z.ZodLiteral<"none">;
56
+ created_at: z.ZodString;
57
+ }, z.core.$strict>;
58
+ export type RunbookRehearsal = z.infer<typeof RunbookRehearsalSchema>;
59
+ export interface CompileRunbookRehearsalInput {
60
+ runbook_id: string;
61
+ runbook_hash: string;
62
+ result: "passed" | "failed";
63
+ actor: string;
64
+ evidence_hashes: string[];
65
+ notes: string;
66
+ supersedes?: string | null;
67
+ }
68
+ export declare function runbookRehearsalContentHash(receipt: RunbookRehearsal): string;
69
+ export declare function compileRunbookRehearsal(input: CompileRunbookRehearsalInput, opts?: {
70
+ now?: string;
71
+ }): RunbookRehearsal;
72
+ export declare function currentAppendOnly<T extends {
73
+ id: string;
74
+ supersedes: string | null;
75
+ }>(records: T[], label: string, identity: (record: T) => string, singleCurrent?: boolean): T[];
76
+ export declare function currentG2Plans(records: G2Plan[]): G2Plan[];
77
+ export declare function currentRunbookRehearsals(records: RunbookRehearsal[]): RunbookRehearsal[];
78
+ export interface G2PolicyEvidence {
79
+ policy_id: string;
80
+ complete: boolean;
81
+ proof_id: string | null;
82
+ corpus_id: string | null;
83
+ shadow_applicable: number;
84
+ shadow_violations: number;
85
+ shadow_unclassified: number;
86
+ confirmed_precision: number | null;
87
+ reasons: string[];
88
+ }
89
+ export interface G2RunbookEvidence {
90
+ category: G2RunbookCategory;
91
+ runbook_id: string;
92
+ runbook_hash: string | null;
93
+ rehearsal_id: string | null;
94
+ passed: boolean;
95
+ reasons: string[];
96
+ }
97
+ export interface G2Inventory {
98
+ private_policies: number;
99
+ public_policies: number;
100
+ private_proofs: number;
101
+ private_corpora: number;
102
+ private_shadow_evaluations: number;
103
+ private_shadow_dispositions: number;
104
+ private_runbooks: number;
105
+ public_runbooks: number;
106
+ private_plans: number;
107
+ private_rehearsals: number;
108
+ }
109
+ export interface G2ReadinessReport {
110
+ id: string;
111
+ content_hash: string;
112
+ gate: "G2";
113
+ manifest: G2Plan | null;
114
+ policy_evidence: G2PolicyEvidence[];
115
+ runbook_evidence: G2RunbookEvidence[];
116
+ active_blocking_policy_ids: string[];
117
+ blockers: string[];
118
+ inventory?: G2Inventory;
119
+ recommendation: "not_ready" | "eligible_for_human_g2_signoff";
120
+ authority: "none";
121
+ g2_passed: false;
122
+ }
123
+ export interface G2ShadowSweepReport {
124
+ id: string;
125
+ content_hash: string;
126
+ plan_id: string | null;
127
+ selected: number;
128
+ recorded: string[];
129
+ existing: string[];
130
+ failures: Array<{
131
+ policy_id: string;
132
+ error: string;
133
+ }>;
134
+ skipped_reason: string | null;
135
+ authority: "none";
136
+ effects: "shadow_only";
137
+ }
138
+ export interface G2ShadowBackfillReport {
139
+ id: string;
140
+ content_hash: string;
141
+ plan_id: string | null;
142
+ max_commits: number;
143
+ commits: string[];
144
+ selected: number;
145
+ attempted: number;
146
+ recorded: string[];
147
+ existing: string[];
148
+ ineligible: Array<{
149
+ policy_id: string;
150
+ commit: string;
151
+ reason: string;
152
+ }>;
153
+ preflight_failures: Array<{
154
+ policy_id: string;
155
+ commit: string;
156
+ error: string;
157
+ }>;
158
+ skipped_reason: string | null;
159
+ authority: "none";
160
+ effects: "shadow_only";
161
+ writes: "atomic_after_preflight" | "none";
162
+ }
163
+ export interface G2ShadowQueueItem {
164
+ policy_id: string;
165
+ shadow_id: string;
166
+ proof_id: string;
167
+ policy_hash: string;
168
+ evaluation_hash: string;
169
+ observed_at: string;
170
+ result: "violated";
171
+ explanation: string;
172
+ matches: Array<{
173
+ file: string;
174
+ line?: number;
175
+ symbol?: string;
176
+ relation_path?: string[];
177
+ }>;
178
+ }
179
+ export interface G2ShadowQueue {
180
+ id: string;
181
+ content_hash: string;
182
+ plan_id: string | null;
183
+ total_unclassified: number;
184
+ unresolved_unknown_error: number;
185
+ limit: number;
186
+ items: G2ShadowQueueItem[];
187
+ has_more: boolean;
188
+ authority: "none";
189
+ }
190
+ export interface ScoreG2ReadinessInput {
191
+ manifest: G2Plan | null;
192
+ policy_evidence: G2PolicyEvidence[];
193
+ runbook_evidence: G2RunbookEvidence[];
194
+ active_blocking_policy_ids: string[];
195
+ inventory?: G2Inventory;
196
+ }
197
+ export declare function scoreG2Readiness(input: ScoreG2ReadinessInput): G2ReadinessReport;
198
+ export declare function loadPrivateRecords<T>(dir: string | undefined, prefix: string, parse: (value: unknown) => T, label: string): T[];
199
+ /** Private-only append-only storage for the human-selected G2 packet and runbook drills. */
200
+ export declare class G2EvidenceRepository {
201
+ private readonly store;
202
+ constructor(store: HunchStore);
203
+ listPlans(): G2Plan[];
204
+ currentPlan(): G2Plan | null;
205
+ putPlan(plan: G2Plan): G2Plan;
206
+ listRehearsals(): RunbookRehearsal[];
207
+ putRehearsal(receipt: RunbookRehearsal): RunbookRehearsal;
208
+ }
209
+ export declare function runbookContentHash(runbook: Runbook): string;