@tangle-network/agent-eval 0.170.0 → 0.172.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (117) hide show
  1. package/CHANGELOG.md +68 -0
  2. package/README.md +3 -0
  3. package/dist/adapters/http.d.ts +2 -2
  4. package/dist/analyst/index.d.ts +5 -5
  5. package/dist/analyst/index.js +2 -2
  6. package/dist/{experiment-tracker-Dm8yQMqb.d.ts → attestation-CJBGmMVh.d.ts} +78 -2
  7. package/dist/attestation-CJBGmMVh.d.ts.map +1 -0
  8. package/dist/{experiment-tracker-BKEumQug.js → attestation-XSUpbc4o.js} +96 -2
  9. package/dist/attestation-XSUpbc4o.js.map +1 -0
  10. package/dist/{benchmark-command-BA7qOdWw.js → benchmark-command-DoFcisuM.js} +2 -2
  11. package/dist/{benchmark-command-BA7qOdWw.js.map → benchmark-command-DoFcisuM.js.map} +1 -1
  12. package/dist/benchmarks/index.d.ts +4 -4
  13. package/dist/benchmarks/index.js +2 -2
  14. package/dist/bounded-process-CVOC_D3H.js +181 -0
  15. package/dist/bounded-process-CVOC_D3H.js.map +1 -0
  16. package/dist/builder-eval/index.js +39 -98
  17. package/dist/builder-eval/index.js.map +1 -1
  18. package/dist/campaign/index.d.ts +8 -7
  19. package/dist/campaign/index.js +4 -4
  20. package/dist/{campaign-BeCbxFqs.js → campaign-Dp35pBbS.js} +4 -4
  21. package/dist/{campaign-BeCbxFqs.js.map → campaign-Dp35pBbS.js.map} +1 -1
  22. package/dist/canonical-CFpojCN5.d.ts +31 -0
  23. package/dist/canonical-CFpojCN5.d.ts.map +1 -0
  24. package/dist/{chat-client-DEtybj5i.js → chat-client-DI79OPye.js} +2 -2
  25. package/dist/{chat-client-DEtybj5i.js.map → chat-client-DI79OPye.js.map} +1 -1
  26. package/dist/cli.js +1 -1
  27. package/dist/{client-_Fsa5c2_.d.ts → client-Df7wdslk.d.ts} +2 -2
  28. package/dist/{client-_Fsa5c2_.d.ts.map → client-Df7wdslk.d.ts.map} +1 -1
  29. package/dist/contract/index.d.ts +9 -9
  30. package/dist/contract/index.js +4 -4
  31. package/dist/{default-registry-ovxrOP0_.d.ts → default-registry-XxedTLwu.d.ts} +3 -3
  32. package/dist/{default-registry-ovxrOP0_.d.ts.map → default-registry-XxedTLwu.d.ts.map} +1 -1
  33. package/dist/{define-agent-eval-DVJm8Xlh.d.ts → define-agent-eval-0wW7gFhr.d.ts} +4 -4
  34. package/dist/{define-agent-eval-DVJm8Xlh.d.ts.map → define-agent-eval-0wW7gFhr.d.ts.map} +1 -1
  35. package/dist/{define-agent-eval-Clj-8igZ.js → define-agent-eval-jS8xj_Q_.js} +2 -2
  36. package/dist/{define-agent-eval-Clj-8igZ.js.map → define-agent-eval-jS8xj_Q_.js.map} +1 -1
  37. package/dist/descriptive-B2iPaT9J.d.ts +89 -0
  38. package/dist/descriptive-B2iPaT9J.d.ts.map +1 -0
  39. package/dist/{engine-D12Rb6WB.d.ts → engine-BfRay1qD.d.ts} +2 -2
  40. package/dist/{engine-D12Rb6WB.d.ts.map → engine-BfRay1qD.d.ts.map} +1 -1
  41. package/dist/experiment/index.d.ts +3 -54
  42. package/dist/experiment/index.d.ts.map +1 -1
  43. package/dist/experiment/index.js +1 -95
  44. package/dist/experiment/index.js.map +1 -1
  45. package/dist/{heldout-gate-Bn7_xWCv.d.ts → heldout-gate-JgNRDZwZ.d.ts} +3 -3
  46. package/dist/{heldout-gate-Bn7_xWCv.d.ts.map → heldout-gate-JgNRDZwZ.d.ts.map} +1 -1
  47. package/dist/hosted/index.d.ts +1 -1
  48. package/dist/{index-lfaSeKSD.d.ts → index-D-UdhAmg.d.ts} +3 -31
  49. package/dist/index-D-UdhAmg.d.ts.map +1 -0
  50. package/dist/{index-CM-SM00y.d.ts → index-DDAPhUJJ.d.ts} +4 -4
  51. package/dist/{index-CM-SM00y.d.ts.map → index-DDAPhUJJ.d.ts.map} +1 -1
  52. package/dist/{index-Bfs5aufo.d.ts → index-DnglhM0A.d.ts} +9 -9
  53. package/dist/{index-Bfs5aufo.d.ts.map → index-DnglhM0A.d.ts.map} +1 -1
  54. package/dist/{index-DBbivBNs.d.ts → index-_vPrVMRX.d.ts} +6 -6
  55. package/dist/{index-DBbivBNs.d.ts.map → index-_vPrVMRX.d.ts.map} +1 -1
  56. package/dist/index.d.ts +245 -15
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +712 -9
  59. package/dist/index.js.map +1 -1
  60. package/dist/{integrity-CyWSSoQS.js → integrity-BWywb34E.js} +34 -11
  61. package/dist/{integrity-CyWSSoQS.js.map → integrity-BWywb34E.js.map} +1 -1
  62. package/dist/ledger-core/index.d.ts +2 -1
  63. package/dist/{llm-judge-DbJdo8Nj.js → llm-judge-aQHIk5_-.js} +20 -11
  64. package/dist/llm-judge-aQHIk5_-.js.map +1 -0
  65. package/dist/{matrix-BpI5Trmo.d.ts → matrix-Ch8JO1pG.d.ts} +2 -2
  66. package/dist/{matrix-BpI5Trmo.d.ts.map → matrix-Ch8JO1pG.d.ts.map} +1 -1
  67. package/dist/meta-eval/index.d.ts +162 -2
  68. package/dist/meta-eval/index.d.ts.map +1 -1
  69. package/dist/meta-eval/index.js +287 -2
  70. package/dist/meta-eval/index.js.map +1 -1
  71. package/dist/multishot/golden/index.d.ts +1 -1
  72. package/dist/multishot/index.d.ts +2 -2
  73. package/dist/openapi.json +1 -1
  74. package/dist/{produced-state-CtSIp5cQ.js → produced-state-CxmbFxFd.js} +2 -2
  75. package/dist/{produced-state-CtSIp5cQ.js.map → produced-state-CxmbFxFd.js.map} +1 -1
  76. package/dist/{promotion-policy-CkXSgKkF.d.ts → promotion-policy-BBBcz5_3.d.ts} +2 -2
  77. package/dist/{promotion-policy-CkXSgKkF.d.ts.map → promotion-policy-BBBcz5_3.d.ts.map} +1 -1
  78. package/dist/{provenance-CIRUardl.d.ts → provenance-Dp-vvyrU.d.ts} +17 -5
  79. package/dist/provenance-Dp-vvyrU.d.ts.map +1 -0
  80. package/dist/rl.d.ts +1 -1
  81. package/dist/sandbox-harness-BlSOu4LX.d.ts.map +1 -1
  82. package/dist/{skillopt-optimization-method-B2R9C5aG.js → skillopt-optimization-method-LHi02MzH.js} +2 -2
  83. package/dist/{skillopt-optimization-method-B2R9C5aG.js.map → skillopt-optimization-method-LHi02MzH.js.map} +1 -1
  84. package/dist/{statistical-heldout-DFS7QGpS.d.ts → statistical-heldout-Yldkntvy.d.ts} +2 -2
  85. package/dist/{statistical-heldout-DFS7QGpS.d.ts.map → statistical-heldout-Yldkntvy.d.ts.map} +1 -1
  86. package/dist/{store-tool-spans-B2DJ_82T.d.ts → store-tool-spans-BvdUbeOB.d.ts} +3 -3
  87. package/dist/{store-tool-spans-B2DJ_82T.d.ts.map → store-tool-spans-BvdUbeOB.d.ts.map} +1 -1
  88. package/dist/supervisor-run/index.d.ts +35 -2
  89. package/dist/supervisor-run/index.d.ts.map +1 -1
  90. package/dist/supervisor-run/index.js +83 -38
  91. package/dist/supervisor-run/index.js.map +1 -1
  92. package/dist/{tool-groups-BnXlCJZQ.d.ts → tool-groups-DjwlMBvW.d.ts} +2 -2
  93. package/dist/tool-groups-DjwlMBvW.d.ts.map +1 -0
  94. package/dist/trace-repair/index.d.ts +1 -1
  95. package/dist/traces.d.ts +2 -2
  96. package/dist/{types-i21ccEkr.d.ts → types-CCZ34qmV.d.ts} +2 -2
  97. package/dist/{types-i21ccEkr.d.ts.map → types-CCZ34qmV.d.ts.map} +1 -1
  98. package/dist/{types-DeIUdzNd.d.ts → types-CoPUTiXb.d.ts} +23 -92
  99. package/dist/types-CoPUTiXb.d.ts.map +1 -0
  100. package/dist/{types-Dy237wiH.d.ts → types-nokrtr7M.d.ts} +21 -1
  101. package/dist/types-nokrtr7M.d.ts.map +1 -0
  102. package/dist/wire/index.d.ts +3 -3
  103. package/dist/wire/index.d.ts.map +1 -1
  104. package/docs/campaign-proposers.md +4 -0
  105. package/docs/eval-surface-map.md +36 -0
  106. package/docs/insight-report.md +19 -0
  107. package/docs/plants.md +123 -0
  108. package/docs/public-api.md +45 -20
  109. package/package.json +19 -18
  110. package/dist/experiment-tracker-BKEumQug.js.map +0 -1
  111. package/dist/experiment-tracker-Dm8yQMqb.d.ts.map +0 -1
  112. package/dist/index-lfaSeKSD.d.ts.map +0 -1
  113. package/dist/llm-judge-DbJdo8Nj.js.map +0 -1
  114. package/dist/provenance-CIRUardl.d.ts.map +0 -1
  115. package/dist/tool-groups-BnXlCJZQ.d.ts.map +0 -1
  116. package/dist/types-DeIUdzNd.d.ts.map +0 -1
  117. package/dist/types-Dy237wiH.d.ts.map +0 -1
