@tangle-network/agent-eval 0.220.2 → 0.221.1

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 (181) hide show
  1. package/CHANGELOG.md +64 -0
  2. package/dist/adapters/http.d.ts +2 -2
  3. package/dist/{agent-profile-D01Io2Xw.d.ts → agent-profile-Bc7ADJY4.d.ts} +2 -2
  4. package/dist/{agent-profile-D01Io2Xw.d.ts.map → agent-profile-Bc7ADJY4.d.ts.map} +1 -1
  5. package/dist/analyst/index.d.ts +77 -78
  6. package/dist/analyst/index.d.ts.map +1 -1
  7. package/dist/analyst/index.js +204 -25
  8. package/dist/analyst/index.js.map +1 -1
  9. package/dist/{analyze-runs-DqPJaJ4X.js → analyze-runs-CHmsykNJ.js} +4 -4
  10. package/dist/{analyze-runs-DqPJaJ4X.js.map → analyze-runs-CHmsykNJ.js.map} +1 -1
  11. package/dist/{analyze-runs-BWAHBDAw.d.ts → analyze-runs-D7In4c3z.d.ts} +2 -2
  12. package/dist/{analyze-runs-BWAHBDAw.d.ts.map → analyze-runs-D7In4c3z.d.ts.map} +1 -1
  13. package/dist/{benchmark-command-Dx0E4a6z.js → benchmark-command-DiGqnGUt.js} +13 -11
  14. package/dist/benchmark-command-DiGqnGUt.js.map +1 -0
  15. package/dist/benchmarks/index.d.ts +4 -4
  16. package/dist/benchmarks/index.js +3 -3
  17. package/dist/calibration-CTwxpJ-t.js +197 -0
  18. package/dist/calibration-CTwxpJ-t.js.map +1 -0
  19. package/dist/campaign/index.d.ts +6 -6
  20. package/dist/campaign/index.js +5 -5
  21. package/dist/{campaign-BVPC6ODQ.js → campaign-Bt6rbWIU.js} +9 -8
  22. package/dist/{campaign-BVPC6ODQ.js.map → campaign-Bt6rbWIU.js.map} +1 -1
  23. package/dist/cli.js +1 -1
  24. package/dist/{completion-verifier-Cigap8CG.js → completion-verifier-YwoeujPl.js} +2 -2
  25. package/dist/completion-verifier-YwoeujPl.js.map +1 -0
  26. package/dist/contract/index.d.ts +10 -10
  27. package/dist/contract/index.js +7 -7
  28. package/dist/decision-point-Co3u3W8k.js +831 -0
  29. package/dist/decision-point-Co3u3W8k.js.map +1 -0
  30. package/dist/default-registry-BMHqNR6_.d.ts +257 -0
  31. package/dist/default-registry-BMHqNR6_.d.ts.map +1 -0
  32. package/dist/{default-registry-ovrIBGmH.js → default-registry-BbFCkqvB.js} +607 -14
  33. package/dist/default-registry-BbFCkqvB.js.map +1 -0
  34. package/dist/{define-agent-eval-C2nFhHPu.d.ts → define-agent-eval-Bsoi2GUV.d.ts} +7 -7
  35. package/dist/{define-agent-eval-C2nFhHPu.d.ts.map → define-agent-eval-Bsoi2GUV.d.ts.map} +1 -1
  36. package/dist/{define-agent-eval-UQY3VbJ2.js → define-agent-eval-CJhECJNL.js} +4 -4
  37. package/dist/{define-agent-eval-UQY3VbJ2.js.map → define-agent-eval-CJhECJNL.js.map} +1 -1
  38. package/dist/diagnosis/index.d.ts +2 -2
  39. package/dist/diagnosis/index.js +1 -1
  40. package/dist/{dspy-rlm-engine-Bn_Mt_LW.js → dspy-rlm-engine-BTy7u0jQ.js} +3 -3
  41. package/dist/{dspy-rlm-engine-Bn_Mt_LW.js.map → dspy-rlm-engine-BTy7u0jQ.js.map} +1 -1
  42. package/dist/{engine-BpGGw6cd.d.ts → engine-BF95CWzH.d.ts} +2 -2
  43. package/dist/{engine-BpGGw6cd.d.ts.map → engine-BF95CWzH.d.ts.map} +1 -1
  44. package/dist/{eval-campaign-BUMIxKTE.js → eval-campaign-DoX5vz3E.js} +2 -2
  45. package/dist/{eval-campaign-BUMIxKTE.js.map → eval-campaign-DoX5vz3E.js.map} +1 -1
  46. package/dist/{evaluation-CBdQt_kr.d.ts → evaluation-D1PGzkPR.d.ts} +3 -3
  47. package/dist/{evaluation-CBdQt_kr.d.ts.map → evaluation-D1PGzkPR.d.ts.map} +1 -1
  48. package/dist/evaluation-wdGyZ7jV.js +147 -0
  49. package/dist/evaluation-wdGyZ7jV.js.map +1 -0
  50. package/dist/evaluation.d.ts +1 -1
  51. package/dist/evaluation.js +1 -136
  52. package/dist/{exact-types-BYFmYq44.d.ts → exact-types-CVn1QxFO.d.ts} +2 -2
  53. package/dist/{exact-types-BYFmYq44.d.ts.map → exact-types-CVn1QxFO.d.ts.map} +1 -1
  54. package/dist/experiment/index.d.ts +3 -3
  55. package/dist/experiment/index.js +2 -2
  56. package/dist/{external-optimizer-process-wOLfzsCC.js → external-optimizer-process-E5yY2SYS.js} +2 -2
  57. package/dist/{external-optimizer-process-wOLfzsCC.js.map → external-optimizer-process-E5yY2SYS.js.map} +1 -1
  58. package/dist/{external-optimizer-subprocess-D670Oxf2.js → external-optimizer-subprocess-DA02c_L6.js} +12 -19
  59. package/dist/{external-optimizer-subprocess-D670Oxf2.js.map → external-optimizer-subprocess-DA02c_L6.js.map} +1 -1
  60. package/dist/{feedback-trajectory-DhB9WzYg.d.ts → feedback-trajectory-BZhVCWuz.d.ts} +3 -3
  61. package/dist/{feedback-trajectory-DhB9WzYg.d.ts.map → feedback-trajectory-BZhVCWuz.d.ts.map} +1 -1
  62. package/dist/finding-composition-8n0fFgVI.js +131 -0
  63. package/dist/finding-composition-8n0fFgVI.js.map +1 -0
  64. package/dist/{findings-store-CvNo712L.js → findings-store-DRiFdoid.js} +4 -4
  65. package/dist/{findings-store-CvNo712L.js.map → findings-store-DRiFdoid.js.map} +1 -1
  66. package/dist/{index-CVFStrQD.d.ts → index-BJZ7s-sv.d.ts} +7 -58
  67. package/dist/index-BJZ7s-sv.d.ts.map +1 -0
  68. package/dist/{index-Q6DvdcwI.d.ts → index-BvX3CFNS.d.ts} +6 -6
  69. package/dist/{index-Q6DvdcwI.d.ts.map → index-BvX3CFNS.d.ts.map} +1 -1
  70. package/dist/index-DWd1gUwR.d.ts +1086 -0
  71. package/dist/index-DWd1gUwR.d.ts.map +1 -0
  72. package/dist/{index-DAXfpVf7.d.ts → index-y7i8l6Y_.d.ts} +8 -8
  73. package/dist/{index-DAXfpVf7.d.ts.map → index-y7i8l6Y_.d.ts.map} +1 -1
  74. package/dist/index.d.ts +18 -17
  75. package/dist/index.d.ts.map +1 -1
  76. package/dist/index.js +15 -15
  77. package/dist/{kind-factory-BhxbtUsQ.js → kind-factory-Dl0PmNQL.js} +2 -2
  78. package/dist/{kind-factory-BhxbtUsQ.js.map → kind-factory-Dl0PmNQL.js.map} +1 -1
  79. package/dist/{llm-judge-Cc8vDJh_.js → llm-judge-3uAeRawE.js} +4 -4
  80. package/dist/{llm-judge-Cc8vDJh_.js.map → llm-judge-3uAeRawE.js.map} +1 -1
  81. package/dist/{matrix-Cf-AGxGh.d.ts → matrix-BXo3PSqM.d.ts} +2 -2
  82. package/dist/{matrix-Cf-AGxGh.d.ts.map → matrix-BXo3PSqM.d.ts.map} +1 -1
  83. package/dist/meta-eval/index.d.ts +3 -638
  84. package/dist/meta-eval/index.js +3 -193
  85. package/dist/meta-eval/index.js.map +1 -1
  86. package/dist/multishot/golden/index.d.ts +1 -1
  87. package/dist/multishot/index.d.ts +2 -2
  88. package/dist/openapi.json +1 -1
  89. package/dist/outcome-observations-FLmRpgYa.js +78 -0
  90. package/dist/outcome-observations-FLmRpgYa.js.map +1 -0
  91. package/dist/{paired-arms-Ct4LTKc1.js → paired-arms-B2ttLc0_.js} +108 -31
  92. package/dist/paired-arms-B2ttLc0_.js.map +1 -0
  93. package/dist/{power-and-mde-N5nU4_Ly.js → power-and-mde-CQX-0weG.js} +2 -2
  94. package/dist/{power-and-mde-N5nU4_Ly.js.map → power-and-mde-CQX-0weG.js.map} +1 -1
  95. package/dist/{prime-protocol-CckHBxGu.d.ts → prime-protocol-BEaqBoQE.d.ts} +2 -2
  96. package/dist/{prime-protocol-CckHBxGu.d.ts.map → prime-protocol-BEaqBoQE.d.ts.map} +1 -1
  97. package/dist/{proposal-findings-E1aSC_cU.js → proposal-findings-D0_zkQ2l.js} +2 -2
  98. package/dist/{proposal-findings-E1aSC_cU.js.map → proposal-findings-D0_zkQ2l.js.map} +1 -1
  99. package/dist/{registry-B_yG-1jh.d.ts → registry-DDKaUrmM.d.ts} +3 -3
  100. package/dist/{registry-B_yG-1jh.d.ts.map → registry-DDKaUrmM.d.ts.map} +1 -1
  101. package/dist/reporting.d.ts +1 -1
  102. package/dist/reporting.js +3 -3
  103. package/dist/rl.d.ts +4 -5
  104. package/dist/rl.d.ts.map +1 -1
  105. package/dist/rl.js +5 -4
  106. package/dist/rl.js.map +1 -1
  107. package/dist/{rubric-predictive-validity-noY7uE03.d.ts → rubric-predictive-validity-Cd5SCtAf.d.ts} +58 -3
  108. package/dist/rubric-predictive-validity-Cd5SCtAf.d.ts.map +1 -0
  109. package/dist/{rubric-predictive-validity-D3_oI72N.js → rubric-predictive-validity-CeKW2GQN.js} +3 -77
  110. package/dist/rubric-predictive-validity-CeKW2GQN.js.map +1 -0
  111. package/dist/search/index.d.ts +2 -2
  112. package/dist/{search-kernel-Dloxd6gs.d.ts → search-kernel-C6__V0IS.d.ts} +2 -2
  113. package/dist/{search-kernel-Dloxd6gs.d.ts.map → search-kernel-C6__V0IS.d.ts.map} +1 -1
  114. package/dist/{skillopt-optimization-method-DLKqdhcR.js → skillopt-optimization-method-D21dH_Bh.js} +4 -4
  115. package/dist/{skillopt-optimization-method-DLKqdhcR.js.map → skillopt-optimization-method-D21dH_Bh.js.map} +1 -1
  116. package/dist/{statistical-heldout-3z3I-kJN.d.ts → statistical-heldout-pD1Yah-0.d.ts} +58 -8
  117. package/dist/statistical-heldout-pD1Yah-0.d.ts.map +1 -0
  118. package/dist/{store-otlp-dyWE3wAG.js → store-otlp-BVZfR168.js} +2 -2
  119. package/dist/{store-otlp-dyWE3wAG.js.map → store-otlp-BVZfR168.js.map} +1 -1
  120. package/dist/{store-tool-spans-DIUgZbzu.js → store-tool-spans-CjYiF4fF.js} +3 -3
  121. package/dist/{store-tool-spans-DIUgZbzu.js.map → store-tool-spans-CjYiF4fF.js.map} +1 -1
  122. package/dist/{store-tool-spans-DPwXHQkH.d.ts → store-tool-spans-DfnwWMFR.d.ts} +4 -4
  123. package/dist/{store-tool-spans-DPwXHQkH.d.ts.map → store-tool-spans-DfnwWMFR.d.ts.map} +1 -1
  124. package/dist/{summary-report-BsXJoYX5.js → summary-report-DHDWxe6p.js} +3 -3
  125. package/dist/{summary-report-BsXJoYX5.js.map → summary-report-DHDWxe6p.js.map} +1 -1
  126. package/dist/systemone-D3MrW63C.d.ts +400 -0
  127. package/dist/systemone-D3MrW63C.d.ts.map +1 -0
  128. package/dist/{systemone-protocol-DKoi1NdK.d.ts → systemone-protocol-Bl2EI2KQ.d.ts} +4 -2
  129. package/dist/{systemone-protocol-DKoi1NdK.d.ts.map → systemone-protocol-Bl2EI2KQ.d.ts.map} +1 -1
  130. package/dist/systemone-protocol.d.ts +2 -2
  131. package/dist/systemone-protocol.js +7 -7
  132. package/dist/systemone-protocol.js.map +1 -1
  133. package/dist/{systemone-review-CUBMuTLi.d.ts → systemone-review-C8DRiT_-.d.ts} +3 -3
  134. package/dist/{systemone-review-CUBMuTLi.d.ts.map → systemone-review-C8DRiT_-.d.ts.map} +1 -1
  135. package/dist/{systemone-review-DzdOJ8I6.js → systemone-review-DFGtIUcf.js} +2 -2
  136. package/dist/{systemone-review-DzdOJ8I6.js.map → systemone-review-DFGtIUcf.js.map} +1 -1
  137. package/dist/systemone.d.ts +5 -5
  138. package/dist/systemone.js +5 -343
  139. package/dist/{tool-groups-LISbBWCg.d.ts → tool-groups-DK1bu5TD.d.ts} +3 -3
  140. package/dist/tool-groups-DK1bu5TD.d.ts.map +1 -0
  141. package/dist/{trace-questions-C42fYEE4.d.ts → trace-questions-D_OKYZ6u.d.ts} +3 -3
  142. package/dist/{trace-questions-C42fYEE4.d.ts.map → trace-questions-D_OKYZ6u.d.ts.map} +1 -1
  143. package/dist/trace-repair/index.d.ts +1 -1
  144. package/dist/traces.d.ts +3 -3
  145. package/dist/traces.js +3 -3
  146. package/dist/{types-DqFMNTgK.js → types-CnWmj8NW.js} +19 -6
  147. package/dist/types-CnWmj8NW.js.map +1 -0
  148. package/dist/{types-CHfn1zg5.d.ts → types-DDKfH-N6.d.ts} +2 -2
  149. package/dist/{types-CHfn1zg5.d.ts.map → types-DDKfH-N6.d.ts.map} +1 -1
  150. package/dist/{types-8yQzNm8u.d.ts → types-DGImvHIr.d.ts} +150 -4
  151. package/dist/types-DGImvHIr.d.ts.map +1 -0
  152. package/dist/{types-D8GXK9Z5.d.ts → types-IERw_HxR.d.ts} +2 -2
  153. package/dist/{types-D8GXK9Z5.d.ts.map → types-IERw_HxR.d.ts.map} +1 -1
  154. package/dist/wire/index.d.ts +1 -1
  155. package/docs/behavioral-trace-questions.md +99 -0
  156. package/docs/experiment.md +27 -0
  157. package/docs/finding-layers.md +54 -1
  158. package/docs/systemone.md +107 -0
  159. package/package.json +4 -4
  160. package/dist/benchmark-command-Dx0E4a6z.js.map +0 -1
  161. package/dist/completion-verifier-Cigap8CG.js.map +0 -1
  162. package/dist/default-registry-Cwg_QN3d.d.ts +0 -70
  163. package/dist/default-registry-Cwg_QN3d.d.ts.map +0 -1
  164. package/dist/default-registry-ovrIBGmH.js.map +0 -1
  165. package/dist/evaluation.js.map +0 -1
  166. package/dist/index-CVFStrQD.d.ts.map +0 -1
  167. package/dist/judge-gate-Dc_mXQsL.d.ts +0 -453
  168. package/dist/judge-gate-Dc_mXQsL.d.ts.map +0 -1
  169. package/dist/meta-eval/index.d.ts.map +0 -1
  170. package/dist/outcome-store-CNt4iZ67.d.ts +0 -58
  171. package/dist/outcome-store-CNt4iZ67.d.ts.map +0 -1
  172. package/dist/paired-arms-Ct4LTKc1.js.map +0 -1
  173. package/dist/rubric-predictive-validity-D3_oI72N.js.map +0 -1
  174. package/dist/rubric-predictive-validity-noY7uE03.d.ts.map +0 -1
  175. package/dist/statistical-heldout-3z3I-kJN.d.ts.map +0 -1
  176. package/dist/systemone-DVA7t76V.d.ts +0 -135
  177. package/dist/systemone-DVA7t76V.d.ts.map +0 -1
  178. package/dist/systemone.js.map +0 -1
  179. package/dist/tool-groups-LISbBWCg.d.ts.map +0 -1
  180. package/dist/types-8yQzNm8u.d.ts.map +0 -1
  181. package/dist/types-DqFMNTgK.js.map +0 -1
