@mcptoolshop/research-os 0.5.0 → 0.6.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.
- package/CHANGELOG.md +119 -0
- package/README.es.md +11 -3
- package/README.fr.md +14 -6
- package/README.hi.md +33 -20
- package/README.it.md +11 -3
- package/README.ja.md +15 -7
- package/README.md +20 -4
- package/README.pt-BR.md +11 -3
- package/README.zh.md +11 -3
- package/dist/calibration/aggregate-receipt-schema.d.ts +38 -0
- package/dist/calibration/aggregate-receipt-schema.js +99 -82
- package/dist/calibration/aggregate-receipt-schema.js.map +1 -1
- package/dist/calibration/aggregate.d.ts +2 -0
- package/dist/calibration/aggregate.js +123 -84
- package/dist/calibration/aggregate.js.map +1 -1
- package/dist/calibration/receipt-schema.d.ts +45 -6
- package/dist/calibration/receipt-schema.js +53 -38
- package/dist/calibration/receipt-schema.js.map +1 -1
- package/dist/calibration/receipt.d.ts +1 -0
- package/dist/calibration/receipt.js +20 -1
- package/dist/calibration/receipt.js.map +1 -1
- package/dist/cli.js +948 -885
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +145 -49
- package/dist/index.js +870 -814
- package/dist/index.js.map +1 -1
- package/dist/reviewer-options-schema-PZacF_MO.d.ts +27 -0
- package/package.json +1 -1
package/README.pt-BR.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
</p>
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
|
-
<a href="https://github.com/mcp-tool-shop-org/research-os/releases/tag/v0.
|
|
10
|
+
<a href="https://github.com/mcp-tool-shop-org/research-os/releases/tag/v0.6.0"><img src="https://img.shields.io/badge/version-0.6.0-blue" alt="version 0.6.0"></a>
|
|
11
11
|
<a href="https://github.com/mcp-tool-shop-org/research-os/actions/workflows/ci.yml"><img src="https://github.com/mcp-tool-shop-org/research-os/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
12
12
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="MIT License"></a>
|
|
13
13
|
<img src="https://img.shields.io/badge/node-%E2%89%A520-brightgreen" alt="Node ≥20">
|
|
@@ -151,9 +151,9 @@ Esta é a alternativa estrutural para *pesquisar → resumir → gerar relatóri
|
|
|
151
151
|
|
|
152
152
|
## Calibração de revisores
|
|
153
153
|
|
|
154
|
-
|
|
154
|
+
v0.5.0 torna a calibração dos revisores mais robusta. Um perfil de revisor não é considerado confiável apenas porque foi executado uma vez; ele adquire um status através de relatórios estruturados de falhas simuladas e agregação de múltiplas execuções. v0.6.0 adiciona opções de revisor determinísticas ao fluxo de revisão de produção e ao sistema de calibração.
|
|
155
155
|
|
|
156
|
-
**
|
|
156
|
+
**Nenhum perfil é atualmente aceito como `baseline confiável`.** Os relatórios canônicos no repositório mostram `hermes-two-pass=falha`, `mistral-nemo-two-pass=aprovação condicional`, `hermes-single-pass=comparação apenas`, `hermes-two-pass-deterministic=falha`. Isso é intencional: a confiança é conquistada através de evidências repetidas de falhas simuladas, e não é presumida. O relatório `hermes-two-pass-deterministic` apresenta uma lacuna estrutural na capacidade do modelo (2/6 tipos de decisão produzidos; requer 3/6) que não é um problema de variância.
|
|
157
157
|
|
|
158
158
|
Os relatórios de calibração estão localizados em `calibration/reviewer-profiles/<perfil>/seeded-v1.{json,md}`. Cada relatório registra PASS/FAIL em relação a sete critérios, quatro rótulos de status (`trusted_baseline`, `conditional_pass`, `failed`, `comparison_only`), e revela honestamente o que o teste não consegue verificar (`needs_contradiction_mapping` é inacessível a partir de `seeded-v1`). Consulte [CHANGELOG.md](CHANGELOG.md).
|
|
159
159
|
|
|
@@ -164,14 +164,22 @@ node scripts/reviewer-calibration.mjs --model hermes3:8b --two-pass --profile he
|
|
|
164
164
|
# Multi-run aggregate calibration (canonical evidence — 3 runs, median-based PASS/FAIL)
|
|
165
165
|
node scripts/reviewer-calibration.mjs --model hermes3:8b --two-pass --profile hermes-two-pass --runs 3
|
|
166
166
|
|
|
167
|
+
# Deterministic multi-run calibration (temperature + seed explicit in receipt)
|
|
168
|
+
node scripts/reviewer-calibration.mjs --model hermes3:8b --two-pass \
|
|
169
|
+
--temperature 0 --seed 7 --runs 3 --profile hermes-two-pass-deterministic
|
|
170
|
+
|
|
167
171
|
# Promote a section's review — auto-populates calibration_summary from pack-relative receipt
|
|
168
172
|
research-os review-promote 01-section --pack <pack> --profile hermes-two-pass
|
|
169
173
|
```
|
|
170
174
|
|
|
171
175
|
Quando `--runs <n>` é usado, os relatórios de cada execução são gravados em `<perfil>/runs/run-NNN.json` e um relatório agregado (com critérios baseados na mediana e detecção de falhas recorrentes) é gravado em `<perfil>/seeded-v1.{json,md}`. O relatório agregado contém `receipt_kind: 'aggregate'` para diferenciá-lo dos relatórios de execução única. O modo de execução única (`--runs 1` ou omitido) preserva o comportamento de gravação direta existente.
|
|
172
176
|
|
|
177
|
+
**Perfis de revisor determinísticos** — utilize `review_profiles.<nome>.reviewer_options` em `research.yaml` para incluir os parâmetros de amostragem do Ollama, como `temperature` e `seed`, em cada instância de `OllamaInternReviewer` no fluxo de revisão de produção. O perfil `hermes-two-pass-deterministic` é fornecido como um exemplo integrado. Consulte [`docs/experiment-6-proof.md`](docs/experiment-6-proof.md) e a [página do manual de calibração do revisor](https://mcp-tool-shop-org.github.io/research-os/handbook/reviewer-calibration/).
|
|
178
|
+
|
|
173
179
|
## Status
|
|
174
180
|
|
|
181
|
+
**v0.6.0** — publicado no npm como `@mcptoolshop/research-os@0.6.0`, 10 de maio de 2026. v0.6.0 finaliza o Experimento 6 com evidências de confiança do revisor: o research-os agora pode produzir uma baseline canônica de modelo reproduzível e rastreável. Inclui: opções de revisor determinísticas no fluxo de revisão de produção (`review_profiles.<nome>.reviewer_options` em `research.yaml`); compatibilidade retroativa do esquema de "gate" para artefatos congelados anteriores à versão 0.3.3 (F-53); a saída da revisão revela as condições de amostragem diretamente nos arquivos `review.json` e `review.md` (F-54); relatório agregado determinístico canônico incluído (`hermes-two-pass-deterministic`, `temperature:0, seed:7`). **Nenhum baseline confiável aceito.** `hermes-two-pass-deterministic=falha` (lacuna estrutural na capacidade do modelo no vocabulário de decisão, não variância). **Hermes não é promovido a `baseline confiável`.** O ganho é o mecanismo, não um relatório de aprovação. Não houve alterações nos "gates", no processo de congelamento ou nas leis de síntese. Todos os quatro pacotes congelados são idênticos em termos de bytes. 713/713 testes vitest passaram. Consulte [CHANGELOG.md](CHANGELOG.md) e [`docs/experiment-6-proof.md`](docs/experiment-6-proof.md).
|
|
182
|
+
|
|
175
183
|
**v0.5.0** — publicado no npm como `@mcptoolshop/research-os@0.5.0`, 10 de maio de 2026. A versão v0.5.0 torna a calibração de revisores mais robusta. Um perfil de revisor não é considerado confiável apenas porque foi executado uma vez; ele adquire um status através de relatórios estruturados de falhas simuladas e agregação de múltiplas execuções. Inclui: esquema de relatório de calibração estruturado (`seeded-v1.{json,md}`, validado com Zod, quatro rótulos de status); sistema de execução de múltiplas execuções (`--runs <n>`, isolamento por execução, critérios PASS/FAIL baseados na mediana, detecção de falhas recorrentes); critério de avaliação baseado na arquitetura; pesquisa de relatórios relativa ao pacote em `review-promote`. **Nenhum baseline confiável admitido:** `hermes-two-pass=failed` (agregado, 3 execuções), `mistral-nemo-two-pass=conditional_pass`, `hermes-single-pass=comparison_only`. O research-os agora pode recusar a confiança em um perfil de revisor quando falhas simuladas repetidas não suportam a confiança. **Nenhuma alteração nos gates, congelamentos ou leis de síntese. Todos os quatro pacotes congelados verificam a identidade dos bytes.** 671/671 testes vitest aprovados. Consulte [CHANGELOG.md](CHANGELOG.md).
|
|
176
184
|
|
|
177
185
|
**v0.4.0** — Publicada no npm como `@mcptoolshop/research-os@0.4.0`, 10 de maio de 2026. A versão 0.4.0 garante a durabilidade da identidade da fonte. Regras determinísticas para o tipo de fonte lidam com a maioria repetível, os registros de substituição preservam as correções do operador durante a re-coleta, e o comando `source-card audit` substitui as verificações de derivação de scripts por uma interface de linha de comando (CLI) completa. Inclui: um classificador centralizado de tipo de fonte (Componente B — `classifySourceType`, 11 fornecedores padrão, `source-type-rules.json`); um registro de substituição de cartão de fonte (Componente A — `source-card-overrides.jsonl`, subcomandos `validate` e `list`); e uma CLI para auditoria de cartão de fonte (Componente D — `research-os source-card audit --pack <dir>`, 7 tipos de detecção, artefatos JSON + Markdown, opções `--apply --from` para aplicar o caminho). Correção estética F-46: os arquivos de manifesto agora indicam a versão binária em execução, em vez da versão fixada no arquivo `research.yaml` durante a inicialização da criação do pacote. **Não há alterações nas regras de validação, congelamento ou síntese. Todos os quatro pacotes existentes passam na verificação de integridade byte a byte.** 620/620 testes vitest aprovados. Consulte o arquivo [CHANGELOG.md](CHANGELOG.md) e a página do manual de auditoria de cartão de fonte: [https://mcp-tool-shop-org.github.io/research-os/handbook/source-card-audit/](https://mcp-tool-shop-org.github.io/research-os/handbook/source-card-audit/).
|
package/README.zh.md
CHANGED
|
@@ -7,7 +7,7 @@
|
|
|
7
7
|
</p>
|
|
8
8
|
|
|
9
9
|
<p align="center">
|
|
10
|
-
<a href="https://github.com/mcp-tool-shop-org/research-os/releases/tag/v0.
|
|
10
|
+
<a href="https://github.com/mcp-tool-shop-org/research-os/releases/tag/v0.6.0"><img src="https://img.shields.io/badge/version-0.6.0-blue" alt="version 0.6.0"></a>
|
|
11
11
|
<a href="https://github.com/mcp-tool-shop-org/research-os/actions/workflows/ci.yml"><img src="https://github.com/mcp-tool-shop-org/research-os/actions/workflows/ci.yml/badge.svg" alt="CI"></a>
|
|
12
12
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="MIT License"></a>
|
|
13
13
|
<img src="https://img.shields.io/badge/node-%E2%89%A520-brightgreen" alt="Node ≥20">
|
|
@@ -151,9 +151,9 @@ discover
|
|
|
151
151
|
|
|
152
152
|
## 评审员校准
|
|
153
153
|
|
|
154
|
-
v0.5.0
|
|
154
|
+
v0.5.0版本使评审器校准更加可靠。评审器配置文件不会因为只运行一次而被信任,而是通过结构化的、带有模拟错误的反馈和多次运行的聚合来获得信任状态。v0.6.0版本为生产环境的评审流程和校准工具添加了确定性的评审器选项。
|
|
155
155
|
|
|
156
|
-
|
|
156
|
+
**目前没有任何配置文件被认为是“可信任的基准”。** 仓库中的标准反馈显示:`hermes-two-pass=failed`(失败),`mistral-nemo-two-pass=conditional_pass`(条件通过),`hermes-single-pass=comparison_only`(仅进行比较),`hermes-two-pass-deterministic=failed`(失败)。这是有意为之:信任是通过重复的、带有模拟错误的数据获得的,而不是默认信任。`hermes-two-pass-deterministic`反馈存在结构上的模型能力差距(产生了2/6种决策类型,需要3/6种),这并非是方差问题。
|
|
157
157
|
|
|
158
158
|
校准结果文件位于`calibration/reviewer-profiles/<profile>/seeded-v1.{json,md}`。每个结果文件记录了针对七个方面的PASS/FAIL(通过/失败)结果,四个状态标签(`trusted_baseline`、`conditional_pass`、`failed`、`comparison_only`),并诚实地披露了测试框架无法测试的内容(`needs_contradiction_mapping`无法从`seeded-v1`访问)。请参阅[CHANGELOG.md](CHANGELOG.md)。
|
|
159
159
|
|
|
@@ -164,14 +164,22 @@ node scripts/reviewer-calibration.mjs --model hermes3:8b --two-pass --profile he
|
|
|
164
164
|
# Multi-run aggregate calibration (canonical evidence — 3 runs, median-based PASS/FAIL)
|
|
165
165
|
node scripts/reviewer-calibration.mjs --model hermes3:8b --two-pass --profile hermes-two-pass --runs 3
|
|
166
166
|
|
|
167
|
+
# Deterministic multi-run calibration (temperature + seed explicit in receipt)
|
|
168
|
+
node scripts/reviewer-calibration.mjs --model hermes3:8b --two-pass \
|
|
169
|
+
--temperature 0 --seed 7 --runs 3 --profile hermes-two-pass-deterministic
|
|
170
|
+
|
|
167
171
|
# Promote a section's review — auto-populates calibration_summary from pack-relative receipt
|
|
168
172
|
research-os review-promote 01-section --pack <pack> --profile hermes-two-pass
|
|
169
173
|
```
|
|
170
174
|
|
|
171
175
|
当使用`--runs <n>`参数时,每个运行的结果文件会被写入到`<profile>/runs/run-NNN.json`,并且会生成一个聚合结果文件(包含基于中位数的PASS/FAIL结果,以及重复失败检测),写入到`<profile>/seeded-v1.{json,md}`。聚合结果文件包含`receipt_kind: 'aggregate'`,用于区分单次运行的结果文件。单次运行模式(`--runs 1`或省略)会保留现有的直接写入行为。
|
|
172
176
|
|
|
177
|
+
**确定性的评审器配置文件**——在`research.yaml`文件中,使用`review_profiles.<name>.reviewer_options`来将`temperature`(温度)、`seed`(种子)和其他Ollama采样参数传递到生产环境评审流程中的每个`OllamaInternReviewer`实例。`hermes-two-pass-deterministic`配置文件作为内置示例提供。请参阅[`docs/experiment-6-proof.md`](docs/experiment-6-proof.md)以及[评审器校准手册页面](https://mcp-tool-shop-org.github.io/research-os/handbook/reviewer-calibration/)。
|
|
178
|
+
|
|
173
179
|
## 状态
|
|
174
180
|
|
|
181
|
+
**v0.6.0**——已发布到npm,版本号为`@mcptoolshop/research-os@0.6.0`,发布日期为2026年5月10日。v0.6.0版本完成了实验6,并提供了评审器信任的证据:research-os现在可以生成可重复、可追溯的标准模型基准。包含内容:在生产环境的评审流程中,添加了确定性的评审器选项(`review_profiles.<name>.reviewer_options`,位于`research.yaml`文件中);为预v0.3.3版本的冻结资源(F-53)提供了向后兼容的schema;评审输出直接在`review.json`和`review.md`文件中显示采样条件(F-54);提交了标准的、确定性的聚合反馈(`hermes-two-pass-deterministic`,`temperature:0, seed:7`)。**目前没有任何可信任的基准。** `hermes-two-pass-deterministic=failed`(决策词汇表中的结构模型能力差距,而非方差问题)。**Hermes没有被提升为“可信任的基准”。** 关键在于机制,而不是通过了反馈。没有对gate、freeze或合成规则进行任何更改。所有四个冻结包都具有完全相同的字节标识。713/713个vitest测试通过。请参阅[CHANGELOG.md](CHANGELOG.md)以及[`docs/experiment-6-proof.md`](docs/experiment-6-proof.md)。
|
|
182
|
+
|
|
175
183
|
**v0.5.0** — 发布到npm,版本号为`@mcptoolshop/research-os@0.5.0`,发布日期:2026-05-10。v0.5.0版本使评审员校准更加可靠。评审员配置文件不会因为只运行一次而被信任,而是通过结构化的、带有预设错误的测试结果和多次运行的聚合来获得信任状态。包含:结构化的校准结果模式(`seeded-v1.{json,md}`,经过Zod验证,包含四个状态标签);多运行测试框架(`--runs <n>`,每个运行隔离,基于中位数的PASS/FAIL结果,重复失败降级);能够感知架构的决策词汇表;在`review-promote`中进行包相关的结果文件查找。**没有可信的基线:** `hermes-two-pass=failed`(聚合,3次运行),`mistral-nemo-two-pass=conditional_pass`,`hermes-single-pass=comparison_only`。research-os现在可以拒绝信任评审员配置文件,当反复的、带有预设错误的测试结果不支持信任时。**没有对网关、冻结或合成规则的更改。所有四个现有的冻结包都以字节级别的相同方式进行验证。** 671/671个vitest测试通过。请参阅[CHANGELOG.md](CHANGELOG.md)。
|
|
176
184
|
|
|
177
185
|
**v0.4.0** — 发布到npm,版本号为`@mcptoolshop/research-os@0.4.0`,发布日期:2026-05-10。v0.4.0版本使源代码身份更加可靠。基于确定性的源代码类型规则处理可重复的多数情况,覆盖账本保留了操作员的更正,并且`source-card audit`(源代码卡审计)取代了对临时脚本漂移的检查,提供了一个一流的命令行界面。包含:集中式的源代码类型分类器(组件B — `classifySourceType`,11个标准供应商,`source-type-rules.json`);源代码卡覆盖账本(组件A — `source-card-overrides.jsonl`,`validate` + `list`子命令);以及源代码卡审计命令行界面(组件D — `research-os source-card audit --pack <dir>`,7种发现类型,JSON + Markdown格式,`--apply --from`用于应用路径)。F-46:一个小的修复,现在包清单会记录实际的二进制版本,而不是冻结在`research.yaml`中的版本,该版本在包初始化时被冻结。**没有对网关、冻结或合成规则的更改。所有四个现有的冻结包都以字节级别的相同方式进行验证。** 620/620个vitest测试通过。请参阅[CHANGELOG.md](CHANGELOG.md)以及[源代码卡审计手册页面](https://mcp-tool-shop-org.github.io/research-os/handbook/source-card-audit/)。
|
|
@@ -316,6 +316,28 @@ declare const AggregateCalibrationReceiptSchema: z.ZodObject<{
|
|
|
316
316
|
}>;
|
|
317
317
|
recurring_bar_failures: z.ZodArray<z.ZodString, "many">;
|
|
318
318
|
notes: z.ZodArray<z.ZodString, "many">;
|
|
319
|
+
reviewer_options: z.ZodOptional<z.ZodObject<{
|
|
320
|
+
num_ctx: z.ZodOptional<z.ZodNumber>;
|
|
321
|
+
temperature: z.ZodOptional<z.ZodNumber>;
|
|
322
|
+
seed: z.ZodOptional<z.ZodNumber>;
|
|
323
|
+
top_p: z.ZodOptional<z.ZodNumber>;
|
|
324
|
+
top_k: z.ZodOptional<z.ZodNumber>;
|
|
325
|
+
repeat_penalty: z.ZodOptional<z.ZodNumber>;
|
|
326
|
+
}, "strip", z.ZodTypeAny, {
|
|
327
|
+
num_ctx?: number | undefined;
|
|
328
|
+
temperature?: number | undefined;
|
|
329
|
+
seed?: number | undefined;
|
|
330
|
+
top_p?: number | undefined;
|
|
331
|
+
top_k?: number | undefined;
|
|
332
|
+
repeat_penalty?: number | undefined;
|
|
333
|
+
}, {
|
|
334
|
+
num_ctx?: number | undefined;
|
|
335
|
+
temperature?: number | undefined;
|
|
336
|
+
seed?: number | undefined;
|
|
337
|
+
top_p?: number | undefined;
|
|
338
|
+
top_k?: number | undefined;
|
|
339
|
+
repeat_penalty?: number | undefined;
|
|
340
|
+
}>>;
|
|
319
341
|
}, "strip", z.ZodTypeAny, {
|
|
320
342
|
status: "trusted_baseline" | "conditional_pass" | "failed" | "comparison_only";
|
|
321
343
|
architecture: "single-pass" | "two-pass";
|
|
@@ -407,6 +429,14 @@ declare const AggregateCalibrationReceiptSchema: z.ZodObject<{
|
|
|
407
429
|
};
|
|
408
430
|
recurring_bar_failures: string[];
|
|
409
431
|
notes: string[];
|
|
432
|
+
reviewer_options?: {
|
|
433
|
+
num_ctx?: number | undefined;
|
|
434
|
+
temperature?: number | undefined;
|
|
435
|
+
seed?: number | undefined;
|
|
436
|
+
top_p?: number | undefined;
|
|
437
|
+
top_k?: number | undefined;
|
|
438
|
+
repeat_penalty?: number | undefined;
|
|
439
|
+
} | undefined;
|
|
410
440
|
}, {
|
|
411
441
|
status: "trusted_baseline" | "conditional_pass" | "failed" | "comparison_only";
|
|
412
442
|
architecture: "single-pass" | "two-pass";
|
|
@@ -498,6 +528,14 @@ declare const AggregateCalibrationReceiptSchema: z.ZodObject<{
|
|
|
498
528
|
};
|
|
499
529
|
recurring_bar_failures: string[];
|
|
500
530
|
notes: string[];
|
|
531
|
+
reviewer_options?: {
|
|
532
|
+
num_ctx?: number | undefined;
|
|
533
|
+
temperature?: number | undefined;
|
|
534
|
+
seed?: number | undefined;
|
|
535
|
+
top_p?: number | undefined;
|
|
536
|
+
top_k?: number | undefined;
|
|
537
|
+
repeat_penalty?: number | undefined;
|
|
538
|
+
} | undefined;
|
|
501
539
|
}>;
|
|
502
540
|
type AggregateMetric = z.infer<typeof AggregateMetricSchema>;
|
|
503
541
|
type PerCategoryAggregateEntry = z.infer<typeof PerCategoryAggregateEntrySchema>;
|
|
@@ -1,118 +1,132 @@
|
|
|
1
1
|
// src/calibration/aggregate-receipt-schema.ts
|
|
2
|
-
import { z as
|
|
2
|
+
import { z as z3 } from "zod";
|
|
3
3
|
|
|
4
4
|
// src/calibration/receipt-schema.ts
|
|
5
|
+
import { z as z2 } from "zod";
|
|
6
|
+
|
|
7
|
+
// src/review/reviewer-options-schema.ts
|
|
5
8
|
import { z } from "zod";
|
|
6
|
-
var
|
|
9
|
+
var ReviewerOptionsSchema = z.object({
|
|
10
|
+
num_ctx: z.number().int().positive().optional(),
|
|
11
|
+
temperature: z.number().min(0).max(2).optional(),
|
|
12
|
+
seed: z.number().int().optional(),
|
|
13
|
+
top_p: z.number().min(0).max(1).optional(),
|
|
14
|
+
top_k: z.number().int().nonnegative().optional(),
|
|
15
|
+
repeat_penalty: z.number().min(0).optional()
|
|
16
|
+
});
|
|
17
|
+
|
|
18
|
+
// src/calibration/receipt-schema.ts
|
|
19
|
+
var StatusLabelSchema = z2.enum([
|
|
7
20
|
"trusted_baseline",
|
|
8
21
|
"conditional_pass",
|
|
9
22
|
"failed",
|
|
10
23
|
"comparison_only"
|
|
11
24
|
]);
|
|
12
|
-
var ArchitectureSchema =
|
|
13
|
-
var RecallSchema =
|
|
14
|
-
matched:
|
|
15
|
-
total:
|
|
16
|
-
ratio:
|
|
25
|
+
var ArchitectureSchema = z2.enum(["single-pass", "two-pass"]);
|
|
26
|
+
var RecallSchema = z2.object({
|
|
27
|
+
matched: z2.number().int().nonnegative(),
|
|
28
|
+
total: z2.number().int().nonnegative(),
|
|
29
|
+
ratio: z2.number().min(0).max(1)
|
|
17
30
|
});
|
|
18
|
-
var PerCategoryRecallSchema =
|
|
19
|
-
var PassFailSchema =
|
|
20
|
-
fp_ceiling:
|
|
21
|
-
any_flag_recall_floor:
|
|
22
|
-
per_category_any_flag_floor:
|
|
23
|
-
strict_recall_floor:
|
|
24
|
-
decision_vocab_completeness:
|
|
25
|
-
latency_soft:
|
|
26
|
-
latency_hard:
|
|
27
|
-
empty_or_malformed:
|
|
28
|
-
overall:
|
|
31
|
+
var PerCategoryRecallSchema = z2.record(z2.string(), RecallSchema);
|
|
32
|
+
var PassFailSchema = z2.object({
|
|
33
|
+
fp_ceiling: z2.enum(["PASS", "FAIL"]),
|
|
34
|
+
any_flag_recall_floor: z2.enum(["PASS", "FAIL"]),
|
|
35
|
+
per_category_any_flag_floor: z2.enum(["PASS", "FAIL"]),
|
|
36
|
+
strict_recall_floor: z2.enum(["PASS", "FAIL"]),
|
|
37
|
+
decision_vocab_completeness: z2.enum(["PASS", "FAIL"]),
|
|
38
|
+
latency_soft: z2.enum(["PASS", "WARN"]),
|
|
39
|
+
latency_hard: z2.enum(["PASS", "FAIL"]),
|
|
40
|
+
empty_or_malformed: z2.enum(["PASS", "FAIL"]),
|
|
41
|
+
overall: z2.enum(["PASS", "FAIL"])
|
|
29
42
|
});
|
|
30
|
-
var DecisionVocabBarSchema =
|
|
43
|
+
var DecisionVocabBarSchema = z2.object({
|
|
31
44
|
architecture: ArchitectureSchema,
|
|
32
|
-
required:
|
|
33
|
-
produced:
|
|
34
|
-
passed:
|
|
45
|
+
required: z2.number().int().positive(),
|
|
46
|
+
produced: z2.number().int().nonnegative(),
|
|
47
|
+
passed: z2.boolean()
|
|
35
48
|
});
|
|
36
|
-
var CalibrationReceiptSchema =
|
|
37
|
-
schema_version:
|
|
38
|
-
profile_name:
|
|
49
|
+
var CalibrationReceiptSchema = z2.object({
|
|
50
|
+
schema_version: z2.literal(1),
|
|
51
|
+
profile_name: z2.string(),
|
|
39
52
|
status: StatusLabelSchema,
|
|
40
|
-
model:
|
|
53
|
+
model: z2.string(),
|
|
41
54
|
architecture: ArchitectureSchema,
|
|
42
|
-
fixture:
|
|
43
|
-
fixture_total_claims:
|
|
44
|
-
fixture_good_claims:
|
|
45
|
-
fixture_bad_claims:
|
|
46
|
-
calibrated_at:
|
|
47
|
-
research_os_version:
|
|
48
|
-
runtime_ms:
|
|
49
|
-
good_fp_count:
|
|
55
|
+
fixture: z2.string(),
|
|
56
|
+
fixture_total_claims: z2.number().int().positive(),
|
|
57
|
+
fixture_good_claims: z2.number().int().nonnegative(),
|
|
58
|
+
fixture_bad_claims: z2.number().int().nonnegative(),
|
|
59
|
+
calibrated_at: z2.string(),
|
|
60
|
+
research_os_version: z2.string(),
|
|
61
|
+
runtime_ms: z2.number().int().nonnegative(),
|
|
62
|
+
good_fp_count: z2.number().int().nonnegative(),
|
|
50
63
|
any_flag_recall: RecallSchema,
|
|
51
64
|
strict_recall: RecallSchema,
|
|
52
65
|
per_category_any_flag: PerCategoryRecallSchema,
|
|
53
66
|
per_category_strict: PerCategoryRecallSchema,
|
|
54
|
-
decision_vocabulary:
|
|
55
|
-
decisions_produced_count:
|
|
67
|
+
decision_vocabulary: z2.record(z2.string(), z2.number().int().nonnegative()),
|
|
68
|
+
decisions_produced_count: z2.number().int().nonnegative(),
|
|
56
69
|
decision_vocab_bar: DecisionVocabBarSchema,
|
|
57
|
-
unreachable_decisions:
|
|
58
|
-
empty_or_malformed_responses:
|
|
70
|
+
unreachable_decisions: z2.array(z2.string()),
|
|
71
|
+
empty_or_malformed_responses: z2.number().int().nonnegative(),
|
|
59
72
|
pass_fail: PassFailSchema,
|
|
60
|
-
notes:
|
|
73
|
+
notes: z2.array(z2.string()),
|
|
74
|
+
reviewer_options: ReviewerOptionsSchema.optional()
|
|
61
75
|
});
|
|
62
76
|
|
|
63
77
|
// src/calibration/aggregate-receipt-schema.ts
|
|
64
|
-
var AggregateMetricSchema =
|
|
65
|
-
median:
|
|
66
|
-
min:
|
|
67
|
-
max:
|
|
68
|
-
values:
|
|
78
|
+
var AggregateMetricSchema = z3.object({
|
|
79
|
+
median: z3.number(),
|
|
80
|
+
min: z3.number(),
|
|
81
|
+
max: z3.number(),
|
|
82
|
+
values: z3.array(z3.number())
|
|
69
83
|
// per-run values in run order (run-001, run-002, ...)
|
|
70
84
|
});
|
|
71
|
-
var PerCategoryAggregateEntrySchema =
|
|
72
|
-
median_ratio:
|
|
73
|
-
min_ratio:
|
|
74
|
-
max_ratio:
|
|
75
|
-
total:
|
|
85
|
+
var PerCategoryAggregateEntrySchema = z3.object({
|
|
86
|
+
median_ratio: z3.number().min(0).max(1),
|
|
87
|
+
min_ratio: z3.number().min(0).max(1),
|
|
88
|
+
max_ratio: z3.number().min(0).max(1),
|
|
89
|
+
total: z3.number().int().nonnegative(),
|
|
76
90
|
// seed count — same across all runs
|
|
77
|
-
per_run_ratios:
|
|
91
|
+
per_run_ratios: z3.array(z3.number())
|
|
78
92
|
});
|
|
79
|
-
var PerCategoryAggregateSchema =
|
|
80
|
-
var AggregatePassFailSchema =
|
|
81
|
-
fp_ceiling:
|
|
82
|
-
any_flag_recall_floor:
|
|
83
|
-
per_category_any_flag_floor:
|
|
84
|
-
strict_recall_floor:
|
|
85
|
-
decision_vocab_completeness:
|
|
86
|
-
latency_soft:
|
|
87
|
-
latency_hard:
|
|
88
|
-
empty_or_malformed:
|
|
89
|
-
overall:
|
|
93
|
+
var PerCategoryAggregateSchema = z3.record(z3.string(), PerCategoryAggregateEntrySchema);
|
|
94
|
+
var AggregatePassFailSchema = z3.object({
|
|
95
|
+
fp_ceiling: z3.enum(["PASS", "FAIL"]),
|
|
96
|
+
any_flag_recall_floor: z3.enum(["PASS", "FAIL"]),
|
|
97
|
+
per_category_any_flag_floor: z3.enum(["PASS", "FAIL"]),
|
|
98
|
+
strict_recall_floor: z3.enum(["PASS", "FAIL"]),
|
|
99
|
+
decision_vocab_completeness: z3.enum(["PASS", "FAIL"]),
|
|
100
|
+
latency_soft: z3.enum(["PASS", "WARN"]),
|
|
101
|
+
latency_hard: z3.enum(["PASS", "FAIL"]),
|
|
102
|
+
empty_or_malformed: z3.enum(["PASS", "FAIL"]),
|
|
103
|
+
overall: z3.enum(["PASS", "FAIL"])
|
|
90
104
|
});
|
|
91
|
-
var AggregateDecisionVocabBarSchema =
|
|
105
|
+
var AggregateDecisionVocabBarSchema = z3.object({
|
|
92
106
|
architecture: ArchitectureSchema,
|
|
93
|
-
required:
|
|
94
|
-
median_produced:
|
|
107
|
+
required: z3.number().int().positive(),
|
|
108
|
+
median_produced: z3.number(),
|
|
95
109
|
// float — median of per-run decisions_produced_count
|
|
96
|
-
passed:
|
|
110
|
+
passed: z3.boolean()
|
|
97
111
|
});
|
|
98
|
-
var AggregateCalibrationReceiptSchema =
|
|
99
|
-
schema_version:
|
|
100
|
-
receipt_kind:
|
|
112
|
+
var AggregateCalibrationReceiptSchema = z3.object({
|
|
113
|
+
schema_version: z3.literal(1),
|
|
114
|
+
receipt_kind: z3.literal("aggregate"),
|
|
101
115
|
// discriminates from single-run receipt
|
|
102
|
-
profile_name:
|
|
116
|
+
profile_name: z3.string(),
|
|
103
117
|
status: StatusLabelSchema,
|
|
104
|
-
model:
|
|
118
|
+
model: z3.string(),
|
|
105
119
|
architecture: ArchitectureSchema,
|
|
106
|
-
fixture:
|
|
107
|
-
fixture_total_claims:
|
|
108
|
-
fixture_good_claims:
|
|
109
|
-
fixture_bad_claims:
|
|
110
|
-
runs_count:
|
|
111
|
-
run_files:
|
|
120
|
+
fixture: z3.string(),
|
|
121
|
+
fixture_total_claims: z3.number().int().positive(),
|
|
122
|
+
fixture_good_claims: z3.number().int().nonnegative(),
|
|
123
|
+
fixture_bad_claims: z3.number().int().nonnegative(),
|
|
124
|
+
runs_count: z3.number().int().min(2),
|
|
125
|
+
run_files: z3.array(z3.string()),
|
|
112
126
|
// relative paths: runs/run-001.json, etc.
|
|
113
|
-
aggregated_at:
|
|
127
|
+
aggregated_at: z3.string(),
|
|
114
128
|
// ISO 8601
|
|
115
|
-
research_os_version:
|
|
129
|
+
research_os_version: z3.string(),
|
|
116
130
|
// Aggregate metrics — median + min + max + per-run values in run order
|
|
117
131
|
good_fp_count: AggregateMetricSchema,
|
|
118
132
|
any_flag_recall_ratio: AggregateMetricSchema,
|
|
@@ -123,14 +137,17 @@ var AggregateCalibrationReceiptSchema = z2.object({
|
|
|
123
137
|
per_category_any_flag: PerCategoryAggregateSchema,
|
|
124
138
|
per_category_strict: PerCategoryAggregateSchema,
|
|
125
139
|
// Decision vocabulary — union of all decisions seen across runs, median count each
|
|
126
|
-
decision_vocabulary:
|
|
140
|
+
decision_vocabulary: z3.record(z3.string(), AggregateMetricSchema),
|
|
127
141
|
decision_vocab_bar: AggregateDecisionVocabBarSchema,
|
|
128
|
-
unreachable_decisions:
|
|
142
|
+
unreachable_decisions: z3.array(z3.string()),
|
|
129
143
|
pass_fail: AggregatePassFailSchema,
|
|
130
144
|
// Bars that FAILed in >= ceil(runs_count/2) individual runs.
|
|
131
145
|
// Non-empty list demotes trusted_baseline to conditional_pass.
|
|
132
|
-
recurring_bar_failures:
|
|
133
|
-
notes:
|
|
146
|
+
recurring_bar_failures: z3.array(z3.string()),
|
|
147
|
+
notes: z3.array(z3.string()),
|
|
148
|
+
// schema_version: 1 — additive-optional (Exp6 Session 2):
|
|
149
|
+
// Same options object stamped on every per-run receipt. Absent = stochastic run.
|
|
150
|
+
reviewer_options: ReviewerOptionsSchema.optional()
|
|
134
151
|
});
|
|
135
152
|
export {
|
|
136
153
|
AggregateCalibrationReceiptSchema,
|
|
@@ -1 +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"]}
|
|
1
|
+
{"version":3,"sources":["../../src/calibration/aggregate-receipt-schema.ts","../../src/calibration/receipt-schema.ts","../../src/review/reviewer-options-schema.ts"],"sourcesContent":["import { z } from 'zod';\nimport { StatusLabelSchema, ArchitectureSchema, ReviewerOptionsSchema } 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 // schema_version: 1 — additive-optional (Exp6 Session 2):\n // Same options object stamped on every per-run receipt. Absent = stochastic run.\n reviewer_options: ReviewerOptionsSchema.optional(),\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';\nimport { ReviewerOptionsSchema } from '../review/reviewer-options-schema.js';\nexport { ReviewerOptionsSchema };\nexport type { ReviewerOptions } from '../review/reviewer-options-schema.js';\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\n// schema_version: 1 — additive-optional additions (Exp6 Session 2):\n// reviewer_options: optional sampling params used during this calibration run.\n// Absent = stochastic run (pre-v0.6 compat preserved). Present = keys explicitly set.\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 reviewer_options: ReviewerOptionsSchema.optional(),\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","import { z } from 'zod';\n\n// Sampling parameters passed verbatim to the Ollama /api/chat `options` field.\n// Used by OllamaInternReviewer to control determinism. All fields optional —\n// omitted keys fall back to Ollama/model defaults. Introduced in Experiment 6\n// Session 2 to make reviewer conditions explicit in calibration receipts.\n//\n// LOAD-BEARING: temperature: 0 is valid and must not be dropped. All merges\n// in OllamaInternReviewer use `!== undefined` checks, NOT truthiness.\nexport const ReviewerOptionsSchema = z.object({\n num_ctx: z.number().int().positive().optional(),\n temperature: z.number().min(0).max(2).optional(),\n seed: z.number().int().optional(),\n top_p: z.number().min(0).max(1).optional(),\n top_k: z.number().int().nonnegative().optional(),\n repeat_penalty: z.number().min(0).optional(),\n});\n\nexport type ReviewerOptions = z.infer<typeof ReviewerOptionsSchema>;\n"],"mappings":"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","names":["z","z","z","z"]}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { PerCategoryRecall, CalibrationReceipt, Architecture, StatusLabel, PassFail } from './receipt-schema.js';
|
|
2
2
|
import { AggregateMetric, PerCategoryAggregate, AggregateCalibrationReceipt, AggregatePassFail } from './aggregate-receipt-schema.js';
|
|
3
|
+
import { R as ReviewerOptions } from '../reviewer-options-schema-PZacF_MO.js';
|
|
3
4
|
import 'zod';
|
|
4
5
|
|
|
5
6
|
declare function median(values: number[]): number;
|
|
@@ -29,6 +30,7 @@ declare function aggregateReceipts(runs: CalibrationReceipt[], opts: {
|
|
|
29
30
|
runFiles: string[];
|
|
30
31
|
modeOverride?: 'comparison_only';
|
|
31
32
|
aggregatedAt?: string;
|
|
33
|
+
reviewerOptions?: ReviewerOptions;
|
|
32
34
|
}): AggregateCalibrationReceipt;
|
|
33
35
|
declare function buildAggregateReceiptMarkdown(r: AggregateCalibrationReceipt): string;
|
|
34
36
|
|