@@ -7,11 +7,11 @@ Generated by `pnpm api:census` on demand — this is a dated reading, not a gate
7
7
  | measure | count |
8
8
  | --- | --- |
9
9
  | export subpaths | 28 |
10
- | published value exports (subpath x symbol) | 1353 |
11
- | distinct symbols | 1184 |
12
- | production | 926 |
13
- | planned | 210 |
14
- | none | 217 |
10
+ | published value exports (subpath x symbol) | 1378 |
11
+ | distinct symbols | 1209 |
12
+ | production | 931 |
13
+ | planned | 216 |
14
+ | none | 231 |
15
15
 
16
16
  Type-only exports are not listed: a type binds no runtime surface, and removing one cannot break a caller at run time.
17
17
 
@@ -84,11 +84,12 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
84
84
 
85
85
  ### `.`
86
86
 
87
- 318 value exports — 267 production, 32 planned, 19 none.
87
+ 338 value exports — 271 production, 34 planned, 33 none.
88
88
 
89
89
  | symbol | consumer | evidence |
90
90
  | --- | --- | --- |
91
91
  | `acquisitionPlansForKnowledgeGaps` | production | agent-builder:src/lib/.server/eval/loops/data-acquisition-engine.ts |
92
+ | `admitPolicyEdit` | none | only this package's tests: src/analyst/policy-edit.test.ts:2 |
92
93
  | `AGENT_PROFILE_KINDS` | production | blueprint-agent:scripts/experiments/lib/agent-profile-cell.ts |
93
94
  | `AgentEvalError` | production | agent-runtime:src/errors.ts |
94
95
  | `agentProfileCellHashMaterial` | planned | consumer tests: blueprint-agent:scripts/experiments/lib/__tests__/agent-profile-cell.test.ts |
@@ -106,11 +107,13 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
106
107
  | `analyzeRuns` | production | agent-builder:eval/scripts/insight-report.ts |
107
108
  | `analyzeSeries` | production | agent-dev-container:products/sandbox/evals/run.ts |
108
109
  | `analyzeTraces` | production | agent-builder:src/lib/.server/eval/analysts/canonical-trace-analyst.ts |
110
+ | `applyPolicyEditToSurface` | none | only this package's tests: src/analyst/policy-edit.test.ts:2 |
109
111
  | `argHash` | production | agent-runtime:src/runtime/supervise/detector-monitor.ts |
110
112
  | `assertCapabilityHeadroom` | production | blueprint-agent:scripts/experiments/lib/validity-gates.ts |
111
113
  | `assertCrossFamily` | production | agent-builder:frontier/judges/artifact-head-to-head.ts |
112
114
  | `assertCrossFamilyServed` | planned | doc: docs/building-doctrine.md |
113
115
  | `assertNoHiddenLeak` | planned | doc: docs/design/statistics-decisions.md |
116
+ | `assertNoJudgeVerdict` | production | this package: src/analyst/policy-edit.ts:6 |
114
117
  | `assertProductBenchmarkRun` | production | creative-agent:eval/research-package.ts |
115
118
  | `assertRealBackend` | production | blueprint-agent:scripts/experiments/lib/canonical/assert-real-backend.ts |
116
119
  | `assertRunCaptured` | production | creative-agent:eval/canonical-runner.ts |
@@ -118,6 +121,8 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
118
121
  | `assertServedModels` | planned | doc: docs/building-doctrine.md |
119
122
  | `assertSingleBackend` | planned | consumer tests: gtm-agent:tests/agent-eval.smoke.test.ts |
120
123
  | `assignFeedbackSplit` | production | agent-builder:src/lib/.server/eval/feedback/feedback-capture.ts |
124
+ | `attest` | production | this package: src/experiment/evidence-receipt.ts:14 |
125
+ | `ATTESTATION_ALGORITHM` | planned | doc: docs/eval-surface-map.md |
121
126
  | `BackendIntegrityError` | production | creative-agent:eval/leaderboard.ts |
122
127
  | `benjaminiHochberg` | production | agent-runtime:bench/src/corpus-report.mts |
123
128
  | `blendHeldout` | production | blueprint-agent:scripts/experiments/lib/qa-grader.ts |
@@ -153,6 +158,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
153
158
  | `completionVerdict` | production | blueprint-agent:scripts/experiments/eval/launch-scoreboard/scoreboard-core.ts |
154
159
  | `computeExperimentStats` | production | blueprint-agent:scripts/experiments/lib/vb-improve-harness.ts |
155
160
  | `computeFindingId` | production | agent-runtime:src/runtime/index.ts |
161
+ | `computePolicyEditId` | none | only this package's tests: src/analyst/policy-edit.test.ts:2 |
156
162
  | `computeToolUseMetrics` | production | traces:src/pipelines.ts |
157
163
  | `confidenceInterval` | production | agent-runtime:src/runtime/benchmark-report.ts |
158
164
  | `ConfigError` | production | agent-runtime:src/errors.ts |