package/docs/systemone.md CHANGED
@@ -96,6 +96,26 @@ probabilities are not calibrated domain confidence, and a result never authorize
96
96
  sending, deletion, or another effect. Re-assessing the same prepared input and retained answer is
97
97
  an offline replay, not new inference.
98
98
 
99
+ ## Rationale and evidence limits
100
+
101
+ The native request and answer types in [`systemone-protocol.ts`](../src/systemone-protocol.ts)
102
+ declare no free-form rationale, generated evidence URI, or extracted text-span field.
103
+ Instructions asking for an explanation do not establish a supported output contract.
104
+ Do not issue a second explanation call to fill this gap.
105
+
106
+ The same request can include another named `choice` question whose criteria keys are
107
+ caller-supplied evidence IDs, including an explicit unresolved option. DomainMatch already
108
+ uses this pattern for source selection. The answer selects from that finite set; it does
109
+ not establish that the selected source caused or justifies another answer. Persist the
110
+ immutable ID-to-source mapping with the decision (as behavioral trace definitions do), or in
111
+ retained evidence referenced by the invocation's `evidenceRefs`.
112
+ The journal stores state/input digests, so a mapping held only in `state` cannot support
113
+ later inspection. Grounding and calibration require independent checks.
114
+
115
+ Native response extensions may survive parsing into the evaluator's returned raw value.
116
+ That does not promise the provider generates them or that downstream records retain them.
117
+ The declared protocol and each consumer's persistence schema determine what survives.
118
+
99
119
  ## Providers, rounding and confidence
