@tangle-network/agent-eval 0.202.0 → 0.202.2
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 +11 -0
- package/dist/adapters/http.d.ts +2 -2
- package/dist/analyst/index.d.ts +5 -5
- package/dist/analyst/index.js +1 -1
- package/dist/benchmarks/index.d.ts +4 -4
- package/dist/benchmarks/index.js +1 -1
- package/dist/campaign/index.d.ts +5 -5
- package/dist/campaign/index.js +3 -3
- package/dist/{campaign-XXmOU0R0.js → campaign-Btk1yFfw.js} +130 -20
- package/dist/{campaign-XXmOU0R0.js.map → campaign-Btk1yFfw.js.map} +1 -1
- package/dist/{claude-jsonl-CxZZrDJ3.js → claude-jsonl-DoQJBCVR.js} +49 -15
- package/dist/claude-jsonl-DoQJBCVR.js.map +1 -0
- package/dist/cli.js +1 -1
- package/dist/contract/index.d.ts +7 -7
- package/dist/contract/index.js +1 -1
- package/dist/{default-registry-D4qXx2aG.js → default-registry-6QOiTzqi.js} +2 -2
- package/dist/{default-registry-D4qXx2aG.js.map → default-registry-6QOiTzqi.js.map} +1 -1
- package/dist/{default-registry-D1rNS2yB.d.ts → default-registry-DesnDBvl.d.ts} +3 -3
- package/dist/{default-registry-D1rNS2yB.d.ts.map → default-registry-DesnDBvl.d.ts.map} +1 -1
- package/dist/{define-agent-eval-DQXLPqWc.d.ts → define-agent-eval-BDPV3ieA.d.ts} +5 -5
- package/dist/{define-agent-eval-DQXLPqWc.d.ts.map → define-agent-eval-BDPV3ieA.d.ts.map} +1 -1
- package/dist/{engine-DlKIzDKo.d.ts → engine-neXmlmTu.d.ts} +2 -2
- package/dist/{engine-DlKIzDKo.d.ts.map → engine-neXmlmTu.d.ts.map} +1 -1
- package/dist/evaluation.d.ts +1 -1
- package/dist/experiment/index.d.ts +1 -1
- package/dist/{exporters-XMCYJlqT.d.ts → exporters-DjCu6-lX.d.ts} +2 -2
- package/dist/{exporters-XMCYJlqT.d.ts.map → exporters-DjCu6-lX.d.ts.map} +1 -1
- package/dist/{exporters-Coiv-qO2.js → exporters-ISzpUY3e.js} +10 -4
- package/dist/{exporters-Coiv-qO2.js.map → exporters-ISzpUY3e.js.map} +1 -1
- package/dist/{hf-dataset-kjIfIK_e.js → hf-dataset-DdT7nNkf.js} +3 -3
- package/dist/{hf-dataset-kjIfIK_e.js.map → hf-dataset-DdT7nNkf.js.map} +1 -1
- package/dist/{index-D4pC7Tvd.d.ts → index-BCBpEreJ.d.ts} +18 -14
- package/dist/{index-D4pC7Tvd.d.ts.map → index-BCBpEreJ.d.ts.map} +1 -1
- package/dist/{index-giYkbitB.d.ts → index-BPCdNSMW.d.ts} +20 -5
- package/dist/index-BPCdNSMW.d.ts.map +1 -0
- package/dist/{index-Bi2fLITd.d.ts → index-BtcxmabC.d.ts} +4 -4
- package/dist/{index-Bi2fLITd.d.ts.map → index-BtcxmabC.d.ts.map} +1 -1
- package/dist/{index-D1ZX28rV.d.ts → index-CnKgaHKA.d.ts} +6 -6
- package/dist/{index-D1ZX28rV.d.ts.map → index-CnKgaHKA.d.ts.map} +1 -1
- package/dist/index.d.ts +12 -12
- package/dist/index.js +3 -3
- package/dist/{integrity-uwK7XC-8.js → integrity-atFlABhR.js} +2 -2
- package/dist/{integrity-uwK7XC-8.js.map → integrity-atFlABhR.js.map} +1 -1
- package/dist/{jev-protocol-CpKI7XSu.d.ts → jev-protocol-BQLxwbqD.d.ts} +24 -7
- package/dist/jev-protocol-BQLxwbqD.d.ts.map +1 -0
- package/dist/jev-protocol.d.ts +2 -2
- package/dist/jev-protocol.js +19 -4
- package/dist/jev-protocol.js.map +1 -1
- package/dist/{jev-review-D4ynCORp.d.ts → jev-review-DX6MI_jq.d.ts} +2 -2
- package/dist/{jev-review-D4ynCORp.d.ts.map → jev-review-DX6MI_jq.d.ts.map} +1 -1
- package/dist/jev.d.ts +4 -4
- package/dist/jev.js +2 -2
- package/dist/{matrix--IZKROxD.d.ts → matrix-DRXCV70M.d.ts} +2 -2
- package/dist/{matrix--IZKROxD.d.ts.map → matrix-DRXCV70M.d.ts.map} +1 -1
- package/dist/{mint-C9Lojt1V.d.ts → mint-BFTrlq4t.d.ts} +10 -2
- package/dist/mint-BFTrlq4t.d.ts.map +1 -0
- package/dist/{mint-vlRckJEX.js → mint-DE6nQrX_.js} +26 -7
- package/dist/mint-DE6nQrX_.js.map +1 -0
- package/dist/multishot/golden/index.d.ts +1 -1
- package/dist/multishot/index.d.ts +2 -2
- package/dist/openapi.json +1 -1
- package/dist/rl.d.ts +6 -6
- package/dist/rl.js +3 -3
- package/dist/rollout/index.d.ts +5 -5
- package/dist/rollout/index.js +6 -6
- package/dist/{rollout-BUQixCoc.js → rollout-DTunVdJE.js} +41 -21
- package/dist/{rollout-BUQixCoc.js.map → rollout-DTunVdJE.js.map} +1 -1
- package/dist/{schema-B5LtYvn9.d.ts → schema-Bp8S20Ii.d.ts} +25 -5
- package/dist/{schema-B5LtYvn9.d.ts.map → schema-Bp8S20Ii.d.ts.map} +1 -1
- package/dist/{schema-DAMp77zB.js → schema-D08IIzui.js} +27 -1
- package/dist/{schema-DAMp77zB.js.map → schema-D08IIzui.js.map} +1 -1
- package/dist/search/index.d.ts +2 -2
- package/dist/{search-kernel-C9CXvFR7.d.ts → search-kernel-zI-rsHoG.d.ts} +2 -2
- package/dist/{search-kernel-C9CXvFR7.d.ts.map → search-kernel-zI-rsHoG.d.ts.map} +1 -1
- package/dist/{statistical-heldout-HswMvzbP.d.ts → statistical-heldout-BAbd_oXC.d.ts} +2 -2
- package/dist/{statistical-heldout-HswMvzbP.d.ts.map → statistical-heldout-BAbd_oXC.d.ts.map} +1 -1
- package/dist/{store-tool-spans-Dv9x4XYG.d.ts → store-tool-spans-CKRw7JHa.d.ts} +3 -3
- package/dist/{store-tool-spans-Dv9x4XYG.d.ts.map → store-tool-spans-CKRw7JHa.d.ts.map} +1 -1
- package/dist/supervisor-run/index.d.ts +2 -2
- package/dist/supervisor-run/index.d.ts.map +1 -1
- package/dist/supervisor-run/index.js +22 -14
- package/dist/supervisor-run/index.js.map +1 -1
- package/dist/{tool-groups-BY1MdSIE.d.ts → tool-groups-V23aGP_g.d.ts} +2 -2
- package/dist/tool-groups-V23aGP_g.d.ts.map +1 -0
- package/dist/{trace-questions-DnqdmwyV.d.ts → trace-questions-B-Wf0W3Q.d.ts} +2 -2
- package/dist/{trace-questions-DnqdmwyV.d.ts.map → trace-questions-B-Wf0W3Q.d.ts.map} +1 -1
- package/dist/trace-repair/index.d.ts +1 -1
- package/dist/traces.d.ts +2 -2
- package/dist/{types-DfvQOe91.d.ts → types-BR1LLIxm.d.ts} +2 -2
- package/dist/{types-DfvQOe91.d.ts.map → types-BR1LLIxm.d.ts.map} +1 -1
- package/dist/{types-C4hH69a9.d.ts → types-BbiT5NPH.d.ts} +2 -2
- package/dist/{types-C4hH69a9.d.ts.map → types-BbiT5NPH.d.ts.map} +1 -1
- package/dist/{types-DRNlLbBR.d.ts → types-DUlbOCwL.d.ts} +2 -2
- package/dist/{types-DRNlLbBR.d.ts.map → types-DUlbOCwL.d.ts.map} +1 -1
- package/docs/campaign-coverage.md +20 -0
- package/docs/changes/jev-recorded-evidence.md +24 -0
- package/docs/jev-replay.md +50 -0
- package/docs/retained-dispatch.md +56 -0
- package/docs/rollout.md +3 -1
- package/package.json +1 -1
- package/dist/claude-jsonl-CxZZrDJ3.js.map +0 -1
- package/dist/index-giYkbitB.d.ts.map +0 -1
- package/dist/jev-protocol-CpKI7XSu.d.ts.map +0 -1
- package/dist/mint-C9Lojt1V.d.ts.map +0 -1
- package/dist/mint-vlRckJEX.js.map +0 -1
- package/dist/tool-groups-BY1MdSIE.d.ts.map +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hf-dataset-kjIfIK_e.js","names":[],"sources":["../src/rollout/ledger.ts","../src/rollout/release/gate-report.ts","../src/rollout/release/card.ts","../src/rollout/release/scrub.ts","../src/rollout/release/hf-dataset.ts"],"sourcesContent":["/**\n * Rollout-ledger file API — append-only JSONL of validated `tangle.rollout.v1`\n * lines. Writes validate BEFORE touching disk (a bad line never lands);\n * reads validate line-by-line and fail loud with the line number, because a\n * silently-skipped rollout is a corrupted dataset.\n *\n * \"Validate\" includes the anti-Goodhart invariant (a realness-gated line may\n * not carry a positive reward), so a poisoned line can neither enter a ledger\n * nor leave one.\n *\n * Two read modes, matching the two write-side row classes: `readRolloutLedger`\n * re-validates under the mint policy (training data), `readRolloutJournal`\n * under the write policy (supervision journals, whose unscreened positive\n * rewards are writable and must stay readable).\n */\n\nimport { appendFile, mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { dirname } from 'node:path'\nimport { assertMinted, assertRolloutLine, type MintedRolloutLine, type RolloutLine } from './schema'\n\nfunction serialize(lines: RolloutLine[]): string {\n for (const [i, line] of lines.entries()) assertRolloutLine(line, `rollout line [${i}]`)\n return lines.map((line) => JSON.stringify(line)).join('\\n') + (lines.length > 0 ? '\\n' : '')\n}\n\n/** Replace the ledger file with exactly `lines`. */\nexport async function writeRolloutLedger(path: string, lines: RolloutLine[]): Promise<void> {\n const payload = serialize(lines)\n await mkdir(dirname(path), { recursive: true })\n await writeFile(path, payload)\n}\n\n/** Append `lines` to the ledger file (created if absent). */\nexport async function appendRolloutLines(path: string, lines: RolloutLine[]): Promise<void> {\n if (lines.length === 0) return\n const payload = serialize(lines)\n await mkdir(dirname(path), { recursive: true })\n await appendFile(path, payload)\n}\n\n/**\n * Read and validate every line. Throws on the first malformed/invalid line\n * (with its 1-based line number) — fail-closed, never a silent drop.\n *\n * Validation includes the anti-Goodhart invariant, which is why the result is\n * `MintedRolloutLine[]`: a ledger file is the main way a rollout reaches this\n * process from outside the type system (another run, another machine, a\n * hand-edited JSONL), so this read is the runtime boundary where a poisoned\n * line is refused rather than exported.\n */\nexport async function readRolloutLedger(path: string): Promise<MintedRolloutLine[]> {\n return readLines(path, (parsed, context) => assertMinted(parsed, context))\n}\n\n/**\n * Read a ledger under the WRITE-side policy (`validateRolloutLine`), which\n * omits the unscreened-reward check. `writeRolloutLedger` accepts a\n * supervision-journal row (`realness_screened: false` with a positive reward\n * — the documented `unscreenedRewardFields` shape), and `GATE_POLICIES` says\n * such rows \"must stay writable, readable and reportable\"; a read API that\n * only re-validated under `assertMinted` made every such file unreadable —\n * write-accepted but read-refused is a data-loss trap.\n *\n * The result is `RolloutLine[]`, NOT `MintedRolloutLine[]`: nothing read here\n * can reach a training exporter without passing `assertMinted`, so the\n * promotion gate (which DOES enforce unscreened-reward) is exactly as closed\n * as before. Use `readRolloutLedger` when the file is training data.\n */\nexport async function readRolloutJournal(path: string): Promise<RolloutLine[]> {\n return readLines(path, (parsed, context): RolloutLine => {\n assertRolloutLine(parsed, context)\n return parsed\n })\n}\n\nasync function readLines<T>(\n path: string,\n admit: (parsed: unknown, context: string) => T,\n): Promise<T[]> {\n const raw = await readFile(path, 'utf8')\n const lines: T[] = []\n const rawLines = raw.split('\\n')\n for (let i = 0; i < rawLines.length; i++) {\n const text = rawLines[i]\n if (!text?.trim()) continue\n let parsed: unknown\n try {\n parsed = JSON.parse(text)\n } catch (error) {\n throw new Error(\n `${path}:${i + 1}: malformed JSON — ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n lines.push(admit(parsed, `${path}:${i + 1}`))\n }\n return lines\n}\n","/**\n * Per-format accounting of the anti-Goodhart gate for one dataset release.\n *\n * The defect this exists to make impossible: a dataset card that STATES what\n * the gate does while the build does something else. A sentence in a README is\n * a claim about bytes it never reads, so it drifts the moment an exporter\n * changes — and the drift ships to whoever downloads the dataset.\n *\n * So the card is not allowed to assert anything about the gate. The build\n * measures the rows it is ABOUT TO WRITE (`measureFormatGate`), the measurement\n * is checked against the declared per-format disposition (`assertGateReport`,\n * which throws rather than warns), and the card renders only numbers handed to\n * it. A card that disagrees with its own data files cannot be produced without\n * failing the build first.\n *\n * The dispositions themselves are the release policy, stated once as data:\n *\n * sft EXCLUDE — an SFT row is an imitation target. A gamed\n * trajectory must never be imitated, at any weight.\n * verifiers ZERO_AND_FLAG — reward is a signed learning signal here, so a\n * gamed trajectory at reward 0 is a correct\n * negative. Dropping it would bias the negative\n * population toward honest failures and leave a\n * trainer no example of what gaming looks like\n * when it is penalized.\n * rft ZERO_AND_FLAG — RFT re-samples the completion; only the prompt\n * and the grader's `reference.*` verdict ship, so\n * nothing gamed is imitated. The flag is what lets\n * a grader author skip the instance.\n * raw ZERO_AND_FLAG — a faithful audit dump. Removing rows from it\n * would defeat its only purpose, and the gated\n * row is the one an auditor most wants.\n *\n * `ZERO_AND_FLAG` is never `reward: 0` alone. Zeroing without the label makes a\n * faked success indistinguishable from an honest failure — it hides the gamed\n * population from the buyer instead of disclosing it. Every included format\n * carries `realness_gated` on the row itself.\n *\n * And `ZERO_AND_FLAG` means the whole outcome, not the scalar. A gated row that\n * ships `reward: 0` beside the per-layer verifier scores the reward was\n * computed from has not been zeroed in any sense a trainer respects; the\n * accounting therefore measures every reward-derived number each format writes,\n * not just the one field.\n */\n\nimport type { RftItem, SftRow, VerifiersRolloutOutput } from '../exporters'\nimport {\n GATE_CHECK_IDS,\n GATE_POLICIES,\n type GateCheckId,\n undeclaredStepPayload,\n} from '../gate-checks'\nimport type { MintedRolloutLine } from '../schema'\nimport type { ReleaseFormat } from './card'\n\n/** What a format does with a line the realness gate flagged. */\nexport type GateDisposition = 'exclude' | 'zero-and-flag'\n\nexport const FORMAT_GATE_DISPOSITION: Record<ReleaseFormat, GateDisposition> = {\n sft: 'exclude',\n verifiers: 'zero-and-flag',\n rft: 'zero-and-flag',\n raw: 'zero-and-flag',\n}\n\n/** What the gate accounting reads off an emitted row, per format. */\nexport interface ReleaseRowRef {\n rollout_id: string\n reward: number | null\n /**\n * The rest of the row that was DERIVED from the reward — the per-layer score\n * dict, the judge verdict record, whatever this format ships beside the\n * scalar. Walked for positive numbers, so the certification is about the\n * whole outcome rather than one field.\n *\n * Absent when the format's row carries nothing but the scalar. NOT the whole\n * row: `cost.tokens_in`, `wall_s` and `total_steps` are positive numbers that\n * have nothing to do with the reward, and a certification that flags them is\n * a certification nobody can act on.\n */\n evidence?: unknown\n /**\n * The screen claim AS EMITTED — read off the row, not off the line it came\n * from, because what ships is what matters. Required, not optional: an\n * optional field is how a format quietly opts out of the check that reads it,\n * and every emitted row shape carries `RealnessLabels` precisely so no adapter\n * has to.\n */\n realness_screened: boolean | null\n /**\n * The part of an emitted `steps[]` the wire format does not declare.\n *\n * Separate from `evidence` because the declared step fields are FULL of\n * legitimate positive numbers — `durationMs`, `llm_call_count`,\n * `prompt_token_ids` — and a certification that flags those is one nobody can\n * act on. Only the undeclared remainder is unclassified reward-bearing\n * payload, which is the same partition the check applies.\n *\n * Set only by formats whose row carries steps: today `raw` alone.\n */\n stepEvidence?: unknown\n}\n\n/** A positive number found inside an emitted gated row, with where it was. */\nexport interface EmittedEvidence {\n /** JSON-ish path from the row's evidence root, e.g. `metrics['layer.tests']`. */\n path: string\n value: number\n}\n\nexport interface FormatGateCounts {\n /** Gated lines that reached this format's exporter. */\n input: number\n /** Gated rows the format actually wrote. */\n emitted: number\n /**\n * Gated lines this format did not write. Not all of these are the gate:\n * `verifiers` also drops gap lines (empty transcript) and `rft` drops lines\n * with no prompt turn, so an excluded count can mix both causes.\n */\n excluded: number\n /** Highest reward on an emitted gated row; `null` when none was emitted. */\n maxEmittedReward: number | null\n /**\n * The largest positive number found in the reward-DERIVED payload of an\n * emitted gated row, and its path; `null` when there is none.\n *\n * This column exists because the release once certified CLEAN while leaking.\n * `assertGateReport` inspected `outcome.reward` alone, so a gated row shipping\n * `reward: 0` next to `metrics['layer.tests']: 1` — the deterministic verifier\n * score the reward was computed from, and the per-rubric score dict of the\n * Prime Intellect verifiers format — passed, and the card rendered \"max reward\n * | 0\" over a file that carried the gamed signal at full value. A wrong\n * certification is worse than the leak: it is the leak plus a document saying\n * there isn't one.\n */\n maxEmittedEvidence: EmittedEvidence | null\n /**\n * Rows this format wrote carrying a positive reward whose producer DECLARED\n * that no authenticity screen ever ran on it (`realness_screened: false`).\n *\n * Measured over EVERY emitted row, not just the gated ones: an unscreened\n * reward is by definition one the gate never had a verdict on, so it is not in\n * the gated set and a measurement scoped to that set would report 0 forever.\n * `assertMinted` already refuses these, which is exactly why the release still\n * measures them — the last door before a public dataset does not get to assume\n * the earlier doors held.\n */\n unscreenedPositiveRows: number\n /** Highest reward on such a row; `null` when there is none. */\n maxUnscreenedReward: number | null\n /**\n * The largest positive number found in an emitted gated row's UNDECLARED\n * per-step payload, and its path; `null` when there is none.\n *\n * The column exists because the gate read `outcome` and nothing else for\n * three rounds, so a gated line shipping `steps: [{kind, name, reward: 0.86}]`\n * certified clean — the release accounting agreed with the exporter that a\n * per-step reward was not a reward.\n */\n maxEmittedStepEvidence: EmittedEvidence | null\n}\n\nexport interface GateReport {\n /** Gated lines in the release input, after the split/proposer filters. */\n gatedLines: number\n byFormat: Partial<Record<ReleaseFormat, FormatGateCounts>>\n}\n\n/** Rollout ids of every gated line, the key the emitted rows are matched on. */\nexport function gatedRolloutIds(lines: readonly MintedRolloutLine[]): Set<string> {\n return new Set(lines.filter((line) => line.outcome.realness_gated).map((line) => line.rollout_id))\n}\n\n/**\n * Row refs per format. Written as one adapter per format so that the knowledge\n * of WHERE the id and reward live in each published shape sits next to the\n * assertion that uses it — an exporter that moves either field breaks here\n * rather than silently reporting zero gated rows.\n */\nexport const releaseRowRefs = {\n // An SFT row is `{messages, metadata}` and `metadata` holds ids plus the\n // scalar — no reward-derived payload beyond `reward` itself, and the gated\n // disposition is EXCLUDE anyway.\n sft: (rows: readonly SftRow[]): ReleaseRowRef[] =>\n rows.map((row) => ({\n rollout_id: row.metadata.rollout_id,\n reward: row.metadata.reward,\n realness_screened: row.metadata.realness_screened,\n })),\n // `metrics` IS the per-rubric score dict in the Prime Intellect verifiers\n // format — the same numbers the reward was computed from. This is the leak\n // that shipped.\n verifiers: (rows: readonly VerifiersRolloutOutput[]): ReleaseRowRef[] =>\n rows.map((row) => ({\n rollout_id: row.info.rollout_id,\n reward: row.reward,\n evidence: row.metrics,\n realness_screened: row.info.realness_screened,\n })),\n // RFT re-samples the completion, but the grader reads `item.reference.*`, so\n // the verbatim judge verdict is a reward-bearing field on the row.\n rft: (rows: readonly RftItem[]): ReleaseRowRef[] =>\n rows.map((row) => ({\n rollout_id: row.reference.rollout_id,\n reward: row.reference.reward,\n evidence: row.reference.verdict,\n realness_screened: row.reference.realness_screened,\n })),\n raw: (lines: readonly MintedRolloutLine[]): ReleaseRowRef[] =>\n lines.map((line) => ({\n rollout_id: line.rollout_id,\n reward: line.outcome.reward,\n // `provenance.gated_evidence` is deliberately NOT walked: relocating the\n // diagnostics there is what the gate DOES, and the raw config is the\n // audit dump those diagnostics exist for.\n evidence: { metrics: line.outcome.metrics, verdict: line.outcome.verdict },\n // `raw` is the only config that writes the whole line, so it is the only\n // one whose rows can carry a per-step reward.\n stepEvidence: undeclaredStepPayload(line.steps),\n realness_screened: line.outcome.realness_screened ?? null,\n })),\n}\n\n/** Every positive finite number inside a row's reward-derived payload, with its path. */\nfunction positiveNumbersIn(value: unknown, path: string): EmittedEvidence[] {\n if (typeof value === 'number') {\n return Number.isFinite(value) && value > 0 ? [{ path, value }] : []\n }\n if (Array.isArray(value)) {\n return value.flatMap((item, i) => positiveNumbersIn(item, `${path}[${i}]`))\n }\n if (typeof value === 'object' && value !== null) {\n return Object.entries(value).flatMap(([key, child]) =>\n positiveNumbersIn(child, path === '' ? key : `${path}.${key}`),\n )\n }\n return []\n}\n\n/** Measure one format's gated rows from the refs of the rows about to be written. */\nexport function measureFormatGate(\n gated: ReadonlySet<string>,\n refs: readonly ReleaseRowRef[],\n): FormatGateCounts {\n const emitted = refs.filter((ref) => gated.has(ref.rollout_id))\n const rewards = emitted.map((ref) => ref.reward).filter((r): r is number => r !== null)\n const evidence = emitted.flatMap((ref) => positiveNumbersIn(ref.evidence, ''))\n const stepEvidence = emitted.flatMap((ref) => positiveNumbersIn(ref.stepEvidence, 'steps'))\n const unscreened = refs\n .filter((ref) => ref.realness_screened === false)\n .map((ref) => ref.reward)\n .filter((r): r is number => r !== null && r > 0)\n return {\n input: gated.size,\n emitted: emitted.length,\n excluded: gated.size - emitted.length,\n maxEmittedReward: rewards.length === 0 ? null : Math.max(...rewards),\n maxEmittedEvidence: evidence.reduce<EmittedEvidence | null>(\n (best, found) => (best === null || found.value > best.value ? found : best),\n null,\n ),\n unscreenedPositiveRows: unscreened.length,\n maxUnscreenedReward: unscreened.length === 0 ? null : Math.max(...unscreened),\n maxEmittedStepEvidence: stepEvidence.reduce<EmittedEvidence | null>(\n (best, found) => (best === null || found.value > best.value ? found : best),\n null,\n ),\n }\n}\n\n/**\n * The measured form of each canonical gate check, over the rows a release is\n * ABOUT TO WRITE. Returns the failure message, or `null` when the format is\n * clean on that check.\n *\n * TOTAL over `GateCheckId` — this map and `GATE_POLICIES.assertGateReport` are\n * the two things a new check breaks here, so the release certifier cannot be\n * left behind by a check added anywhere else in the package. That is the whole\n * point: for four rounds each guard composed its own subset by hand, and a\n * release certifying CLEAN while leaking is the most expensive version of that\n * mistake, because it is the leak plus a document saying there isn't one.\n */\nconst REPORT_MEASURES: {\n readonly [K in GateCheckId]: (format: ReleaseFormat, counts: FormatGateCounts) => string | null\n} = {\n 'reward-relationship': (format, counts) =>\n counts.maxEmittedReward === null || counts.maxEmittedReward <= 0\n ? null\n : `release format \"${format}\": ${counts.emitted} realness-gated row(s) carry a positive ` +\n `reward (max ${counts.maxEmittedReward}). A run flagged as gamed may not ship a ` +\n 'positive reward in any config.',\n 'gated-evidence': (format, counts) => {\n if (counts.maxEmittedEvidence === null) return null\n const { path, value } = counts.maxEmittedEvidence\n return (\n `release format \"${format}\": ${counts.emitted} realness-gated row(s) carry a positive ` +\n `reward-derived number (${path} = ${value}). Zeroing the scalar is not enough — the ` +\n 'per-layer scores and judge verdict a fabricated reward was computed FROM are the ' +\n 'same signal in component form, and in this format they are read as training input. ' +\n 'They belong in `provenance.gated_evidence` (see `gateGamedOutcome`), not on the row.'\n )\n },\n 'undeclared-step-payload': (format, counts) => {\n if (counts.maxEmittedStepEvidence === null) return null\n const { path, value } = counts.maxEmittedStepEvidence\n return (\n `release format \"${format}\": ${counts.emitted} realness-gated row(s) carry a positive ` +\n `per-step number under a field \\`tangle.rollout.v1\\` does not declare (${path} = ${value}). ` +\n 'A per-step reward is the same training signal as the scalar, in credit-assignment form, ' +\n 'and the exporters copy `steps` through verbatim — so the row ships it beside a `reward` ' +\n 'of 0. It belongs in `provenance.gated_evidence.steps` (see `gateGamedOutcome`).'\n )\n },\n 'unscreened-reward': (format, counts) =>\n counts.maxUnscreenedReward === null\n ? null\n : `release format \"${format}\": ${counts.unscreenedPositiveRows} row(s) carry a positive ` +\n `reward (max ${counts.maxUnscreenedReward}) whose producer declares that NO authenticity ` +\n 'screen ran on it (`realness_screened: false`). Nothing has established those successes ' +\n 'are real, and a published dataset may not present an unqualified verdict as a measured ' +\n 'one. Screen the runs, or publish them at `reward: null`.',\n}\n\n/**\n * Fail the build when the measurement disagrees with the declared policy.\n *\n * Throws, never filters: an emitted positive reward on a gated row means an\n * exporter upstream stopped applying the gate, and silently dropping the row\n * would hide the producer that made it — the producer is the actual defect.\n *\n * Certifies the whole emitted outcome, not `reward` alone. The earlier version\n * checked one field and therefore certified a release CLEAN while its\n * `verifiers/train.jsonl` shipped the gamed run's per-layer scores at 1.0 in\n * the top-level `metrics` dict — the card then rendered \"max reward | 0\" over\n * exactly that file. A certification that is wrong is worse than an\n * uncertified leak, so the checks it runs are no longer written down here at\n * all: it iterates `GATE_CHECK_IDS` under its own declared policy.\n */\nexport function assertGateReport(report: GateReport): void {\n for (const [format, counts] of Object.entries(report.byFormat) as Array<\n [ReleaseFormat, FormatGateCounts]\n >) {\n for (const id of GATE_CHECK_IDS) {\n if (GATE_POLICIES.assertGateReport[id].kind !== 'enforce') continue\n const failure = REPORT_MEASURES[id](format, counts)\n if (failure !== null) throw new Error(failure)\n }\n // Not a gate check: this one is the RELEASE POLICY (`FORMAT_GATE_DISPOSITION`)\n // rather than the anti-Goodhart invariant — it asks whether the format did\n // what it said it would with gated rows, not whether a row is poisoned.\n if (FORMAT_GATE_DISPOSITION[format] === 'exclude' && counts.emitted > 0) {\n throw new Error(\n `release format \"${format}\" declares gated lines EXCLUDED but wrote ${counts.emitted} ` +\n 'of them.',\n )\n }\n }\n}\n","/**\n * HuggingFace dataset-card (README.md) generation for a rollout-ledger release.\n *\n * The card is a pure function of the SCRUBBED lines plus the release options —\n * no timestamps, no environment reads — so rebuilding from the same ledger\n * yields byte-identical output. It documents the schema, provenance (run ids,\n * generations, the official judge), per-role reward semantics including the\n * inherited/contribution caveat, and a role × reward counts table.\n */\n\nimport { type MintedRolloutLine, ROLLOUT_ROLES, ROLLOUT_SCHEMA, type RolloutRole } from '../schema'\nimport { assertGateReport, FORMAT_GATE_DISPOSITION, type GateReport } from './gate-report'\nimport type { ScrubCounts } from './scrub'\n\nexport const RELEASE_FORMATS = ['sft', 'verifiers', 'rft', 'raw'] as const\nexport type ReleaseFormat = (typeof RELEASE_FORMATS)[number]\n\n/** Format → data file path inside the dataset dir (train split only). */\nexport const FORMAT_FILES: Record<ReleaseFormat, string> = {\n sft: 'sft/train.jsonl',\n verifiers: 'verifiers/train.jsonl',\n rft: 'rft/train.jsonl',\n raw: 'raw/train.jsonl',\n}\n\nconst FORMAT_DESCRIPTIONS: Record<ReleaseFormat, string> = {\n sft: 'Successful trainable-split transcripts (`reward >= 1`, never realness-gated) as `{messages, metadata}` chat JSONL.',\n verifiers:\n 'Prime Intellect verifiers `RolloutOutput`: prompt/completion split at the first assistant turn, plus reward, metrics, tool defs, and token usage.',\n rft: 'OpenAI RFT items: prompt turns plus `reference.*` verdict fields for a grader (completions are re-sampled during RFT).',\n raw: `Full \\`${ROLLOUT_SCHEMA}\\` ledger lines (scrubbed), one per agent invocation.`,\n}\n\nexport interface DatasetCardInputs {\n /** Scrubbed, release-filtered lines (what actually ships). */\n lines: MintedRolloutLine[]\n formats: ReleaseFormat[]\n includeProposers: boolean\n /** Source ledger basenames, for provenance. */\n sourceFiles: string[]\n scrubTotals: ScrubCounts\n excluded: { proposers: number; nonTrain: number }\n formatCounts: Partial<Record<ReleaseFormat, number>>\n /**\n * Per-format anti-Goodhart accounting MEASURED on the rows the build wrote.\n * Required, not optional: the card's only statement about the gate is a\n * render of these numbers, so a card cannot be produced without them and\n * cannot drift from the data files it ships beside.\n */\n gate: GateReport\n}\n\nfunction unique(values: Array<string | null>): string[] {\n return [...new Set(values.filter((v): v is string => v !== null))].sort()\n}\n\nfunction formatReward(reward: number | null): string {\n if (reward === null) return 'null'\n return Number.isInteger(reward) ? String(reward) : reward.toFixed(4)\n}\n\nfunction markdownTable(header: string[], rows: string[][]): string {\n return [\n `| ${header.join(' | ')} |`,\n `| ${header.map(() => '---').join(' | ')} |`,\n ...rows.map((row) => `| ${row.join(' | ')} |`),\n ].join('\\n')\n}\n\n/** Where the anti-Goodhart flag lives on each format's emitted row. */\nconst GATE_FLAG_FIELD: Record<ReleaseFormat, string> = {\n sft: '— (no gated row is written)',\n verifiers: '`info.realness_gated`',\n rft: '`reference.realness_gated`',\n raw: '`outcome.realness_gated`',\n}\n\nconst GATE_POLICY_LABEL: Record<ReleaseFormat, string> = {\n sft: 'EXCLUDED — an SFT row is an imitation target',\n verifiers: 'INCLUDED, reward forced to 0, flagged',\n rft: 'INCLUDED, reward forced to 0, flagged',\n raw: 'INCLUDED verbatim, flagged',\n}\n\nfunction gateSection(formats: ReleaseFormat[], gate: GateReport, totalLines: number): string {\n const rows = formats.map((format) => {\n const counts = gate.byFormat[format]\n return [\n format,\n GATE_POLICY_LABEL[format],\n String(counts?.emitted ?? 0),\n String(counts?.excluded ?? 0),\n counts?.maxEmittedReward === null || counts === undefined\n ? '—'\n : formatReward(counts.maxEmittedReward),\n counts?.maxEmittedEvidence == null\n ? '—'\n : `${counts.maxEmittedEvidence.path} = ${counts.maxEmittedEvidence.value}`,\n GATE_FLAG_FIELD[format],\n ]\n })\n const mixedExclusion = formats.some(\n (format) => FORMAT_GATE_DISPOSITION[format] === 'zero-and-flag',\n )\n return [\n `\\`outcome.realness_gated: true\\` marks a run whose success signal was faked (it satisfied the proxy without doing the work). **${gate.gatedLines} of ${totalLines} lines in this release are gated.**`,\n '',\n 'The gate is enforced, not asserted. A line pairing `realness_gated: true` with a reward above 0 is rejected by the schema validator, so it cannot be read out of a source ledger or written into `raw/train.jsonl` at all; on a gated line the numbers the reward was computed from (`outcome.metrics`, the verbatim judge `outcome.verdict`, and any per-step field the schema does not declare — a per-step reward is the same signal in credit-assignment form) are moved out of `outcome` and `steps[]` and into `provenance.gated_evidence`, where no config reads them as training input; the exporters re-check the same invariant on every line; and the release build measures the rows it is about to write and refuses to write ANY file if a gated row carries a positive reward — or any positive number derived from one — in ANY config.',\n '',\n 'The table below is **measured on the rows in this release**, not a description of intent — the build counts the emitted rows and this card renders those counts:',\n '',\n markdownTable(\n [\n 'config',\n 'policy',\n 'gated rows written',\n 'gated rows not written',\n 'max reward',\n 'max reward-derived number',\n 'flag',\n ],\n rows,\n ),\n '',\n 'Why gated rows are kept where they are kept: an SFT row is imitated verbatim, so a gamed trajectory must never appear in one at any weight. In `verifiers` the reward is a signed learning signal, and a gamed trajectory at reward 0 is a correct negative — dropping it would bias the negative population toward honest failures and leave a trainer no example of gaming being penalized. `rft` re-samples the completion, so only the prompt and the grader reference ship. `raw` is a faithful audit dump, where the gated row is the one an auditor most wants.',\n '',\n \"Reward 0 is never the only label: every included config carries the flag on the row itself, because zeroing alone makes a faked success indistinguishable from an honest failure. Filter on the flag to drop the gamed population, or select on it to mine it. The gated run's own measurements are not destroyed either — they are parked verbatim under `provenance.gated_evidence` in `raw/train.jsonl`, which is where an auditor can see what the run claimed and why it was flagged.\",\n mixedExclusion\n ? '\\n\"Gated rows not written\" is not all gate: `verifiers` also drops gap lines (empty transcript) and `rft` drops lines with no prompt turn, so that column can mix both causes.'\n : '',\n ]\n .join('\\n')\n .trimEnd()\n}\n\nfunction roleRewardRows(lines: MintedRolloutLine[]): string[][] {\n const counts = new Map<RolloutRole, Map<string, number>>()\n for (const line of lines) {\n const byReward = counts.get(line.role) ?? new Map<string, number>()\n const key = formatReward(line.outcome.reward)\n byReward.set(key, (byReward.get(key) ?? 0) + 1)\n counts.set(line.role, byReward)\n }\n const rows: string[][] = []\n for (const role of ROLLOUT_ROLES) {\n const byReward = counts.get(role)\n if (!byReward) continue\n const keys = [...byReward.keys()].sort((a, b) => {\n if (a === 'null') return 1\n if (b === 'null') return -1\n return Number(b) - Number(a)\n })\n for (const key of keys) rows.push([role, key, String(byReward.get(key))])\n }\n return rows\n}\n\nexport function buildDatasetCard(inputs: DatasetCardInputs): string {\n const {\n lines,\n formats,\n includeProposers,\n sourceFiles,\n scrubTotals,\n excluded,\n formatCounts,\n gate,\n } = inputs\n // The card is the artifact a buyer reads; it may not render a gate report\n // that violates the release policy even when called outside the build.\n assertGateReport(gate)\n\n const runIds = unique(lines.map((line) => line.run_id))\n const generations = [...new Set(lines.map((line) => line.generation))]\n .filter((g): g is number => g !== null)\n .sort((a, b) => a - b)\n const models = unique(lines.map((line) => line.policy.model))\n const harnesses = unique(lines.map((line) => line.policy.harness))\n const captures = unique(lines.map((line) => line.provenance.capture))\n const rewardSources = unique(lines.map((line) => line.outcome.reward_source))\n const gapLines = lines.filter((line) => line.messages.length === 0).length\n const gatedLines = lines.filter((line) => line.outcome.realness_gated).length\n if (gatedLines !== gate.gatedLines) {\n throw new Error(\n `dataset card: gate report claims ${gate.gatedLines} realness-gated line(s) but the lines ` +\n `it describes contain ${gatedLines} — the card and the build measured different data.`,\n )\n }\n\n const configs = formats\n .map((format) =>\n [\n ` - config_name: ${format}`,\n ' data_files:',\n ' - split: train',\n ` path: ${FORMAT_FILES[format]}`,\n ].join('\\n'),\n )\n .join('\\n')\n\n const frontmatter = [\n '---',\n 'license: unknown',\n 'pretty_name: Tangle rollout ledger — agent trajectories',\n 'configs:',\n configs,\n '---',\n ].join('\\n')\n\n const formatsTable = markdownTable(\n ['config', 'path', 'rows', 'contents'],\n formats.map((format) => [\n format,\n `\\`${FORMAT_FILES[format]}\\``,\n String(formatCounts[format] ?? 0),\n FORMAT_DESCRIPTIONS[format],\n ]),\n )\n\n const countsTable = markdownTable(['role', 'reward', 'lines'], roleRewardRows(lines))\n\n const scrubTable = markdownTable(\n ['rule', 'rewrites'],\n Object.entries(scrubTotals).map(([rule, count]) => [rule, String(count)]),\n )\n\n const proposerNote = includeProposers\n ? 'Proposer sessions are INCLUDED (`--include-proposers`); their transcripts contain improvement-loop harness source.'\n : `Proposer sessions are excluded by default (${excluded.proposers} lines dropped); they contain improvement-loop harness source. Rebuild with \\`--include-proposers\\` to keep them.`\n\n return `${frontmatter}\n\n# Tangle rollout ledger — agent trajectories\n\nOne line per agent invocation (supervisor episode, worker session, proposer shot, judge call, analyst pass) captured by the \\`${ROLLOUT_SCHEMA}\\` rollout ledger, labeled with improvement-loop coordinates and the official-judge reward, with the full message transcript inline.\n\nThis release contains the **trainable split only** (\\`search\\`). Holdout, dev, and canary splits are structurally excluded at build time, and the build additionally drops any non-trainable line as a fail-closed filter (${excluded.nonTrain} dropped here).\n\n## Formats\n\n${formatsTable}\n\n## Anti-Goodhart gate (\\`realness_gated\\`)\n\n${gateSection(formats, gate, lines.length)}\n\n## Schema (\\`${ROLLOUT_SCHEMA}\\`)\n\nEach raw line carries:\n\n- \\`rollout_id\\` / \\`parent_rollout_id\\` — invocation identity; workers point at their spawning supervisor episode.\n- \\`run_id\\`, \\`experiment_id\\`, \\`candidate_id\\` — run/experiment/candidate identity from the producing RunRecord, when present.\n- \\`generation\\`, \\`candidate_index\\` — improvement-loop coordinates (\\`-1\\` = baseline campaign; \\`null\\` = not an improvement loop).\n- \\`role\\` — one of ${ROLLOUT_ROLES.map((role) => `\\`${role}\\``).join(', ')}.\n- \\`task\\` — suite, instance id, split, seed, replicate index.\n- \\`policy\\` — harness, model, provider, profile commit, prompt/config hashes, sampling params.\n- \\`messages\\` / \\`tool_defs\\` — full transcript in canonical OpenAI chat-with-tools form (including \\`reasoning_content\\`). An empty \\`messages\\` array is a labeled gap line; \\`provenance.gap\\` says why the transcript could not be recovered (${gapLines} gap lines in this release).\n- \\`outcome\\` — \\`reward\\` (the single scalar), \\`reward_source\\`, the verbatim judge \\`verdict\\`, non-scalar \\`metrics\\`, and \\`realness_gated\\` (anti-Goodhart flag; see [Anti-Goodhart gate](#anti-goodhart-gate-realness_gated) for the per-config treatment and the measured counts).\n- \\`cost\\` — usd, token counts, wall time.\n- \\`artifacts\\` / \\`provenance\\` — patch/run-dir/transcript pointers (scrubbed) and capture metadata.\n\n## Provenance\n\n- Source ledgers: ${sourceFiles.map((file) => `\\`${file}\\``).join(', ')}\n- Run ids: ${runIds.map((id) => `\\`${id}\\``).join(', ')}\n- Generations: ${generations.join(', ')} (\\`-1\\` = baseline campaign)\n- Models: ${models.map((m) => `\\`${m}\\``).join(', ')}\n- Harnesses: ${harnesses.map((h) => `\\`${h}\\``).join(', ')}\n- Capture modes: ${captures.join(', ')}\n- Every reward traces to a named source (reward sources in this release: ${rewardSources.map((s) => `\\`${s}\\``).join(', ')}).\n\n${proposerNote}\n\n## Reward semantics per role\n\n- **agent** — the producing RunRecord's holdout/search score, with the realness gate forcing gamed successes to 0.\n- **supervisor** — the official-judge verdict on the episode's delivered artifact (1 = resolved, 0 = not).\n- **worker** — INHERITED from the parent supervisor episode (\\`…/inherited\\`). Caveat: reward 1 does not establish this worker's individual contribution (sibling workers in the same episode share the episode outcome), and reward 0 does not prove this worker failed.\n- **proposer** — the fraction of improvement-set instances the proposed candidate resolved (\\`…/candidate-resolved-fraction\\`); a scalar in [0, 1], not a binary verdict.\n- **judge / analyst** — carry the episode verdict where one applies; otherwise \\`reward: null\\` (a labeled gap, never 0).\n\n## Counts\n\n${countsTable}\n\nTotal lines: ${lines.length}\n\n## Scrubbing\n\nAbsolute home paths were rewritten to \\`$WORK\\`, credential-shaped strings were replaced with \\`[REDACTED:<kind>]\\` markers, internal hostnames were normalized to \\`*.internal.example\\`, and username-bearing incidentals (\\`ls -l\\` owner columns, per-user pytest tmpdirs) were normalized to \\`user\\` / \\`$USER\\`. Rewrite counts for this release (full per-file breakdown in \\`scrub-report.json\\`):\n\n${scrubTable}\n\n## License\n\n\\`license: unknown\\` is a placeholder — the releasing operator must set the real SPDX license id in the frontmatter above before publishing.\n\n## Citation\n\n\\`\\`\\`bibtex\n@misc{tangle_rollout_ledger,\n title = {Tangle rollout ledger — agent trajectories},\n author = {{Tangle Network}},\n howpublished = {HuggingFace Datasets},\n note = {Operator: fill in the repository URL, authors, and year before publishing}\n}\n\\`\\`\\`\n`\n}\n","/**\n * Deterministic scrubbing pass over rollout-ledger lines before public release.\n *\n * Every rule is a pure regex rewrite applied to every string value in a line\n * (messages, artifacts, run ids, tool arguments — everywhere), so the scrubbed\n * line is still a valid `tangle.rollout.v1` line. Rules are idempotent:\n * scrub(scrub(x)) === scrub(x), and a second pass counts zero hits — that is\n * the property the release pipeline relies on to prove nothing half-scrubbed\n * ships. Rule order matters: whole `KEY=value` env pairs are redacted before\n * the bare-key rule so one secret is never counted twice.\n */\n\nimport { assertMinted, type MintedRolloutLine } from '../schema'\n\nexport interface ScrubRule {\n name: string\n pattern: RegExp\n /** Rewrite for one match; `g1` is the first capture group when present. */\n rewrite: (match: string, g1?: string) => string\n}\n\nconst SCRUB_RULES: readonly ScrubRule[] = [\n {\n // /home/<user> and /Users/<user> prefixes → $WORK ($HOME-derived paths).\n name: 'home-path',\n pattern: /\\/(?:home|Users)\\/[A-Za-z0-9._-]+/g,\n rewrite: () => '$WORK',\n },\n {\n // Harness stores encode cwd as a dashed path segment (-home-drew-…);\n // strip the leading -home-<user> so the username never ships.\n name: 'home-path-encoded',\n pattern: /(?<=\\/)-(?:home|Users)-[A-Za-z0-9_.]+/g,\n rewrite: () => '$WORK',\n },\n {\n // pytest names its tmpdir after the invoking user (/tmp/pytest-of-drew).\n name: 'tmp-user-dir',\n pattern: /\\/tmp\\/pytest-of-[A-Za-z0-9._-]+/g,\n rewrite: () => '/tmp/pytest-of-$USER',\n },\n {\n // `ls -l` owner/group columns leak the username in captured tool output.\n // The `(?!user user…)` guard keeps a second pass at zero rewrites.\n name: 'ls-owner',\n pattern:\n /([-bcdlps][-rwxsStT]{9}[.+@]?\\s+\\d+\\s+)(?!user user(?=\\s))[A-Za-z0-9._-]+\\s+[A-Za-z0-9._-]+(?=\\s)/g,\n rewrite: (_match, prefix) => `${prefix}user user`,\n },\n {\n // Env-var-shaped secrets: NAME=value where NAME looks credential-bearing.\n // The (?!\\[REDACTED:) guard keeps the rule idempotent on its own output.\n name: 'env-secret',\n pattern:\n /\\b([A-Z][A-Z0-9_]*(?:KEY|TOKEN|SECRET|PASSWORD|PASSWD|CREDENTIALS?))=(?!\\[REDACTED:)(\"[^\"]*\"|'[^']*'|[^\\s\"']+)/g,\n rewrite: (_match, name) => `${name}=[REDACTED:env]`,\n },\n {\n name: 'bearer-token',\n pattern: /\\b(Bearer|Basic)\\s+(?!\\[REDACTED:)[A-Za-z0-9\\-._~+/=]{8,}/g,\n rewrite: (_match, scheme) => `${scheme} [REDACTED:bearer]`,\n },\n {\n // Bare provider-prefixed keys (OpenAI/Anthropic sk-, GitHub ghp_/gho_/…,\n // fine-grained PATs, HuggingFace hf_, Slack xox*, AWS AKIA).\n name: 'api-key',\n pattern:\n /\\b(?:sk-[A-Za-z0-9_-]{16,}|gh[pousr]_[A-Za-z0-9]{16,}|github_pat_[A-Za-z0-9_]{20,}|hf_[A-Za-z0-9]{16,}|xox[baprs]-[A-Za-z0-9-]{10,}|AKIA[0-9A-Z]{16})\\b/g,\n rewrite: () => '[REDACTED:api-key]',\n },\n {\n // Our infra hostnames → placeholder domain, subdomain preserved\n // (router.tangle.tools → router.internal.example).\n name: 'infra-host',\n pattern: /(?<![A-Za-z0-9.-])((?:[A-Za-z0-9-]+\\.)*)tangle\\.(?:tools|network)(?![A-Za-z0-9-])/g,\n rewrite: (_match, prefix) => `${prefix ?? ''}internal.example`,\n },\n {\n // Known workstation hostnames leak through email Message-IDs and fqdn\n // lookups inside captured test output; extend the list as machines join.\n name: 'machine-host',\n pattern: /\\b[A-Za-z0-9]+-GTR-Pro\\b/g,\n rewrite: () => 'workstation',\n },\n]\n\n/** Rule name → number of matches rewritten. Always carries every rule (0 is data). */\nexport type ScrubCounts = Record<string, number>\n\nexport function emptyScrubCounts(): ScrubCounts {\n return Object.fromEntries(SCRUB_RULES.map((rule) => [rule.name, 0]))\n}\n\nexport function addScrubCounts(into: ScrubCounts, from: ScrubCounts): ScrubCounts {\n for (const [name, count] of Object.entries(from)) into[name] = (into[name] ?? 0) + count\n return into\n}\n\nexport function scrubText(text: string, counts: ScrubCounts): string {\n let out = text\n for (const rule of SCRUB_RULES) {\n out = out.replace(rule.pattern, (match: string, ...rest: unknown[]) => {\n counts[rule.name] = (counts[rule.name] ?? 0) + 1\n return rule.rewrite(match, typeof rest[0] === 'string' ? rest[0] : undefined)\n })\n }\n return out\n}\n\nfunction scrubValue(value: unknown, counts: ScrubCounts): unknown {\n if (typeof value === 'string') return scrubText(value, counts)\n if (Array.isArray(value)) return value.map((item) => scrubValue(item, counts))\n if (value !== null && typeof value === 'object') {\n const out: Record<string, unknown> = {}\n for (const [key, item] of Object.entries(value)) out[key] = scrubValue(item, counts)\n return out\n }\n return value\n}\n\n/**\n * Scrub every string value in a line; structure and key order are preserved.\n *\n * `assertMinted` on the way out rather than a cast: scrubbing rebuilds the\n * object, so the brand has to be re-earned, and re-validating proves the rules\n * did not rewrite a field the schema constrains (`reward` is a number, not a\n * string, so no rule should ever touch it — this is what checks that).\n */\nexport function scrubRolloutLine(line: MintedRolloutLine, counts: ScrubCounts): MintedRolloutLine {\n return assertMinted(scrubValue(line, counts), `scrubbed rollout line ${line.rollout_id}`)\n}\n\nexport function scrubLines(lines: MintedRolloutLine[]): {\n lines: MintedRolloutLine[]\n counts: ScrubCounts\n} {\n const counts = emptyScrubCounts()\n return { lines: lines.map((line) => scrubRolloutLine(line, counts)), counts }\n}\n\n/**\n * A `RolloutScrubber` (text → text) applying the full rule set — the\n * default hook to pass to `mintRolloutRows({ scrub })` so lines are\n * scrubbed at mint time, before they ever reach a ledger file. Release\n * builds re-run `scrubLines` regardless (idempotent), so double-scrubbing\n * is safe and counted as zero.\n */\nexport function defaultRolloutScrubber(text: string): string {\n return scrubText(text, emptyScrubCounts())\n}\n","/**\n * One-command HuggingFace dataset release from rollout ledgers:\n *\n * agent-eval rollout-release <ledger.jsonl...> --out <dir> \\\n * [--formats sft,verifiers,rft,raw] [--include-proposers] [--push <org/name>]\n *\n * Pipeline per input ledger: read + validate → fail-closed filters\n * (trainable split only; proposer sessions dropped unless\n * --include-proposers, they contain improvement-loop harness source) →\n * deterministic scrub → export the requested formats + scrub-report.json +\n * auto-generated README.md card. Deterministic: same inputs and flags →\n * byte-identical output dir.\n *\n * --push uploads the built dir with `huggingface-cli upload` only when the\n * CLI exists on PATH and HF_TOKEN is present in the env; the token is\n * never printed. Everything else runs fully offline.\n */\n\nimport { spawnSync } from 'node:child_process'\nimport { mkdir, writeFile } from 'node:fs/promises'\nimport { basename, dirname, join } from 'node:path'\nimport { toJsonl, toRftItems, toSftRows, toVerifiersRolloutOutputs } from '../exporters'\nimport { readRolloutLedger, writeRolloutLedger } from '../ledger'\nimport { isTrainableSplit, type MintedRolloutLine } from '../schema'\nimport { buildDatasetCard, FORMAT_FILES, RELEASE_FORMATS, type ReleaseFormat } from './card'\nimport {\n assertGateReport,\n FORMAT_GATE_DISPOSITION,\n type GateReport,\n gatedRolloutIds,\n measureFormatGate,\n releaseRowRefs,\n} from './gate-report'\nimport { addScrubCounts, emptyScrubCounts, type ScrubCounts, scrubLines } from './scrub'\n\nexport interface BuildOptions {\n out: string\n formats: ReleaseFormat[]\n includeProposers: boolean\n}\n\nexport interface ScrubReport {\n /** Input ledger path → rule → rewrite count (only shipped lines are scrubbed). */\n files: Record<string, ScrubCounts>\n totals: ScrubCounts\n excluded: { proposers: number; nonTrain: number }\n}\n\nexport interface BuildSummary {\n inputs: string[]\n read: number\n kept: number\n scrub: ScrubReport\n formatCounts: Partial<Record<ReleaseFormat, number>>\n /** Per-format anti-Goodhart accounting, measured on the rows written. */\n gate: GateReport\n files: string[]\n}\n\nexport async function buildHfDataset(\n inputs: string[],\n options: BuildOptions,\n): Promise<BuildSummary> {\n if (inputs.length === 0) throw new Error('no input ledgers given')\n if (options.formats.length === 0) throw new Error('no formats selected')\n\n const report: ScrubReport = {\n files: {},\n totals: emptyScrubCounts(),\n excluded: { proposers: 0, nonTrain: 0 },\n }\n const kept: MintedRolloutLine[] = []\n let read = 0\n\n for (const input of inputs) {\n const lines = await readRolloutLedger(input)\n read += lines.length\n const shippable = lines.filter((line) => {\n if (!isTrainableSplit(line.task.split)) {\n report.excluded.nonTrain += 1\n return false\n }\n if (!options.includeProposers && line.role === 'proposer') {\n report.excluded.proposers += 1\n return false\n }\n return true\n })\n const scrubbed = scrubLines(shippable)\n report.files[input] = scrubbed.counts\n addScrubCounts(report.totals, scrubbed.counts)\n kept.push(...scrubbed.lines)\n }\n\n const formatCounts: Partial<Record<ReleaseFormat, number>> = {}\n const files: string[] = []\n const gated = gatedRolloutIds(kept)\n const gate: GateReport = { gatedLines: gated.size, byFormat: {} }\n\n // Every selected format's rows are exported and gate-measured BEFORE the\n // first byte is written. A build that would ship a gamed run at a positive\n // reward fails with nothing on disk, rather than leaving a poisoned config\n // behind for someone to `--push`.\n const pending: Array<{ path: string; write: () => Promise<void> }> = []\n\n for (const format of options.formats) {\n const path = join(options.out, FORMAT_FILES[format])\n if (format === 'raw') {\n // writeRolloutLedger re-validates every scrubbed line before it lands.\n gate.byFormat.raw = measureFormatGate(gated, releaseRowRefs.raw(kept))\n formatCounts.raw = kept.length\n pending.push({ path, write: () => writeRolloutLedger(path, kept) })\n } else if (format === 'sft') {\n const rows = toSftRows(kept)\n gate.byFormat.sft = measureFormatGate(gated, releaseRowRefs.sft(rows))\n formatCounts.sft = rows.length\n pending.push({ path, write: () => writeFile(path, toJsonl(rows)) })\n } else if (format === 'verifiers') {\n // The declared disposition drives the exporter: 'zero-and-flag' ships\n // gated lines and honest failures as labeled negatives at reward 0.\n const outputs = toVerifiersRolloutOutputs(kept, {\n gatedLines: FORMAT_GATE_DISPOSITION.verifiers,\n })\n gate.byFormat.verifiers = measureFormatGate(gated, releaseRowRefs.verifiers(outputs))\n formatCounts.verifiers = outputs.length\n pending.push({ path, write: () => writeFile(path, toJsonl(outputs)) })\n } else {\n const items = toRftItems(kept, { gatedLines: FORMAT_GATE_DISPOSITION.rft })\n gate.byFormat.rft = measureFormatGate(gated, releaseRowRefs.rft(items))\n formatCounts.rft = items.length\n pending.push({ path, write: () => writeFile(path, toJsonl(items)) })\n }\n }\n\n assertGateReport(gate)\n\n for (const { path, write } of pending) {\n await mkdir(dirname(path), { recursive: true })\n await write()\n files.push(path)\n }\n\n const reportPath = join(options.out, 'scrub-report.json')\n await writeFile(reportPath, `${JSON.stringify(report, null, 2)}\\n`)\n files.push(reportPath)\n\n const cardPath = join(options.out, 'README.md')\n await writeFile(\n cardPath,\n buildDatasetCard({\n lines: kept,\n formats: options.formats,\n includeProposers: options.includeProposers,\n sourceFiles: inputs.map((input) => basename(input)),\n scrubTotals: report.totals,\n excluded: report.excluded,\n formatCounts,\n gate,\n }),\n )\n files.push(cardPath)\n\n return { inputs, read, kept: kept.length, scrub: report, formatCounts, gate, files }\n}\n\nexport function planPushCommand(repo: string, outDir: string): string[] {\n return ['huggingface-cli', 'upload', repo, outDir, '.', '--repo-type', 'dataset']\n}\n\nfunction pushDataset(repo: string, outDir: string): void {\n const found = spawnSync('which', ['huggingface-cli'], { stdio: 'ignore' })\n if (found.status !== 0) {\n throw new Error(\n 'huggingface-cli not found on PATH — install huggingface_hub[cli] before --push',\n )\n }\n if (!process.env.HF_TOKEN) {\n throw new Error('HF_TOKEN not present in env — refusing to push')\n }\n const [command, ...args] = planPushCommand(repo, outDir) as [string, ...string[]]\n // Token stays in the inherited env; it is never echoed or interpolated.\n const run = spawnSync(command, args, { stdio: 'inherit' })\n if (run.status !== 0) throw new Error(`huggingface-cli upload exited ${String(run.status)}`)\n}\n\nexport interface RolloutReleaseCliArgs extends BuildOptions {\n inputs: string[]\n push: string | null\n}\n\nconst ROLLOUT_RELEASE_USAGE =\n 'usage: agent-eval rollout-release <ledger.jsonl...> --out <dir> [--formats sft,verifiers,rft,raw] [--include-proposers] [--push <org/name>]'\n\nexport function parseRolloutReleaseArgs(argv: string[]): RolloutReleaseCliArgs {\n const args: RolloutReleaseCliArgs = {\n inputs: [],\n out: '',\n formats: [...RELEASE_FORMATS],\n includeProposers: false,\n push: null,\n }\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i]!\n if (arg === '--out') {\n args.out = argv[++i] ?? ''\n } else if (arg === '--formats') {\n const raw = (argv[++i] ?? '').split(',').filter(Boolean)\n for (const format of raw) {\n if (!RELEASE_FORMATS.includes(format as ReleaseFormat)) {\n throw new Error(\n `unknown format \"${format}\" — expected one of ${RELEASE_FORMATS.join(',')}`,\n )\n }\n }\n args.formats = raw as ReleaseFormat[]\n } else if (arg === '--include-proposers') {\n args.includeProposers = true\n } else if (arg === '--push') {\n args.push = argv[++i] ?? null\n } else if (arg.startsWith('--')) {\n throw new Error(`unknown flag \"${arg}\"`)\n } else {\n args.inputs.push(arg)\n }\n }\n if (args.inputs.length === 0 || !args.out) {\n throw new Error(ROLLOUT_RELEASE_USAGE)\n }\n if (args.push !== null && !/^[\\w.-]+\\/[\\w.-]+$/.test(args.push)) {\n throw new Error(`--push expects <org/name>, got \"${args.push}\"`)\n }\n return args\n}\n\n/** CLI driver for `agent-eval rollout-release`. Returns the process exit code. */\nexport async function runRolloutReleaseCli(argv: string[]): Promise<number> {\n let args: RolloutReleaseCliArgs\n try {\n args = parseRolloutReleaseArgs(argv)\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 2\n }\n const summary = await buildHfDataset(args.inputs, args)\n process.stdout.write(\n `${JSON.stringify(\n {\n read: summary.read,\n kept: summary.kept,\n formatCounts: summary.formatCounts,\n gate: summary.gate,\n scrub: summary.scrub,\n },\n null,\n 2,\n )}\\n`,\n )\n process.stdout.write(`dataset → ${args.out} (${summary.files.length} files)\\n`)\n if (args.push !== null) {\n pushDataset(args.push, args.out)\n process.stdout.write(`pushed → ${args.push}\\n`)\n }\n return 0\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;AAoBA,SAAS,UAAU,OAA8B;CAC/C,KAAK,MAAM,CAAC,GAAG,SAAS,MAAM,QAAQ,GAAG,kBAAkB,MAAM,iBAAiB,EAAE,EAAE;CACtF,OAAO,MAAM,KAAK,SAAS,KAAK,UAAU,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,KAAK,MAAM,SAAS,IAAI,OAAO;AAC3F;;AAGA,eAAsB,mBAAmB,MAAc,OAAqC;CAC1F,MAAM,UAAU,UAAU,KAAK;CAC/B,MAAM,MAAM,QAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;CAC9C,MAAM,UAAU,MAAM,OAAO;AAC/B;;AAGA,eAAsB,mBAAmB,MAAc,OAAqC;CAC1F,IAAI,MAAM,WAAW,GAAG;CACxB,MAAM,UAAU,UAAU,KAAK;CAC/B,MAAM,MAAM,QAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;CAC9C,MAAM,WAAW,MAAM,OAAO;AAChC;;;;;;;;;;;AAYA,eAAsB,kBAAkB,MAA4C;CAClF,OAAO,UAAU,OAAO,QAAQ,YAAY,aAAa,QAAQ,OAAO,CAAC;AAC3E;;;;;;;;;;;;;;;AAgBA,eAAsB,mBAAmB,MAAsC;CAC7E,OAAO,UAAU,OAAO,QAAQ,YAAyB;EACvD,kBAAkB,QAAQ,OAAO;EACjC,OAAO;CACT,CAAC;AACH;AAEA,eAAe,UACb,MACA,OACc;CACd,MAAM,MAAM,MAAM,SAAS,MAAM,MAAM;CACvC,MAAM,QAAa,CAAC;CACpB,MAAM,WAAW,IAAI,MAAM,IAAI;CAC/B,KAAK,IAAI,IAAI,GAAG,IAAI,SAAS,QAAQ,KAAK;EACxC,MAAM,OAAO,SAAS;EACtB,IAAI,CAAC,MAAM,KAAK,GAAG;EACnB,IAAI;EACJ,IAAI;GACF,SAAS,KAAK,MAAM,IAAI;EAC1B,SAAS,OAAO;GACd,MAAM,IAAI,MACR,GAAG,KAAK,GAAG,IAAI,EAAE,qBAAqB,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,GAC7F;EACF;EACA,MAAM,KAAK,MAAM,QAAQ,GAAG,KAAK,GAAG,IAAI,GAAG,CAAC;CAC9C;CACA,OAAO;AACT;;;ACtCA,MAAa,0BAAkE;CAC7E,KAAK;CACL,WAAW;CACX,KAAK;CACL,KAAK;AACP;;AA2GA,SAAgB,gBAAgB,OAAkD;CAChF,OAAO,IAAI,IAAI,MAAM,QAAQ,SAAS,KAAK,QAAQ,cAAc,CAAC,CAAC,KAAK,SAAS,KAAK,UAAU,CAAC;AACnG;;;;;;;AAQA,MAAa,iBAAiB;CAI5B,MAAM,SACJ,KAAK,KAAK,SAAS;EACjB,YAAY,IAAI,SAAS;EACzB,QAAQ,IAAI,SAAS;EACrB,mBAAmB,IAAI,SAAS;CAClC,EAAE;CAIJ,YAAY,SACV,KAAK,KAAK,SAAS;EACjB,YAAY,IAAI,KAAK;EACrB,QAAQ,IAAI;EACZ,UAAU,IAAI;EACd,mBAAmB,IAAI,KAAK;CAC9B,EAAE;CAGJ,MAAM,SACJ,KAAK,KAAK,SAAS;EACjB,YAAY,IAAI,UAAU;EAC1B,QAAQ,IAAI,UAAU;EACtB,UAAU,IAAI,UAAU;EACxB,mBAAmB,IAAI,UAAU;CACnC,EAAE;CACJ,MAAM,UACJ,MAAM,KAAK,UAAU;EACnB,YAAY,KAAK;EACjB,QAAQ,KAAK,QAAQ;EAIrB,UAAU;GAAE,SAAS,KAAK,QAAQ;GAAS,SAAS,KAAK,QAAQ;EAAQ;EAGzE,cAAc,sBAAsB,KAAK,KAAK;EAC9C,mBAAmB,KAAK,QAAQ,qBAAqB;CACvD,EAAE;AACN;;AAGA,SAAS,kBAAkB,OAAgB,MAAiC;CAC1E,IAAI,OAAO,UAAU,UACnB,OAAO,OAAO,SAAS,KAAK,KAAK,QAAQ,IAAI,CAAC;EAAE;EAAM;CAAM,CAAC,IAAI,CAAC;CAEpE,IAAI,MAAM,QAAQ,KAAK,GACrB,OAAO,MAAM,SAAS,MAAM,MAAM,kBAAkB,MAAM,GAAG,KAAK,GAAG,EAAE,EAAE,CAAC;CAE5E,IAAI,OAAO,UAAU,YAAY,UAAU,MACzC,OAAO,OAAO,QAAQ,KAAK,CAAC,CAAC,SAAS,CAAC,KAAK,WAC1C,kBAAkB,OAAO,SAAS,KAAK,MAAM,GAAG,KAAK,GAAG,KAAK,CAC/D;CAEF,OAAO,CAAC;AACV;;AAGA,SAAgB,kBACd,OACA,MACkB;CAClB,MAAM,UAAU,KAAK,QAAQ,QAAQ,MAAM,IAAI,IAAI,UAAU,CAAC;CAC9D,MAAM,UAAU,QAAQ,KAAK,QAAQ,IAAI,MAAM,CAAC,CAAC,QAAQ,MAAmB,MAAM,IAAI;CACtF,MAAM,WAAW,QAAQ,SAAS,QAAQ,kBAAkB,IAAI,UAAU,EAAE,CAAC;CAC7E,MAAM,eAAe,QAAQ,SAAS,QAAQ,kBAAkB,IAAI,cAAc,OAAO,CAAC;CAC1F,MAAM,aAAa,KAChB,QAAQ,QAAQ,IAAI,sBAAsB,KAAK,CAAC,CAChD,KAAK,QAAQ,IAAI,MAAM,CAAC,CACxB,QAAQ,MAAmB,MAAM,QAAQ,IAAI,CAAC;CACjD,OAAO;EACL,OAAO,MAAM;EACb,SAAS,QAAQ;EACjB,UAAU,MAAM,OAAO,QAAQ;EAC/B,kBAAkB,QAAQ,WAAW,IAAI,OAAO,KAAK,IAAI,GAAG,OAAO;EACnE,oBAAoB,SAAS,QAC1B,MAAM,UAAW,SAAS,QAAQ,MAAM,QAAQ,KAAK,QAAQ,QAAQ,MACtE,IACF;EACA,wBAAwB,WAAW;EACnC,qBAAqB,WAAW,WAAW,IAAI,OAAO,KAAK,IAAI,GAAG,UAAU;EAC5E,wBAAwB,aAAa,QAClC,MAAM,UAAW,SAAS,QAAQ,MAAM,QAAQ,KAAK,QAAQ,QAAQ,MACtE,IACF;CACF;AACF;;;;;;;;;;;;;AAcA,MAAM,kBAEF;CACF,wBAAwB,QAAQ,WAC9B,OAAO,qBAAqB,QAAQ,OAAO,oBAAoB,IAC3D,OACA,mBAAmB,OAAO,KAAK,OAAO,QAAQ,sDAC/B,OAAO,iBAAiB;CAE7C,mBAAmB,QAAQ,WAAW;EACpC,IAAI,OAAO,uBAAuB,MAAM,OAAO;EAC/C,MAAM,EAAE,MAAM,UAAU,OAAO;EAC/B,OACE,mBAAmB,OAAO,KAAK,OAAO,QAAQ,iEACpB,KAAK,KAAK,MAAM;CAK9C;CACA,4BAA4B,QAAQ,WAAW;EAC7C,IAAI,OAAO,2BAA2B,MAAM,OAAO;EACnD,MAAM,EAAE,MAAM,UAAU,OAAO;EAC/B,OACE,mBAAmB,OAAO,KAAK,OAAO,QAAQ,gHAC2B,KAAK,KAAK,MAAM;CAK7F;CACA,sBAAsB,QAAQ,WAC5B,OAAO,wBAAwB,OAC3B,OACA,mBAAmB,OAAO,KAAK,OAAO,uBAAuB,uCAC9C,OAAO,oBAAoB;AAIlD;;;;;;;;;;;;;;;;AAiBA,SAAgB,iBAAiB,QAA0B;CACzD,KAAK,MAAM,CAAC,QAAQ,WAAW,OAAO,QAAQ,OAAO,QAAQ,GAE1D;EACD,KAAK,MAAM,MAAM,gBAAgB;GAC/B,IAAI,cAAc,iBAAiB,GAAG,CAAC,SAAS,WAAW;GAC3D,MAAM,UAAU,gBAAgB,GAAG,CAAC,QAAQ,MAAM;GAClD,IAAI,YAAY,MAAM,MAAM,IAAI,MAAM,OAAO;EAC/C;EAIA,IAAI,wBAAwB,YAAY,aAAa,OAAO,UAAU,GACpE,MAAM,IAAI,MACR,mBAAmB,OAAO,4CAA4C,OAAO,QAAQ,UAEvF;CAEJ;AACF;;;;;;;;;;;;ACxVA,MAAa,kBAAkB;CAAC;CAAO;CAAa;CAAO;AAAK;;AAIhE,MAAa,eAA8C;CACzD,KAAK;CACL,WAAW;CACX,KAAK;CACL,KAAK;AACP;AAEA,MAAM,sBAAqD;CACzD,KAAK;CACL,WACE;CACF,KAAK;CACL,KAAK,UAAU,eAAe;AAChC;AAqBA,SAAS,OAAO,QAAwC;CACtD,OAAO,CAAC,GAAG,IAAI,IAAI,OAAO,QAAQ,MAAmB,MAAM,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK;AAC1E;AAEA,SAAS,aAAa,QAA+B;CACnD,IAAI,WAAW,MAAM,OAAO;CAC5B,OAAO,OAAO,UAAU,MAAM,IAAI,OAAO,MAAM,IAAI,OAAO,QAAQ,CAAC;AACrE;AAEA,SAAS,cAAc,QAAkB,MAA0B;CACjE,OAAO;EACL,KAAK,OAAO,KAAK,KAAK,EAAE;EACxB,KAAK,OAAO,UAAU,KAAK,CAAC,CAAC,KAAK,KAAK,EAAE;EACzC,GAAG,KAAK,KAAK,QAAQ,KAAK,IAAI,KAAK,KAAK,EAAE,GAAG;CAC/C,CAAC,CAAC,KAAK,IAAI;AACb;;AAGA,MAAM,kBAAiD;CACrD,KAAK;CACL,WAAW;CACX,KAAK;CACL,KAAK;AACP;AAEA,MAAM,oBAAmD;CACvD,KAAK;CACL,WAAW;CACX,KAAK;CACL,KAAK;AACP;AAEA,SAAS,YAAY,SAA0B,MAAkB,YAA4B;CAC3F,MAAM,OAAO,QAAQ,KAAK,WAAW;EACnC,MAAM,SAAS,KAAK,SAAS;EAC7B,OAAO;GACL;GACA,kBAAkB;GAClB,OAAO,QAAQ,WAAW,CAAC;GAC3B,OAAO,QAAQ,YAAY,CAAC;GAC5B,QAAQ,qBAAqB,QAAQ,WAAW,KAAA,IAC5C,MACA,aAAa,OAAO,gBAAgB;GACxC,QAAQ,sBAAsB,OAC1B,MACA,GAAG,OAAO,mBAAmB,KAAK,KAAK,OAAO,mBAAmB;GACrE,gBAAgB;EAClB;CACF,CAAC;CACD,MAAM,iBAAiB,QAAQ,MAC5B,WAAW,wBAAwB,YAAY,eAClD;CACA,OAAO;EACL,kIAAkI,KAAK,WAAW,MAAM,WAAW;EACnK;EACA;EACA;EACA;EACA;EACA,cACE;GACE;GACA;GACA;GACA;GACA;GACA;GACA;EACF,GACA,IACF;EACA;EACA;EACA;EACA;EACA,iBACI,qLACA;CACN,CAAC,CACE,KAAK,IAAI,CAAC,CACV,QAAQ;AACb;AAEA,SAAS,eAAe,OAAwC;CAC9D,MAAM,yBAAS,IAAI,IAAsC;CACzD,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,WAAW,OAAO,IAAI,KAAK,IAAI,qBAAK,IAAI,IAAoB;EAClE,MAAM,MAAM,aAAa,KAAK,QAAQ,MAAM;EAC5C,SAAS,IAAI,MAAM,SAAS,IAAI,GAAG,KAAK,KAAK,CAAC;EAC9C,OAAO,IAAI,KAAK,MAAM,QAAQ;CAChC;CACA,MAAM,OAAmB,CAAC;CAC1B,KAAK,MAAM,QAAQ,eAAe;EAChC,MAAM,WAAW,OAAO,IAAI,IAAI;EAChC,IAAI,CAAC,UAAU;EACf,MAAM,OAAO,CAAC,GAAG,SAAS,KAAK,CAAC,CAAC,CAAC,MAAM,GAAG,MAAM;GAC/C,IAAI,MAAM,QAAQ,OAAO;GACzB,IAAI,MAAM,QAAQ,OAAO;GACzB,OAAO,OAAO,CAAC,IAAI,OAAO,CAAC;EAC7B,CAAC;EACD,KAAK,MAAM,OAAO,MAAM,KAAK,KAAK;GAAC;GAAM;GAAK,OAAO,SAAS,IAAI,GAAG,CAAC;EAAC,CAAC;CAC1E;CACA,OAAO;AACT;AAEA,SAAgB,iBAAiB,QAAmC;CAClE,MAAM,EACJ,OACA,SACA,kBACA,aACA,aACA,UACA,cACA,SACE;CAGJ,iBAAiB,IAAI;CAErB,MAAM,SAAS,OAAO,MAAM,KAAK,SAAS,KAAK,MAAM,CAAC;CACtD,MAAM,cAAc,CAAC,GAAG,IAAI,IAAI,MAAM,KAAK,SAAS,KAAK,UAAU,CAAC,CAAC,CAAC,CACnE,QAAQ,MAAmB,MAAM,IAAI,CAAC,CACtC,MAAM,GAAG,MAAM,IAAI,CAAC;CACvB,MAAM,SAAS,OAAO,MAAM,KAAK,SAAS,KAAK,OAAO,KAAK,CAAC;CAC5D,MAAM,YAAY,OAAO,MAAM,KAAK,SAAS,KAAK,OAAO,OAAO,CAAC;CACjE,MAAM,WAAW,OAAO,MAAM,KAAK,SAAS,KAAK,WAAW,OAAO,CAAC;CACpE,MAAM,gBAAgB,OAAO,MAAM,KAAK,SAAS,KAAK,QAAQ,aAAa,CAAC;CAC5E,MAAM,WAAW,MAAM,QAAQ,SAAS,KAAK,SAAS,WAAW,CAAC,CAAC,CAAC;CACpE,MAAM,aAAa,MAAM,QAAQ,SAAS,KAAK,QAAQ,cAAc,CAAC,CAAC;CACvE,IAAI,eAAe,KAAK,YACtB,MAAM,IAAI,MACR,oCAAoC,KAAK,WAAW,6DAC1B,WAAW,mDACvC;CAcF,MAAM,cAAc;EAClB;EACA;EACA;EACA;EAfc,QACb,KAAK,WACJ;GACE,oBAAoB;GACpB;GACA;GACA,iBAAiB,aAAa;EAChC,CAAC,CAAC,KAAK,IAAI,CACb,CAAC,CACA,KAAK,IAOA;EACN;CACF,CAAC,CAAC,KAAK,IAAI;CAEX,MAAM,eAAe,cACnB;EAAC;EAAU;EAAQ;EAAQ;CAAU,GACrC,QAAQ,KAAK,WAAW;EACtB;EACA,KAAK,aAAa,QAAQ;EAC1B,OAAO,aAAa,WAAW,CAAC;EAChC,oBAAoB;CACtB,CAAC,CACH;CAEA,MAAM,cAAc,cAAc;EAAC;EAAQ;EAAU;CAAO,GAAG,eAAe,KAAK,CAAC;CAEpF,MAAM,aAAa,cACjB,CAAC,QAAQ,UAAU,GACnB,OAAO,QAAQ,WAAW,CAAC,CAAC,KAAK,CAAC,MAAM,WAAW,CAAC,MAAM,OAAO,KAAK,CAAC,CAAC,CAC1E;CAEA,MAAM,eAAe,mBACjB,uHACA,8CAA8C,SAAS,UAAU;CAErE,OAAO,GAAG,YAAY;;;;gIAIwG,eAAe;;6NAE8E,SAAS,SAAS;;;;EAI7O,aAAa;;;;EAIb,YAAY,SAAS,MAAM,MAAM,MAAM,EAAE;;eAE5B,eAAe;;;;;;;sBAOR,cAAc,KAAK,SAAS,KAAK,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;;;qPAGyK,SAAS;;;;;;;oBAO1O,YAAY,KAAK,SAAS,KAAK,KAAK,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;aAC3D,OAAO,KAAK,OAAO,KAAK,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;iBACvC,YAAY,KAAK,IAAI,EAAE;YAC5B,OAAO,KAAK,MAAM,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;eACtC,UAAU,KAAK,MAAM,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;mBACxC,SAAS,KAAK,IAAI,EAAE;2EACoC,cAAc,KAAK,MAAM,KAAK,EAAE,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE;;EAEzH,aAAa;;;;;;;;;;;;EAYb,YAAY;;eAEC,MAAM,OAAO;;;;;;EAM1B,WAAW;;;;;;;;;;;;;;;;;AAiBb;;;;;;;;;;;;;;AC/RA,MAAM,cAAoC;CACxC;EAEE,MAAM;EACN,SAAS;EACT,eAAe;CACjB;CACA;EAGE,MAAM;EACN,SAAS;EACT,eAAe;CACjB;CACA;EAEE,MAAM;EACN,SAAS;EACT,eAAe;CACjB;CACA;EAGE,MAAM;EACN,SACE;EACF,UAAU,QAAQ,WAAW,GAAG,OAAO;CACzC;CACA;EAGE,MAAM;EACN,SACE;EACF,UAAU,QAAQ,SAAS,GAAG,KAAK;CACrC;CACA;EACE,MAAM;EACN,SAAS;EACT,UAAU,QAAQ,WAAW,GAAG,OAAO;CACzC;CACA;EAGE,MAAM;EACN,SACE;EACF,eAAe;CACjB;CACA;EAGE,MAAM;EACN,SAAS;EACT,UAAU,QAAQ,WAAW,GAAG,UAAU,GAAG;CAC/C;CACA;EAGE,MAAM;EACN,SAAS;EACT,eAAe;CACjB;AACF;AAKA,SAAgB,mBAAgC;CAC9C,OAAO,OAAO,YAAY,YAAY,KAAK,SAAS,CAAC,KAAK,MAAM,CAAC,CAAC,CAAC;AACrE;AAEA,SAAgB,eAAe,MAAmB,MAAgC;CAChF,KAAK,MAAM,CAAC,MAAM,UAAU,OAAO,QAAQ,IAAI,GAAG,KAAK,SAAS,KAAK,SAAS,KAAK;CACnF,OAAO;AACT;AAEA,SAAgB,UAAU,MAAc,QAA6B;CACnE,IAAI,MAAM;CACV,KAAK,MAAM,QAAQ,aACjB,MAAM,IAAI,QAAQ,KAAK,UAAU,OAAe,GAAG,SAAoB;EACrE,OAAO,KAAK,SAAS,OAAO,KAAK,SAAS,KAAK;EAC/C,OAAO,KAAK,QAAQ,OAAO,OAAO,KAAK,OAAO,WAAW,KAAK,KAAK,KAAA,CAAS;CAC9E,CAAC;CAEH,OAAO;AACT;AAEA,SAAS,WAAW,OAAgB,QAA8B;CAChE,IAAI,OAAO,UAAU,UAAU,OAAO,UAAU,OAAO,MAAM;CAC7D,IAAI,MAAM,QAAQ,KAAK,GAAG,OAAO,MAAM,KAAK,SAAS,WAAW,MAAM,MAAM,CAAC;CAC7E,IAAI,UAAU,QAAQ,OAAO,UAAU,UAAU;EAC/C,MAAM,MAA+B,CAAC;EACtC,KAAK,MAAM,CAAC,KAAK,SAAS,OAAO,QAAQ,KAAK,GAAG,IAAI,OAAO,WAAW,MAAM,MAAM;EACnF,OAAO;CACT;CACA,OAAO;AACT;;;;;;;;;AAUA,SAAgB,iBAAiB,MAAyB,QAAwC;CAChG,OAAO,aAAa,WAAW,MAAM,MAAM,GAAG,yBAAyB,KAAK,YAAY;AAC1F;AAEA,SAAgB,WAAW,OAGzB;CACA,MAAM,SAAS,iBAAiB;CAChC,OAAO;EAAE,OAAO,MAAM,KAAK,SAAS,iBAAiB,MAAM,MAAM,CAAC;EAAG;CAAO;AAC9E;;;;;;;;AASA,SAAgB,uBAAuB,MAAsB;CAC3D,OAAO,UAAU,MAAM,iBAAiB,CAAC;AAC3C;;;;;;;;;;;;;;;;;;;;AC1FA,eAAsB,eACpB,QACA,SACuB;CACvB,IAAI,OAAO,WAAW,GAAG,MAAM,IAAI,MAAM,wBAAwB;CACjE,IAAI,QAAQ,QAAQ,WAAW,GAAG,MAAM,IAAI,MAAM,qBAAqB;CAEvE,MAAM,SAAsB;EAC1B,OAAO,CAAC;EACR,QAAQ,iBAAiB;EACzB,UAAU;GAAE,WAAW;GAAG,UAAU;EAAE;CACxC;CACA,MAAM,OAA4B,CAAC;CACnC,IAAI,OAAO;CAEX,KAAK,MAAM,SAAS,QAAQ;EAC1B,MAAM,QAAQ,MAAM,kBAAkB,KAAK;EAC3C,QAAQ,MAAM;EAYd,MAAM,WAAW,WAXC,MAAM,QAAQ,SAAS;GACvC,IAAI,CAAC,iBAAiB,KAAK,KAAK,KAAK,GAAG;IACtC,OAAO,SAAS,YAAY;IAC5B,OAAO;GACT;GACA,IAAI,CAAC,QAAQ,oBAAoB,KAAK,SAAS,YAAY;IACzD,OAAO,SAAS,aAAa;IAC7B,OAAO;GACT;GACA,OAAO;EACT,CAC4B,CAAS;EACrC,OAAO,MAAM,SAAS,SAAS;EAC/B,eAAe,OAAO,QAAQ,SAAS,MAAM;EAC7C,KAAK,KAAK,GAAG,SAAS,KAAK;CAC7B;CAEA,MAAM,eAAuD,CAAC;CAC9D,MAAM,QAAkB,CAAC;CACzB,MAAM,QAAQ,gBAAgB,IAAI;CAClC,MAAM,OAAmB;EAAE,YAAY,MAAM;EAAM,UAAU,CAAC;CAAE;CAMhE,MAAM,UAA+D,CAAC;CAEtE,KAAK,MAAM,UAAU,QAAQ,SAAS;EACpC,MAAM,OAAO,KAAK,QAAQ,KAAK,aAAa,OAAO;EACnD,IAAI,WAAW,OAAO;GAEpB,KAAK,SAAS,MAAM,kBAAkB,OAAO,eAAe,IAAI,IAAI,CAAC;GACrE,aAAa,MAAM,KAAK;GACxB,QAAQ,KAAK;IAAE;IAAM,aAAa,mBAAmB,MAAM,IAAI;GAAE,CAAC;EACpE,OAAO,IAAI,WAAW,OAAO;GAC3B,MAAM,OAAO,UAAU,IAAI;GAC3B,KAAK,SAAS,MAAM,kBAAkB,OAAO,eAAe,IAAI,IAAI,CAAC;GACrE,aAAa,MAAM,KAAK;GACxB,QAAQ,KAAK;IAAE;IAAM,aAAa,UAAU,MAAM,QAAQ,IAAI,CAAC;GAAE,CAAC;EACpE,OAAO,IAAI,WAAW,aAAa;GAGjC,MAAM,UAAU,0BAA0B,MAAM,EAC9C,YAAY,wBAAwB,UACtC,CAAC;GACD,KAAK,SAAS,YAAY,kBAAkB,OAAO,eAAe,UAAU,OAAO,CAAC;GACpF,aAAa,YAAY,QAAQ;GACjC,QAAQ,KAAK;IAAE;IAAM,aAAa,UAAU,MAAM,QAAQ,OAAO,CAAC;GAAE,CAAC;EACvE,OAAO;GACL,MAAM,QAAQ,WAAW,MAAM,EAAE,YAAY,wBAAwB,IAAI,CAAC;GAC1E,KAAK,SAAS,MAAM,kBAAkB,OAAO,eAAe,IAAI,KAAK,CAAC;GACtE,aAAa,MAAM,MAAM;GACzB,QAAQ,KAAK;IAAE;IAAM,aAAa,UAAU,MAAM,QAAQ,KAAK,CAAC;GAAE,CAAC;EACrE;CACF;CAEA,iBAAiB,IAAI;CAErB,KAAK,MAAM,EAAE,MAAM,WAAW,SAAS;EACrC,MAAM,MAAM,QAAQ,IAAI,GAAG,EAAE,WAAW,KAAK,CAAC;EAC9C,MAAM,MAAM;EACZ,MAAM,KAAK,IAAI;CACjB;CAEA,MAAM,aAAa,KAAK,QAAQ,KAAK,mBAAmB;CACxD,MAAM,UAAU,YAAY,GAAG,KAAK,UAAU,QAAQ,MAAM,CAAC,EAAE,GAAG;CAClE,MAAM,KAAK,UAAU;CAErB,MAAM,WAAW,KAAK,QAAQ,KAAK,WAAW;CAC9C,MAAM,UACJ,UACA,iBAAiB;EACf,OAAO;EACP,SAAS,QAAQ;EACjB,kBAAkB,QAAQ;EAC1B,aAAa,OAAO,KAAK,UAAU,SAAS,KAAK,CAAC;EAClD,aAAa,OAAO;EACpB,UAAU,OAAO;EACjB;EACA;CACF,CAAC,CACH;CACA,MAAM,KAAK,QAAQ;CAEnB,OAAO;EAAE;EAAQ;EAAM,MAAM,KAAK;EAAQ,OAAO;EAAQ;EAAc;EAAM;CAAM;AACrF;AAEA,SAAgB,gBAAgB,MAAc,QAA0B;CACtE,OAAO;EAAC;EAAmB;EAAU;EAAM;EAAQ;EAAK;EAAe;CAAS;AAClF;AAEA,SAAS,YAAY,MAAc,QAAsB;CAEvD,IADc,UAAU,SAAS,CAAC,iBAAiB,GAAG,EAAE,OAAO,SAAS,CAChE,CAAC,CAAC,WAAW,GACnB,MAAM,IAAI,MACR,gFACF;CAEF,IAAI,CAAC,QAAQ,IAAI,UACf,MAAM,IAAI,MAAM,gDAAgD;CAElE,MAAM,CAAC,SAAS,GAAG,QAAQ,gBAAgB,MAAM,MAAM;CAEvD,MAAM,MAAM,UAAU,SAAS,MAAM,EAAE,OAAO,UAAU,CAAC;CACzD,IAAI,IAAI,WAAW,GAAG,MAAM,IAAI,MAAM,iCAAiC,OAAO,IAAI,MAAM,GAAG;AAC7F;AAOA,MAAM,wBACJ;AAEF,SAAgB,wBAAwB,MAAuC;CAC7E,MAAM,OAA8B;EAClC,QAAQ,CAAC;EACT,KAAK;EACL,SAAS,CAAC,GAAG,eAAe;EAC5B,kBAAkB;EAClB,MAAM;CACR;CACA,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,QAAQ,KAAK;EACpC,MAAM,MAAM,KAAK;EACjB,IAAI,QAAQ,SACV,KAAK,MAAM,KAAK,EAAE,MAAM;OACnB,IAAI,QAAQ,aAAa;GAC9B,MAAM,OAAO,KAAK,EAAE,MAAM,GAAA,CAAI,MAAM,GAAG,CAAC,CAAC,OAAO,OAAO;GACvD,KAAK,MAAM,UAAU,KACnB,IAAI,CAAC,gBAAgB,SAAS,MAAuB,GACnD,MAAM,IAAI,MACR,mBAAmB,OAAO,sBAAsB,gBAAgB,KAAK,GAAG,GAC1E;GAGJ,KAAK,UAAU;EACjB,OAAO,IAAI,QAAQ,uBACjB,KAAK,mBAAmB;OACnB,IAAI,QAAQ,UACjB,KAAK,OAAO,KAAK,EAAE,MAAM;OACpB,IAAI,IAAI,WAAW,IAAI,GAC5B,MAAM,IAAI,MAAM,iBAAiB,IAAI,EAAE;OAEvC,KAAK,OAAO,KAAK,GAAG;CAExB;CACA,IAAI,KAAK,OAAO,WAAW,KAAK,CAAC,KAAK,KACpC,MAAM,IAAI,MAAM,qBAAqB;CAEvC,IAAI,KAAK,SAAS,QAAQ,CAAC,qBAAqB,KAAK,KAAK,IAAI,GAC5D,MAAM,IAAI,MAAM,mCAAmC,KAAK,KAAK,EAAE;CAEjE,OAAO;AACT;;AAGA,eAAsB,qBAAqB,MAAiC;CAC1E,IAAI;CACJ,IAAI;EACF,OAAO,wBAAwB,IAAI;CACrC,SAAS,OAAO;EACd,QAAQ,OAAO,MAAM,GAAG,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,EAAE,GAAG;EAClF,OAAO;CACT;CACA,MAAM,UAAU,MAAM,eAAe,KAAK,QAAQ,IAAI;CACtD,QAAQ,OAAO,MACb,GAAG,KAAK,UACN;EACE,MAAM,QAAQ;EACd,MAAM,QAAQ;EACd,cAAc,QAAQ;EACtB,MAAM,QAAQ;EACd,OAAO,QAAQ;CACjB,GACA,MACA,CACF,EAAE,GACJ;CACA,QAAQ,OAAO,MAAM,aAAa,KAAK,IAAI,IAAI,QAAQ,MAAM,OAAO,UAAU;CAC9E,IAAI,KAAK,SAAS,MAAM;EACtB,YAAY,KAAK,MAAM,KAAK,GAAG;EAC/B,QAAQ,OAAO,MAAM,YAAY,KAAK,KAAK,GAAG;CAChD;CACA,OAAO;AACT"}
|
|
1
|
+
{"version":3,"file":"hf-dataset-DdT7nNkf.js","names":[],"sources":["../src/rollout/ledger.ts","../src/rollout/release/gate-report.ts","../src/rollout/release/card.ts","../src/rollout/release/scrub.ts","../src/rollout/release/hf-dataset.ts"],"sourcesContent":["/**\n * Rollout-ledger file API — append-only JSONL of validated `tangle.rollout.v1`\n * lines. Writes validate BEFORE touching disk (a bad line never lands);\n * reads validate line-by-line and fail loud with the line number, because a\n * silently-skipped rollout is a corrupted dataset.\n *\n * \"Validate\" includes the anti-Goodhart invariant (a realness-gated line may\n * not carry a positive reward), so a poisoned line can neither enter a ledger\n * nor leave one.\n *\n * Two read modes, matching the two write-side row classes: `readRolloutLedger`\n * re-validates under the mint policy (training data), `readRolloutJournal`\n * under the write policy (supervision journals, whose unscreened positive\n * rewards are writable and must stay readable).\n */\n\nimport { appendFile, mkdir, readFile, writeFile } from 'node:fs/promises'\nimport { dirname } from 'node:path'\nimport { assertMinted, assertRolloutLine, type MintedRolloutLine, type RolloutLine } from './schema'\n\nfunction serialize(lines: RolloutLine[]): string {\n for (const [i, line] of lines.entries()) assertRolloutLine(line, `rollout line [${i}]`)\n return lines.map((line) => JSON.stringify(line)).join('\\n') + (lines.length > 0 ? '\\n' : '')\n}\n\n/** Replace the ledger file with exactly `lines`. */\nexport async function writeRolloutLedger(path: string, lines: RolloutLine[]): Promise<void> {\n const payload = serialize(lines)\n await mkdir(dirname(path), { recursive: true })\n await writeFile(path, payload)\n}\n\n/** Append `lines` to the ledger file (created if absent). */\nexport async function appendRolloutLines(path: string, lines: RolloutLine[]): Promise<void> {\n if (lines.length === 0) return\n const payload = serialize(lines)\n await mkdir(dirname(path), { recursive: true })\n await appendFile(path, payload)\n}\n\n/**\n * Read and validate every line. Throws on the first malformed/invalid line\n * (with its 1-based line number) — fail-closed, never a silent drop.\n *\n * Validation includes the anti-Goodhart invariant, which is why the result is\n * `MintedRolloutLine[]`: a ledger file is the main way a rollout reaches this\n * process from outside the type system (another run, another machine, a\n * hand-edited JSONL), so this read is the runtime boundary where a poisoned\n * line is refused rather than exported.\n */\nexport async function readRolloutLedger(path: string): Promise<MintedRolloutLine[]> {\n return readLines(path, (parsed, context) => assertMinted(parsed, context))\n}\n\n/**\n * Read a ledger under the WRITE-side policy (`validateRolloutLine`), which\n * omits the unscreened-reward check. `writeRolloutLedger` accepts a\n * supervision-journal row (`realness_screened: false` with a positive reward\n * — the documented `unscreenedRewardFields` shape), and `GATE_POLICIES` says\n * such rows \"must stay writable, readable and reportable\"; a read API that\n * only re-validated under `assertMinted` made every such file unreadable —\n * write-accepted but read-refused is a data-loss trap.\n *\n * The result is `RolloutLine[]`, NOT `MintedRolloutLine[]`: nothing read here\n * can reach a training exporter without passing `assertMinted`, so the\n * promotion gate (which DOES enforce unscreened-reward) is exactly as closed\n * as before. Use `readRolloutLedger` when the file is training data.\n */\nexport async function readRolloutJournal(path: string): Promise<RolloutLine[]> {\n return readLines(path, (parsed, context): RolloutLine => {\n assertRolloutLine(parsed, context)\n return parsed\n })\n}\n\nasync function readLines<T>(\n path: string,\n admit: (parsed: unknown, context: string) => T,\n): Promise<T[]> {\n const raw = await readFile(path, 'utf8')\n const lines: T[] = []\n const rawLines = raw.split('\\n')\n for (let i = 0; i < rawLines.length; i++) {\n const text = rawLines[i]\n if (!text?.trim()) continue\n let parsed: unknown\n try {\n parsed = JSON.parse(text)\n } catch (error) {\n throw new Error(\n `${path}:${i + 1}: malformed JSON — ${error instanceof Error ? error.message : String(error)}`,\n )\n }\n lines.push(admit(parsed, `${path}:${i + 1}`))\n }\n return lines\n}\n","/**\n * Per-format accounting of the anti-Goodhart gate for one dataset release.\n *\n * The defect this exists to make impossible: a dataset card that STATES what\n * the gate does while the build does something else. A sentence in a README is\n * a claim about bytes it never reads, so it drifts the moment an exporter\n * changes — and the drift ships to whoever downloads the dataset.\n *\n * So the card is not allowed to assert anything about the gate. The build\n * measures the rows it is ABOUT TO WRITE (`measureFormatGate`), the measurement\n * is checked against the declared per-format disposition (`assertGateReport`,\n * which throws rather than warns), and the card renders only numbers handed to\n * it. A card that disagrees with its own data files cannot be produced without\n * failing the build first.\n *\n * The dispositions themselves are the release policy, stated once as data:\n *\n * sft EXCLUDE — an SFT row is an imitation target. A gamed\n * trajectory must never be imitated, at any weight.\n * verifiers ZERO_AND_FLAG — reward is a signed learning signal here, so a\n * gamed trajectory at reward 0 is a correct\n * negative. Dropping it would bias the negative\n * population toward honest failures and leave a\n * trainer no example of what gaming looks like\n * when it is penalized.\n * rft ZERO_AND_FLAG — RFT re-samples the completion; only the prompt\n * and the grader's `reference.*` verdict ship, so\n * nothing gamed is imitated. The flag is what lets\n * a grader author skip the instance.\n * raw ZERO_AND_FLAG — a faithful audit dump. Removing rows from it\n * would defeat its only purpose, and the gated\n * row is the one an auditor most wants.\n *\n * `ZERO_AND_FLAG` is never `reward: 0` alone. Zeroing without the label makes a\n * faked success indistinguishable from an honest failure — it hides the gamed\n * population from the buyer instead of disclosing it. Every included format\n * carries `realness_gated` on the row itself.\n *\n * And `ZERO_AND_FLAG` means the whole outcome, not the scalar. A gated row that\n * ships `reward: 0` beside the per-layer verifier scores the reward was\n * computed from has not been zeroed in any sense a trainer respects; the\n * accounting therefore measures every reward-derived number each format writes,\n * not just the one field.\n */\n\nimport type { RftItem, SftRow, VerifiersRolloutOutput } from '../exporters'\nimport {\n GATE_CHECK_IDS,\n GATE_POLICIES,\n type GateCheckId,\n undeclaredStepPayload,\n} from '../gate-checks'\nimport type { MintedRolloutLine } from '../schema'\nimport type { ReleaseFormat } from './card'\n\n/** What a format does with a line the realness gate flagged. */\nexport type GateDisposition = 'exclude' | 'zero-and-flag'\n\nexport const FORMAT_GATE_DISPOSITION: Record<ReleaseFormat, GateDisposition> = {\n sft: 'exclude',\n verifiers: 'zero-and-flag',\n rft: 'zero-and-flag',\n raw: 'zero-and-flag',\n}\n\n/** What the gate accounting reads off an emitted row, per format. */\nexport interface ReleaseRowRef {\n rollout_id: string\n reward: number | null\n /**\n * The rest of the row that was DERIVED from the reward — the per-layer score\n * dict, the judge verdict record, whatever this format ships beside the\n * scalar. Walked for positive numbers, so the certification is about the\n * whole outcome rather than one field.\n *\n * Absent when the format's row carries nothing but the scalar. NOT the whole\n * row: `cost.tokens_in`, `wall_s` and `total_steps` are positive numbers that\n * have nothing to do with the reward, and a certification that flags them is\n * a certification nobody can act on.\n */\n evidence?: unknown\n /**\n * The screen claim AS EMITTED — read off the row, not off the line it came\n * from, because what ships is what matters. Required, not optional: an\n * optional field is how a format quietly opts out of the check that reads it,\n * and every emitted row shape carries `RealnessLabels` precisely so no adapter\n * has to.\n */\n realness_screened: boolean | null\n /**\n * The part of an emitted `steps[]` the wire format does not declare.\n *\n * Separate from `evidence` because the declared step fields are FULL of\n * legitimate positive numbers — `durationMs`, `llm_call_count`,\n * `prompt_token_ids` — and a certification that flags those is one nobody can\n * act on. Only the undeclared remainder is unclassified reward-bearing\n * payload, which is the same partition the check applies.\n *\n * Set only by formats whose row carries steps: today `raw` alone.\n */\n stepEvidence?: unknown\n}\n\n/** A positive number found inside an emitted gated row, with where it was. */\nexport interface EmittedEvidence {\n /** JSON-ish path from the row's evidence root, e.g. `metrics['layer.tests']`. */\n path: string\n value: number\n}\n\nexport interface FormatGateCounts {\n /** Gated lines that reached this format's exporter. */\n input: number\n /** Gated rows the format actually wrote. */\n emitted: number\n /**\n * Gated lines this format did not write. Not all of these are the gate:\n * `verifiers` also drops gap lines (empty transcript) and `rft` drops lines\n * with no prompt turn, so an excluded count can mix both causes.\n */\n excluded: number\n /** Highest reward on an emitted gated row; `null` when none was emitted. */\n maxEmittedReward: number | null\n /**\n * The largest positive number found in the reward-DERIVED payload of an\n * emitted gated row, and its path; `null` when there is none.\n *\n * This column exists because the release once certified CLEAN while leaking.\n * `assertGateReport` inspected `outcome.reward` alone, so a gated row shipping\n * `reward: 0` next to `metrics['layer.tests']: 1` — the deterministic verifier\n * score the reward was computed from, and the per-rubric score dict of the\n * Prime Intellect verifiers format — passed, and the card rendered \"max reward\n * | 0\" over a file that carried the gamed signal at full value. A wrong\n * certification is worse than the leak: it is the leak plus a document saying\n * there isn't one.\n */\n maxEmittedEvidence: EmittedEvidence | null\n /**\n * Rows this format wrote carrying a positive reward whose producer DECLARED\n * that no authenticity screen ever ran on it (`realness_screened: false`).\n *\n * Measured over EVERY emitted row, not just the gated ones: an unscreened\n * reward is by definition one the gate never had a verdict on, so it is not in\n * the gated set and a measurement scoped to that set would report 0 forever.\n * `assertMinted` already refuses these, which is exactly why the release still\n * measures them — the last door before a public dataset does not get to assume\n * the earlier doors held.\n */\n unscreenedPositiveRows: number\n /** Highest reward on such a row; `null` when there is none. */\n maxUnscreenedReward: number | null\n /**\n * The largest positive number found in an emitted gated row's UNDECLARED\n * per-step payload, and its path; `null` when there is none.\n *\n * The column exists because the gate read `outcome` and nothing else for\n * three rounds, so a gated line shipping `steps: [{kind, name, reward: 0.86}]`\n * certified clean — the release accounting agreed with the exporter that a\n * per-step reward was not a reward.\n */\n maxEmittedStepEvidence: EmittedEvidence | null\n}\n\nexport interface GateReport {\n /** Gated lines in the release input, after the split/proposer filters. */\n gatedLines: number\n byFormat: Partial<Record<ReleaseFormat, FormatGateCounts>>\n}\n\n/** Rollout ids of every gated line, the key the emitted rows are matched on. */\nexport function gatedRolloutIds(lines: readonly MintedRolloutLine[]): Set<string> {\n return new Set(lines.filter((line) => line.outcome.realness_gated).map((line) => line.rollout_id))\n}\n\n/**\n * Row refs per format. Written as one adapter per format so that the knowledge\n * of WHERE the id and reward live in each published shape sits next to the\n * assertion that uses it — an exporter that moves either field breaks here\n * rather than silently reporting zero gated rows.\n */\nexport const releaseRowRefs = {\n // An SFT row is `{messages, metadata}` and `metadata` holds ids plus the\n // scalar — no reward-derived payload beyond `reward` itself, and the gated\n // disposition is EXCLUDE anyway.\n sft: (rows: readonly SftRow[]): ReleaseRowRef[] =>\n rows.map((row) => ({\n rollout_id: row.metadata.rollout_id,\n reward: row.metadata.reward,\n realness_screened: row.metadata.realness_screened,\n })),\n // `metrics` IS the per-rubric score dict in the Prime Intellect verifiers\n // format — the same numbers the reward was computed from. This is the leak\n // that shipped.\n verifiers: (rows: readonly VerifiersRolloutOutput[]): ReleaseRowRef[] =>\n rows.map((row) => ({\n rollout_id: row.info.rollout_id,\n reward: row.reward,\n evidence: row.metrics,\n realness_screened: row.info.realness_screened,\n })),\n // RFT re-samples the completion, but the grader reads `item.reference.*`, so\n // the verbatim judge verdict is a reward-bearing field on the row.\n rft: (rows: readonly RftItem[]): ReleaseRowRef[] =>\n rows.map((row) => ({\n rollout_id: row.reference.rollout_id,\n reward: row.reference.reward,\n evidence: row.reference.verdict,\n realness_screened: row.reference.realness_screened,\n })),\n raw: (lines: readonly MintedRolloutLine[]): ReleaseRowRef[] =>\n lines.map((line) => ({\n rollout_id: line.rollout_id,\n reward: line.outcome.reward,\n // `provenance.gated_evidence` is deliberately NOT walked: relocating the\n // diagnostics there is what the gate DOES, and the raw config is the\n // audit dump those diagnostics exist for.\n evidence: { metrics: line.outcome.metrics, verdict: line.outcome.verdict },\n // `raw` is the only config that writes the whole line, so it is the only\n // one whose rows can carry a per-step reward.\n stepEvidence: undeclaredStepPayload(line.steps),\n realness_screened: line.outcome.realness_screened ?? null,\n })),\n}\n\n/** Every positive finite number inside a row's reward-derived payload, with its path. */\nfunction positiveNumbersIn(value: unknown, path: string): EmittedEvidence[] {\n if (typeof value === 'number') {\n return Number.isFinite(value) && value > 0 ? [{ path, value }] : []\n }\n if (Array.isArray(value)) {\n return value.flatMap((item, i) => positiveNumbersIn(item, `${path}[${i}]`))\n }\n if (typeof value === 'object' && value !== null) {\n return Object.entries(value).flatMap(([key, child]) =>\n positiveNumbersIn(child, path === '' ? key : `${path}.${key}`),\n )\n }\n return []\n}\n\n/** Measure one format's gated rows from the refs of the rows about to be written. */\nexport function measureFormatGate(\n gated: ReadonlySet<string>,\n refs: readonly ReleaseRowRef[],\n): FormatGateCounts {\n const emitted = refs.filter((ref) => gated.has(ref.rollout_id))\n const rewards = emitted.map((ref) => ref.reward).filter((r): r is number => r !== null)\n const evidence = emitted.flatMap((ref) => positiveNumbersIn(ref.evidence, ''))\n const stepEvidence = emitted.flatMap((ref) => positiveNumbersIn(ref.stepEvidence, 'steps'))\n const unscreened = refs\n .filter((ref) => ref.realness_screened === false)\n .map((ref) => ref.reward)\n .filter((r): r is number => r !== null && r > 0)\n return {\n input: gated.size,\n emitted: emitted.length,\n excluded: gated.size - emitted.length,\n maxEmittedReward: rewards.length === 0 ? null : Math.max(...rewards),\n maxEmittedEvidence: evidence.reduce<EmittedEvidence | null>(\n (best, found) => (best === null || found.value > best.value ? found : best),\n null,\n ),\n unscreenedPositiveRows: unscreened.length,\n maxUnscreenedReward: unscreened.length === 0 ? null : Math.max(...unscreened),\n maxEmittedStepEvidence: stepEvidence.reduce<EmittedEvidence | null>(\n (best, found) => (best === null || found.value > best.value ? found : best),\n null,\n ),\n }\n}\n\n/**\n * The measured form of each canonical gate check, over the rows a release is\n * ABOUT TO WRITE. Returns the failure message, or `null` when the format is\n * clean on that check.\n *\n * TOTAL over `GateCheckId` — this map and `GATE_POLICIES.assertGateReport` are\n * the two things a new check breaks here, so the release certifier cannot be\n * left behind by a check added anywhere else in the package. That is the whole\n * point: for four rounds each guard composed its own subset by hand, and a\n * release certifying CLEAN while leaking is the most expensive version of that\n * mistake, because it is the leak plus a document saying there isn't one.\n */\nconst REPORT_MEASURES: {\n readonly [K in GateCheckId]: (format: ReleaseFormat, counts: FormatGateCounts) => string | null\n} = {\n 'reward-relationship': (format, counts) =>\n counts.maxEmittedReward === null || counts.maxEmittedReward <= 0\n ? null\n : `release format \"${format}\": ${counts.emitted} realness-gated row(s) carry a positive ` +\n `reward (max ${counts.maxEmittedReward}). A run flagged as gamed may not ship a ` +\n 'positive reward in any config.',\n 'gated-evidence': (format, counts) => {\n if (counts.maxEmittedEvidence === null) return null\n const { path, value } = counts.maxEmittedEvidence\n return (\n `release format \"${format}\": ${counts.emitted} realness-gated row(s) carry a positive ` +\n `reward-derived number (${path} = ${value}). Zeroing the scalar is not enough — the ` +\n 'per-layer scores and judge verdict a fabricated reward was computed FROM are the ' +\n 'same signal in component form, and in this format they are read as training input. ' +\n 'They belong in `provenance.gated_evidence` (see `gateGamedOutcome`), not on the row.'\n )\n },\n 'undeclared-step-payload': (format, counts) => {\n if (counts.maxEmittedStepEvidence === null) return null\n const { path, value } = counts.maxEmittedStepEvidence\n return (\n `release format \"${format}\": ${counts.emitted} realness-gated row(s) carry a positive ` +\n `per-step number under a field \\`tangle.rollout.v1\\` does not declare (${path} = ${value}). ` +\n 'A per-step reward is the same training signal as the scalar, in credit-assignment form, ' +\n 'and the exporters copy `steps` through verbatim — so the row ships it beside a `reward` ' +\n 'of 0. It belongs in `provenance.gated_evidence.steps` (see `gateGamedOutcome`).'\n )\n },\n 'unscreened-reward': (format, counts) =>\n counts.maxUnscreenedReward === null\n ? null\n : `release format \"${format}\": ${counts.unscreenedPositiveRows} row(s) carry a positive ` +\n `reward (max ${counts.maxUnscreenedReward}) whose producer declares that NO authenticity ` +\n 'screen ran on it (`realness_screened: false`). Nothing has established those successes ' +\n 'are real, and a published dataset may not present an unqualified verdict as a measured ' +\n 'one. Screen the runs, or publish them at `reward: null`.',\n}\n\n/**\n * Fail the build when the measurement disagrees with the declared policy.\n *\n * Throws, never filters: an emitted positive reward on a gated row means an\n * exporter upstream stopped applying the gate, and silently dropping the row\n * would hide the producer that made it — the producer is the actual defect.\n *\n * Certifies the whole emitted outcome, not `reward` alone. The earlier version\n * checked one field and therefore certified a release CLEAN while its\n * `verifiers/train.jsonl` shipped the gamed run's per-layer scores at 1.0 in\n * the top-level `metrics` dict — the card then rendered \"max reward | 0\" over\n * exactly that file. A certification that is wrong is worse than an\n * uncertified leak, so the checks it runs are no longer written down here at\n * all: it iterates `GATE_CHECK_IDS` under its own declared policy.\n */\nexport function assertGateReport(report: GateReport): void {\n for (const [format, counts] of Object.entries(report.byFormat) as Array<\n [ReleaseFormat, FormatGateCounts]\n >) {\n for (const id of GATE_CHECK_IDS) {\n if (GATE_POLICIES.assertGateReport[id].kind !== 'enforce') continue\n const failure = REPORT_MEASURES[id](format, counts)\n if (failure !== null) throw new Error(failure)\n }\n // Not a gate check: this one is the RELEASE POLICY (`FORMAT_GATE_DISPOSITION`)\n // rather than the anti-Goodhart invariant — it asks whether the format did\n // what it said it would with gated rows, not whether a row is poisoned.\n if (FORMAT_GATE_DISPOSITION[format] === 'exclude' && counts.emitted > 0) {\n throw new Error(\n `release format \"${format}\" declares gated lines EXCLUDED but wrote ${counts.emitted} ` +\n 'of them.',\n )\n }\n }\n}\n","/**\n * HuggingFace dataset-card (README.md) generation for a rollout-ledger release.\n *\n * The card is a pure function of the SCRUBBED lines plus the release options —\n * no timestamps, no environment reads — so rebuilding from the same ledger\n * yields byte-identical output. It documents the schema, provenance (run ids,\n * generations, the official judge), per-role reward semantics including the\n * inherited/contribution caveat, and a role × reward counts table.\n */\n\nimport { type MintedRolloutLine, ROLLOUT_ROLES, ROLLOUT_SCHEMA, type RolloutRole } from '../schema'\nimport { assertGateReport, FORMAT_GATE_DISPOSITION, type GateReport } from './gate-report'\nimport type { ScrubCounts } from './scrub'\n\nexport const RELEASE_FORMATS = ['sft', 'verifiers', 'rft', 'raw'] as const\nexport type ReleaseFormat = (typeof RELEASE_FORMATS)[number]\n\n/** Format → data file path inside the dataset dir (train split only). */\nexport const FORMAT_FILES: Record<ReleaseFormat, string> = {\n sft: 'sft/train.jsonl',\n verifiers: 'verifiers/train.jsonl',\n rft: 'rft/train.jsonl',\n raw: 'raw/train.jsonl',\n}\n\nconst FORMAT_DESCRIPTIONS: Record<ReleaseFormat, string> = {\n sft: 'Successful trainable-split transcripts (`reward >= 1`, never realness-gated) as `{messages, metadata}` chat JSONL.',\n verifiers:\n 'Prime Intellect verifiers `RolloutOutput`: prompt/completion split at the first assistant turn, plus reward, metrics, tool defs, and token usage.',\n rft: 'OpenAI RFT items: prompt turns plus `reference.*` verdict fields for a grader (completions are re-sampled during RFT).',\n raw: `Full \\`${ROLLOUT_SCHEMA}\\` ledger lines (scrubbed), one per agent invocation.`,\n}\n\nexport interface DatasetCardInputs {\n /** Scrubbed, release-filtered lines (what actually ships). */\n lines: MintedRolloutLine[]\n formats: ReleaseFormat[]\n includeProposers: boolean\n /** Source ledger basenames, for provenance. */\n sourceFiles: string[]\n scrubTotals: ScrubCounts\n excluded: { proposers: number; nonTrain: number }\n formatCounts: Partial<Record<ReleaseFormat, number>>\n /**\n * Per-format anti-Goodhart accounting MEASURED on the rows the build wrote.\n * Required, not optional: the card's only statement about the gate is a\n * render of these numbers, so a card cannot be produced without them and\n * cannot drift from the data files it ships beside.\n */\n gate: GateReport\n}\n\nfunction unique(values: Array<string | null>): string[] {\n return [...new Set(values.filter((v): v is string => v !== null))].sort()\n}\n\nfunction formatReward(reward: number | null): string {\n if (reward === null) return 'null'\n return Number.isInteger(reward) ? String(reward) : reward.toFixed(4)\n}\n\nfunction markdownTable(header: string[], rows: string[][]): string {\n return [\n `| ${header.join(' | ')} |`,\n `| ${header.map(() => '---').join(' | ')} |`,\n ...rows.map((row) => `| ${row.join(' | ')} |`),\n ].join('\\n')\n}\n\n/** Where the anti-Goodhart flag lives on each format's emitted row. */\nconst GATE_FLAG_FIELD: Record<ReleaseFormat, string> = {\n sft: '— (no gated row is written)',\n verifiers: '`info.realness_gated`',\n rft: '`reference.realness_gated`',\n raw: '`outcome.realness_gated`',\n}\n\nconst GATE_POLICY_LABEL: Record<ReleaseFormat, string> = {\n sft: 'EXCLUDED — an SFT row is an imitation target',\n verifiers: 'INCLUDED, reward forced to 0, flagged',\n rft: 'INCLUDED, reward forced to 0, flagged',\n raw: 'INCLUDED verbatim, flagged',\n}\n\nfunction gateSection(formats: ReleaseFormat[], gate: GateReport, totalLines: number): string {\n const rows = formats.map((format) => {\n const counts = gate.byFormat[format]\n return [\n format,\n GATE_POLICY_LABEL[format],\n String(counts?.emitted ?? 0),\n String(counts?.excluded ?? 0),\n counts?.maxEmittedReward === null || counts === undefined\n ? '—'\n : formatReward(counts.maxEmittedReward),\n counts?.maxEmittedEvidence == null\n ? '—'\n : `${counts.maxEmittedEvidence.path} = ${counts.maxEmittedEvidence.value}`,\n GATE_FLAG_FIELD[format],\n ]\n })\n const mixedExclusion = formats.some(\n (format) => FORMAT_GATE_DISPOSITION[format] === 'zero-and-flag',\n )\n return [\n `\\`outcome.realness_gated: true\\` marks a run whose success signal was faked (it satisfied the proxy without doing the work). **${gate.gatedLines} of ${totalLines} lines in this release are gated.**`,\n '',\n 'The gate is enforced, not asserted. A line pairing `realness_gated: true` with a reward above 0 is rejected by the schema validator, so it cannot be read out of a source ledger or written into `raw/train.jsonl` at all; on a gated line the numbers the reward was computed from (`outcome.metrics`, the verbatim judge `outcome.verdict`, and any per-step field the schema does not declare — a per-step reward is the same signal in credit-assignment form) are moved out of `outcome` and `steps[]` and into `provenance.gated_evidence`, where no config reads them as training input; the exporters re-check the same invariant on every line; and the release build measures the rows it is about to write and refuses to write ANY file if a gated row carries a positive reward — or any positive number derived from one — in ANY config.',\n '',\n 'The table below is **measured on the rows in this release**, not a description of intent — the build counts the emitted rows and this card renders those counts:',\n '',\n markdownTable(\n [\n 'config',\n 'policy',\n 'gated rows written',\n 'gated rows not written',\n 'max reward',\n 'max reward-derived number',\n 'flag',\n ],\n rows,\n ),\n '',\n 'Why gated rows are kept where they are kept: an SFT row is imitated verbatim, so a gamed trajectory must never appear in one at any weight. In `verifiers` the reward is a signed learning signal, and a gamed trajectory at reward 0 is a correct negative — dropping it would bias the negative population toward honest failures and leave a trainer no example of gaming being penalized. `rft` re-samples the completion, so only the prompt and the grader reference ship. `raw` is a faithful audit dump, where the gated row is the one an auditor most wants.',\n '',\n \"Reward 0 is never the only label: every included config carries the flag on the row itself, because zeroing alone makes a faked success indistinguishable from an honest failure. Filter on the flag to drop the gamed population, or select on it to mine it. The gated run's own measurements are not destroyed either — they are parked verbatim under `provenance.gated_evidence` in `raw/train.jsonl`, which is where an auditor can see what the run claimed and why it was flagged.\",\n mixedExclusion\n ? '\\n\"Gated rows not written\" is not all gate: `verifiers` also drops gap lines (empty transcript) and `rft` drops lines with no prompt turn, so that column can mix both causes.'\n : '',\n ]\n .join('\\n')\n .trimEnd()\n}\n\nfunction roleRewardRows(lines: MintedRolloutLine[]): string[][] {\n const counts = new Map<RolloutRole, Map<string, number>>()\n for (const line of lines) {\n const byReward = counts.get(line.role) ?? new Map<string, number>()\n const key = formatReward(line.outcome.reward)\n byReward.set(key, (byReward.get(key) ?? 0) + 1)\n counts.set(line.role, byReward)\n }\n const rows: string[][] = []\n for (const role of ROLLOUT_ROLES) {\n const byReward = counts.get(role)\n if (!byReward) continue\n const keys = [...byReward.keys()].sort((a, b) => {\n if (a === 'null') return 1\n if (b === 'null') return -1\n return Number(b) - Number(a)\n })\n for (const key of keys) rows.push([role, key, String(byReward.get(key))])\n }\n return rows\n}\n\nexport function buildDatasetCard(inputs: DatasetCardInputs): string {\n const {\n lines,\n formats,\n includeProposers,\n sourceFiles,\n scrubTotals,\n excluded,\n formatCounts,\n gate,\n } = inputs\n // The card is the artifact a buyer reads; it may not render a gate report\n // that violates the release policy even when called outside the build.\n assertGateReport(gate)\n\n const runIds = unique(lines.map((line) => line.run_id))\n const generations = [...new Set(lines.map((line) => line.generation))]\n .filter((g): g is number => g !== null)\n .sort((a, b) => a - b)\n const models = unique(lines.map((line) => line.policy.model))\n const harnesses = unique(lines.map((line) => line.policy.harness))\n const captures = unique(lines.map((line) => line.provenance.capture))\n const rewardSources = unique(lines.map((line) => line.outcome.reward_source))\n const gapLines = lines.filter((line) => line.messages.length === 0).length\n const gatedLines = lines.filter((line) => line.outcome.realness_gated).length\n if (gatedLines !== gate.gatedLines) {\n throw new Error(\n `dataset card: gate report claims ${gate.gatedLines} realness-gated line(s) but the lines ` +\n `it describes contain ${gatedLines} — the card and the build measured different data.`,\n )\n }\n\n const configs = formats\n .map((format) =>\n [\n ` - config_name: ${format}`,\n ' data_files:',\n ' - split: train',\n ` path: ${FORMAT_FILES[format]}`,\n ].join('\\n'),\n )\n .join('\\n')\n\n const frontmatter = [\n '---',\n 'license: unknown',\n 'pretty_name: Tangle rollout ledger — agent trajectories',\n 'configs:',\n configs,\n '---',\n ].join('\\n')\n\n const formatsTable = markdownTable(\n ['config', 'path', 'rows', 'contents'],\n formats.map((format) => [\n format,\n `\\`${FORMAT_FILES[format]}\\``,\n String(formatCounts[format] ?? 0),\n FORMAT_DESCRIPTIONS[format],\n ]),\n )\n\n const countsTable = markdownTable(['role', 'reward', 'lines'], roleRewardRows(lines))\n\n const scrubTable = markdownTable(\n ['rule', 'rewrites'],\n Object.entries(scrubTotals).map(([rule, count]) => [rule, String(count)]),\n )\n\n const proposerNote = includeProposers\n ? 'Proposer sessions are INCLUDED (`--include-proposers`); their transcripts contain improvement-loop harness source.'\n : `Proposer sessions are excluded by default (${excluded.proposers} lines dropped); they contain improvement-loop harness source. Rebuild with \\`--include-proposers\\` to keep them.`\n\n return `${frontmatter}\n\n# Tangle rollout ledger — agent trajectories\n\nOne line per agent invocation (supervisor episode, worker session, proposer shot, judge call, analyst pass) captured by the \\`${ROLLOUT_SCHEMA}\\` rollout ledger, labeled with improvement-loop coordinates and the official-judge reward, with the full message transcript inline.\n\nThis release contains the **trainable split only** (\\`search\\`). Holdout, dev, and canary splits are structurally excluded at build time, and the build additionally drops any non-trainable line as a fail-closed filter (${excluded.nonTrain} dropped here).\n\n## Formats\n\n${formatsTable}\n\n## Anti-Goodhart gate (\\`realness_gated\\`)\n\n${gateSection(formats, gate, lines.length)}\n\n## Schema (\\`${ROLLOUT_SCHEMA}\\`)\n\nEach raw line carries:\n\n- \\`rollout_id\\` / \\`parent_rollout_id\\` — invocation identity; workers point at their spawning supervisor episode.\n- \\`run_id\\`, \\`experiment_id\\`, \\`candidate_id\\` — run/experiment/candidate identity from the producing RunRecord, when present.\n- \\`generation\\`, \\`candidate_index\\` — improvement-loop coordinates (\\`-1\\` = baseline campaign; \\`null\\` = not an improvement loop).\n- \\`role\\` — one of ${ROLLOUT_ROLES.map((role) => `\\`${role}\\``).join(', ')}.\n- \\`task\\` — suite, instance id, split, seed, replicate index.\n- \\`policy\\` — harness, model, provider, profile commit, prompt/config hashes, sampling params.\n- \\`messages\\` / \\`tool_defs\\` — full transcript in canonical OpenAI chat-with-tools form (including \\`reasoning_content\\`). An empty \\`messages\\` array is a labeled gap line; \\`provenance.gap\\` says why the transcript could not be recovered (${gapLines} gap lines in this release).\n- \\`outcome\\` — \\`reward\\` (the single scalar), \\`reward_source\\`, the verbatim judge \\`verdict\\`, non-scalar \\`metrics\\`, and \\`realness_gated\\` (anti-Goodhart flag; see [Anti-Goodhart gate](#anti-goodhart-gate-realness_gated) for the per-config treatment and the measured counts).\n- \\`cost\\` — usd, token counts, wall time.\n- \\`artifacts\\` / \\`provenance\\` — patch/run-dir/transcript pointers (scrubbed) and capture metadata.\n\n## Provenance\n\n- Source ledgers: ${sourceFiles.map((file) => `\\`${file}\\``).join(', ')}\n- Run ids: ${runIds.map((id) => `\\`${id}\\``).join(', ')}\n- Generations: ${generations.join(', ')} (\\`-1\\` = baseline campaign)\n- Models: ${models.map((m) => `\\`${m}\\``).join(', ')}\n- Harnesses: ${harnesses.map((h) => `\\`${h}\\``).join(', ')}\n- Capture modes: ${captures.join(', ')}\n- Every reward traces to a named source (reward sources in this release: ${rewardSources.map((s) => `\\`${s}\\``).join(', ')}).\n\n${proposerNote}\n\n## Reward semantics per role\n\n- **agent** — the producing RunRecord's holdout/search score, with the realness gate forcing gamed successes to 0.\n- **supervisor** — the official-judge verdict on the episode's delivered artifact (1 = resolved, 0 = not).\n- **worker** — INHERITED from the parent supervisor episode (\\`…/inherited\\`). Caveat: reward 1 does not establish this worker's individual contribution (sibling workers in the same episode share the episode outcome), and reward 0 does not prove this worker failed.\n- **proposer** — the fraction of improvement-set instances the proposed candidate resolved (\\`…/candidate-resolved-fraction\\`); a scalar in [0, 1], not a binary verdict.\n- **judge / analyst** — carry the episode verdict where one applies; otherwise \\`reward: null\\` (a labeled gap, never 0).\n\n## Counts\n\n${countsTable}\n\nTotal lines: ${lines.length}\n\n## Scrubbing\n\nAbsolute home paths were rewritten to \\`$WORK\\`, credential-shaped strings were replaced with \\`[REDACTED:<kind>]\\` markers, internal hostnames were normalized to \\`*.internal.example\\`, and username-bearing incidentals (\\`ls -l\\` owner columns, per-user pytest tmpdirs) were normalized to \\`user\\` / \\`$USER\\`. Rewrite counts for this release (full per-file breakdown in \\`scrub-report.json\\`):\n\n${scrubTable}\n\n## License\n\n\\`license: unknown\\` is a placeholder — the releasing operator must set the real SPDX license id in the frontmatter above before publishing.\n\n## Citation\n\n\\`\\`\\`bibtex\n@misc{tangle_rollout_ledger,\n title = {Tangle rollout ledger — agent trajectories},\n author = {{Tangle Network}},\n howpublished = {HuggingFace Datasets},\n note = {Operator: fill in the repository URL, authors, and year before publishing}\n}\n\\`\\`\\`\n`\n}\n","/**\n * Deterministic scrubbing pass over rollout-ledger lines before public release.\n *\n * Every rule is a pure regex rewrite applied to every string value in a line\n * (messages, artifacts, run ids, tool arguments — everywhere), so the scrubbed\n * line is still a valid `tangle.rollout.v1` line. Rules are idempotent:\n * scrub(scrub(x)) === scrub(x), and a second pass counts zero hits — that is\n * the property the release pipeline relies on to prove nothing half-scrubbed\n * ships. Rule order matters: whole `KEY=value` env pairs are redacted before\n * the bare-key rule so one secret is never counted twice.\n */\n\nimport { assertMinted, type MintedRolloutLine } from '../schema'\n\nexport interface ScrubRule {\n name: string\n pattern: RegExp\n /** Rewrite for one match; `g1` is the first capture group when present. */\n rewrite: (match: string, g1?: string) => string\n}\n\nconst SCRUB_RULES: readonly ScrubRule[] = [\n {\n // /home/<user> and /Users/<user> prefixes → $WORK ($HOME-derived paths).\n name: 'home-path',\n pattern: /\\/(?:home|Users)\\/[A-Za-z0-9._-]+/g,\n rewrite: () => '$WORK',\n },\n {\n // Harness stores encode cwd as a dashed path segment (-home-drew-…);\n // strip the leading -home-<user> so the username never ships.\n name: 'home-path-encoded',\n pattern: /(?<=\\/)-(?:home|Users)-[A-Za-z0-9_.]+/g,\n rewrite: () => '$WORK',\n },\n {\n // pytest names its tmpdir after the invoking user (/tmp/pytest-of-drew).\n name: 'tmp-user-dir',\n pattern: /\\/tmp\\/pytest-of-[A-Za-z0-9._-]+/g,\n rewrite: () => '/tmp/pytest-of-$USER',\n },\n {\n // `ls -l` owner/group columns leak the username in captured tool output.\n // The `(?!user user…)` guard keeps a second pass at zero rewrites.\n name: 'ls-owner',\n pattern:\n /([-bcdlps][-rwxsStT]{9}[.+@]?\\s+\\d+\\s+)(?!user user(?=\\s))[A-Za-z0-9._-]+\\s+[A-Za-z0-9._-]+(?=\\s)/g,\n rewrite: (_match, prefix) => `${prefix}user user`,\n },\n {\n // Env-var-shaped secrets: NAME=value where NAME looks credential-bearing.\n // The (?!\\[REDACTED:) guard keeps the rule idempotent on its own output.\n name: 'env-secret',\n pattern:\n /\\b([A-Z][A-Z0-9_]*(?:KEY|TOKEN|SECRET|PASSWORD|PASSWD|CREDENTIALS?))=(?!\\[REDACTED:)(\"[^\"]*\"|'[^']*'|[^\\s\"']+)/g,\n rewrite: (_match, name) => `${name}=[REDACTED:env]`,\n },\n {\n name: 'bearer-token',\n pattern: /\\b(Bearer|Basic)\\s+(?!\\[REDACTED:)[A-Za-z0-9\\-._~+/=]{8,}/g,\n rewrite: (_match, scheme) => `${scheme} [REDACTED:bearer]`,\n },\n {\n // Bare provider-prefixed keys (OpenAI/Anthropic sk-, GitHub ghp_/gho_/…,\n // fine-grained PATs, HuggingFace hf_, Slack xox*, AWS AKIA).\n name: 'api-key',\n pattern:\n /\\b(?:sk-[A-Za-z0-9_-]{16,}|gh[pousr]_[A-Za-z0-9]{16,}|github_pat_[A-Za-z0-9_]{20,}|hf_[A-Za-z0-9]{16,}|xox[baprs]-[A-Za-z0-9-]{10,}|AKIA[0-9A-Z]{16})\\b/g,\n rewrite: () => '[REDACTED:api-key]',\n },\n {\n // Our infra hostnames → placeholder domain, subdomain preserved\n // (router.tangle.tools → router.internal.example).\n name: 'infra-host',\n pattern: /(?<![A-Za-z0-9.-])((?:[A-Za-z0-9-]+\\.)*)tangle\\.(?:tools|network)(?![A-Za-z0-9-])/g,\n rewrite: (_match, prefix) => `${prefix ?? ''}internal.example`,\n },\n {\n // Known workstation hostnames leak through email Message-IDs and fqdn\n // lookups inside captured test output; extend the list as machines join.\n name: 'machine-host',\n pattern: /\\b[A-Za-z0-9]+-GTR-Pro\\b/g,\n rewrite: () => 'workstation',\n },\n]\n\n/** Rule name → number of matches rewritten. Always carries every rule (0 is data). */\nexport type ScrubCounts = Record<string, number>\n\nexport function emptyScrubCounts(): ScrubCounts {\n return Object.fromEntries(SCRUB_RULES.map((rule) => [rule.name, 0]))\n}\n\nexport function addScrubCounts(into: ScrubCounts, from: ScrubCounts): ScrubCounts {\n for (const [name, count] of Object.entries(from)) into[name] = (into[name] ?? 0) + count\n return into\n}\n\nexport function scrubText(text: string, counts: ScrubCounts): string {\n let out = text\n for (const rule of SCRUB_RULES) {\n out = out.replace(rule.pattern, (match: string, ...rest: unknown[]) => {\n counts[rule.name] = (counts[rule.name] ?? 0) + 1\n return rule.rewrite(match, typeof rest[0] === 'string' ? rest[0] : undefined)\n })\n }\n return out\n}\n\nfunction scrubValue(value: unknown, counts: ScrubCounts): unknown {\n if (typeof value === 'string') return scrubText(value, counts)\n if (Array.isArray(value)) return value.map((item) => scrubValue(item, counts))\n if (value !== null && typeof value === 'object') {\n const out: Record<string, unknown> = {}\n for (const [key, item] of Object.entries(value)) out[key] = scrubValue(item, counts)\n return out\n }\n return value\n}\n\n/**\n * Scrub every string value in a line; structure and key order are preserved.\n *\n * `assertMinted` on the way out rather than a cast: scrubbing rebuilds the\n * object, so the brand has to be re-earned, and re-validating proves the rules\n * did not rewrite a field the schema constrains (`reward` is a number, not a\n * string, so no rule should ever touch it — this is what checks that).\n */\nexport function scrubRolloutLine(line: MintedRolloutLine, counts: ScrubCounts): MintedRolloutLine {\n return assertMinted(scrubValue(line, counts), `scrubbed rollout line ${line.rollout_id}`)\n}\n\nexport function scrubLines(lines: MintedRolloutLine[]): {\n lines: MintedRolloutLine[]\n counts: ScrubCounts\n} {\n const counts = emptyScrubCounts()\n return { lines: lines.map((line) => scrubRolloutLine(line, counts)), counts }\n}\n\n/**\n * A `RolloutScrubber` (text → text) applying the full rule set — the\n * default hook to pass to `mintRolloutRows({ scrub })` so lines are\n * scrubbed at mint time, before they ever reach a ledger file. Release\n * builds re-run `scrubLines` regardless (idempotent), so double-scrubbing\n * is safe and counted as zero.\n */\nexport function defaultRolloutScrubber(text: string): string {\n return scrubText(text, emptyScrubCounts())\n}\n","/**\n * One-command HuggingFace dataset release from rollout ledgers:\n *\n * agent-eval rollout-release <ledger.jsonl...> --out <dir> \\\n * [--formats sft,verifiers,rft,raw] [--include-proposers] [--push <org/name>]\n *\n * Pipeline per input ledger: read + validate → fail-closed filters\n * (trainable split only; proposer sessions dropped unless\n * --include-proposers, they contain improvement-loop harness source) →\n * deterministic scrub → export the requested formats + scrub-report.json +\n * auto-generated README.md card. Deterministic: same inputs and flags →\n * byte-identical output dir.\n *\n * --push uploads the built dir with `huggingface-cli upload` only when the\n * CLI exists on PATH and HF_TOKEN is present in the env; the token is\n * never printed. Everything else runs fully offline.\n */\n\nimport { spawnSync } from 'node:child_process'\nimport { mkdir, writeFile } from 'node:fs/promises'\nimport { basename, dirname, join } from 'node:path'\nimport { toJsonl, toRftItems, toSftRows, toVerifiersRolloutOutputs } from '../exporters'\nimport { readRolloutLedger, writeRolloutLedger } from '../ledger'\nimport { isTrainableSplit, type MintedRolloutLine } from '../schema'\nimport { buildDatasetCard, FORMAT_FILES, RELEASE_FORMATS, type ReleaseFormat } from './card'\nimport {\n assertGateReport,\n FORMAT_GATE_DISPOSITION,\n type GateReport,\n gatedRolloutIds,\n measureFormatGate,\n releaseRowRefs,\n} from './gate-report'\nimport { addScrubCounts, emptyScrubCounts, type ScrubCounts, scrubLines } from './scrub'\n\nexport interface BuildOptions {\n out: string\n formats: ReleaseFormat[]\n includeProposers: boolean\n}\n\nexport interface ScrubReport {\n /** Input ledger path → rule → rewrite count (only shipped lines are scrubbed). */\n files: Record<string, ScrubCounts>\n totals: ScrubCounts\n excluded: { proposers: number; nonTrain: number }\n}\n\nexport interface BuildSummary {\n inputs: string[]\n read: number\n kept: number\n scrub: ScrubReport\n formatCounts: Partial<Record<ReleaseFormat, number>>\n /** Per-format anti-Goodhart accounting, measured on the rows written. */\n gate: GateReport\n files: string[]\n}\n\nexport async function buildHfDataset(\n inputs: string[],\n options: BuildOptions,\n): Promise<BuildSummary> {\n if (inputs.length === 0) throw new Error('no input ledgers given')\n if (options.formats.length === 0) throw new Error('no formats selected')\n\n const report: ScrubReport = {\n files: {},\n totals: emptyScrubCounts(),\n excluded: { proposers: 0, nonTrain: 0 },\n }\n const kept: MintedRolloutLine[] = []\n let read = 0\n\n for (const input of inputs) {\n const lines = await readRolloutLedger(input)\n read += lines.length\n const shippable = lines.filter((line) => {\n if (!isTrainableSplit(line.task.split)) {\n report.excluded.nonTrain += 1\n return false\n }\n if (!options.includeProposers && line.role === 'proposer') {\n report.excluded.proposers += 1\n return false\n }\n return true\n })\n const scrubbed = scrubLines(shippable)\n report.files[input] = scrubbed.counts\n addScrubCounts(report.totals, scrubbed.counts)\n kept.push(...scrubbed.lines)\n }\n\n const formatCounts: Partial<Record<ReleaseFormat, number>> = {}\n const files: string[] = []\n const gated = gatedRolloutIds(kept)\n const gate: GateReport = { gatedLines: gated.size, byFormat: {} }\n\n // Every selected format's rows are exported and gate-measured BEFORE the\n // first byte is written. A build that would ship a gamed run at a positive\n // reward fails with nothing on disk, rather than leaving a poisoned config\n // behind for someone to `--push`.\n const pending: Array<{ path: string; write: () => Promise<void> }> = []\n\n for (const format of options.formats) {\n const path = join(options.out, FORMAT_FILES[format])\n if (format === 'raw') {\n // writeRolloutLedger re-validates every scrubbed line before it lands.\n gate.byFormat.raw = measureFormatGate(gated, releaseRowRefs.raw(kept))\n formatCounts.raw = kept.length\n pending.push({ path, write: () => writeRolloutLedger(path, kept) })\n } else if (format === 'sft') {\n const rows = toSftRows(kept)\n gate.byFormat.sft = measureFormatGate(gated, releaseRowRefs.sft(rows))\n formatCounts.sft = rows.length\n pending.push({ path, write: () => writeFile(path, toJsonl(rows)) })\n } else if (format === 'verifiers') {\n // The declared disposition drives the exporter: 'zero-and-flag' ships\n // gated lines and honest failures as labeled negatives at reward 0.\n const outputs = toVerifiersRolloutOutputs(kept, {\n gatedLines: FORMAT_GATE_DISPOSITION.verifiers,\n })\n gate.byFormat.verifiers = measureFormatGate(gated, releaseRowRefs.verifiers(outputs))\n formatCounts.verifiers = outputs.length\n pending.push({ path, write: () => writeFile(path, toJsonl(outputs)) })\n } else {\n const items = toRftItems(kept, { gatedLines: FORMAT_GATE_DISPOSITION.rft })\n gate.byFormat.rft = measureFormatGate(gated, releaseRowRefs.rft(items))\n formatCounts.rft = items.length\n pending.push({ path, write: () => writeFile(path, toJsonl(items)) })\n }\n }\n\n assertGateReport(gate)\n\n for (const { path, write } of pending) {\n await mkdir(dirname(path), { recursive: true })\n await write()\n files.push(path)\n }\n\n const reportPath = join(options.out, 'scrub-report.json')\n await writeFile(reportPath, `${JSON.stringify(report, null, 2)}\\n`)\n files.push(reportPath)\n\n const cardPath = join(options.out, 'README.md')\n await writeFile(\n cardPath,\n buildDatasetCard({\n lines: kept,\n formats: options.formats,\n includeProposers: options.includeProposers,\n sourceFiles: inputs.map((input) => basename(input)),\n scrubTotals: report.totals,\n excluded: report.excluded,\n formatCounts,\n gate,\n }),\n )\n files.push(cardPath)\n\n return { inputs, read, kept: kept.length, scrub: report, formatCounts, gate, files }\n}\n\nexport function planPushCommand(repo: string, outDir: string): string[] {\n return ['huggingface-cli', 'upload', repo, outDir, '.', '--repo-type', 'dataset']\n}\n\nfunction pushDataset(repo: string, outDir: string): void {\n const found = spawnSync('which', ['huggingface-cli'], { stdio: 'ignore' })\n if (found.status !== 0) {\n throw new Error(\n 'huggingface-cli not found on PATH — install huggingface_hub[cli] before --push',\n )\n }\n if (!process.env.HF_TOKEN) {\n throw new Error('HF_TOKEN not present in env — refusing to push')\n }\n const [command, ...args] = planPushCommand(repo, outDir) as [string, ...string[]]\n // Token stays in the inherited env; it is never echoed or interpolated.\n const run = spawnSync(command, args, { stdio: 'inherit' })\n if (run.status !== 0) throw new Error(`huggingface-cli upload exited ${String(run.status)}`)\n}\n\nexport interface RolloutReleaseCliArgs extends BuildOptions {\n inputs: string[]\n push: string | null\n}\n\nconst ROLLOUT_RELEASE_USAGE =\n 'usage: agent-eval rollout-release <ledger.jsonl...> --out <dir> [--formats sft,verifiers,rft,raw] [--include-proposers] [--push <org/name>]'\n\nexport function parseRolloutReleaseArgs(argv: string[]): RolloutReleaseCliArgs {\n const args: RolloutReleaseCliArgs = {\n inputs: [],\n out: '',\n formats: [...RELEASE_FORMATS],\n includeProposers: false,\n push: null,\n }\n for (let i = 0; i < argv.length; i++) {\n const arg = argv[i]!\n if (arg === '--out') {\n args.out = argv[++i] ?? ''\n } else if (arg === '--formats') {\n const raw = (argv[++i] ?? '').split(',').filter(Boolean)\n for (const format of raw) {\n if (!RELEASE_FORMATS.includes(format as ReleaseFormat)) {\n throw new Error(\n `unknown format \"${format}\" — expected one of ${RELEASE_FORMATS.join(',')}`,\n )\n }\n }\n args.formats = raw as ReleaseFormat[]\n } else if (arg === '--include-proposers') {\n args.includeProposers = true\n } else if (arg === '--push') {\n args.push = argv[++i] ?? null\n } else if (arg.startsWith('--')) {\n throw new Error(`unknown flag \"${arg}\"`)\n } else {\n args.inputs.push(arg)\n }\n }\n if (args.inputs.length === 0 || !args.out) {\n throw new Error(ROLLOUT_RELEASE_USAGE)\n }\n if (args.push !== null && !/^[\\w.-]+\\/[\\w.-]+$/.test(args.push)) {\n throw new Error(`--push expects <org/name>, got \"${args.push}\"`)\n }\n return args\n}\n\n/** CLI driver for `agent-eval rollout-release`. Returns the process exit code. */\nexport async function runRolloutReleaseCli(argv: string[]): Promise<number> {\n let args: RolloutReleaseCliArgs\n try {\n args = parseRolloutReleaseArgs(argv)\n } catch (error) {\n process.stderr.write(`${error instanceof Error ? error.message : String(error)}\\n`)\n return 2\n }\n const summary = await buildHfDataset(args.inputs, args)\n process.stdout.write(\n `${JSON.stringify(\n {\n read: summary.read,\n kept: summary.kept,\n formatCounts: summary.formatCounts,\n gate: summary.gate,\n scrub: summary.scrub,\n },\n null,\n 2,\n )}\\n`,\n )\n process.stdout.write(`dataset → ${args.out} (${summary.files.length} files)\\n`)\n if (args.push !== null) {\n pushDataset(args.push, args.out)\n process.stdout.write(`pushed → ${args.push}\\n`)\n }\n return 0\n}\n"],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import "./mint-
|
|
3
|
-
import { a as SftRow, r as RftItem, s as VerifiersRolloutOutput } from "./exporters-
|
|
1
|
+
import { C as ToolDef, a as MintedRolloutLine, b as RolloutSplit, g as RolloutOutcome, h as RolloutLine, i as GatedEvidence, t as ChatMessage } from "./schema-Bp8S20Ii.js";
|
|
2
|
+
import "./mint-BFTrlq4t.js";
|
|
3
|
+
import { a as SftRow, r as RftItem, s as VerifiersRolloutOutput } from "./exporters-DjCu6-lX.js";
|
|
4
4
|
import { DatabaseSync } from "node:sqlite";
|
|
5
5
|
//#region src/rollout/gate-checks.d.ts
|
|
6
6
|
/**
|
|
@@ -373,10 +373,10 @@ interface ClaudeTranscriptRef {
|
|
|
373
373
|
/** Transcript files recorded for sessions launched from `cwd`. */
|
|
374
374
|
declare function findClaudeTranscripts(cwd: string, projectsDir?: string): Promise<ClaudeTranscriptRef[]>;
|
|
375
375
|
interface ClaudeUsageTotals {
|
|
376
|
-
tokensIn: number;
|
|
377
|
-
tokensOut: number;
|
|
378
|
-
cacheRead: number;
|
|
379
|
-
cacheWrite: number;
|
|
376
|
+
tokensIn: number | null;
|
|
377
|
+
tokensOut: number | null;
|
|
378
|
+
cacheRead: number | null;
|
|
379
|
+
cacheWrite: number | null;
|
|
380
380
|
}
|
|
381
381
|
interface ClaudeTranscript {
|
|
382
382
|
messages: ChatMessage[];
|
|
@@ -385,6 +385,8 @@ interface ClaudeTranscript {
|
|
|
385
385
|
startedAt: string | null;
|
|
386
386
|
endedAt: string | null;
|
|
387
387
|
model: string | null;
|
|
388
|
+
/** Every parse or usage gap retained beside this semantic projection. */
|
|
389
|
+
gaps: string[];
|
|
388
390
|
}
|
|
389
391
|
interface ReadClaudeTranscriptOptions {
|
|
390
392
|
/**
|
|
@@ -393,6 +395,8 @@ interface ReadClaudeTranscriptOptions {
|
|
|
393
395
|
* lines end to end, so their usage is invisible without this.
|
|
394
396
|
*/
|
|
395
397
|
readonly includeSidechain?: boolean;
|
|
398
|
+
/** Parser diagnostics from the retained source; used by the shared reader. */
|
|
399
|
+
readonly sourceGaps?: readonly string[];
|
|
396
400
|
}
|
|
397
401
|
/** Parse one transcript jsonl into canonical messages + usage totals. */
|
|
398
402
|
declare function readClaudeTranscript(path: string, options?: ReadClaudeTranscriptOptions): Promise<ClaudeTranscript>;
|
|
@@ -409,12 +413,12 @@ interface OpencodeSessionRow {
|
|
|
409
413
|
id?: string;
|
|
410
414
|
providerID?: string;
|
|
411
415
|
} | null;
|
|
412
|
-
costUsd: number;
|
|
413
|
-
tokensInput: number;
|
|
414
|
-
tokensOutput: number;
|
|
415
|
-
tokensReasoning: number;
|
|
416
|
-
tokensCacheRead: number;
|
|
417
|
-
tokensCacheWrite: number;
|
|
416
|
+
costUsd: number | null;
|
|
417
|
+
tokensInput: number | null;
|
|
418
|
+
tokensOutput: number | null;
|
|
419
|
+
tokensReasoning: number | null;
|
|
420
|
+
tokensCacheRead: number | null;
|
|
421
|
+
tokensCacheWrite: number | null;
|
|
418
422
|
timeCreated: number;
|
|
419
423
|
timeUpdated: number;
|
|
420
424
|
}
|
|
@@ -665,4 +669,4 @@ declare function parseRolloutReleaseArgs(argv: string[]): RolloutReleaseCliArgs;
|
|
|
665
669
|
declare function runRolloutReleaseCli(argv: string[]): Promise<number>;
|
|
666
670
|
//#endregion
|
|
667
671
|
export { HarborFinalMetrics as $, measureFormatGate as A, DEFAULT_CLAUDE_PROJECTS_DIR as B, FORMAT_GATE_DISPOSITION as C, gatedEvidenceOf as Ct, ReleaseRowRef as D, GateReport as E, openOpencodeDb as F, readRolloutJournal as G, findClaudeTranscripts as H, readOpencodeSessionMessages as I, ATIF_SCHEMA_VERSION as J, readRolloutLedger as K, ClaudeTranscript as L, DEFAULT_OPENCODE_DB as M, OpencodeSessionRow as N, assertGateReport as O, findOpencodeSessionsByDirectory as P, HarborContentPart as Q, ClaudeTranscriptRef as R, EmittedEvidence as S, gateErrors as St, GateDisposition as T, readClaudeTranscript as U, claudeProjectSlug as V, appendRolloutLines as W, HARBOR_IMPORT_GAP as X, FromHarborOptions as Y, HarborAgent as Z, defaultRolloutScrubber as _, GateCheckDisposition as _t, buildHfDataset as a, HarborStepSource as at, scrubRolloutLine as b, GateEntryPoint as bt, runRolloutReleaseCli as c, HarborTrajectory as ct, RELEASE_FORMATS as d, toHarborTrajectories as dt, HarborImageSource as et, ReleaseFormat as f, toHarborTrajectory as ft, addScrubCounts as g, GateCheck as gt, ScrubRule as h, GATE_POLICIES as ht, ScrubReport as i, HarborStep as it, releaseRowRefs as j, gatedRolloutIds as k, DatasetCardInputs as l, fromHarborTrajectory as lt, ScrubCounts as m, GATE_CHECK_IDS as mt, BuildSummary as n, HarborObservation as nt, parseRolloutReleaseArgs as o, HarborSubagentTrajectoryRef as ot, buildDatasetCard as p, GATE_CHECKS as pt, writeRolloutLedger as q, RolloutReleaseCliArgs as r, HarborObservationResult as rt, planPushCommand as s, HarborToolCall as st, BuildOptions as t, HarborMetrics as tt, FORMAT_FILES as u, relabelImportedSplit as ut, emptyScrubCounts as v, GateCheckId as vt, FormatGateCounts as w, scrubText as x, GatePolicy as xt, scrubLines as y, GateCheckedOutcome as yt, ClaudeUsageTotals as z };
|
|
668
|
-
//# sourceMappingURL=index-
|
|
672
|
+
//# sourceMappingURL=index-BCBpEreJ.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index-
|
|
1
|
+
{"version":3,"file":"index-BCBpEreJ.d.ts","names":[],"sources":["../src/rollout/gate-checks.ts","../src/rollout/interchange/harbor.ts","../src/rollout/ledger.ts","../src/rollout/readers/claude-jsonl.ts","../src/rollout/readers/opencode-sqlite.ts","../src/rollout/release/gate-report.ts","../src/rollout/release/scrub.ts","../src/rollout/release/card.ts","../src/rollout/release/hf-dataset.ts"],"mappings":"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"}
|
|
@@ -3,12 +3,12 @@ import { T as RunPaidCallInput, c as CostLedgerHandle, f as CostLedgerSummary, m
|
|
|
3
3
|
import { a as RunRecord, c as RunSplitTag } from "./run-record-DF-fuu31.js";
|
|
4
4
|
import { O as TraceAnalysisStore, _ as ProposalFinding, f as AnalystUsageReceipt, i as AnalystFinding, l as AnalystRunResult } from "./types-CeDfCRXp.js";
|
|
5
5
|
import { M as LlmCallMetadata, ft as ServedModelPolicy, rt as RawProviderSink, x as ChatClient } from "./types-C0bWoSKC.js";
|
|
6
|
-
import { Et as FinalEvidenceLedger, P as PairedArmsComparison, ft as EvidenceReceipt, it as CampaignEvidenceContext, kt as FinalEvidenceRecord } from "./statistical-heldout-
|
|
6
|
+
import { Et as FinalEvidenceLedger, P as PairedArmsComparison, ft as EvidenceReceipt, it as CampaignEvidenceContext, kt as FinalEvidenceRecord } from "./statistical-heldout-BAbd_oXC.js";
|
|
7
7
|
import { a as PairedPromotionDecision, d as PairedBootstrapResult } from "./paired-promotion-decision-DPKz8ZnF.js";
|
|
8
8
|
import { E as SearchExecutionIdentity, G as SearchSplit, V as SearchProposer, a as SearchAttemptAccounting, i as SearchArtifactRef, j as SearchModelIdentity, nt as EvaluationClaim, rt as EvaluationUnitSummary, tt as SearchUnknown, z as SearchOperationRecordedEvent } from "./search-ledger-types-p2xKfiDJ.js";
|
|
9
9
|
import { r as LedgerHash } from "./canonical-CFpojCN5.js";
|
|
10
|
-
import { A as LabeledScenarioWrite, C as JudgeDimension, D as LabeledScenarioSampleArgs, E as LabeledScenarioRecord, H as SurfaceProposer, N as ParetoParent, O as LabeledScenarioSource, R as Scenario, S as JudgeConfig, T as LabelTrust, _ as GateDecision, a as CampaignResult, b as GenerationRecord, c as CampaignTraceWriter, d as DispatchContext, f as DispatchFn, g as GateContribution, i as CampaignCostMeter, j as MutableSurface, k as LabeledScenarioStore, l as CodeSurface, o as CampaignScenarioIdentity, p as Gate, r as CampaignCellResult, u as ComponentSurface, v as GateResult, y as GenerationCandidate } from "./types-
|
|
11
|
-
import { Dt as SearchHistoryAdmissionOptions, L as SearchPolicy, Mt as SearchHistoryReceipt, Yt as CampaignStorage, bt as SearchRunIdentity, gt as SearchLedgerBinding, ht as RegisterSearchNodeInput, i as SearchCellResult, kt as SearchHistoryCoverage, vt as SearchRecorder } from "./search-kernel-
|
|
10
|
+
import { A as LabeledScenarioWrite, C as JudgeDimension, D as LabeledScenarioSampleArgs, E as LabeledScenarioRecord, H as SurfaceProposer, N as ParetoParent, O as LabeledScenarioSource, R as Scenario, S as JudgeConfig, T as LabelTrust, _ as GateDecision, a as CampaignResult, b as GenerationRecord, c as CampaignTraceWriter, d as DispatchContext, f as DispatchFn, g as GateContribution, i as CampaignCostMeter, j as MutableSurface, k as LabeledScenarioStore, l as CodeSurface, o as CampaignScenarioIdentity, p as Gate, r as CampaignCellResult, u as ComponentSurface, v as GateResult, y as GenerationCandidate } from "./types-BR1LLIxm.js";
|
|
11
|
+
import { Dt as SearchHistoryAdmissionOptions, L as SearchPolicy, Mt as SearchHistoryReceipt, Yt as CampaignStorage, bt as SearchRunIdentity, gt as SearchLedgerBinding, ht as RegisterSearchNodeInput, i as SearchCellResult, kt as SearchHistoryCoverage, vt as SearchRecorder } from "./search-kernel-zI-rsHoG.js";
|
|
12
12
|
import { B as ExternalOptimizerModelBudget, E as AnalystIssueExpectation, F as ExternalOptimizerCallbackLimits, J as ExternalOptimizerWireCounts, K as ExternalOptimizerResumeMode, R as ExternalOptimizerEvaluationObservation, V as ExternalOptimizerModelCall, X as ExternalTextEvaluationRequest, Y as ExternalTextCandidate, m as AnalystBenchmarkLabelState, q as ExternalOptimizerRunnerCommand, t as AgentProfile$1, u as AnalystBenchmarkCase } from "./agent-profile-DDfIjdyS.js";
|
|
13
13
|
import { r as DatasetScenario, t as Dataset } from "./dataset-DQqhOCPt.js";
|
|
14
14
|
import { a as CheckerIdentity, n as VerdictCertification, t as DefaultVerdict, x as VerificationStrategySource } from "./verdict-E4eRNf7-.js";
|
|
@@ -17,6 +17,15 @@ import { p as TraceSpanEvent, t as HostedClient } from "./client-BzL9niqi.js";
|
|
|
17
17
|
import { AgentProfile } from "@tangle-network/agent-interface";
|
|
18
18
|
import { z } from "zod";
|
|
19
19
|
//#region src/campaign/coverage.d.ts
|
|
20
|
+
interface CampaignCoverage {
|
|
21
|
+
complete: boolean;
|
|
22
|
+
expectedCellIds: string[];
|
|
23
|
+
scorableCellIds: string[];
|
|
24
|
+
unscorableCells: Array<{
|
|
25
|
+
cellId: string;
|
|
26
|
+
reason: string;
|
|
27
|
+
}>;
|
|
28
|
+
}
|
|
20
29
|
/** Reject campaign designs whose denominator cannot be identified exactly. */
|
|
21
30
|
declare function assertCampaignDesign<TScenario extends Scenario>(scenarios: readonly TScenario[], reps: number): void;
|
|
22
31
|
/** Redacted but independently verifiable identity of one complete scenario. */
|
|
@@ -27,6 +36,8 @@ declare function campaignSplitDigestFromIdentities(scenarios: readonly CampaignS
|
|
|
27
36
|
declare function campaignSplitDigest<TScenario extends Scenario>(scenarios: readonly TScenario[], reps: number): `sha256:${string}`;
|
|
28
37
|
/** Refuse a campaign whose retained task identities contradict its split digest. */
|
|
29
38
|
declare function assertCampaignSplitIdentity(scenarios: readonly CampaignScenarioIdentity[], reps: number, splitDigest: string): void;
|
|
39
|
+
/** Exact designed-denominator receipt for one campaign. */
|
|
40
|
+
declare function campaignCoverage<TArtifact, TScenario extends Scenario>(cells: readonly CampaignCellResult<TArtifact>[], scenarios: readonly TScenario[], reps: number, requireJudgeScore: boolean): CampaignCoverage;
|
|
30
41
|
//#endregion
|
|
31
42
|
//#region src/campaign/final-evidence.d.ts
|
|
32
43
|
/** Durable final-data policy. Keep its ledger shared across related campaigns. */
|
|
@@ -3083,10 +3094,14 @@ interface RetainedDispatchOptions<Lane extends string, T> {
|
|
|
3083
3094
|
/** Validate the complete retained result, including explicit failed/unknown execution outcomes. */
|
|
3084
3095
|
parse: (value: unknown) => T;
|
|
3085
3096
|
storage?: CampaignStorage;
|
|
3097
|
+
/** The owning durable Run has started this scope; missing history must not issue another allowance. */
|
|
3098
|
+
requireExisting?: boolean;
|
|
3086
3099
|
}
|
|
3087
3100
|
/**
|
|
3088
3101
|
* Persist dispatch intent before an external call and its validated result afterward.
|
|
3089
3102
|
* Replays settled calls; never repeats an uncertain call or refunds its allowance.
|
|
3103
|
+
* Every journal event is durably anchored before it takes effect, and history that
|
|
3104
|
+
* cannot be proven equal to its durable anchor fails closed.
|
|
3090
3105
|
* This wraps a campaign's dispatch; runEval still owns scheduling, judging and reports.
|
|
3091
3106
|
* Uses CampaignStorage's existing compare-and-append, not another database or scheduler.
|
|
3092
3107
|
*/
|
|
@@ -3376,5 +3391,5 @@ declare function verifyCodeSurface(surface: CodeSurface, worktreeDir?: string):
|
|
|
3376
3391
|
* identity against the checkout at `worktreeRef`. */
|
|
3377
3392
|
declare function resolveWorktreePath(surface: CodeSurface, worktreeDir?: string): string;
|
|
3378
3393
|
//#endregion
|
|
3379
|
-
export { ScoreboardRow as $, RunImprovementLoopOptions as $i, TraceAnalystScenario as $n, GepaOptimizationRecipe as $r, importExternalEvaluations as $t, ScenarioSignal as A,
|
|
3380
|
-
//# sourceMappingURL=index-
|
|
3394
|
+
export { ScoreboardRow as $, RunImprovementLoopOptions as $i, TraceAnalystScenario as $n, GepaOptimizationRecipe as $r, importExternalEvaluations as $t, ScenarioSignal as A, CampaignCoverage as Aa, GepaCandidatePopulationSummary as Ai, CrossSurfaceComponentEvidence as An, DEFAULT_RED_TEAM_CORPUS as Ar, RequirementCheck as At, FinalizedProfileMatrixResult as B, ReferenceEquivalenceJudgeInput as Bi, CrossSurfaceInteractionTask as Bn, CanaryKind as Br, FsLabeledScenarioStoreOptions as Bt, SingleRunLockOptions as C, CacheRead as Ca, compareOptimizationMethods as Ci, CrossSurfaceBootstrapPolicy as Cn, campaignMeanComposite as Cr, extractProducedState as Ct, searchProposalExecution as D, cellCachePath as Da, costFromLedgerSummary as Di, CrossSurfaceCandidateOutcome as Dn, DefaultProductionGateOptions as Dr, LlmCorrectnessCheckerOpts as Dt, searchModelIdentity as E, buildCellSchedule as Ea, combineComparisonCosts as Ei, CrossSurfaceCandidateEvidence as En, DefaultProductionGateCheck as Er, CorrectnessChecker as Et, RetainedDispatchOptions as F, campaignSplitDigest as Fa, ExternalOptimizerObservationSummary as Fi, CrossSurfaceIneligibilityReason as Fn, redTeamDataset as Fr, verifyCompletion as Ft, RunProfileMatrixSegmentOptions as G, runReferenceEquivalenceJudge as Gi, CrossSurfacePairwiseEntry as Gn, SkillOptOptimizationMethodConfig as Gr, ScoredRollout as Gt, ProfileMatrixPlan as H, ReferenceEquivalenceJudgeResult as Hi, CrossSurfacePairCompatibility as Hn, CanaryReport as Hr, RolloutArgumentDiff as Ht, RetainedDispatchOutcome as I, campaignSplitDigestFromIdentities as Ia, ExternalOptimizerSubmittedCandidate as Ii, CrossSurfaceInteractionAwareSelection as In, redTeamReport as Ir, scopedOptimizationMethod as It, runProfileMatrixSegment as J, llmJudge as Ji, CrossSurfaceSelectionPolicy as Jn, skillOptOptimizationMethod as Jr, rolloutArgumentDiff as Jt, createProfileMatrixPlan as K, LlmJudgeDimension as Ki, CrossSurfaceRankedSingle as Kn, SkillOptRunnerCommand as Kr, UngroundedLiteralReport as Kt, createRetainedDispatch as L, readExternalOptimizerObservationArtifact as Li, CrossSurfaceInteractionEffect as Ln, scoreRedTeamOutput as Lr, sequentialOptimizationMethod as Lt, selectDiscriminative as M, assertCampaignSplitIdentity as Ma, readGepaCandidatePopulationArtifact as Mi, CrossSurfaceDistribution as Mn, RedTeamCategory as Mr, TaskGold as Mt, resolveRunDir as N, campaignCoverage as Na, ExternalOptimizerExecutionSummary as Ni, CrossSurfaceEligibility as Nn, RedTeamFinding as Nr, completionVerdict as Nt, searchReceiptAccounting as O, FinalEvidencePolicy as Oa, GepaCandidatePopulationArtifact as Oi, CrossSurfaceCandidateSummary as On, DefaultProductionRewardHackingOptions as Or, ProducedProposal as Ot, tangleTracesRoot as P, campaignScenarioIdentity as Pa, ExternalOptimizerObservationArtifact as Pi, CrossSurfaceEvidenceBreakdown as Pn, RedTeamReport as Pr, createLlmCorrectnessChecker as Pt, ScoreboardRenderOptions as Q, transientDispatchFailure as Qi, TraceAnalystArtifact as Qn, GepaOptimizationMethodConfig as Qr, externalSurface as Qt, CreateProfileMatrixPlanOptions as R, REFERENCE_EQUIVALENCE_INPUT_LIMITS as Ri, CrossSurfaceInteractionPath as Rn, CanaryAlert as Rr, neutralizeText as Rt, SingleRunLock as S, CacheIssueReason as Sa, OptimizationTokenUsage as Si, CrossSurfaceBestSingleSelection as Sn, campaignBreakdown as Sr, ToolCallEventLike as St, campaignCellSearchResult as T, CellScheduleSlot as Ta, ComparisonCost as Ti, CrossSurfaceCandidateComparison as Tn, heldOutGate as Tr, CompletionVerdict as Tt, ProfileMatrixRow as U, ReferenceEquivalenceScenario as Ui, CrossSurfacePairEvidence as Un, runCanaries as Ur, RolloutArgumentDiffOptions as Ut, ProfileMatrixCoverage as V, ReferenceEquivalenceJudgeOptions as Vi, CrossSurfaceNaiveStackSelection as Vn, CanaryOptions as Vr, LabeledScenarioStoreError as Vt, ProfileMatrixSegmentResult as W, createReferenceEquivalenceJudge as Wi, CrossSurfacePairIncompatibilityReason as Wn, composeGate as Wr, RolloutCall as Wt, PlaybackDriver as X, isTransientTransportFailure as Xi, CrossSurfaceTaskRow as Xn, GepaEngineOptions as Xr, GepaEvaluationImport as Xt, PlaybackContext as Y, TransientFailureOptions as Yi, CrossSurfaceSelections as Yn, GepaAdaptiveEngineRun as Yr, ExternalSearchOptimizer as Yt, PlaybackStep as Z, quotaExhaustedUntil as Zi, BuildTraceAnalystSurfaceDispatchOptions as Zn, GepaEngineRun as Zr, GepaPopulationImport as Zt, componentSurfaceIdentityMaterial as _, runCampaign as _a, OptimizationMethodProvenance as _i, analyzeCrossSurfaceInteractions as _n, provenanceRecordPath as _r, assertRealBackend as _t, WorktreeAdapterError as a, runOptimization as aa, ExternalTextOptimizationMethodConfig as ai, EvalFixture as an, LoopProvenanceArgsFromResult as ar, scoreUserStory as at, surfaceDispatchRef as b, PlanCampaignRunOptions as ba, OptimizationMethodScore as bi, CrossSurfaceAdditionRejectionReason as bn, CampaignBreakdown as br, ProposalEventLike as bt, verifyCodeSurface as c, SearchLedgerIntegrityError as ca, ExternalOptimizationExample as ci, EvalFixtureRunPlan as cn, LoopProvenanceEvidence as cr, ProfileDispatchFn as ct, PhoenixEvaluationResultLike as d, openAutoPr as da, CompareOptimizationMethodsOptions as di, LoadEvalFixtureScenariosOptions as dn, buildLoopProvenanceRecord as dr, RunProfileMatrixOptions as dt, RunImprovementLoopResult as ea, GepaRunnerCommand as ei, importGepaPopulation as en, buildTraceAnalystSurfaceDispatch as er, ScoreboardSummary as et, PhoenixEvaluatorLike as f, RunEvalOptions as fa, OptimizationMethod as fi, PlanEvalFixtureRunOptions as fn, campaignMeasurementDigest as fr, RunProfileMatrixResult as ft, codeSurfaceIdentityMaterial as g, RunCampaignOptions as ga, OptimizationMethodPairwise as gi, planEvalFixtureRun as gn, loopProvenanceSpans as gr, BackendIntegrityReport as gt, assertCodeSurfaceIdentity as h, CampaignCellRetryPolicy as ha, OptimizationMethodInput as hi, loadEvalFixtureScenarios as hn, loopProvenanceArgsFromResult as hr, BackendIntegrityError as ht, WorktreeAdapter as i, RunOptimizationResult as ia, externalTextOptimizationMethod as ii, neutralizationGate as in, EmitLoopProvenanceResult as ir, renderScoreboardMarkdown as it, scoreDiscrimination as j, assertCampaignDesign as ja, GepaCandidateSelectionScore as ji, CrossSurfaceCompositionStep as jn, RedTeamCase as jr, SatisfiedBy as jt, DiscriminationScore as k, FinalEvidenceUse as ka, GepaCandidatePopulationCandidate as ki, CrossSurfaceComponent as kn, defaultProductionGate as kr, ProducedState as kt, AutoevalsScoreLike as l, OpenAutoPrOptions as la, ExternalTextEvaluationResponse as li, EvalFixtureScenario as ln, LoopProvenanceOptimizationMethod as lr, ProfileMatrixError as lt, phoenixEvaluatorJudge as m, CampaignCellFailureReceipt as ma, OptimizationMethodComposition as mi, loadEvalFixture as mn, emitLoopProvenance as mr, runProfileMatrix as mt, GitWorktreeAdapterOptions as n, PremeasuredOptimizationBaseline as na, OpenAICompatibleOptimizerModel as ni, recordSkillOptSearch as nn, BuildLoopProvenanceArgs as nr, UserStoryVerdict as nt, gitWorktreeAdapter as o, SearchLedgerConflictError as oa, ExternalTextOptimizerContext as oi, EvalFixtureFile as on, LoopProvenanceBackend as or, scoreboardSummary as ot, autoevalsScorerJudge as p, runEval as pa, OptimizationMethodComparison as pi, discoverEvalFixtures as pn, canonicalDigest as pr, ScenarioRollup as pt, finalizeProfileMatrix as q, LlmJudgeOptions as qi, CrossSurfaceRelativeCost as qn, SkillOptTrainerConfig as qr, classifyUngroundedLiterals as qt, Worktree as r, RunOptimizationOptions as ra, OptimizerModelBudget as ri, NeutralizationGateOptions as rn, EmitLoopProvenanceArgs as rr, makePlaybackDispatch as rt, resolveWorktreePath as s, SearchLedgerError as sa, ExternalTextOptimizerResult as si, EvalFixtureLoadOptions as sn, LoopProvenanceCandidate as sr, userStoryScoreboard as st, CodeSurfaceVerification as t, runImprovementLoop as ta, gepaOptimizationMethod as ti, recordGepaSearch as tn, traceAnalystQualityJudge as tr, UserStory as tt, AutoevalsScorerLike as u, OpenAutoPrResult as ua, decodeExternalTextCandidate as ui, EvalFixtureValidationMode as un, LoopProvenanceRecord as ur, ProfileSummary as ut, renderSurfaceDiff as v, CampaignRunPlan as va, OptimizationMethodResult as vi, AnalyzeCrossSurfaceInteractionsInput as vn, provenanceSpansPath as vr, summarizeBackendIntegrity as vt, acquireSingleRunLock as w, readCachedCell as wa, optimizationTokenUsageFromSummary as wi, CrossSurfaceCandidate as wn, HeldOutGateOptions as wr, CompletionRequirement as wt, surfaceHash as x, planCampaignRun as xa, OptimizationPackageSource as xi, CrossSurfaceAttemptCompleteness as xn, CampaignComparisonUnits as xr, RuntimeEventLike as xt, surfaceContentHash as y, CampaignRunPlanCell as ya, OptimizationMethodRunOptions as yi, CrossSurfaceAdditionDecision as yn, verifyLoopProvenanceRecord as yr, ArtifactEventLike as yt, FinalizeProfileMatrixOptions as z, REFERENCE_EQUIVALENCE_JUDGE_VERSION as zi, CrossSurfaceInteractionReport as zn, CanaryEvaluation as zr, FsLabeledScenarioStore as zt };
|
|
3395
|
+
//# sourceMappingURL=index-BPCdNSMW.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index-BPCdNSMW.d.ts","names":["_$__external_optimizer_process0.ExternalTextEvaluationRequest","AgentProfile","AgentProfile"],"sources":["../src/campaign/coverage.ts","../src/campaign/final-evidence.ts","../src/campaign/cell-schedule.ts","../src/campaign/cell-cache.ts","../src/campaign/plan-campaign-run.ts","../src/campaign/run-campaign.ts","../src/campaign/presets/run-eval.ts","../src/campaign/auto-pr.ts","../src/campaign/search-ledger-errors.ts","../src/campaign/presets/run-optimization.ts","../src/campaign/presets/run-improvement-loop.ts","../src/campaign/transient-failure.ts","../src/llm-judge.ts","../src/reference-equivalence-judge.ts","../src/campaign/external-optimizer-observations.ts","../src/campaign/gepa-candidate-population.ts","../src/campaign/optimization-cost.ts","../src/campaign/presets/compare-optimization-methods.ts","../src/campaign/external-text-evaluation.ts","../src/campaign/external-text-optimization-contract.ts","../src/campaign/external-text-optimization.ts","../src/campaign/optimizer-model.ts","../src/campaign/gepa-optimization-method.ts","../src/campaign/skillopt-optimization-method.ts","../src/campaign/gates/compose.ts","../src/canary.ts","../src/red-team.ts","../src/campaign/gates/default-production-gate.ts","../src/campaign/gates/heldout-gate.ts","../src/campaign/score-utils.ts","../src/campaign/provenance.ts","../src/campaign/analyst-surface.ts","../src/campaign/cross-surface-types.ts","../src/campaign/cross-surface-interaction.ts","../src/campaign/fixtures.ts","../src/campaign/gates/neutralization-gate.ts","../src/campaign/gepa-search-import.ts","../src/campaign/grounded-reflection.ts","../src/campaign/labeled-store/fs-adapter.ts","../src/campaign/neutralize.ts","../src/campaign/optimization-method-composition.ts","../src/artifact-validator.ts","../src/completion-verifier.ts","../src/produced-state.ts","../src/integrity/backend-integrity.ts","../src/campaign/presets/run-profile-matrix.ts","../src/campaign/presets/playback.ts","../src/campaign/presets/segmented-profile-matrix.ts","../src/campaign/retained-dispatch.ts","../src/campaign/run-dir.ts","../src/campaign/scenario-selection.ts","../src/campaign/search-campaign-cell.ts","../src/campaign/single-run-lock.ts","../src/campaign/surface-identity.ts","../src/campaign/upstream-evaluators.ts","../src/campaign/worktree/index.ts"],"mappings":"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"}
|