@@ -256,6 +262,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
256
262
  | `isJudgeSpan` | production | this package: src/trace/query.ts:13 |
257
263
  | `isLlmSpan` | production | agent-runtime:src/candidate-execution/finalize.ts |
258
264
  | `isModelPriced` | production | agent-dev-container:products/intelligence/api/src/lib/optimization-engine.ts |
265
+ | `isPolicyEdit` | none | — |
259
266
  | `isRunRecord` | production | this package: src/eval-trace-store.ts:21 |
260
267
  | `isToolSpan` | production | agent-runtime:src/runtime/supervise/trace-evidence.ts |
261
268
  | `isTransientLlmError` | production | supervisor-lab:bench/comms/judges.ts |
@@ -274,6 +281,8 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
274
281
  | `loadScorecard` | production | ai-trading-blueprint:evals/src/trading/scorecard-integration.ts |
275
282
  | `localCommandRunner` | production | blueprint-agent:scripts/experiments/lib/command-runner.ts |
276
283
  | `makeFinding` | production | agent-dev-container:products/intelligence/api/src/lib/consultant/candidates.ts |
284
+ | `makePolicyEdit` | none | only this package's tests: src/analyst/policy-edit.test.ts:2 |
285
+ | `makePolicyEditCandidateRecord` | planned | doc: docs/campaign-proposers.md |
277
286
  | `makeProposalFinding` | production | agent-runtime:bench/src/swe-arena/outer-loop.mts |
278
287
  | `manifestContentDigest` | production | this package: src/campaign/gates/sequential.ts:34 |
279
288
  | `MANN_WHITNEY_EXACT_MAX_STATES` | none | — |
@@ -322,6 +331,12 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
322
331
  | `partitionHeldOut` | production | blueprint-agent:scripts/experiments/calibrate-instrument.ts |
323
332
  | `passAtK` | planned | doc: docs/design/statistics-decisions.md |
324
333
  | `pearsonR` | production | this package: src/builder-eval/correlation.ts:18 |
334
+ | `POLICY_EDIT_AXES` | none | — |
335
+ | `POLICY_EDIT_CANDIDATE_RECORD_SCHEMA` | none | — |
336
+ | `POLICY_EDIT_TARGET_SURFACES` | none | — |
337
+ | `policyEditFromFinding` | none | — |
338
+ | `policyEditsFromFindings` | none | only this package's tests: src/analyst/policy-edit.test.ts:2 |
339
+ | `PolicyEditValidationError` | none | only this package's tests: src/analyst/policy-edit.test.ts:2 |
325
340
  | `preflightModels` | production | loops:src/preflight.ts |
326
341
  | `productBenchmarkRepoIdentity` | production | creative-agent:eval/research-package.ts |
327
342
  | `ProductClient` | production | creative-agent:eval/e2e/creative-product-harness.ts |
@@ -347,6 +362,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
347
362
  | `roundTripRunRecord` | none | only this package's tests: tests/run-record.test.ts:3 |
348
363
  | `routeFields` | none | only this package's tests: src/hidden-criteria-grading.test.ts:4 |
349
364
  | `runAgentControlLoop` | production | agent-runtime:src/run.ts |
365
+ | `runBoundedProcess` | production | this package: src/sandbox-harness.ts:16 |
350
366
  | `runCampaign` | production | agent-app:src/eval-campaign/index.ts |
351
367
  | `runCanaries` | production | agent-builder:src/lib/.server/eval/loops/canary-cron.ts |
352
368
  | `runCounterfactual` | production | traces:src/replay-batch.ts |
@@ -363,6 +379,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
363
379
  | `runsForScenario` | production | phony:products/builder/api/src/eval/gate.ts |
364
380
  | `runTaskScore` | production | discovery-lab:tools/strict-screen.mjs |
365
381
  | `scoreKnowledgeReadiness` | production | agent-builder:src/lib/.server/runtime/agent-task-readiness.ts |
382
+ | `scorePolicyEditReadiness` | none | — |
366
383
  | `scoreRedTeamOutput` | production | agent-dev-container:products/intelligence/api/src/lib/optimization-gate.ts |
367
384
  | `scoreTraceInsightReadiness` | production | blueprint-agent:scripts/experiments/lib/analyze-vb-run/report-html-sections.ts |
368
385
  | `seatPresets` | production | supervisor-lab:bench/comms/judges.ts |
@@ -374,7 +391,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
374
391
  | `stripFencedJson` | production | blueprint-agent:scripts/experiments/compare-analysis-reports.ts |
375
392
  | `subjectiveEval` | production | creative-agent:eval/control/creative-onboarding.ts |
376
393
  | `summarizeBackendIntegrity` | production | agent-dev-container:products/intelligence/api/src/lib/run-provenance.ts |
377
- | `summarizeNumberSeries` | production | this package: src/supervisor-run/analyze.ts:8 |
394
+ | `summarizeNumberSeries` | production | this package: src/campaign/cell-aggregates.ts:12 |
378
395
  | `summarizePreferenceMemory` | production | agent-builder:src/lib/.server/eval/loops/auto-research-runner.ts |
379
396
  | `summaryTable` | production | blueprint-agent:scripts/experiments/vb-runrecord-analysis.ts |
380
397
  | `textInSnapshot` | none | only this package's tests: src/oracle.test.ts:2 |
@@ -389,12 +406,15 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
389
406
  | `UNKNOWN_MODEL` | production | this package: src/campaign/presets/run-profile-matrix.ts:54 |
390
407
  | `urlContains` | none | only this package's tests: src/oracle.test.ts:2 |
391
408
  | `userQuestionsForKnowledgeGaps` | production | agent-dev-container:products/intelligence/api/src/routes/project-engines.ts |
409
+ | `validatePolicyEdit` | none | only this package's tests: src/analyst/policy-edit.test.ts:2 |
410
+ | `validatePolicyEditCandidateRecord` | none | only this package's tests: src/analyst/policy-edit.test.ts:2 |
392
411
  | `validateRunRecord` | production | agent-builder:src/lib/.server/eval/stores/run-record-store.ts |
393
412
  | `ValidationError` | production | agent-runtime:src/errors.ts |
394
413
  | `verbosityBias` | production | blueprint-agent:scripts/experiments/calibration/judge-agreement.ts |
395
414
  | `VERIFICATION_STRATEGIES` | planned | example: examples/verify-without-an-answer-key/index.ts:13 |
396
415
  | `VERIFICATION_STRATEGY_SOURCES` | none | only this package's tests: src/verification-strategy.test.ts:11 |
397
416
  | `verifyAgentProfileCell` | production | this package: src/eval-campaign.ts:39 |
417
+ | `verifyAttestation` | production | this package: src/experiment/evidence-receipt.ts:14 |
398
418
  | `verifyCompletion` | production | agent-app:src/eval/index.ts |
399
419
  | `viteDeployRunner` | production | blueprint-agent:scripts/experiments/lib/deploy-runner.ts |
400
420
  | `weightedComposite` | production | agent-app:src/eval/index.ts |
@@ -424,7 +444,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
424
444
  | --- | --- | --- |
425
445
  | `adaptPublicBenchmarkFindings` | production | this package: scripts/gepa-analyst-campaign.ts:59 |
426
446
  | `AGENT_RX_UPSTREAM_REVISION` | production | this package: src/analyst/benchmark-command-result.ts:2 |
427
- | `agentRxBenchmarkCase` | production | this package: src/analyst/benchmark-public-data.ts:11 |
447
+ | `agentRxBenchmarkCase` | production | this package: src/analyst/benchmark-public-data.ts:12 |
428
448
  | `agentRxPredictionsToFindings` | production | this package: src/analyst/benchmark-public-adapters.ts:3 |
429
449
  | `ANALYST_BENCHMARK_COST_LEDGER_FILE` | production | this package: src/analyst/benchmark-command-persistence.ts:9 |