100
120
 
101
121
  The wire format is the same for every provider; how each reports its numbers is not. A
@@ -236,3 +256,90 @@ rubric lives in `examples/`, not the generic implementation, and is not a defaul
236
256
  Protocol: https://docs.typesafe.ai/api
237
257
  Clef: https://developers.cloudflare.com/workers-ai/models/clef/
238
258
  SDK (optional builders): https://github.com/typesafe-ai/typesafe-sdk-js
259
+
260
+ ## Decision points
261
+
262
+ `decisionPoint` from `/systemone` adds durable routing to the evaluator. A point
263
+ serves many `layers`; each invocation names its current layer and consumer.
264
+ The same layer can use many points. Questions use typed choices; policies map
265
+ every option to `act` (with a route), `escalate`, or `record`, with probability
266
+ and margin thresholds per question. These are recommendations; the consumer
267
+ performs and records the actual action. An escalation in any question takes
268
+ precedence over `act`, which takes precedence over `record`.
269
+
270
+ Use this for judgment over unstructured state only when a wrong recommendation
271
+ is cheap and reversible and uncertainty can reach an agent or a human. It never
272
+ grants authority to delete, deploy, merge, retire, lift a stand-down, or override
273
+ an acceptance check. Code continues to read objective facts directly. Sample or
274
+ trigger these calls instead of evaluating every event. Existing DomainMatch
275
+ continues to supply its domain-specific request and assessment; this primitive
276
+ uses the same native evaluator and answer validation, not another model adapter.
277
+
278
+ A policy may drive a route only with independent labeled evidence: positive
279
+ `gold_n`, finite Cohen κ meeting `DECISION_POINT_MIN_KAPPA` (owned in
280
+ [`decision-point.ts`](../src/decision-point.ts)) and `evidenceRefs`.
281
+ `decisionQuestionDigest({ id, version, model, servedModel, name, question })` binds that
282
+ evidence to the authored question, option order and model. Changed served model
283
+ identity, absent/stale calibration, ties and below-threshold answers escalate.
284
+ κ measures label agreement; the joined outcome curve measures probability
285
+ reliability. Do not describe one as proof of the other.
286
+
287
+ Supply `ledger: openFindingsLedger({ path })` from `/analyst` and the existing
288
+ `SystemOneEvaluatorOptions` as `evaluator`. `decide` accepts `runId`,
289
+ `invocationId`, `layer`, `consumer`, `state`, `scope`, `at`, and `evidenceRefs`,
290
+ plus the existing evaluation context for cancellation, spending and receipts.
291
+ Inspect the typed `succeeded` result before reading its `value`.
292
+
293
+ The findings ledger is the sole persistence owner. Every invocation first
294
+ appends a 1.1.0 intent with a unique owner token. Competing callers cannot both
295
+ infer. Completed calls record state/input/definition digests, the policy and
296
+ calibration identity, requested/served model, probabilities, recommendation and
297
+ receipt. Failed or cancelled evaluations record escalation with accounting when
298
+ available. A persistence failure returns a typed error and withholds action.
299
+ Exact `(point id, runId, invocationId)` replay reuses the original result, across
300
+ restart; changed inputs or definitions conflict. The input includes its original
301
+ `at`, so callers retain it. An intent without a result remains explicit and
302
+ escalates; deliberate recovery uses a new invocation id instead of silently
303
+ repeating a possibly paid call. The journal's normal lock/dead-owner rules apply.
304
+
305
+ Decision records persist each named choice and its probabilities, so an explicit
306
+ evidence-ID question uses the same ledger and replay path. They do not automatically
307
+ retain arbitrary native response extensions or convert a selected ID into an `EvidenceRef`.
308
+ The record's `reason` (for example, `uncalibrated`) is a computed policy reason, not a
309
+ model-authored rationale; the receipt records accounting. Each additional routing question
310
+ needs its own policy and calibration, and an uncalibrated routing question escalates the invocation.
311
+ An explicitly `recordOnly: true` policy captures an ancillary choice without routing authority:
312
+ all its options must use `action: 'record'`, and it cannot carry a calibration certificate.
313
+ Its answer has `reason: 'record-only'`; provider failures still escalate. This policy does
314
+ not bypass the calibration or thresholds of another question. Reliability lists these questions
315
+ in `recordOnlyQuestions` and excludes them from outcome completeness and calibration curves;
316
+ a fully labeled decision needs at least one answered routing question.
317
+
318
+ `reliability()` groups the exact `definitionDigest`, including option sets and any retained
319
+ source map. Distinct window maps therefore do not form a cross-window probability curve.
320
+ For behavioral trace questions, use `calibrateBehavioralTraceQuestions` for semantic nominal
321
+ agreement across maps; it binds the stable semantic question digest and reports each disagreement's
322
+ selected event and map. A one-map result does not justify probability threshold tuning.
323
+
324
+ Call `observe({ runId, invocationId, labels, at, evidenceRefs })` later to join
325
+ independently observed option labels to a decision. This is the answer's truth,
326
+ not whether a downstream workflow happened to succeed. Retain the original
327
+ observation timestamp for exact replay. Conflicting labels refuse append.
328
+ `reliability()` reads the same ledger and returns total decisions, labeled and
329
+ missing outcomes, and per-question sample counts, empirical curves and threshold
330
+ accuracy. A curve needs two labels; otherwise it is `null`. Threshold tables are
331
+ development evidence for an explicit policy revision and fresh confirmation,
332
+ not automatic tuning or activation. Failed calls remain in the denominator.
333
+
334
+ Decision findings retain their measured layer and scope. The existing `/analyst`
335
+ `promote` is the only owner for generalizing claims; it does not authorize
336
+ routing and does not lift event/turn findings directly into run-level claims.
337
+
338
+ The data model permits many-to-many associations. The only intentional
339
+ one-to-one rules are one primary measure per hypothesis (to prevent choosing
340
+ a winner after seeing outcomes), with any number of secondary measures, and
341
+ one implementation per code concept (to prevent divergent owners).
342
+
343
+ Decision-point construction validates the complete calibration object, including nonempty structured evidence references, before any inference. Malformed configuration throws; well-formed evidence below the calibration bar still escalates. `observe()` returns a typed `invalid` result for uncloneable, noncanonical or malformed observation data without appending an outcome. A provider identity with surrounding whitespace is rejected as a failed evaluation; its durable escalation replays and remains readable by reliability reporting.
344
+
345
+ The existing behavioral analyst optionally applies bounded [trace questions](behavioral-trace-questions.md) through decision points; exact repeated tool calls stay computed.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tangle-network/agent-eval",
3
- "version": "0.220.2",
3
+ "version": "0.221.1",
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": {
@@ -229,15 +229,15 @@
229
229
  "dependencies": {
230
230
  "@asteasolutions/zod-to-openapi": "^9.1.0",
231
231
  "@hono/node-server": "^2.1.1",
232
- "@tangle-network/agent-core": "^0.13.1",
233
- "@tangle-network/agent-interface": "^5.0.0",
232
+ "@tangle-network/agent-core": "^0.13.2",
233
+ "@tangle-network/agent-interface": "^5.7.1",
234
234
  "@tangle-network/agent-trace-contract": "^2.0.0",
235
235
  "@tangle-network/harness-sessions": ">=0.1.0 <0.2.0",
236
236
  "hono": "^4.13.9",
237
237
  "linear-sum-assignment": "1.0.9",
238
238
  "re2js": "2.8.6",
239
239
  "smol-toml": "1.9.0",
240
- "zod": "4.6.5"
240
+ "zod": "4.6.6"
241
241
  },
242
242
  "devDependencies": {
243
243
  "@arethetypeswrong/cli": "^0.18.5",