@mcptoolshop/research-os 0.4.0 → 0.5.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.
@@ -0,0 +1,509 @@
1
+ import { z } from 'zod';
2
+
3
+ declare const AggregateMetricSchema: z.ZodObject<{
4
+ median: z.ZodNumber;
5
+ min: z.ZodNumber;
6
+ max: z.ZodNumber;
7
+ values: z.ZodArray<z.ZodNumber, "many">;
8
+ }, "strip", z.ZodTypeAny, {
9
+ median: number;
10
+ min: number;
11
+ max: number;
12
+ values: number[];
13
+ }, {
14
+ median: number;
15
+ min: number;
16
+ max: number;
17
+ values: number[];
18
+ }>;
19
+ declare const PerCategoryAggregateEntrySchema: z.ZodObject<{
20
+ median_ratio: z.ZodNumber;
21
+ min_ratio: z.ZodNumber;
22
+ max_ratio: z.ZodNumber;
23
+ total: z.ZodNumber;
24
+ per_run_ratios: z.ZodArray<z.ZodNumber, "many">;
25
+ }, "strip", z.ZodTypeAny, {
26
+ median_ratio: number;
27
+ min_ratio: number;
28
+ max_ratio: number;
29
+ total: number;
30
+ per_run_ratios: number[];
31
+ }, {
32
+ median_ratio: number;
33
+ min_ratio: number;
34
+ max_ratio: number;
35
+ total: number;
36
+ per_run_ratios: number[];
37
+ }>;
38
+ declare const PerCategoryAggregateSchema: z.ZodRecord<z.ZodString, z.ZodObject<{
39
+ median_ratio: z.ZodNumber;
40
+ min_ratio: z.ZodNumber;
41
+ max_ratio: z.ZodNumber;
42
+ total: z.ZodNumber;
43
+ per_run_ratios: z.ZodArray<z.ZodNumber, "many">;
44
+ }, "strip", z.ZodTypeAny, {
45
+ median_ratio: number;
46
+ min_ratio: number;
47
+ max_ratio: number;
48
+ total: number;
49
+ per_run_ratios: number[];
50
+ }, {
51
+ median_ratio: number;
52
+ min_ratio: number;
53
+ max_ratio: number;
54
+ total: number;
55
+ per_run_ratios: number[];
56
+ }>>;
57
+ declare const AggregatePassFailSchema: z.ZodObject<{
58
+ fp_ceiling: z.ZodEnum<["PASS", "FAIL"]>;
59
+ any_flag_recall_floor: z.ZodEnum<["PASS", "FAIL"]>;
60
+ per_category_any_flag_floor: z.ZodEnum<["PASS", "FAIL"]>;
61
+ strict_recall_floor: z.ZodEnum<["PASS", "FAIL"]>;
62
+ decision_vocab_completeness: z.ZodEnum<["PASS", "FAIL"]>;
63
+ latency_soft: z.ZodEnum<["PASS", "WARN"]>;
64
+ latency_hard: z.ZodEnum<["PASS", "FAIL"]>;
65
+ empty_or_malformed: z.ZodEnum<["PASS", "FAIL"]>;
66
+ overall: z.ZodEnum<["PASS", "FAIL"]>;
67
+ }, "strip", z.ZodTypeAny, {
68
+ fp_ceiling: "PASS" | "FAIL";
69
+ any_flag_recall_floor: "PASS" | "FAIL";
70
+ per_category_any_flag_floor: "PASS" | "FAIL";
71
+ strict_recall_floor: "PASS" | "FAIL";
72
+ decision_vocab_completeness: "PASS" | "FAIL";
73
+ latency_soft: "PASS" | "WARN";
74
+ latency_hard: "PASS" | "FAIL";
75
+ empty_or_malformed: "PASS" | "FAIL";
76
+ overall: "PASS" | "FAIL";
77
+ }, {
78
+ fp_ceiling: "PASS" | "FAIL";
79
+ any_flag_recall_floor: "PASS" | "FAIL";
80
+ per_category_any_flag_floor: "PASS" | "FAIL";
81
+ strict_recall_floor: "PASS" | "FAIL";
82
+ decision_vocab_completeness: "PASS" | "FAIL";
83
+ latency_soft: "PASS" | "WARN";
84
+ latency_hard: "PASS" | "FAIL";
85
+ empty_or_malformed: "PASS" | "FAIL";
86
+ overall: "PASS" | "FAIL";
87
+ }>;
88
+ declare const AggregateDecisionVocabBarSchema: z.ZodObject<{
89
+ architecture: z.ZodEnum<["single-pass", "two-pass"]>;
90
+ required: z.ZodNumber;
91
+ median_produced: z.ZodNumber;
92
+ passed: z.ZodBoolean;
93
+ }, "strip", z.ZodTypeAny, {
94
+ required: number;
95
+ architecture: "single-pass" | "two-pass";
96
+ median_produced: number;
97
+ passed: boolean;
98
+ }, {
99
+ required: number;
100
+ architecture: "single-pass" | "two-pass";
101
+ median_produced: number;
102
+ passed: boolean;
103
+ }>;
104
+ declare const AggregateCalibrationReceiptSchema: z.ZodObject<{
105
+ schema_version: z.ZodLiteral<1>;
106
+ receipt_kind: z.ZodLiteral<"aggregate">;
107
+ profile_name: z.ZodString;
108
+ status: z.ZodEnum<["trusted_baseline", "conditional_pass", "failed", "comparison_only"]>;
109
+ model: z.ZodString;
110
+ architecture: z.ZodEnum<["single-pass", "two-pass"]>;
111
+ fixture: z.ZodString;
112
+ fixture_total_claims: z.ZodNumber;
113
+ fixture_good_claims: z.ZodNumber;
114
+ fixture_bad_claims: z.ZodNumber;
115
+ runs_count: z.ZodNumber;
116
+ run_files: z.ZodArray<z.ZodString, "many">;
117
+ aggregated_at: z.ZodString;
118
+ research_os_version: z.ZodString;
119
+ good_fp_count: z.ZodObject<{
120
+ median: z.ZodNumber;
121
+ min: z.ZodNumber;
122
+ max: z.ZodNumber;
123
+ values: z.ZodArray<z.ZodNumber, "many">;
124
+ }, "strip", z.ZodTypeAny, {
125
+ median: number;
126
+ min: number;
127
+ max: number;
128
+ values: number[];
129
+ }, {
130
+ median: number;
131
+ min: number;
132
+ max: number;
133
+ values: number[];
134
+ }>;
135
+ any_flag_recall_ratio: z.ZodObject<{
136
+ median: z.ZodNumber;
137
+ min: z.ZodNumber;
138
+ max: z.ZodNumber;
139
+ values: z.ZodArray<z.ZodNumber, "many">;
140
+ }, "strip", z.ZodTypeAny, {
141
+ median: number;
142
+ min: number;
143
+ max: number;
144
+ values: number[];
145
+ }, {
146
+ median: number;
147
+ min: number;
148
+ max: number;
149
+ values: number[];
150
+ }>;
151
+ strict_recall_ratio: z.ZodObject<{
152
+ median: z.ZodNumber;
153
+ min: z.ZodNumber;
154
+ max: z.ZodNumber;
155
+ values: z.ZodArray<z.ZodNumber, "many">;
156
+ }, "strip", z.ZodTypeAny, {
157
+ median: number;
158
+ min: number;
159
+ max: number;
160
+ values: number[];
161
+ }, {
162
+ median: number;
163
+ min: number;
164
+ max: number;
165
+ values: number[];
166
+ }>;
167
+ decisions_produced_count: z.ZodObject<{
168
+ median: z.ZodNumber;
169
+ min: z.ZodNumber;
170
+ max: z.ZodNumber;
171
+ values: z.ZodArray<z.ZodNumber, "many">;
172
+ }, "strip", z.ZodTypeAny, {
173
+ median: number;
174
+ min: number;
175
+ max: number;
176
+ values: number[];
177
+ }, {
178
+ median: number;
179
+ min: number;
180
+ max: number;
181
+ values: number[];
182
+ }>;
183
+ runtime_ms: z.ZodObject<{
184
+ median: z.ZodNumber;
185
+ min: z.ZodNumber;
186
+ max: z.ZodNumber;
187
+ values: z.ZodArray<z.ZodNumber, "many">;
188
+ }, "strip", z.ZodTypeAny, {
189
+ median: number;
190
+ min: number;
191
+ max: number;
192
+ values: number[];
193
+ }, {
194
+ median: number;
195
+ min: number;
196
+ max: number;
197
+ values: number[];
198
+ }>;
199
+ empty_or_malformed_responses: z.ZodObject<{
200
+ median: z.ZodNumber;
201
+ min: z.ZodNumber;
202
+ max: z.ZodNumber;
203
+ values: z.ZodArray<z.ZodNumber, "many">;
204
+ }, "strip", z.ZodTypeAny, {
205
+ median: number;
206
+ min: number;
207
+ max: number;
208
+ values: number[];
209
+ }, {
210
+ median: number;
211
+ min: number;
212
+ max: number;
213
+ values: number[];
214
+ }>;
215
+ per_category_any_flag: z.ZodRecord<z.ZodString, z.ZodObject<{
216
+ median_ratio: z.ZodNumber;
217
+ min_ratio: z.ZodNumber;
218
+ max_ratio: z.ZodNumber;
219
+ total: z.ZodNumber;
220
+ per_run_ratios: z.ZodArray<z.ZodNumber, "many">;
221
+ }, "strip", z.ZodTypeAny, {
222
+ median_ratio: number;
223
+ min_ratio: number;
224
+ max_ratio: number;
225
+ total: number;
226
+ per_run_ratios: number[];
227
+ }, {
228
+ median_ratio: number;
229
+ min_ratio: number;
230
+ max_ratio: number;
231
+ total: number;
232
+ per_run_ratios: number[];
233
+ }>>;
234
+ per_category_strict: z.ZodRecord<z.ZodString, z.ZodObject<{
235
+ median_ratio: z.ZodNumber;
236
+ min_ratio: z.ZodNumber;
237
+ max_ratio: z.ZodNumber;
238
+ total: z.ZodNumber;
239
+ per_run_ratios: z.ZodArray<z.ZodNumber, "many">;
240
+ }, "strip", z.ZodTypeAny, {
241
+ median_ratio: number;
242
+ min_ratio: number;
243
+ max_ratio: number;
244
+ total: number;
245
+ per_run_ratios: number[];
246
+ }, {
247
+ median_ratio: number;
248
+ min_ratio: number;
249
+ max_ratio: number;
250
+ total: number;
251
+ per_run_ratios: number[];
252
+ }>>;
253
+ decision_vocabulary: z.ZodRecord<z.ZodString, z.ZodObject<{
254
+ median: z.ZodNumber;
255
+ min: z.ZodNumber;
256
+ max: z.ZodNumber;
257
+ values: z.ZodArray<z.ZodNumber, "many">;
258
+ }, "strip", z.ZodTypeAny, {
259
+ median: number;
260
+ min: number;
261
+ max: number;
262
+ values: number[];
263
+ }, {
264
+ median: number;
265
+ min: number;
266
+ max: number;
267
+ values: number[];
268
+ }>>;
269
+ decision_vocab_bar: z.ZodObject<{
270
+ architecture: z.ZodEnum<["single-pass", "two-pass"]>;
271
+ required: z.ZodNumber;
272
+ median_produced: z.ZodNumber;
273
+ passed: z.ZodBoolean;
274
+ }, "strip", z.ZodTypeAny, {
275
+ required: number;
276
+ architecture: "single-pass" | "two-pass";
277
+ median_produced: number;
278
+ passed: boolean;
279
+ }, {
280
+ required: number;
281
+ architecture: "single-pass" | "two-pass";
282
+ median_produced: number;
283
+ passed: boolean;
284
+ }>;
285
+ unreachable_decisions: z.ZodArray<z.ZodString, "many">;
286
+ pass_fail: z.ZodObject<{
287
+ fp_ceiling: z.ZodEnum<["PASS", "FAIL"]>;
288
+ any_flag_recall_floor: z.ZodEnum<["PASS", "FAIL"]>;
289
+ per_category_any_flag_floor: z.ZodEnum<["PASS", "FAIL"]>;
290
+ strict_recall_floor: z.ZodEnum<["PASS", "FAIL"]>;
291
+ decision_vocab_completeness: z.ZodEnum<["PASS", "FAIL"]>;
292
+ latency_soft: z.ZodEnum<["PASS", "WARN"]>;
293
+ latency_hard: z.ZodEnum<["PASS", "FAIL"]>;
294
+ empty_or_malformed: z.ZodEnum<["PASS", "FAIL"]>;
295
+ overall: z.ZodEnum<["PASS", "FAIL"]>;
296
+ }, "strip", z.ZodTypeAny, {
297
+ fp_ceiling: "PASS" | "FAIL";
298
+ any_flag_recall_floor: "PASS" | "FAIL";
299
+ per_category_any_flag_floor: "PASS" | "FAIL";
300
+ strict_recall_floor: "PASS" | "FAIL";
301
+ decision_vocab_completeness: "PASS" | "FAIL";
302
+ latency_soft: "PASS" | "WARN";
303
+ latency_hard: "PASS" | "FAIL";
304
+ empty_or_malformed: "PASS" | "FAIL";
305
+ overall: "PASS" | "FAIL";
306
+ }, {
307
+ fp_ceiling: "PASS" | "FAIL";
308
+ any_flag_recall_floor: "PASS" | "FAIL";
309
+ per_category_any_flag_floor: "PASS" | "FAIL";
310
+ strict_recall_floor: "PASS" | "FAIL";
311
+ decision_vocab_completeness: "PASS" | "FAIL";
312
+ latency_soft: "PASS" | "WARN";
313
+ latency_hard: "PASS" | "FAIL";
314
+ empty_or_malformed: "PASS" | "FAIL";
315
+ overall: "PASS" | "FAIL";
316
+ }>;
317
+ recurring_bar_failures: z.ZodArray<z.ZodString, "many">;
318
+ notes: z.ZodArray<z.ZodString, "many">;
319
+ }, "strip", z.ZodTypeAny, {
320
+ status: "trusted_baseline" | "conditional_pass" | "failed" | "comparison_only";
321
+ architecture: "single-pass" | "two-pass";
322
+ schema_version: 1;
323
+ receipt_kind: "aggregate";
324
+ profile_name: string;
325
+ model: string;
326
+ fixture: string;
327
+ fixture_total_claims: number;
328
+ fixture_good_claims: number;
329
+ fixture_bad_claims: number;
330
+ runs_count: number;
331
+ run_files: string[];
332
+ aggregated_at: string;
333
+ research_os_version: string;
334
+ good_fp_count: {
335
+ median: number;
336
+ min: number;
337
+ max: number;
338
+ values: number[];
339
+ };
340
+ any_flag_recall_ratio: {
341
+ median: number;
342
+ min: number;
343
+ max: number;
344
+ values: number[];
345
+ };
346
+ strict_recall_ratio: {
347
+ median: number;
348
+ min: number;
349
+ max: number;
350
+ values: number[];
351
+ };
352
+ decisions_produced_count: {
353
+ median: number;
354
+ min: number;
355
+ max: number;
356
+ values: number[];
357
+ };
358
+ runtime_ms: {
359
+ median: number;
360
+ min: number;
361
+ max: number;
362
+ values: number[];
363
+ };
364
+ empty_or_malformed_responses: {
365
+ median: number;
366
+ min: number;
367
+ max: number;
368
+ values: number[];
369
+ };
370
+ per_category_any_flag: Record<string, {
371
+ median_ratio: number;
372
+ min_ratio: number;
373
+ max_ratio: number;
374
+ total: number;
375
+ per_run_ratios: number[];
376
+ }>;
377
+ per_category_strict: Record<string, {
378
+ median_ratio: number;
379
+ min_ratio: number;
380
+ max_ratio: number;
381
+ total: number;
382
+ per_run_ratios: number[];
383
+ }>;
384
+ decision_vocabulary: Record<string, {
385
+ median: number;
386
+ min: number;
387
+ max: number;
388
+ values: number[];
389
+ }>;
390
+ decision_vocab_bar: {
391
+ required: number;
392
+ architecture: "single-pass" | "two-pass";
393
+ median_produced: number;
394
+ passed: boolean;
395
+ };
396
+ unreachable_decisions: string[];
397
+ pass_fail: {
398
+ fp_ceiling: "PASS" | "FAIL";
399
+ any_flag_recall_floor: "PASS" | "FAIL";
400
+ per_category_any_flag_floor: "PASS" | "FAIL";
401
+ strict_recall_floor: "PASS" | "FAIL";
402
+ decision_vocab_completeness: "PASS" | "FAIL";
403
+ latency_soft: "PASS" | "WARN";
404
+ latency_hard: "PASS" | "FAIL";
405
+ empty_or_malformed: "PASS" | "FAIL";
406
+ overall: "PASS" | "FAIL";
407
+ };
408
+ recurring_bar_failures: string[];
409
+ notes: string[];
410
+ }, {
411
+ status: "trusted_baseline" | "conditional_pass" | "failed" | "comparison_only";
412
+ architecture: "single-pass" | "two-pass";
413
+ schema_version: 1;
414
+ receipt_kind: "aggregate";
415
+ profile_name: string;
416
+ model: string;
417
+ fixture: string;
418
+ fixture_total_claims: number;
419
+ fixture_good_claims: number;
420
+ fixture_bad_claims: number;
421
+ runs_count: number;
422
+ run_files: string[];
423
+ aggregated_at: string;
424
+ research_os_version: string;
425
+ good_fp_count: {
426
+ median: number;
427
+ min: number;
428
+ max: number;
429
+ values: number[];
430
+ };
431
+ any_flag_recall_ratio: {
432
+ median: number;
433
+ min: number;
434
+ max: number;
435
+ values: number[];
436
+ };
437
+ strict_recall_ratio: {
438
+ median: number;
439
+ min: number;
440
+ max: number;
441
+ values: number[];
442
+ };
443
+ decisions_produced_count: {
444
+ median: number;
445
+ min: number;
446
+ max: number;
447
+ values: number[];
448
+ };
449
+ runtime_ms: {
450
+ median: number;
451
+ min: number;
452
+ max: number;
453
+ values: number[];
454
+ };
455
+ empty_or_malformed_responses: {
456
+ median: number;
457
+ min: number;
458
+ max: number;
459
+ values: number[];
460
+ };
461
+ per_category_any_flag: Record<string, {
462
+ median_ratio: number;
463
+ min_ratio: number;
464
+ max_ratio: number;
465
+ total: number;
466
+ per_run_ratios: number[];
467
+ }>;
468
+ per_category_strict: Record<string, {
469
+ median_ratio: number;
470
+ min_ratio: number;
471
+ max_ratio: number;
472
+ total: number;
473
+ per_run_ratios: number[];
474
+ }>;
475
+ decision_vocabulary: Record<string, {
476
+ median: number;
477
+ min: number;
478
+ max: number;
479
+ values: number[];
480
+ }>;
481
+ decision_vocab_bar: {
482
+ required: number;
483
+ architecture: "single-pass" | "two-pass";
484
+ median_produced: number;
485
+ passed: boolean;
486
+ };
487
+ unreachable_decisions: string[];
488
+ pass_fail: {
489
+ fp_ceiling: "PASS" | "FAIL";
490
+ any_flag_recall_floor: "PASS" | "FAIL";
491
+ per_category_any_flag_floor: "PASS" | "FAIL";
492
+ strict_recall_floor: "PASS" | "FAIL";
493
+ decision_vocab_completeness: "PASS" | "FAIL";
494
+ latency_soft: "PASS" | "WARN";
495
+ latency_hard: "PASS" | "FAIL";
496
+ empty_or_malformed: "PASS" | "FAIL";
497
+ overall: "PASS" | "FAIL";
498
+ };
499
+ recurring_bar_failures: string[];
500
+ notes: string[];
501
+ }>;
502
+ type AggregateMetric = z.infer<typeof AggregateMetricSchema>;
503
+ type PerCategoryAggregateEntry = z.infer<typeof PerCategoryAggregateEntrySchema>;
504
+ type PerCategoryAggregate = z.infer<typeof PerCategoryAggregateSchema>;
505
+ type AggregatePassFail = z.infer<typeof AggregatePassFailSchema>;
506
+ type AggregateDecisionVocabBar = z.infer<typeof AggregateDecisionVocabBarSchema>;
507
+ type AggregateCalibrationReceipt = z.infer<typeof AggregateCalibrationReceiptSchema>;
508
+
509
+ export { type AggregateCalibrationReceipt, AggregateCalibrationReceiptSchema, type AggregateDecisionVocabBar, AggregateDecisionVocabBarSchema, type AggregateMetric, AggregateMetricSchema, type AggregatePassFail, AggregatePassFailSchema, type PerCategoryAggregate, type PerCategoryAggregateEntry, PerCategoryAggregateEntrySchema, PerCategoryAggregateSchema };
@@ -0,0 +1,143 @@
1
+ // src/calibration/aggregate-receipt-schema.ts
2
+ import { z as z2 } from "zod";
3
+
4
+ // src/calibration/receipt-schema.ts
5
+ import { z } from "zod";
6
+ var StatusLabelSchema = z.enum([
7
+ "trusted_baseline",
8
+ "conditional_pass",
9
+ "failed",
10
+ "comparison_only"
11
+ ]);
12
+ var ArchitectureSchema = z.enum(["single-pass", "two-pass"]);
13
+ var RecallSchema = z.object({
14
+ matched: z.number().int().nonnegative(),
15
+ total: z.number().int().nonnegative(),
16
+ ratio: z.number().min(0).max(1)
17
+ });
18
+ var PerCategoryRecallSchema = z.record(z.string(), RecallSchema);
19
+ var PassFailSchema = z.object({
20
+ fp_ceiling: z.enum(["PASS", "FAIL"]),
21
+ any_flag_recall_floor: z.enum(["PASS", "FAIL"]),
22
+ per_category_any_flag_floor: z.enum(["PASS", "FAIL"]),
23
+ strict_recall_floor: z.enum(["PASS", "FAIL"]),
24
+ decision_vocab_completeness: z.enum(["PASS", "FAIL"]),
25
+ latency_soft: z.enum(["PASS", "WARN"]),
26
+ latency_hard: z.enum(["PASS", "FAIL"]),
27
+ empty_or_malformed: z.enum(["PASS", "FAIL"]),
28
+ overall: z.enum(["PASS", "FAIL"])
29
+ });
30
+ var DecisionVocabBarSchema = z.object({
31
+ architecture: ArchitectureSchema,
32
+ required: z.number().int().positive(),
33
+ produced: z.number().int().nonnegative(),
34
+ passed: z.boolean()
35
+ });
36
+ var CalibrationReceiptSchema = z.object({
37
+ schema_version: z.literal(1),
38
+ profile_name: z.string(),
39
+ status: StatusLabelSchema,
40
+ model: z.string(),
41
+ architecture: ArchitectureSchema,
42
+ fixture: z.string(),
43
+ fixture_total_claims: z.number().int().positive(),
44
+ fixture_good_claims: z.number().int().nonnegative(),
45
+ fixture_bad_claims: z.number().int().nonnegative(),
46
+ calibrated_at: z.string(),
47
+ research_os_version: z.string(),
48
+ runtime_ms: z.number().int().nonnegative(),
49
+ good_fp_count: z.number().int().nonnegative(),
50
+ any_flag_recall: RecallSchema,
51
+ strict_recall: RecallSchema,
52
+ per_category_any_flag: PerCategoryRecallSchema,
53
+ per_category_strict: PerCategoryRecallSchema,
54
+ decision_vocabulary: z.record(z.string(), z.number().int().nonnegative()),
55
+ decisions_produced_count: z.number().int().nonnegative(),
56
+ decision_vocab_bar: DecisionVocabBarSchema,
57
+ unreachable_decisions: z.array(z.string()),
58
+ empty_or_malformed_responses: z.number().int().nonnegative(),
59
+ pass_fail: PassFailSchema,
60
+ notes: z.array(z.string())
61
+ });
62
+
63
+ // src/calibration/aggregate-receipt-schema.ts
64
+ var AggregateMetricSchema = z2.object({
65
+ median: z2.number(),
66
+ min: z2.number(),
67
+ max: z2.number(),
68
+ values: z2.array(z2.number())
69
+ // per-run values in run order (run-001, run-002, ...)
70
+ });
71
+ var PerCategoryAggregateEntrySchema = z2.object({
72
+ median_ratio: z2.number().min(0).max(1),
73
+ min_ratio: z2.number().min(0).max(1),
74
+ max_ratio: z2.number().min(0).max(1),
75
+ total: z2.number().int().nonnegative(),
76
+ // seed count — same across all runs
77
+ per_run_ratios: z2.array(z2.number())
78
+ });
79
+ var PerCategoryAggregateSchema = z2.record(z2.string(), PerCategoryAggregateEntrySchema);
80
+ var AggregatePassFailSchema = z2.object({
81
+ fp_ceiling: z2.enum(["PASS", "FAIL"]),
82
+ any_flag_recall_floor: z2.enum(["PASS", "FAIL"]),
83
+ per_category_any_flag_floor: z2.enum(["PASS", "FAIL"]),
84
+ strict_recall_floor: z2.enum(["PASS", "FAIL"]),
85
+ decision_vocab_completeness: z2.enum(["PASS", "FAIL"]),
86
+ latency_soft: z2.enum(["PASS", "WARN"]),
87
+ latency_hard: z2.enum(["PASS", "FAIL"]),
88
+ empty_or_malformed: z2.enum(["PASS", "FAIL"]),
89
+ overall: z2.enum(["PASS", "FAIL"])
90
+ });
91
+ var AggregateDecisionVocabBarSchema = z2.object({
92
+ architecture: ArchitectureSchema,
93
+ required: z2.number().int().positive(),
94
+ median_produced: z2.number(),
95
+ // float — median of per-run decisions_produced_count
96
+ passed: z2.boolean()
97
+ });
98
+ var AggregateCalibrationReceiptSchema = z2.object({
99
+ schema_version: z2.literal(1),
100
+ receipt_kind: z2.literal("aggregate"),
101
+ // discriminates from single-run receipt
102
+ profile_name: z2.string(),
103
+ status: StatusLabelSchema,
104
+ model: z2.string(),
105
+ architecture: ArchitectureSchema,
106
+ fixture: z2.string(),
107
+ fixture_total_claims: z2.number().int().positive(),
108
+ fixture_good_claims: z2.number().int().nonnegative(),
109
+ fixture_bad_claims: z2.number().int().nonnegative(),
110
+ runs_count: z2.number().int().min(2),
111
+ run_files: z2.array(z2.string()),
112
+ // relative paths: runs/run-001.json, etc.
113
+ aggregated_at: z2.string(),
114
+ // ISO 8601
115
+ research_os_version: z2.string(),
116
+ // Aggregate metrics — median + min + max + per-run values in run order
117
+ good_fp_count: AggregateMetricSchema,
118
+ any_flag_recall_ratio: AggregateMetricSchema,
119
+ strict_recall_ratio: AggregateMetricSchema,
120
+ decisions_produced_count: AggregateMetricSchema,
121
+ runtime_ms: AggregateMetricSchema,
122
+ empty_or_malformed_responses: AggregateMetricSchema,
123
+ per_category_any_flag: PerCategoryAggregateSchema,
124
+ per_category_strict: PerCategoryAggregateSchema,
125
+ // Decision vocabulary — union of all decisions seen across runs, median count each
126
+ decision_vocabulary: z2.record(z2.string(), AggregateMetricSchema),
127
+ decision_vocab_bar: AggregateDecisionVocabBarSchema,
128
+ unreachable_decisions: z2.array(z2.string()),
129
+ pass_fail: AggregatePassFailSchema,
130
+ // Bars that FAILed in >= ceil(runs_count/2) individual runs.
131
+ // Non-empty list demotes trusted_baseline to conditional_pass.
132
+ recurring_bar_failures: z2.array(z2.string()),
133
+ notes: z2.array(z2.string())
134
+ });
135
+ export {
136
+ AggregateCalibrationReceiptSchema,
137
+ AggregateDecisionVocabBarSchema,
138
+ AggregateMetricSchema,
139
+ AggregatePassFailSchema,
140
+ PerCategoryAggregateEntrySchema,
141
+ PerCategoryAggregateSchema
142
+ };
143
+ //# sourceMappingURL=aggregate-receipt-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/calibration/aggregate-receipt-schema.ts","../../src/calibration/receipt-schema.ts"],"sourcesContent":["import { z } from 'zod';\nimport { StatusLabelSchema, ArchitectureSchema } from './receipt-schema.js';\n\nexport const AggregateMetricSchema = z.object({\n median: z.number(),\n min: z.number(),\n max: z.number(),\n values: z.array(z.number()), // per-run values in run order (run-001, run-002, ...)\n});\n\nexport const PerCategoryAggregateEntrySchema = z.object({\n median_ratio: z.number().min(0).max(1),\n min_ratio: z.number().min(0).max(1),\n max_ratio: z.number().min(0).max(1),\n total: z.number().int().nonnegative(), // seed count — same across all runs\n per_run_ratios: z.array(z.number()),\n});\n\nexport const PerCategoryAggregateSchema = z.record(z.string(), PerCategoryAggregateEntrySchema);\n\nexport const AggregatePassFailSchema = z.object({\n fp_ceiling: z.enum(['PASS', 'FAIL']),\n any_flag_recall_floor: z.enum(['PASS', 'FAIL']),\n per_category_any_flag_floor: z.enum(['PASS', 'FAIL']),\n strict_recall_floor: z.enum(['PASS', 'FAIL']),\n decision_vocab_completeness: z.enum(['PASS', 'FAIL']),\n latency_soft: z.enum(['PASS', 'WARN']),\n latency_hard: z.enum(['PASS', 'FAIL']),\n empty_or_malformed: z.enum(['PASS', 'FAIL']),\n overall: z.enum(['PASS', 'FAIL']),\n});\n\nexport const AggregateDecisionVocabBarSchema = z.object({\n architecture: ArchitectureSchema,\n required: z.number().int().positive(),\n median_produced: z.number(), // float — median of per-run decisions_produced_count\n passed: z.boolean(),\n});\n\nexport const AggregateCalibrationReceiptSchema = z.object({\n schema_version: z.literal(1),\n receipt_kind: z.literal('aggregate'), // discriminates from single-run receipt\n profile_name: z.string(),\n status: StatusLabelSchema,\n model: z.string(),\n architecture: ArchitectureSchema,\n fixture: z.string(),\n fixture_total_claims: z.number().int().positive(),\n fixture_good_claims: z.number().int().nonnegative(),\n fixture_bad_claims: z.number().int().nonnegative(),\n runs_count: z.number().int().min(2),\n run_files: z.array(z.string()), // relative paths: runs/run-001.json, etc.\n aggregated_at: z.string(), // ISO 8601\n research_os_version: z.string(),\n\n // Aggregate metrics — median + min + max + per-run values in run order\n good_fp_count: AggregateMetricSchema,\n any_flag_recall_ratio: AggregateMetricSchema,\n strict_recall_ratio: AggregateMetricSchema,\n decisions_produced_count: AggregateMetricSchema,\n runtime_ms: AggregateMetricSchema,\n empty_or_malformed_responses: AggregateMetricSchema,\n\n per_category_any_flag: PerCategoryAggregateSchema,\n per_category_strict: PerCategoryAggregateSchema,\n\n // Decision vocabulary — union of all decisions seen across runs, median count each\n decision_vocabulary: z.record(z.string(), AggregateMetricSchema),\n decision_vocab_bar: AggregateDecisionVocabBarSchema,\n unreachable_decisions: z.array(z.string()),\n\n pass_fail: AggregatePassFailSchema,\n // Bars that FAILed in >= ceil(runs_count/2) individual runs.\n // Non-empty list demotes trusted_baseline to conditional_pass.\n recurring_bar_failures: z.array(z.string()),\n\n notes: z.array(z.string()),\n});\n\nexport type AggregateMetric = z.infer<typeof AggregateMetricSchema>;\nexport type PerCategoryAggregateEntry = z.infer<typeof PerCategoryAggregateEntrySchema>;\nexport type PerCategoryAggregate = z.infer<typeof PerCategoryAggregateSchema>;\nexport type AggregatePassFail = z.infer<typeof AggregatePassFailSchema>;\nexport type AggregateDecisionVocabBar = z.infer<typeof AggregateDecisionVocabBarSchema>;\nexport type AggregateCalibrationReceipt = z.infer<typeof AggregateCalibrationReceiptSchema>;\n","import { z } from 'zod';\n\nexport const StatusLabelSchema = z.enum([\n 'trusted_baseline',\n 'conditional_pass',\n 'failed',\n 'comparison_only',\n]);\n\nexport const ArchitectureSchema = z.enum(['single-pass', 'two-pass']);\n\nexport const RecallSchema = z.object({\n matched: z.number().int().nonnegative(),\n total: z.number().int().nonnegative(),\n ratio: z.number().min(0).max(1),\n});\n\nexport const PerCategoryRecallSchema = z.record(z.string(), RecallSchema);\n\nexport const PassFailSchema = z.object({\n fp_ceiling: z.enum(['PASS', 'FAIL']),\n any_flag_recall_floor: z.enum(['PASS', 'FAIL']),\n per_category_any_flag_floor: z.enum(['PASS', 'FAIL']),\n strict_recall_floor: z.enum(['PASS', 'FAIL']),\n decision_vocab_completeness: z.enum(['PASS', 'FAIL']),\n latency_soft: z.enum(['PASS', 'WARN']),\n latency_hard: z.enum(['PASS', 'FAIL']),\n empty_or_malformed: z.enum(['PASS', 'FAIL']),\n overall: z.enum(['PASS', 'FAIL']),\n});\n\nexport const DecisionVocabBarSchema = z.object({\n architecture: ArchitectureSchema,\n required: z.number().int().positive(),\n produced: z.number().int().nonnegative(),\n passed: z.boolean(),\n});\n\nexport const CalibrationReceiptSchema = z.object({\n schema_version: z.literal(1),\n profile_name: z.string(),\n status: StatusLabelSchema,\n model: z.string(),\n architecture: ArchitectureSchema,\n fixture: z.string(),\n fixture_total_claims: z.number().int().positive(),\n fixture_good_claims: z.number().int().nonnegative(),\n fixture_bad_claims: z.number().int().nonnegative(),\n calibrated_at: z.string(),\n research_os_version: z.string(),\n runtime_ms: z.number().int().nonnegative(),\n good_fp_count: z.number().int().nonnegative(),\n any_flag_recall: RecallSchema,\n strict_recall: RecallSchema,\n per_category_any_flag: PerCategoryRecallSchema,\n per_category_strict: PerCategoryRecallSchema,\n decision_vocabulary: z.record(z.string(), z.number().int().nonnegative()),\n decisions_produced_count: z.number().int().nonnegative(),\n decision_vocab_bar: DecisionVocabBarSchema,\n unreachable_decisions: z.array(z.string()),\n empty_or_malformed_responses: z.number().int().nonnegative(),\n pass_fail: PassFailSchema,\n notes: z.array(z.string()),\n});\n\nexport type StatusLabel = z.infer<typeof StatusLabelSchema>;\nexport type Architecture = z.infer<typeof ArchitectureSchema>;\nexport type Recall = z.infer<typeof RecallSchema>;\nexport type PerCategoryRecall = z.infer<typeof PerCategoryRecallSchema>;\nexport type PassFail = z.infer<typeof PassFailSchema>;\nexport type DecisionVocabBar = z.infer<typeof DecisionVocabBarSchema>;\nexport type CalibrationReceipt = z.infer<typeof CalibrationReceiptSchema>;\n"],"mappings":"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","names":["z","z"]}