430
450
  | `ANALYST_BENCHMARK_DEPENDENCY_LOCK_DIGEST_ALGORITHM` | none | only this package's tests: src/analyst/benchmark-implementation.test.ts:7 |
@@ -446,7 +466,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
446
466
  | `analystInstructionsOverrideFromText` | none | only this package's tests: src/analyst/benchmark-instructions-override.test.ts:5 |
447
467
  | `AnalystRegistry` | production | blueprint-agent:scripts/experiments/vb-multi-analyst.ts |
448
468
  | `analystUsageReceiptFromPrimeUsage` | production | this package: src/analyst/benchmark-runner-prime.ts:19 |
449
- | `appendVerificationArtifactsToOtlp` | production | this package: src/analyst/benchmark-public-data.ts:31 |
469
+ | `appendVerificationArtifactsToOtlp` | production | this package: src/analyst/benchmark-public-data.ts:32 |
450
470
  | `assertProposalFindings` | production | agent-runtime:src/improvement/code-execution.ts |
451
471
  | `behavioralAnalyst` | production | agent-dev-container:products/intelligence/api/src/lib/deep-trace-analyst.ts |
452
472
  | `bindAnalyst` | planned | doc: docs/trace-analysis.md |
@@ -497,7 +517,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
497
517
  | `KIND_EXPECTED_SUBJECTS` | production | this package: src/analyst/kind-factory.ts:14 |
498
518
  | `KNOWLEDGE_GAP_KIND_SPEC` | none | only this package's tests: src/analyst/finding-subject.test.ts:13 |
499
519
  | `KNOWLEDGE_POISONING_KIND_SPEC` | none | only this package's tests: src/analyst/finding-subject.test.ts:13 |
500
- | `loadCodeTraceVerificationArtifacts` | production | this package: src/analyst/benchmark-public-data.ts:31 |
520
+ | `loadCodeTraceVerificationArtifacts` | production | this package: src/analyst/benchmark-public-data.ts:32 |
501
521
  | `loadPublicBenchmarkRows` | production | this package: scripts/gepa-analyst-campaign.ts:64 |
502
522
  | `makeFinding` | production | agent-dev-container:products/intelligence/api/src/lib/consultant/candidates.ts |
503
523
  | `makeProposalFinding` | production | agent-runtime:bench/src/swe-arena/outer-loop.mts |
@@ -596,7 +616,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
596
616
 
597
617
  ### `./campaign`
598
618
 
599
- 117 value exports — 76 production, 15 planned, 26 none.
619
+ 118 value exports — 77 production, 15 planned, 26 none.
600
620
 
601
621
  | symbol | consumer | evidence |
602
622
  | --- | --- | --- |
@@ -608,6 +628,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
608
628
  | `assertCompleteSearchHistory` | production | this package: src/campaign/presets/compare-optimization-methods.ts:31 |
609
629
  | `assertSearchHistoryMatchesReplay` | planned | doc: docs/search-history-receipts.md |
610
630
  | `autoevalsScorerJudge` | none | only this package's tests: src/campaign/upstream-evaluators.test.ts:6 |
631
+ | `buildCellSchedule` | production | this package: src/campaign/plan-campaign-run.ts:9 |
611
632
  | `buildEvidenceVector` | planned | doc: docs/experiment.md |
612
633
  | `buildLoopProvenanceRecord` | none | only this package's tests: src/campaign/provenance-integrity.test.ts:5 |
613
634
  | `buildTraceAnalystSurfaceDispatch` | none | only this package's tests: src/campaign/analyst-surface.test.ts:4 |
@@ -624,7 +645,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
624
645
  | `combineComparisonCosts` | production | this package: src/campaign/external-text-optimization.ts:41 |
625
646
  | `compareOptimizationMethods` | production | agent-app:src/eval-campaign/index.ts |
626
647
  | `compareRankKeys` | production | this package: src/campaign/presets/run-optimization.ts:29 |
627
- | `componentSurfaceIdentityMaterial` | none | |
648
+ | `componentSurfaceIdentityMaterial` | none | only this package's tests: src/campaign/surface-identity.test.ts:4 |
628
649
  | `composeGate` | production | discovery-lab:tools/confirmation-gate.mjs |
629
650
  | `costFromLedgerSummary` | production | supervisor-lab:bench/drain/seat.ts |
630
651
  | `createProfileMatrixPlan` | production | discovery-lab:tools/run-profile-confirmation.mjs |
@@ -653,7 +674,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
653
674
  | `isProposedCandidate` | production | supervisor-lab:bench/sequential-arena.ts |
654
675
  | `isTransientTransportFailure` | production | gtm-agent:eval/suites/persona.ts |
655
676
  | `LabeledScenarioStoreError` | none | only this package's tests: tests/campaign/run-campaign.test.ts:6 |
656
- | `labelTrustRank` | production | this package: src/campaign/labeled-store/fs-adapter.ts:39 |
677
+ | `labelTrustRank` | production | this package: src/campaign/labeled-store/fs-adapter.ts:40 |
657
678
  | `llmJudge` | production | agent-runtime:examples/agentic-data-creation/offline-fixtures.ts |
658
679
  | `loadEvalFixture` | planned | doc: docs/eval-fixtures.md |
659
680
  | `loadEvalFixtureScenarios` | planned | example: examples/eval-fixtures-quickstart/index.ts:11 |
@@ -902,7 +923,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
902
923
 
903
924
  ### `./hosted`
904
925
 
905
- 11 value exports — 7 production, 2 planned, 2 none.
926
+ 11 value exports — 7 production, 3 planned, 1 none.
906
927
 
907
928
  | symbol | consumer | evidence |
908
929
  | --- | --- | --- |
@@ -914,7 +935,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
914
935
  | `IngestEvalRunsRequestSchema` | production | this package: src/hosted/client.ts:19 |
915
936
  | `IngestResponseSchema` | production | this package: src/hosted/client.ts:19 |
916
937
  | `IngestTracesRequestSchema` | production | this package: src/hosted/client.ts:19 |
917
- | `InsightReportSchema` | none | |
938
+ | `InsightReportSchema` | planned | doc: docs/insight-report.md |
918
939
  | `TraceSpanEventSchema` | planned | example: examples/hosted-ingest-server/server.ts:33 |
919
940
  | `UnixNanoTimestampSchema` | none | — |
920
941
 
@@ -953,12 +974,14 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
953
974
 
954
975
  ### `./meta-eval`
955
976
 
956
- 13 value exports — 10 production, 1 planned, 2 none.
977
+ 16 value exports — 10 production, 4 planned, 2 none.
957
978
 
958
979
  | symbol | consumer | evidence |
959
980
  | --- | --- | --- |
960
981
  | `calibrationCurve` | none | only this package's tests: tests/meta-eval.test.ts:2 |
982
+ | `catchRate` | planned | doc: README.md |
961
983
  | `correlationStudy` | production | phony:products/builder/api/src/eval/outcomes.ts |
984
+ | `definePlant` | planned | doc: docs/plants.md |
962
985
  | `evalHealthStamp` | production | creative-agent:eval/lib/judge-sentinel.ts |
963
986
  | `fileSentinelStore` | production | creative-agent:eval/lib/judge-sentinel.ts |
964
987
  | `FileSystemOutcomeStore` | production | phony:products/builder/api/src/eval/outcomes.ts |
@@ -966,6 +989,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
966
989
  | `inMemorySentinelStore` | none | only this package's tests: tests/judge-sentinel.test.ts:7 |
967
990
  | `judgeSentinelReport` | production | creative-agent:eval/lib/judge-sentinel.ts |
968
991
  | `rubricPredictiveValidity` | production | physim:apps/server/src/scripts/agent-eval/validate-rubrics.ts |
992
+ | `seedPlants` | planned | doc: README.md |
969
993
  | `snapshotFromAgreement` | production | physim:apps/server/src/scripts/agent-eval/judge-sentinel.ts |
970
994
  | `snapshotFromCalibration` | production | gtm-agent:eval/calibrate-judges.ts |
971
995
  | `snapshotFromSentinelSet` | production | creative-agent:eval/lib/judge-sentinel.ts |
@@ -1408,7 +1432,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
1408
1432
  | `SUITE_REWARD_UNIT` | none | only this package's tests: tests/trace-repair/oracle-determinism.test.ts:4 |
1409
1433
  | `taskOracleRegistry` | none | only this package's tests: src/trace-repair/admission-report.test.ts:7 |
1410
1434
  | `TB_REPAIR_ADMISSION_CRITERIA` | production | this package: scripts/tb-repair-milestone1.ts:41 |
1411
- | `TestOracleError` | none | only this package's tests: tests/trace-repair/test-oracle.test.ts:3 |
1435
+ | `TestOracleError` | none | only this package's tests: tests/trace-repair/test-oracle.test.ts:4 |
1412
1436
  | `testSuiteDigest` | production | this package: scripts/tb-gated-stop-ab.ts:62 |
1413
1437
  | `TestSuiteTamperedError` | planned | doc: docs/trace-repair-grader.md |
1414
1438
  | `toRecordedSteps` | none | only this package's tests: src/trace-repair/continuation-policy.test.ts:25 |
@@ -1596,7 +1620,7 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
1596
1620
 
1597
1621
  ### `./wire`
1598
1622
 
1599
- 30 value exports — 25 production, 3 planned, 2 none.
1623
+ 31 value exports — 25 production, 3 planned, 3 none.
1600
1624
 
1601
1625
  | symbol | consumer | evidence |
1602
1626
  | --- | --- | --- |
@@ -1618,8 +1642,9 @@ The `none` set was reviewed symbol by symbol on 2026-08-21. Four rules decided m
1618
1642
  | `JudgeResultSchema` | production | this package: src/wire/openapi.ts:15 |
1619
1643
  | `listBuiltinRubrics` | production | this package: src/wire/handlers.ts:21 |
1620
1644
  | `ListRubricsResponseSchema` | production | this package: src/wire/openapi.ts:15 |
1621
- | `RubricDimensionSchema` | none | only this package's tests: tests/wire/schemas.test.ts:11 |
1622
- | `RubricSchema` | none | only this package's tests: tests/wire/schemas.test.ts:11 |
1645
+ | `RUBRIC_VERSION_SCHEME` | none | |
1646
+ | `RubricDimensionSchema` | none | only this package's tests: tests/wire/schemas.test.ts:12 |
1647
+ | `RubricSchema` | none | only this package's tests: tests/wire/schemas.test.ts:12 |
1623
1648
  | `runRpcBatch` | production | this package: src/cli.ts:21 |
1624
1649
  | `runRpcOnce` | production | this package: src/cli.ts:21 |
1625
1650
  | `startServer` | production | creative-agent:eval/ingestion-server.ts |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/agent-eval",
3
- "version": "0.170.0",
3
+ "version": "0.172.0",
4
4
  "description": "Evaluate and improve AI agents from runs, traces, judges, and feedback. Compare candidates, cluster failures, measure lift, and gate releases.",
5
5
  "homepage": "https://github.com/tangle-network/agent-eval#readme",
6
6
  "repository": {
@@ -197,33 +197,33 @@
197
197
  },
198
198
  "dependencies": {
199
199
  "@asteasolutions/zod-to-openapi": "^9.1.0",
200
- "@hono/node-server": "^2.0.12",
201
- "@tangle-network/agent-core": "^0.9.4",
202
- "@tangle-network/agent-interface": "^1.4.0",
200
+ "@hono/node-server": "^2.1.1",
201
+ "@tangle-network/agent-core": "^0.9.6",
202
+ "@tangle-network/agent-interface": "^2.0.0",
203
203
  "@tangle-network/agent-trace-contract": "^1.0.2",
204
- "hono": "^4.12.32",
204
+ "hono": "^4.13.5",
205
205
  "linear-sum-assignment": "1.0.9",
206
206
  "re2js": "2.8.6",
207
- "zod": "^4.4.3"
207
+ "zod": "4.5.4"
208
208
  },
209
209
  "devDependencies": {
210
210
  "@arethetypeswrong/cli": "^0.18.5",
211
- "@arizeai/phoenix-evals": "^2.1.0",
212
- "@biomejs/biome": "^2.5.5",
213
- "@types/node": "^26.1.1",
211
+ "@arizeai/phoenix-evals": "^2.3.0",
212
+ "@biomejs/biome": "^2.5.11",
213
+ "@types/node": "^26.4.0",
214
214
  "autoevals": "^0.3.0",
215
- "esbuild": "^0.28.1",
215
+ "esbuild": "^0.28.2",
216
216
  "fast-check": "^4.9.0",
217
217
  "husky": "^9.1.7",
218
218
  "lib-r-math.js": "^3.0.2",
219
- "lint-staged": "^17.2.0",
220
- "openapi3-ts": "^4.6.0",
221
- "oxc-parser": "^0.141.0",
222
- "publint": "^0.3.22",
219
+ "lint-staged": "^17.4.1",
220
+ "openapi3-ts": "^4.6.1",
221
+ "oxc-parser": "^0.147.0",
222
+ "publint": "^0.3.24",
223
223
  "tsdown": "^0.22.14",
224
- "tsx": "^4.23.1",
224
+ "tsx": "^4.23.12",
225
225
  "typescript": "^7.0.2",
226
- "vitest": "^4.1.10",
226
+ "vitest": "^4.1.11",
227
227
  "yaml": "2.9.0"
228
228
  },
229
229
  "pnpm": {
@@ -231,7 +231,8 @@
231
231
  "minimumReleaseAgeExclude": [
232
232
  "@tangle-network/*",
233
233
  "esbuild",
234
- "vite"
234
+ "vite",
235
+ "zod@4.5.4"
235
236
  ],
236
237
  "overrides": {
237
238
  "@arizeai/openinference-core>@opentelemetry/core": "^2.10.0",
@@ -242,7 +243,7 @@
242
243
  }
243
244
  },
244
245
  "engines": {
245
- "node": ">=20"
246
+ "node": ">=20.19.0"
246
247
  },
247
248
  "lint-staged": {
248
249
  "src/**/*.{ts,tsx}": [
@@ -1 +0,0 @@
1
- {"version":3,"file":"experiment-tracker-BKEumQug.js","names":[],"sources":["../src/experiment-tracker.ts"],"sourcesContent":["/**\n * Experiment tracker — git-provenanced experiment log with N-rep stats and a\n * KEEP / REGRESSION / NOISE verdict against a parent.\n *\n * Every loop the fleet runs reduces to the same question: \"I ran the candidate\n * N times — is the median measurably better than the parent, or is the delta\n * inside the noise band?\" The hand-rolled copies bake a fixed score scale\n * (percentage points), a fixed store path (`.evolve/experiments-v2.json`), and\n * `execSync('git …')` straight into the module. This is the canonical version:\n * provenance and persistence are injected, thresholds are configurable, and the\n * stats + verdict are pure functions you can unit-test without a git repo or a\n * filesystem.\n *\n * Stats per experiment: median / mean / min / max / iqr / stddev / passRate /\n * n, plus a `stable` flag (`iqr < iqrUnstableAbove && stddev < stddevUnstableAbove`).\n *\n * Verdict against a parent (both must have `n >= minRepsForVerdict`):\n * - NOISE — the candidate is too unstable to judge (`!stable`)\n * - KEEP — `medianDelta > keepThreshold`\n * - REGRESSION — `medianDelta < -regressionThreshold`\n * - NOISE — otherwise (delta inside the band)\n * With no parent (or insufficient reps) the verdict is the neutral ITERATE.\n */\n\nimport { execSync } from 'node:child_process'\nimport type { EvidenceRef } from './analyst/types'\nimport { iqr } from './baseline'\nimport { ValidationError } from './errors'\n\n/** Verdict for one experiment relative to its parent. ITERATE is the neutral\n * \"keep collecting reps / no parent to compare against\" state. */\nexport type ExperimentVerdict = 'KEEP' | 'ITERATE' | 'NOISE' | 'REGRESSION'\n\n/** Git provenance for the working tree an experiment was run from. */\nexport interface ExperimentProvenance {\n /** Commit sha (short or full — the tracker does not interpret it). */\n commit: string\n /** First line of the commit message. */\n message: string\n /** Files changed vs the parent commit, or a marker like 'uncommitted'. */\n changedFiles: string[]\n}\n\n/** A single repetition of an experiment, carrying the score the verdict is\n * computed on plus any free-form per-rep metrics the consumer wants kept. */\nexport interface ExperimentRep {\n /** 0-indexed repetition number within the experiment. */\n rep: number\n /** The score this rep is judged on (same scale as the thresholds). */\n score: number\n /** ISO timestamp the rep completed. */\n timestamp: string\n /** Stable execution/run identity that produced this score. */\n runId?: string\n /** Mechanically resolvable trace, artifact, metric, or finding evidence. */\n evidence?: EvidenceRef[]\n /** Whether this rep passed the consumer's own gate — folded into `passRate`. */\n passed?: boolean\n /** Free-form numeric metrics retained for later analysis. */\n metrics?: Record<string, number>\n}\n\nexport interface ExperimentStats {\n median: number\n mean: number\n min: number\n max: number\n /** Inter-quartile range of the rep scores. */\n iqr: number\n /** Population standard deviation of the rep scores. */\n stddev: number\n /** Fraction of reps with `passed === true`, over reps that set `passed`.\n * null when no rep declared a pass/fail outcome. */\n passRate: number | null\n /** Number of reps. */\n n: number\n /** True when the sample is tight enough to trust for a verdict. */\n stable: boolean\n}\n\nexport interface Experiment {\n /** Stable id for the experiment. */\n id: string\n /** Free-form label / config descriptor. */\n label: string\n /** Git provenance captured when the experiment was created. */\n provenance: ExperimentProvenance\n /** Parent experiment id this candidate is compared against, if any. */\n parentId?: string\n /** One-line summary of what changed from the parent. */\n changeSummary: string\n reps: ExperimentRep[]\n stats: ExperimentStats\n verdict: ExperimentVerdict\n /** ISO timestamp the experiment was created. */\n createdAt: string\n}\n\nexport interface ImprovementThresholds {\n /** medianDelta strictly above this ⇒ KEEP. Default 5. */\n keepThreshold?: number\n /** medianDelta strictly below the negative of this ⇒ REGRESSION. Default 5. */\n regressionThreshold?: number\n /** iqr at or above this ⇒ unstable. Default 10. */\n iqrUnstableAbove?: number\n /** stddev at or above this ⇒ unstable. Default Infinity (iqr-only stability). */\n stddevUnstableAbove?: number\n /** Reps required on BOTH candidate and parent before a verdict is rendered.\n * Default 3. */\n minRepsForVerdict?: number\n}\n\nexport interface ImprovementVerdictResult {\n verdict: ExperimentVerdict\n /** candidate.median − parent.median; null when no parent or insufficient reps. */\n medianDelta: number | null\n /** Human-readable reason for the verdict — for dashboards and logs. */\n reason: string\n}\n\nconst DEFAULTS: Required<ImprovementThresholds> = {\n keepThreshold: 5,\n regressionThreshold: 5,\n iqrUnstableAbove: 10,\n stddevUnstableAbove: Number.POSITIVE_INFINITY,\n minRepsForVerdict: 3,\n}\n\nfunction resolveThresholds(t: ImprovementThresholds | undefined): Required<ImprovementThresholds> {\n const r = { ...DEFAULTS, ...(t ?? {}) }\n if (r.keepThreshold < 0) {\n throw new ValidationError(\n `experiment-tracker: keepThreshold must be >= 0, got ${r.keepThreshold}`,\n )\n }\n if (r.regressionThreshold < 0) {\n throw new ValidationError(\n `experiment-tracker: regressionThreshold must be >= 0, got ${r.regressionThreshold}`,\n )\n }\n if (r.minRepsForVerdict < 1) {\n throw new ValidationError(\n `experiment-tracker: minRepsForVerdict must be >= 1, got ${r.minRepsForVerdict}`,\n )\n }\n return r\n}\n\nfunction median(sorted: number[]): number {\n const n = sorted.length\n if (n === 0) return 0\n const mid = Math.floor(n / 2)\n return n % 2 === 0 ? (sorted[mid - 1]! + sorted[mid]!) / 2 : sorted[mid]!\n}\n\n/** Population standard deviation (÷n). 0 for fewer than 2 values. */\nfunction stddev(values: number[], mean: number): number {\n if (values.length < 2) return 0\n const variance = values.reduce((acc, v) => acc + (v - mean) ** 2, 0) / values.length\n return Math.sqrt(variance)\n}\n\n/**\n * Compute the N-rep statistics for a set of reps. Pure — no I/O. The `stable`\n * flag is the trust gate the verdict depends on: a sample whose spread exceeds\n * the configured bounds can't distinguish a real delta from run-to-run noise.\n */\nexport function computeExperimentStats(\n reps: ExperimentRep[],\n thresholds?: ImprovementThresholds,\n): ExperimentStats {\n const t = resolveThresholds(thresholds)\n const n = reps.length\n if (n === 0) {\n return {\n median: 0,\n mean: 0,\n min: 0,\n max: 0,\n iqr: 0,\n stddev: 0,\n passRate: null,\n n: 0,\n stable: false,\n }\n }\n const scores = reps.map((r) => {\n if (!Number.isFinite(r.score)) {\n throw new ValidationError(`experiment-tracker: rep ${r.rep} has non-finite score ${r.score}`)\n }\n return r.score\n })\n const sorted = [...scores].sort((a, b) => a - b)\n const mean = scores.reduce((s, v) => s + v, 0) / n\n const sd = stddev(scores, mean)\n const spread = iqr(scores)\n const rated = reps.filter((r) => typeof r.passed === 'boolean')\n const passRate = rated.length === 0 ? null : rated.filter((r) => r.passed).length / rated.length\n const stable = spread < t.iqrUnstableAbove && sd < t.stddevUnstableAbove\n return {\n median: median(sorted),\n mean,\n min: sorted[0]!,\n max: sorted[n - 1]!,\n iqr: spread,\n stddev: sd,\n passRate,\n n,\n stable,\n }\n}\n\n/**\n * Verdict for a candidate against its parent. Pure — operates on already-computed\n * stats. KEEP/REGRESSION require both sides to have `>= minRepsForVerdict` reps\n * AND the candidate to be `stable`; otherwise the result is NOISE (unstable) or\n * ITERATE (not enough reps / no parent).\n */\nexport function improvementVerdict(\n candidate: ExperimentStats,\n parent: ExperimentStats | null,\n thresholds?: ImprovementThresholds,\n): ImprovementVerdictResult {\n const t = resolveThresholds(thresholds)\n if (!parent) {\n return {\n verdict: 'ITERATE',\n medianDelta: null,\n reason: 'no parent experiment to compare against',\n }\n }\n if (candidate.n < t.minRepsForVerdict || parent.n < t.minRepsForVerdict) {\n return {\n verdict: 'ITERATE',\n medianDelta: null,\n reason: `need >= ${t.minRepsForVerdict} reps on both sides (candidate n=${candidate.n}, parent n=${parent.n})`,\n }\n }\n if (!candidate.stable) {\n return {\n verdict: 'NOISE',\n medianDelta: candidate.median - parent.median,\n reason: `candidate unstable (iqr=${candidate.iqr}, stddev=${candidate.stddev.toFixed(2)})`,\n }\n }\n const medianDelta = candidate.median - parent.median\n if (medianDelta > t.keepThreshold) {\n return { verdict: 'KEEP', medianDelta, reason: `median +${medianDelta} > +${t.keepThreshold}` }\n }\n if (medianDelta < -t.regressionThreshold) {\n return {\n verdict: 'REGRESSION',\n medianDelta,\n reason: `median ${medianDelta} < -${t.regressionThreshold}`,\n }\n }\n return {\n verdict: 'NOISE',\n medianDelta,\n reason: `median delta ${medianDelta} inside noise band [-${t.regressionThreshold}, +${t.keepThreshold}]`,\n }\n}\n\n// ── Provenance + persistence seams ───────────────────────────────────\n\n/** Reads git provenance for the working tree. Inject a fake in tests; the\n * default implementation shells out to `git`. */\nexport type ProvenanceReader = () => ExperimentProvenance | Promise<ExperimentProvenance>\n\n/** Persistence seam for the experiment log. Inject in-memory in tests; the\n * filesystem implementation is `fileExperimentStore`. */\nexport interface ExperimentStore {\n load(): Promise<Experiment[]>\n save(experiments: Experiment[]): Promise<void>\n}\n\n/**\n * Default provenance reader: `git rev-parse HEAD`, the subject line, and the\n * files changed vs `HEAD~1`. Fail-loud — a tracker that silently logs\n * `commit: 'unknown'` corrupts the provenance the whole point of the log is to\n * carry. When the working tree genuinely has no parent commit, pass an override.\n */\nexport const gitProvenanceReader: ProvenanceReader = () => {\n const run = (cmd: string): string => execSync(cmd, { encoding: 'utf8' }).trim()\n const commit = run('git rev-parse --short HEAD')\n const message = run('git log -1 --format=%s')\n const changedRaw = run('git diff --name-only HEAD~1')\n const changedFiles = changedRaw.length === 0 ? [] : changedRaw.split('\\n').filter(Boolean)\n return { commit, message, changedFiles }\n}\n\n/** In-memory store — the default when no persistence is wanted (tests, ephemeral\n * runs). State lives on the instance. */\nexport function inMemoryExperimentStore(initial: Experiment[] = []): ExperimentStore {\n let state = initial.map((e) => structuredClone(e))\n return {\n async load() {\n return state.map((e) => structuredClone(e))\n },\n async save(experiments) {\n state = experiments.map((e) => structuredClone(e))\n },\n }\n}\n\n/** Filesystem store — a single JSON array at `path`, created on first save. */\nexport function fileExperimentStore(path: string): ExperimentStore {\n return {\n async load() {\n const fs = await import('node:fs/promises')\n try {\n const raw = await fs.readFile(path, 'utf8')\n const parsed = JSON.parse(raw)\n if (!Array.isArray(parsed)) {\n throw new ValidationError(`experiment-tracker: store at ${path} is not a JSON array`)\n }\n return parsed as Experiment[]\n } catch (err) {\n if ((err as NodeJS.ErrnoException).code === 'ENOENT') return []\n throw err\n }\n },\n async save(experiments) {\n const fs = await import('node:fs/promises')\n const pathMod = await import('node:path')\n await fs.mkdir(pathMod.dirname(path), { recursive: true })\n await fs.writeFile(path, JSON.stringify(experiments, null, 2), 'utf8')\n },\n }\n}\n\nexport interface ExperimentTrackerOptions {\n store?: ExperimentStore\n provenanceReader?: ProvenanceReader\n thresholds?: ImprovementThresholds\n /** Clock seam for deterministic timestamps in tests. Default `Date.now`. */\n now?: () => number\n}\n\nexport interface CreateExperimentInput {\n id: string\n label: string\n changeSummary: string\n parentId?: string\n /** Override provenance instead of reading from git (e.g. CI metadata). */\n provenance?: ExperimentProvenance\n}\n\n/**\n * Stateful tracker over an `ExperimentStore`. Create an experiment (provenance\n * is captured once), append reps as they complete (stats + verdict recompute on\n * every append), and read the log back for a dashboard. All persistence and git\n * access flow through the injected seams, so the tracker is fully testable\n * without a repo or disk.\n */\nexport class ExperimentTracker {\n private readonly store: ExperimentStore\n private readonly provenanceReader: ProvenanceReader\n private readonly thresholds: Required<ImprovementThresholds>\n private readonly now: () => number\n\n constructor(options: ExperimentTrackerOptions = {}) {\n this.store = options.store ?? inMemoryExperimentStore()\n this.provenanceReader = options.provenanceReader ?? gitProvenanceReader\n this.thresholds = resolveThresholds(options.thresholds)\n this.now = options.now ?? Date.now\n }\n\n async create(input: CreateExperimentInput): Promise<Experiment> {\n const experiments = await this.store.load()\n if (experiments.some((e) => e.id === input.id)) {\n throw new ValidationError(`experiment-tracker: experiment id \"${input.id}\" already exists`)\n }\n if (input.parentId && !experiments.some((e) => e.id === input.parentId)) {\n throw new ValidationError(\n `experiment-tracker: parent experiment \"${input.parentId}\" not found`,\n )\n }\n const provenance = input.provenance ?? (await this.provenanceReader())\n const experiment: Experiment = {\n id: input.id,\n label: input.label,\n provenance,\n parentId: input.parentId,\n changeSummary: input.changeSummary,\n reps: [],\n stats: computeExperimentStats([], this.thresholds),\n verdict: 'ITERATE',\n createdAt: new Date(this.now()).toISOString(),\n }\n experiments.push(experiment)\n await this.store.save(experiments)\n return structuredClone(experiment)\n }\n\n /** Append a rep (its `rep` index defaults to the current rep count) and\n * recompute stats + verdict. Returns the updated experiment. */\n async addRep(\n experimentId: string,\n rep: Omit<ExperimentRep, 'rep' | 'timestamp'> & { rep?: number; timestamp?: string },\n ): Promise<Experiment> {\n const experiments = await this.store.load()\n const exp = experiments.find((e) => e.id === experimentId)\n if (!exp)\n throw new ValidationError(`experiment-tracker: experiment \"${experimentId}\" not found`)\n if (rep.runId !== undefined && rep.runId.trim().length === 0) {\n throw new ValidationError('experiment-tracker: rep runId must be non-empty when present')\n }\n const evidence = rep.evidence?.map((reference, index) => {\n if (reference.uri.trim().length === 0) {\n throw new ValidationError(\n `experiment-tracker: rep evidence[${index}].uri must be non-empty`,\n )\n }\n return {\n kind: reference.kind,\n uri: reference.uri,\n ...(reference.excerpt === undefined ? {} : { excerpt: reference.excerpt }),\n }\n })\n const fullRep: ExperimentRep = {\n rep: rep.rep ?? exp.reps.length,\n score: rep.score,\n timestamp: rep.timestamp ?? new Date(this.now()).toISOString(),\n ...(rep.runId === undefined ? {} : { runId: rep.runId }),\n ...(evidence === undefined ? {} : { evidence }),\n ...(rep.passed === undefined ? {} : { passed: rep.passed }),\n ...(rep.metrics === undefined ? {} : { metrics: { ...rep.metrics } }),\n }\n exp.reps.push(fullRep)\n exp.stats = computeExperimentStats(exp.reps, this.thresholds)\n const parent = exp.parentId ? experiments.find((e) => e.id === exp.parentId) : undefined\n exp.verdict = improvementVerdict(exp.stats, parent?.stats ?? null, this.thresholds).verdict\n await this.store.save(experiments)\n return structuredClone(exp)\n }\n\n async get(experimentId: string): Promise<Experiment | undefined> {\n const experiments = await this.store.load()\n const found = experiments.find((e) => e.id === experimentId)\n return found ? structuredClone(found) : undefined\n }\n\n async list(): Promise<Experiment[]> {\n return this.store.load()\n }\n\n /** Full verdict (not just the enum) for an experiment vs its parent. */\n async verdictFor(experimentId: string): Promise<ImprovementVerdictResult> {\n const experiments = await this.store.load()\n const exp = experiments.find((e) => e.id === experimentId)\n if (!exp)\n throw new ValidationError(`experiment-tracker: experiment \"${experimentId}\" not found`)\n const parent = exp.parentId ? experiments.find((e) => e.id === exp.parentId) : undefined\n return improvementVerdict(exp.stats, parent?.stats ?? null, this.thresholds)\n }\n}\n"],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"experiment-tracker-Dm8yQMqb.d.ts","names":[],"sources":["../src/statistics/power-and-mde.ts","../src/statistics/random.ts","../src/experiment-tracker.ts"],"mappings":";;;;;;;;iBAWgB,mBAAmB;EACjC;EACA;EACA;EACA;;;;;;;;;;;iBAsBc,yBAAyB;EACvC;EACA;EACA;EACA;;;;;;;;iBAkBc,UAAU;EACxB;EACA;EACA;EACA;;;;;;;;;;;;;;;;iBAyBc,iBAAiB;EAC/B;EACA;EACA;EACA;EACA;;;;;;;iBAyBc,aAAa;EAC3B;EACA;EACA;EACA;EACA;;;;;;;;iBCrHc,WAAW;;;;;KCyBf;;UAGK;;EAEf;;EAEA;;EAEA;;;;UAKe;;EAEf;;EAEA;;EAEA;;EAEA;;EAEA,WAAW;;EAEX;;EAEA,UAAU;;UAGK;EACf;EACA;EACA;EACA;;EAEA;;EAEA;;;EAGA;;EAEA;;EAEA;;UAGe;;EAEf;;EAEA;;EAEA,YAAY;;EAEZ;;EAEA;EACA,MAAM;EACN,OAAO;EACP,SAAS;;EAET;;UAGe;;EAEf;;EAEA;;EAEA;;EAEA;;;EAGA;;UAGe;EACf,SAAS;;EAET;;EAEA;;;;;;;iBAkDc,uBACd,MAAM,iBACN,aAAa,wBACZ;;;;;;;iBAgDa,mBACd,WAAW,iBACX,QAAQ,wBACR,aAAa,wBACZ;;;KA6CS,yBAAyB,uBAAuB,QAAQ;;;UAInD;EACf,QAAQ,QAAQ;EAChB,KAAK,aAAa,eAAe;;;;iBAoBnB,wBAAwB,UAAS,eAAoB;;iBAarD,oBAAoB,eAAe;UAyBlC;EACf,QAAQ;EACR,mBAAmB;EACnB,aAAa;;EAEb;;UAGe;EACf;EACA;EACA;EACA;;EAEA,aAAa;;;;;;;;;cAUF;mBACM;mBACA;mBACA;mBACA;EAEjB,YAAY,UAAS;EAOf,OAAO,OAAO,wBAAwB,QAAQ;;;EA6B9C,OACJ,sBACA,KAAK,KAAK;IAAwC;IAAc;MAC/D,QAAQ;EAqCL,IAAI,uBAAuB,QAAQ;EAMnC,QAAQ,QAAQ;;EAKhB,WAAW,uBAAuB,QAAQ"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-lfaSeKSD.d.ts","names":[],"sources":["../src/ledger-core/atomic-file-lock.ts","../src/ledger-core/canonical.ts","../src/ledger-core/journal-file.ts","../src/ledger-core/trusted-head.ts","../src/ledger-core/journal.ts"],"mappings":";;;UAiBiB;WACN;WACA;WACA;;UAGM;WACN,OAAO;EAChB;;KAGU;WACG;WAA0B;WAAyB,QAAQ;;WAC3D;WAA0B;;KAE7B;WACG;WAAyB,MAAM;IAC1C;UAEa;WACN;WACA;;cAGE,4BAA4B;WACrB;;;iBASJ,oBACd,SAAS,wBACR;;;;;;;iBAea,yBACd,SAAS,wBACR;;;KCjDS;;cAGC,qBAAmB;;cAGnB,oCAAoC;;;;iBAKjC,gBAAgB;iBAQhB,cAAc,iBAAiB;;;;;;;;;;;;;;;;iBAuB/B,aAAa;;;;;UC7CZ;;EAEf;EACA,eAAe,iBAAiB;IAAY;MAAoB;;;;iBAKlD,iBAAiB,cAAc,cAAc,SAAS;;;;iBA6CtD,0BACd,cACA,kBACA,SAAS;iBAqCK,mBAAmB,GAAG,cAAc,SAAS,mBAAmB,WAAW,IAAI;KAQnF,eAAe;EAAO;EAAgB,OAAO;;EAAQ;;iBAEjD,sBAAsB,GACpC,cACA,SAAS,mBACT,WAAW,IACV,eAAe;;;;UCnED;EACf;EACA,WAAW;;;UAII;EACf;EACA,WAAW;;;;iBAKG,mBAAmB;;;;;iBAWnB,oBACd,cACA,SAAS,oBACR;;;;;;;KA2ES;EACN;EAAe,MAAM;EAAmB;;EACxC;EAAe;EAAY;EAAoB;;EAC/C;EAAgB;;;UAsCL;;EAEf;;;EAGA;;;;;iBAMc,gCACd,kBAAkB,uBAClB,MAAM,mBACN,SAAS,mBACT,QAAQ;;;;UCjLO;EACf;;;;;UAMe,kBAAkB,cAAc;EAC/C;EACA,cAAc;EACd,OAAO;EACP,WAAW;;KAGD,cAAc,uBAAuB,cAAc,mBAAmB,SAChF,kBAAkB;UAEH;EACf;EACA;;;;;UAMe,gBAAgB,OAAO;EACtC,MAAM,OAAO,OAAO;EACpB,OAAO,SAAS,UAAU;;UAGX,mBACf,uBACA,cAAc,iBACd,oBACQ;;EAER,QAAQ;EACR,cAAc,kBAAkB;;;;EAIhC,WAAW,cAAc,SAAS,oBAAoB,cAAc,QAAQ;;EAE5E,iBAAiB,OAAO,cAAc,QAAQ,QAAQ;EACtD,mBAAmB,gBAAgB,cAAc,QAAQ,QAAQ;;UAGlD,mBAAmB,OAAO;EACzC,SAAS;EACT,YAAY;;UAGG,mBAAmB,OAAO;EACzC,OAAO;;EAEP;EACA,YAAY;;UAGG;;;;;;;;;;;;;;EAcf;;UAGe;;;;;;;EAOf;;;;cAiBW,kBAAkB,uBAAuB,cAAc,iBAAiB;WAC1E;;WAEA;mBACQ;mBACA;mBACA;EAEjB,YACE,cACA,OAAO,mBAAmB,QAAQ,OAAO,aACzC,UAAS;EASL,UAAU,QAAQ,mBAAmB,cAAc,QAAQ,QAAQ;EAMnE,OACJ,OAAO,OACP,UAAS,sBACR,QAAQ,mBAAmB,cAAc,QAAQ,QAAQ;;EA8CtD,eAAe,QAAQ;;;;EAWvB,kBAAkB,QAAQ;;;;;;;;EA4B1B,oBAAoB,QAAQ;;;;;;;;;;;;;UAoB1B;UAiBA;UAUA;UAgBA;UAgDA"}