@danceiny/gotry 0.0.1-rc.21 → 0.0.1-rc.24

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 (327) hide show
  1. package/README.md +102 -194
  2. package/README.zh-CN.md +115 -210
  3. package/bin/gotry-backend.js +53 -0
  4. package/bin/gotry-bootstrap.js +466 -35
  5. package/bin/gotry-inner.js +255 -36
  6. package/bin/gotry-process-liveness.d.ts +27 -0
  7. package/bin/gotry-process-liveness.js +97 -0
  8. package/bin/gotry-runtime-resolution.d.ts +1 -1
  9. package/bin/gotry-runtime-resolution.js +2 -2
  10. package/client/client.js +174 -0
  11. package/cordis.gotry-patch.yml +70 -93
  12. package/dist/capabilities/agent-reach-deep.js +45 -122
  13. package/dist/capabilities/agent-reach.js +63 -148
  14. package/dist/capabilities/anything.js +89 -75
  15. package/dist/capabilities/artifacts.js +123 -104
  16. package/dist/capabilities/channel-health.js +65 -45
  17. package/dist/capabilities/channel-registry.js +108 -87
  18. package/dist/capabilities/doctor.js +357 -235
  19. package/dist/capabilities/effect.js +223 -309
  20. package/dist/capabilities/fact-log.js +28 -14
  21. package/dist/capabilities/flyai.js +245 -156
  22. package/dist/capabilities/ground-transfer.js +509 -0
  23. package/dist/capabilities/hbcli.js +144 -148
  24. package/dist/capabilities/hotelbyte-transaction.js +194 -0
  25. package/dist/capabilities/incident-log.js +131 -61
  26. package/dist/capabilities/model-override.js +30 -10
  27. package/dist/capabilities/opensky.js +54 -43
  28. package/dist/capabilities/resilience.js +50 -32
  29. package/dist/capabilities/session/action-cache.js +50 -44
  30. package/dist/capabilities/session/adapters/ctrip-flight.js +119 -62
  31. package/dist/capabilities/session/adapters/ctrip-hotel.js +125 -110
  32. package/dist/capabilities/session/adapters/dida-portal.js +206 -0
  33. package/dist/capabilities/session/adapters/meituan-local.js +35 -54
  34. package/dist/capabilities/session/adapters/rail-12306.js +169 -112
  35. package/dist/capabilities/session/benchmark.js +85 -149
  36. package/dist/capabilities/session/extension-bridge.js +320 -259
  37. package/dist/capabilities/session/extension-channel.js +57 -76
  38. package/dist/capabilities/session/extension-distribution.js +115 -119
  39. package/dist/capabilities/session/extract.js +31 -21
  40. package/dist/capabilities/session/golden-score.js +55 -33
  41. package/dist/capabilities/session/health-watch.js +146 -154
  42. package/dist/capabilities/session/read-guard.js +55 -47
  43. package/dist/capabilities/session/static-flight-golden.js +49 -36
  44. package/dist/capabilities/session/transport.js +54 -61
  45. package/dist/capabilities/session/wizard.js +63 -93
  46. package/dist/capabilities/session-consent.js +143 -47
  47. package/dist/capabilities/session-login.js +95 -126
  48. package/dist/capabilities/session-search.js +391 -253
  49. package/dist/capabilities/sponsor-plugin.js +341 -0
  50. package/dist/capabilities/visa-policy.js +87 -73
  51. package/dist/capabilities/weather.js +163 -235
  52. package/dist/scripts/action-cache-tests.js +24 -59
  53. package/dist/scripts/agent-planning-turn-deadline-e2e.js +91 -142
  54. package/dist/scripts/agent-planning-turn-deadline-tests.js +80 -176
  55. package/dist/scripts/agent-reach-deep-tests.js +30 -40
  56. package/dist/scripts/agent-reach-tests.js +26 -18
  57. package/dist/scripts/agent-reach-wrapper-tests.js +46 -50
  58. package/dist/scripts/anything-tests.js +58 -62
  59. package/dist/scripts/artifact-client-contract-tests.js +69 -0
  60. package/dist/scripts/artifacts-capability-tests.js +235 -0
  61. package/dist/scripts/async-collect.js +26 -15
  62. package/dist/scripts/benchmark-environment-bridge-e2e.js +287 -684
  63. package/dist/scripts/benchmark-environment-bridge-tests.js +818 -3123
  64. package/dist/scripts/booking-copilot-availability-ledger-binding-tests.js +66 -279
  65. package/dist/scripts/booking-copilot-availability-policy-tests.js +153 -1257
  66. package/dist/scripts/booking-copilot-bin-proof-tests.js +22 -45
  67. package/dist/scripts/booking-copilot-crossrepo-fixture-server.js +64 -76
  68. package/dist/scripts/booking-copilot-dsh-core-proof-tests.js +69 -199
  69. package/dist/scripts/booking-copilot-dsh-planner-proof-tests.js +393 -759
  70. package/dist/scripts/booking-copilot-dsh-plugin-proof-tests.js +33 -75
  71. package/dist/scripts/booking-copilot-event-sequence-concurrency-proof-tests.js +60 -110
  72. package/dist/scripts/booking-copilot-gap-code-contract-proof-tests.js +28 -66
  73. package/dist/scripts/booking-copilot-operation-ledger-concurrency-proof-tests.js +72 -271
  74. package/dist/scripts/booking-copilot-receipt-ledger-concurrency-proof-tests.js +73 -275
  75. package/dist/scripts/booking-copilot-runtime-proof-tests.js +784 -3398
  76. package/dist/scripts/booking-copilot-server-proof-tests.js +63 -168
  77. package/dist/scripts/booking-copilot-startup-proof-tests.js +38 -124
  78. package/dist/scripts/booking-executor-tests.js +80 -0
  79. package/dist/scripts/booking-recovery-chain-tests.js +182 -0
  80. package/dist/scripts/booking-saga-tests.js +61 -123
  81. package/dist/scripts/booking-surface-contract-proof-tests.js +152 -1167
  82. package/dist/scripts/bootstrap-tests.js +1383 -128
  83. package/dist/scripts/build-changelog.js +89 -130
  84. package/dist/scripts/build-metrics-report.js +135 -143
  85. package/dist/scripts/changelog-tests.js +35 -82
  86. package/dist/scripts/channel-probe-tests.js +44 -116
  87. package/dist/scripts/channel-probe.js +84 -167
  88. package/dist/scripts/channel-registry-tests.js +97 -185
  89. package/dist/scripts/companion-tests.js +25 -70
  90. package/dist/scripts/dida-cookie-probe.js +87 -0
  91. package/dist/scripts/dida-sw-probe.js +114 -0
  92. package/dist/scripts/diff-test.js +17 -12
  93. package/dist/scripts/doctor-tests.js +428 -120
  94. package/dist/scripts/dsh-artifact-e2e.js +150 -0
  95. package/dist/scripts/dsh-artifact-web-e2e.js +443 -0
  96. package/dist/scripts/dsh-http-proxy-sse-proof.js +90 -0
  97. package/dist/scripts/dsh-runtime-closure-tests.js +110 -153
  98. package/dist/scripts/dsh-runtime-closure.js +75 -63
  99. package/dist/scripts/dsh-session-v3-migration-proof.js +106 -0
  100. package/dist/scripts/dsh-subprocess-local-proof.js +149 -0
  101. package/dist/scripts/dsh-target-closure-proof.js +178 -0
  102. package/dist/scripts/effect-tests.js +165 -552
  103. package/dist/scripts/engine-run.js +1 -3
  104. package/dist/scripts/engine-tests.js +16 -10
  105. package/dist/scripts/evaluation-cadence-tests.js +69 -242
  106. package/dist/scripts/evaluation-contract-tests.js +193 -499
  107. package/dist/scripts/extension-distribution-cli.js +19 -15
  108. package/dist/scripts/extension-distribution-tests.js +98 -211
  109. package/dist/scripts/extension-tests.js +366 -389
  110. package/dist/scripts/fact-gate-tests.js +725 -263
  111. package/dist/scripts/fixtures/extension-bridge-unref-child.mjs +21 -0
  112. package/dist/scripts/flight-hotel-anchor-363-registered-e2e.js +169 -0
  113. package/dist/scripts/flight-malformed-tests.js +159 -0
  114. package/dist/scripts/flyai-tests.js +325 -68
  115. package/dist/scripts/g5-guard-tests.js +131 -0
  116. package/dist/scripts/g5-guard.js +189 -0
  117. package/dist/scripts/gen-lunar-anchors.js +106 -0
  118. package/dist/scripts/gotry-backend-kernel-tests.js +79 -0
  119. package/dist/scripts/ground-transfer-tests.js +956 -0
  120. package/dist/scripts/hbcli-e2e-tests.js +71 -90
  121. package/dist/scripts/hbcli-live-optin-tests.js +96 -0
  122. package/dist/scripts/hbcli-release-contract-tests.js +122 -0
  123. package/dist/scripts/hbcli-tests.js +41 -115
  124. package/dist/scripts/health-watch-cli.js +42 -28
  125. package/dist/scripts/hotel-date-gate-tests.js +496 -0
  126. package/dist/scripts/hotelbyte-reconcile-tests.js +141 -0
  127. package/dist/scripts/hotelbyte-spawn-e2e-tests.js +373 -0
  128. package/dist/scripts/i18n-tests.js +16 -9
  129. package/dist/scripts/incident-tests.js +281 -87
  130. package/dist/scripts/issue-194-job-id-guard-tests.js +106 -0
  131. package/dist/scripts/issue-233-cancel-refund-commission-tests.js +392 -0
  132. package/dist/scripts/issue-271-liveness-tests.js +547 -0
  133. package/dist/scripts/issue-289-model-retry-real-tests.js +296 -0
  134. package/dist/scripts/issue-289-model-retry-tests.js +441 -0
  135. package/dist/scripts/issue-289-web-retry-e2e.js +630 -0
  136. package/dist/scripts/issue-338-home-city-e2e.js +577 -0
  137. package/dist/scripts/issue343-real-entry-e2e.js +160 -0
  138. package/dist/scripts/journey-tests.js +22 -27
  139. package/dist/scripts/kernel-manifest-evidence.js +109 -0
  140. package/dist/scripts/kernel-manifest-gate.js +126 -0
  141. package/dist/scripts/kernel-manifest-tests.js +212 -0
  142. package/dist/scripts/kernel-manifest-trace-entry.js +7 -0
  143. package/dist/scripts/kernel-manifest-trace-hook.mjs +28 -0
  144. package/dist/scripts/kernel-manifest.js +369 -0
  145. package/dist/scripts/ledger-repair-apply-tests.js +316 -0
  146. package/dist/scripts/ledger-repair-plan-tests.js +375 -0
  147. package/dist/scripts/ledger-tests.js +325 -340
  148. package/dist/scripts/ledger-workflow-crash.js +10 -20
  149. package/dist/scripts/map-tools-vendor-package-proof.js +206 -134
  150. package/dist/scripts/memory-capture-tests.js +242 -61
  151. package/dist/scripts/memory-decay-tests.js +18 -52
  152. package/dist/scripts/memory-lifecycle-tests.js +657 -0
  153. package/dist/scripts/memory-lifecycle.js +196 -0
  154. package/dist/scripts/memory-metrics.js +24 -12
  155. package/dist/scripts/memory-value-report.js +474 -222
  156. package/dist/scripts/memory-value-tests.js +328 -0
  157. package/dist/scripts/metrics-report-tests.js +62 -199
  158. package/dist/scripts/model-override-e2e.js +66 -105
  159. package/dist/scripts/nightly-evidence-tests.js +64 -89
  160. package/dist/scripts/nightly-evidence.js +108 -111
  161. package/dist/scripts/nudge-digest.js +39 -28
  162. package/dist/scripts/onboarding-tests.js +63 -88
  163. package/dist/scripts/opensky-check.js +18 -13
  164. package/dist/scripts/opensky-tests.js +28 -28
  165. package/dist/scripts/persona-surface-guard-tests.js +37 -12
  166. package/dist/scripts/pnpm-dsh-closure-proof.js +2 -5
  167. package/dist/scripts/policy-anchor-359-registered-e2e.js +214 -0
  168. package/dist/scripts/price-drift-tests.js +126 -227
  169. package/dist/scripts/price-drift-watch.js +209 -253
  170. package/dist/scripts/probe-poi-tests.js +52 -45
  171. package/dist/scripts/product-metrics.js +187 -273
  172. package/dist/scripts/publish-preverify.js +47 -41
  173. package/dist/scripts/realtime-pricing-tests.js +37 -76
  174. package/dist/scripts/replay-async.js +20 -18
  175. package/dist/scripts/replay-real.js +16 -18
  176. package/dist/scripts/replay.js +52 -82
  177. package/dist/scripts/session-attach-diagnose.js +16 -12
  178. package/dist/scripts/session-attach-poc.js +34 -37
  179. package/dist/scripts/session-benchmark.js +66 -147
  180. package/dist/scripts/session-dida-live-e2e.js +151 -0
  181. package/dist/scripts/session-extract-tests.js +14 -35
  182. package/dist/scripts/session-login.js +14 -13
  183. package/dist/scripts/session-tests.js +545 -583
  184. package/dist/scripts/sf-live-benchmark.js +92 -110
  185. package/dist/scripts/sf-live-cli-tests.js +2 -9
  186. package/dist/scripts/sf-soft-score-tests.js +19 -60
  187. package/dist/scripts/sf-summary-tests.js +149 -0
  188. package/dist/scripts/sf-summary.js +466 -84
  189. package/dist/scripts/skeleton-check.js +16 -14
  190. package/dist/scripts/skeleton-integration-test.js +11 -10
  191. package/dist/scripts/skills-contract-tests.js +51 -46
  192. package/dist/scripts/smoke-session-gate-tests.js +12 -20
  193. package/dist/scripts/smoke.js +541 -422
  194. package/dist/scripts/sponsor-reuse-tests.js +262 -0
  195. package/dist/scripts/state-cli-tests.js +226 -101
  196. package/dist/scripts/state-cli.js +549 -212
  197. package/dist/scripts/static-golden-tests.js +46 -180
  198. package/dist/scripts/time-eval-tests.js +210 -192
  199. package/dist/scripts/travel-timeline-tests.js +29 -93
  200. package/dist/scripts/turn-handoff-collect-tests.js +46 -93
  201. package/dist/scripts/turn-handoff-collect.js +71 -99
  202. package/dist/scripts/turn-policy-tests.js +28 -29
  203. package/dist/scripts/typed-contract-canary.js +77 -162
  204. package/dist/scripts/tz-resolver-sanity.js +50 -0
  205. package/dist/scripts/tz-resolver-tests.js +584 -0
  206. package/dist/scripts/unified-tests.js +23 -19
  207. package/dist/scripts/visa-policy-tests.js +31 -44
  208. package/dist/scripts/weather-tests.js +121 -543
  209. package/dist/scripts/wish-channel-gate-tests.js +29 -86
  210. package/dist/scripts/write-gate-tests.js +522 -0
  211. package/dist/scripts/z3-lifecycle-fault-tests.js +188 -0
  212. package/dist/scripts/z3-lifecycle-tests.js +170 -0
  213. package/dist/scripts/z3-race-repeat-tests.js +39 -0
  214. package/dist/scripts/z3-race-tests.js +18 -12
  215. package/dist/src/artifact-gate.js +652 -221
  216. package/dist/src/backend/kernel.js +91 -0
  217. package/dist/src/backend/modules/booking-copilot.js +55 -0
  218. package/dist/src/backend/modules/booking-executor.js +124 -0
  219. package/dist/src/backend/modules/session-search.js +194 -0
  220. package/dist/src/benchmark-agent-conformance.js +296 -262
  221. package/dist/src/benchmark-environment-bridge.js +298 -413
  222. package/dist/src/benchmark-headless-child-diagnostics.js +93 -100
  223. package/dist/src/benchmark-tool-isolation.js +94 -67
  224. package/dist/src/bookable-facts.js +299 -174
  225. package/dist/src/booking-saga.js +64 -120
  226. package/dist/src/booking-surface/availability-policy.js +443 -576
  227. package/dist/src/booking-surface/cancel-refund-commission.js +379 -0
  228. package/dist/src/booking-surface/contracts.js +24 -80
  229. package/dist/src/booking-surface/dsh-planner.js +510 -281
  230. package/dist/src/booking-surface/dsh-plugin.js +17 -1
  231. package/dist/src/booking-surface/error-codes.js +82 -10
  232. package/dist/src/booking-surface/index.js +0 -3
  233. package/dist/src/booking-surface/profile.js +10 -54
  234. package/dist/src/booking-surface/recovery-chain.js +367 -0
  235. package/dist/src/booking-surface/runtime.js +765 -891
  236. package/dist/src/booking-surface/server.js +200 -251
  237. package/dist/src/booking-surface/startup.js +58 -54
  238. package/dist/src/booking-surface/validation.js +150 -218
  239. package/dist/src/bridge.js +20 -13
  240. package/dist/src/companions.js +48 -74
  241. package/dist/src/contracts.js +21 -43
  242. package/dist/src/dsh-llm.js +82 -120
  243. package/dist/src/engine.js +253 -239
  244. package/dist/src/evaluation-cadence.js +72 -209
  245. package/dist/src/evaluation-contracts.js +220 -843
  246. package/dist/src/flight-pack-adapter.js +54 -0
  247. package/dist/src/flight-pack-contract.js +2 -0
  248. package/dist/src/gotry-backend.js +70 -0
  249. package/dist/src/hotel-date-gate.js +118 -0
  250. package/dist/src/i18n.js +18 -7
  251. package/dist/src/index.js +1425 -1629
  252. package/dist/src/journey.js +132 -81
  253. package/dist/src/ledger-repair-apply.js +538 -0
  254. package/dist/src/ledger-repair-plan.js +463 -0
  255. package/dist/src/loop.js +257 -166
  256. package/dist/src/memory-capture.js +180 -32
  257. package/dist/src/memory-decay.js +30 -14
  258. package/dist/src/memory-lifecycle.js +1310 -0
  259. package/dist/src/memory-utility.js +27 -40
  260. package/dist/src/mock-llm.js +36 -61
  261. package/dist/src/model.js +81 -36
  262. package/dist/src/realtime-pricing.js +63 -72
  263. package/dist/src/slot-spec.js +84 -106
  264. package/dist/src/state-ledger.js +310 -471
  265. package/dist/src/subagent-job-id-guard.js +58 -0
  266. package/dist/src/time-anchor.js +231 -33
  267. package/dist/src/tool-packet.js +20 -8
  268. package/dist/src/travel-slots.js +58 -35
  269. package/dist/src/travel-timeline.js +44 -63
  270. package/dist/src/turn-deadline.js +121 -127
  271. package/dist/src/turn-policy.js +61 -89
  272. package/dist/src/tz-resolver.js +143 -0
  273. package/dist/src/unified.js +504 -381
  274. package/dist/src/wish-pool.js +39 -14
  275. package/dist/src/write-gate.js +495 -0
  276. package/dist/src/z3-shared.js +273 -7
  277. package/extension/README.md +4 -3
  278. package/extension/background.js +125 -14
  279. package/extension/content-bridge.js +23 -1
  280. package/extension/content-main.js +15 -4
  281. package/extension/manifest.json +16 -8
  282. package/package.json +251 -220
  283. package/ts/capabilities/agent-reach.ts +4 -4
  284. package/ts/capabilities/anything.ts +1 -1
  285. package/ts/capabilities/artifacts.ts +46 -9
  286. package/ts/capabilities/flyai.ts +156 -37
  287. package/ts/capabilities/hbcli.ts +1 -1
  288. package/ts/capabilities/incident-log.ts +88 -59
  289. package/ts/capabilities/session/adapters/ctrip-flight.ts +99 -36
  290. package/ts/capabilities/session/adapters/dida-portal.ts +250 -0
  291. package/ts/capabilities/session/adapters/rail-12306.ts +123 -24
  292. package/ts/capabilities/session/extension-bridge.ts +226 -101
  293. package/ts/capabilities/session/extension-channel.ts +22 -9
  294. package/ts/capabilities/session/wizard.ts +2 -2
  295. package/ts/capabilities/session-consent.ts +98 -14
  296. package/ts/capabilities/session-login.ts +1 -0
  297. package/ts/capabilities/session-search.ts +315 -31
  298. package/ts/dsh-runtime/vendor/README.md +8 -4
  299. package/ts/dsh-runtime/vendor/dsh-map-tools/README.en.md +7 -1
  300. package/ts/dsh-runtime/vendor/dsh-map-tools/README.md +5 -3
  301. package/ts/dsh-runtime/vendor/dsh-map-tools/lib/settings-ns.js +1 -1
  302. package/ts/dsh-runtime/vendor/dsh-map-tools/lib/types/settings-ns.d.ts +1 -1
  303. package/ts/dsh-runtime/vendor/dsh-map-tools/package.json +6 -6
  304. package/ts/package.json +236 -16
  305. package/ts/scripts/map-tools-vendor-package-proof.ts +152 -31
  306. package/ts/scripts/state-cli.ts +418 -51
  307. package/ts/src/artifact-gate.ts +561 -15
  308. package/ts/src/benchmark-environment-bridge.ts +37 -20
  309. package/ts/src/bookable-facts.ts +183 -7
  310. package/ts/src/booking-surface/cancel-refund-commission.ts +488 -0
  311. package/ts/src/booking-surface/dsh-planner.ts +240 -32
  312. package/ts/src/booking-surface/dsh-plugin.js +17 -1
  313. package/ts/src/booking-surface/error-codes.ts +75 -0
  314. package/ts/src/booking-surface/recovery-chain.ts +409 -0
  315. package/ts/src/booking-surface/server.ts +84 -51
  316. package/ts/src/booking-surface/validation.ts +2 -0
  317. package/ts/src/contracts.ts +12 -2
  318. package/ts/src/dsh-llm.ts +4 -8
  319. package/ts/src/index.ts +609 -90
  320. package/ts/src/loop.ts +116 -7
  321. package/ts/src/memory-capture.ts +227 -3
  322. package/ts/src/mock-llm.ts +4 -8
  323. package/ts/src/model.ts +88 -2
  324. package/ts/src/state-ledger.ts +47 -29
  325. package/ts/src/subagent-job-id-guard.ts +72 -0
  326. package/ts/src/time-anchor.ts +217 -13
  327. package/ts/src/unified.ts +316 -54
@@ -1,417 +1,118 @@
1
1
  import assert from 'node:assert/strict';
2
2
  import { createHash } from 'node:crypto';
3
3
  import { readFileSync } from 'node:fs';
4
- import { BENCHMARK_IDS, applyMutationVector, assertPublicArtifactSafe, deriveMatchedPairs, evaluationFingerprint, parseBenchmarkRegistry, parseEvalCase, parseEvalFailureCluster, parseEvalRunReceipt, parseEvaluationFoundation, parseMutationVectors, stableEvaluationJson } from '../src/evaluation-contracts.js';
5
- const load = (file)=>JSON.parse(readFileSync(file, 'utf8'));
4
+ import { BENCHMARK_IDS, applyMutationVector, assertPublicArtifactSafe, deriveMatchedPairs, evaluationFingerprint, parseBenchmarkRegistry, parseEvalCase, parseEvalFailureCluster, parseEvalRunReceipt, parseEvaluationFoundation, parseMutationVectors, stableEvaluationJson, } from '../src/evaluation-contracts.js';
5
+ const load = (file) => JSON.parse(readFileSync(file, 'utf8'));
6
6
  const registry = parseBenchmarkRegistry(load('data/evaluation/benchmark-registry.json'));
7
- assert.deepEqual(registry.map((item)=>item.benchmark_id), [
8
- ...BENCHMARK_IDS
9
- ]);
7
+ assert.deepEqual(registry.map(item => item.benchmark_id), [...BENCHMARK_IDS]);
10
8
  assert.equal(registry.length, 7);
11
- assert.deepEqual(Object.fromEntries(registry.map((item)=>[
12
- item.benchmark_id,
13
- item.native_metrics.values.map((metric)=>metric.receipt_key)
14
- ])), {
15
- trek: [
16
- 'task_perfect_feasible',
17
- 'task_perfect_infeasible',
18
- 'cat_efficiency'
19
- ],
20
- travelplanner: [
21
- 'commonsense_micro_pass_rate',
22
- 'commonsense_macro_pass_rate',
23
- 'hard_micro_pass_rate',
24
- 'hard_macro_pass_rate',
25
- 'final_pass_rate'
26
- ],
27
- chinatravel: [
28
- 'epr_micro',
29
- 'epr_macro',
30
- 'c_lpr',
31
- 'fpr',
32
- 'dav',
33
- 'att',
34
- 'ddr',
35
- 'overall_score'
36
- ],
37
- travelbench: [
38
- 'reasoning_planning_score',
39
- 'summarization_extraction_score',
40
- 'presentation_score',
41
- 'user_interaction_score',
42
- 'average_score',
43
- 'unsolved_accuracy'
44
- ],
45
- tau2: [
46
- 'avg_reward',
47
- 'pass_hat_1'
48
- ],
49
- locomo: [
50
- 'qa_f1'
51
- ],
52
- bfcl: [
53
- 'category_accuracy',
54
- 'overall_accuracy'
55
- ]
9
+ assert.deepEqual(Object.fromEntries(registry.map(item => [item.benchmark_id, item.native_metrics.values.map(metric => metric.receipt_key)])), {
10
+ trek: ['task_perfect_feasible', 'task_perfect_infeasible', 'cat_efficiency'],
11
+ travelplanner: ['commonsense_micro_pass_rate', 'commonsense_macro_pass_rate', 'hard_micro_pass_rate', 'hard_macro_pass_rate', 'final_pass_rate'],
12
+ chinatravel: ['epr_micro', 'epr_macro', 'c_lpr', 'fpr', 'dav', 'att', 'ddr', 'overall_score'],
13
+ travelbench: ['reasoning_planning_score', 'summarization_extraction_score', 'presentation_score', 'user_interaction_score', 'average_score', 'unsolved_accuracy'],
14
+ tau2: ['avg_reward', 'pass_hat_1'], locomo: ['qa_f1'], bfcl: ['category_accuracy', 'overall_accuracy'],
56
15
  });
57
- const registryFacts = Object.fromEntries(registry.map((entry)=>[
58
- entry.benchmark_id,
59
- {
60
- owner: new URL(entry.provenance.official_entry.url).pathname.split('/')[1],
61
- pins: Object.entries(entry.provenance).map(([kind, pin])=>`${kind}|${pin.url}|${pin.revision.kind}|${pin.revision.value ?? 'null'}|${pin.source_scope}`),
62
- rights: Object.entries(entry.license.upstream_rights).map(([kind, right])=>`${kind}|${right.value}|${right.determination}|${right.source_url}`),
63
- metrics: entry.native_metrics.values.map((metric)=>`${metric.receipt_key}|${metric.upstream_label}|${metric.scope}|${metric.source_url}`)
64
- }
65
- ]));
16
+ const registryFacts = Object.fromEntries(registry.map(entry => [entry.benchmark_id, {
17
+ owner: new URL(entry.provenance.official_entry.url).pathname.split('/')[1],
18
+ pins: Object.entries(entry.provenance).map(([kind, pin]) => `${kind}|${pin.url}|${pin.revision.kind}|${pin.revision.value ?? 'null'}|${pin.source_scope}`),
19
+ rights: Object.entries(entry.license.upstream_rights).map(([kind, right]) => `${kind}|${right.value}|${right.determination}|${right.source_url}`),
20
+ metrics: entry.native_metrics.values.map(metric => `${metric.receipt_key}|${metric.upstream_label}|${metric.scope}|${metric.source_url}`),
21
+ }]));
66
22
  assert.deepEqual(registryFacts, {
67
- "trek": {
68
- "owner": "TonyQJH",
69
- "pins": [
70
- "official_entry|https://github.com/TonyQJH/TREK-A-Travel-Reasoning-and-Evaluation-Kit-for-LLM-Agents-in-Complex-Trip-Planning/blob/6ceb4ebb2debd69c5c7c4ba34b5b17524756912b/README.md|git_commit|6ceb4ebb2debd69c5c7c4ba34b5b17524756912b|official definition",
71
- "data|https://github.com/TonyQJH/TREK-A-Travel-Reasoning-and-Evaluation-Kit-for-LLM-Agents-in-Complex-Trip-Planning/tree/6ceb4ebb2debd69c5c7c4ba34b5b17524756912b/api/data/v2|git_commit|6ceb4ebb2debd69c5c7c4ba34b5b17524756912b|task data v2",
72
- "evaluator|https://github.com/TonyQJH/TREK-A-Travel-Reasoning-and-Evaluation-Kit-for-LLM-Agents-in-Complex-Trip-Planning/blob/6ceb4ebb2debd69c5c7c4ba34b5b17524756912b/scoring.py|git_commit|6ceb4ebb2debd69c5c7c4ba34b5b17524756912b|official nine-dimension scoring implementation"
73
- ],
74
- "rights": [
75
- "code|MIT|declared|https://github.com/TonyQJH/TREK-A-Travel-Reasoning-and-Evaluation-Kit-for-LLM-Agents-in-Complex-Trip-Planning/blob/6ceb4ebb2debd69c5c7c4ba34b5b17524756912b/LICENSE",
76
- "data|CC-BY-4.0|declared|https://github.com/TonyQJH/TREK-A-Travel-Reasoning-and-Evaluation-Kit-for-LLM-Agents-in-Complex-Trip-Planning/blob/6ceb4ebb2debd69c5c7c4ba34b5b17524756912b/README.md#data-and-license",
77
- "evaluator|MIT|declared|https://github.com/TonyQJH/TREK-A-Travel-Reasoning-and-Evaluation-Kit-for-LLM-Agents-in-Complex-Trip-Planning/blob/6ceb4ebb2debd69c5c7c4ba34b5b17524756912b/LICENSE"
78
- ],
79
- "metrics": [
80
- "task_perfect_feasible|task_perfect_feasible|task-perfect feasible|https://github.com/TonyQJH/TREK-A-Travel-Reasoning-and-Evaluation-Kit-for-LLM-Agents-in-Complex-Trip-Planning/blob/6ceb4ebb2debd69c5c7c4ba34b5b17524756912b/scoring.py",
81
- "task_perfect_infeasible|task_perfect_infeasible|task-perfect infeasible|https://github.com/TonyQJH/TREK-A-Travel-Reasoning-and-Evaluation-Kit-for-LLM-Agents-in-Complex-Trip-Planning/blob/6ceb4ebb2debd69c5c7c4ba34b5b17524756912b/scoring.py",
82
- "cat_efficiency|cat_efficiency|category efficiency|https://github.com/TonyQJH/TREK-A-Travel-Reasoning-and-Evaluation-Kit-for-LLM-Agents-in-Complex-Trip-Planning/blob/6ceb4ebb2debd69c5c7c4ba34b5b17524756912b/scoring.py"
83
- ]
84
- },
85
- "travelplanner": {
86
- "owner": "OSU-NLP-Group",
87
- "pins": [
88
- "official_entry|https://github.com/OSU-NLP-Group/TravelPlanner/blob/e52c87f4ac348a3410c46dc3553c519db5ec5e23/README.md|git_commit|e52c87f4ac348a3410c46dc3553c519db5ec5e23|official definition",
89
- "data|https://huggingface.co/datasets/osunlp/TravelPlanner/tree/8736504ecfc31b7f8b7e40122873c337e83fff7c|git_commit|8736504ecfc31b7f8b7e40122873c337e83fff7c|official Hugging Face dataset git revision",
90
- "evaluator|https://github.com/OSU-NLP-Group/TravelPlanner/blob/e52c87f4ac348a3410c46dc3553c519db5ec5e23/evaluation/eval.py|git_commit|e52c87f4ac348a3410c46dc3553c519db5ec5e23|official evaluator"
91
- ],
92
- "rights": [
93
- "code|MIT|declared|https://github.com/OSU-NLP-Group/TravelPlanner/blob/e52c87f4ac348a3410c46dc3553c519db5ec5e23/LICENSE",
94
- "data|CC-BY-4.0|declared|https://huggingface.co/datasets/osunlp/TravelPlanner/blob/8736504ecfc31b7f8b7e40122873c337e83fff7c/README.md",
95
- "evaluator|MIT|declared|https://github.com/OSU-NLP-Group/TravelPlanner/blob/e52c87f4ac348a3410c46dc3553c519db5ec5e23/LICENSE"
96
- ],
97
- "metrics": [
98
- "commonsense_micro_pass_rate|Commonsense Constraint Micro Pass Rate|commonsense micro|https://github.com/OSU-NLP-Group/TravelPlanner/blob/e52c87f4ac348a3410c46dc3553c519db5ec5e23/evaluation/eval.py",
99
- "commonsense_macro_pass_rate|Commonsense Constraint Macro Pass Rate|commonsense macro|https://github.com/OSU-NLP-Group/TravelPlanner/blob/e52c87f4ac348a3410c46dc3553c519db5ec5e23/evaluation/eval.py",
100
- "hard_micro_pass_rate|Hard Constraint Micro Pass Rate|hard-constraint micro|https://github.com/OSU-NLP-Group/TravelPlanner/blob/e52c87f4ac348a3410c46dc3553c519db5ec5e23/evaluation/eval.py",
101
- "hard_macro_pass_rate|Hard Constraint Macro Pass Rate|hard-constraint macro|https://github.com/OSU-NLP-Group/TravelPlanner/blob/e52c87f4ac348a3410c46dc3553c519db5ec5e23/evaluation/eval.py",
102
- "final_pass_rate|Final Pass Rate|complete itinerary|https://github.com/OSU-NLP-Group/TravelPlanner/blob/e52c87f4ac348a3410c46dc3553c519db5ec5e23/evaluation/eval.py"
103
- ]
104
- },
105
- "chinatravel": {
106
- "owner": "chinatravel-competition",
107
- "pins": [
108
- "official_entry|https://github.com/chinatravel-competition/IJCAI2026/blob/49d02bc322dda7ffbf53dfb7c3d2ced6b4bd4e8b/index.html|git_commit|49d02bc322dda7ffbf53dfb7c3d2ced6b4bd4e8b|official competition entry",
109
- "data|https://github.com/chinatravel-competition/IJCAI2026/blob/49d02bc322dda7ffbf53dfb7c3d2ced6b4bd4e8b/TPC_IJCAI_2026_phase2_familiar_100_data.zip|git_commit|49d02bc322dda7ffbf53dfb7c3d2ced6b4bd4e8b|public familiar-track archive",
110
- "evaluator|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/eval_tpc.py|git_commit|b071db251905b14002ec98e8b36afca7b6d6cd04|official TPC evaluator implementation"
111
- ],
112
- "rights": [
113
- "code|not_separately_declared|not_separately_declared|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/README.md",
114
- "data|CC-BY-NC-SA-4.0|declared|https://huggingface.co/datasets/LAMDA-NeSy/ChinaTravel/blob/44d5dbf3bba26bdf9a212c3e76d3242b67f0d349/README.md",
115
- "evaluator|not_separately_declared|not_separately_declared|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/README.md"
116
- ],
117
- "metrics": [
118
- "epr_micro|EPR-micro|element pass micro|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/eval_tpc.py",
119
- "epr_macro|EPR-macro|element pass macro|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/eval_tpc.py",
120
- "c_lpr|C-LPR|constraint-level pass|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/eval_tpc.py",
121
- "fpr|FPR|final pass|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/eval_tpc.py",
122
- "dav|DAV|Daily Average Attractions Visited|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/eval_tpc.py",
123
- "att|ATT|Averaged Transportation Time|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/eval_tpc.py",
124
- "ddr|DDR|Daily Dining Recommendations|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/eval_tpc.py",
125
- "overall_score|Overall Score|weighted overall score|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/eval_tpc.py"
126
- ]
127
- },
128
- "travelbench": {
129
- "owner": "small-xiangcheng",
130
- "pins": [
131
- "official_entry|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/README.md|git_commit|445a29d9a9b6457fc95fe647c532b6b79e21c43f|official definition",
132
- "data|https://github.com/small-xiangcheng/TravelBench/tree/445a29d9a9b6457fc95fe647c532b6b79e21c43f/datas|git_commit|445a29d9a9b6457fc95fe647c532b6b79e21c43f|official data directory",
133
- "evaluator|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/travelbench/evaluation/evaluate.py|git_commit|445a29d9a9b6457fc95fe647c532b6b79e21c43f|official evaluator"
134
- ],
135
- "rights": [
136
- "code|MIT|declared|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/LICENSE",
137
- "data|CC-BY-NC-4.0|declared|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/datas/LICENSE",
138
- "evaluator|MIT|declared|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/LICENSE"
139
- ],
140
- "metrics": [
141
- "reasoning_planning_score|reasoning_planning_score|reasoning and planning|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/travelbench/evaluation/evaluate.py",
142
- "summarization_extraction_score|summarization_extraction_score|summarization and extraction|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/travelbench/evaluation/evaluate.py",
143
- "presentation_score|presentation_score|presentation|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/travelbench/evaluation/evaluate.py",
144
- "user_interaction_score|user_interaction_score|user interaction|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/travelbench/evaluation/evaluate.py",
145
- "average_score|average_score|average across dimensions|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/travelbench/evaluation/evaluate.py",
146
- "unsolved_accuracy|unsolved_accuracy|unsolved cases|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/travelbench/evaluation/evaluate_unsolved.py"
147
- ]
148
- },
149
- "tau2": {
150
- "owner": "sierra-research",
151
- "pins": [
152
- "official_entry|https://github.com/sierra-research/tau2-bench/blob/a2c024725189473d2d7cea3a5cfdbcc67478e41f/README.md|git_commit|a2c024725189473d2d7cea3a5cfdbcc67478e41f|official definition",
153
- "data|https://github.com/sierra-research/tau2-bench/tree/a2c024725189473d2d7cea3a5cfdbcc67478e41f/data/tau2|git_commit|a2c024725189473d2d7cea3a5cfdbcc67478e41f|official data",
154
- "evaluator|https://github.com/sierra-research/tau2-bench/blob/a2c024725189473d2d7cea3a5cfdbcc67478e41f/src/tau2/metrics/agent_metrics.py|git_commit|a2c024725189473d2d7cea3a5cfdbcc67478e41f|official agent metrics implementation"
155
- ],
156
- "rights": [
157
- "code|MIT|declared|https://github.com/sierra-research/tau2-bench/blob/a2c024725189473d2d7cea3a5cfdbcc67478e41f/LICENSE",
158
- "data|not_separately_declared|not_separately_declared|https://github.com/sierra-research/tau2-bench/blob/a2c024725189473d2d7cea3a5cfdbcc67478e41f/README.md",
159
- "evaluator|MIT|declared|https://github.com/sierra-research/tau2-bench/blob/a2c024725189473d2d7cea3a5cfdbcc67478e41f/LICENSE"
160
- ],
161
- "metrics": [
162
- "avg_reward|avg_reward|average reward|https://github.com/sierra-research/tau2-bench/blob/a2c024725189473d2d7cea3a5cfdbcc67478e41f/src/tau2/metrics/agent_metrics.py",
163
- "pass_hat_1|pass^1|mean task pass^1|https://github.com/sierra-research/tau2-bench/blob/a2c024725189473d2d7cea3a5cfdbcc67478e41f/src/tau2/metrics/agent_metrics.py"
164
- ]
165
- },
166
- "locomo": {
167
- "owner": "snap-research",
168
- "pins": [
169
- "official_entry|https://github.com/snap-research/locomo/blob/3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376/README.MD|git_commit|3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376|official definition",
170
- "data|https://github.com/snap-research/locomo/blob/3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376/data/locomo10.json|git_commit|3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376|official data",
171
- "evaluator|https://github.com/snap-research/locomo/tree/3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376/task_eval|git_commit|3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376|official task evaluation directory"
172
- ],
173
- "rights": [
174
- "code|CC-BY-NC-4.0|declared|https://github.com/snap-research/locomo/blob/3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376/LICENSE.txt",
175
- "data|CC-BY-NC-4.0|declared|https://github.com/snap-research/locomo/blob/3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376/LICENSE.txt",
176
- "evaluator|CC-BY-NC-4.0|declared|https://github.com/snap-research/locomo/blob/3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376/LICENSE.txt"
177
- ],
178
- "metrics": [
179
- "qa_f1|F1|question-answering token F1|https://github.com/snap-research/locomo/blob/3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376/task_eval/evaluate_qa.py"
180
- ]
181
- },
182
- "bfcl": {
183
- "owner": "ShishirPatil",
184
- "pins": [
185
- "official_entry|https://github.com/ShishirPatil/gorilla/blob/6ea57973c7a6097fd7c5915698c54c17c5b1b6c8/berkeley-function-call-leaderboard/README.md|git_commit|6ea57973c7a6097fd7c5915698c54c17c5b1b6c8|official BFCL definition",
186
- "data|https://github.com/ShishirPatil/gorilla/tree/6ea57973c7a6097fd7c5915698c54c17c5b1b6c8/berkeley-function-call-leaderboard/bfcl_eval/data|git_commit|6ea57973c7a6097fd7c5915698c54c17c5b1b6c8|BFCL data",
187
- "evaluator|https://github.com/ShishirPatil/gorilla/tree/6ea57973c7a6097fd7c5915698c54c17c5b1b6c8/berkeley-function-call-leaderboard/bfcl_eval|git_commit|6ea57973c7a6097fd7c5915698c54c17c5b1b6c8|BFCL evaluator"
188
- ],
189
- "rights": [
190
- "code|Apache-2.0|declared|https://github.com/ShishirPatil/gorilla/blob/6ea57973c7a6097fd7c5915698c54c17c5b1b6c8/LICENSE",
191
- "data|Apache-2.0|declared|https://github.com/ShishirPatil/gorilla/blob/6ea57973c7a6097fd7c5915698c54c17c5b1b6c8/berkeley-function-call-leaderboard/README.md",
192
- "evaluator|Apache-2.0|declared|https://github.com/ShishirPatil/gorilla/blob/6ea57973c7a6097fd7c5915698c54c17c5b1b6c8/LICENSE"
193
- ],
194
- "metrics": [
195
- "category_accuracy|accuracy|per test_category|https://github.com/ShishirPatil/gorilla/blob/6ea57973c7a6097fd7c5915698c54c17c5b1b6c8/berkeley-function-call-leaderboard/bfcl_eval/eval_checker/eval_runner_helper.py",
196
- "overall_accuracy|Overall Acc|overall accuracy|https://github.com/ShishirPatil/gorilla/blob/6ea57973c7a6097fd7c5915698c54c17c5b1b6c8/berkeley-function-call-leaderboard/README.md"
197
- ]
198
- }
23
+ "trek": { "owner": "TonyQJH", "pins": ["official_entry|https://github.com/TonyQJH/TREK-A-Travel-Reasoning-and-Evaluation-Kit-for-LLM-Agents-in-Complex-Trip-Planning/blob/6ceb4ebb2debd69c5c7c4ba34b5b17524756912b/README.md|git_commit|6ceb4ebb2debd69c5c7c4ba34b5b17524756912b|official definition", "data|https://github.com/TonyQJH/TREK-A-Travel-Reasoning-and-Evaluation-Kit-for-LLM-Agents-in-Complex-Trip-Planning/tree/6ceb4ebb2debd69c5c7c4ba34b5b17524756912b/api/data/v2|git_commit|6ceb4ebb2debd69c5c7c4ba34b5b17524756912b|task data v2", "evaluator|https://github.com/TonyQJH/TREK-A-Travel-Reasoning-and-Evaluation-Kit-for-LLM-Agents-in-Complex-Trip-Planning/blob/6ceb4ebb2debd69c5c7c4ba34b5b17524756912b/scoring.py|git_commit|6ceb4ebb2debd69c5c7c4ba34b5b17524756912b|official nine-dimension scoring implementation"], "rights": ["code|MIT|declared|https://github.com/TonyQJH/TREK-A-Travel-Reasoning-and-Evaluation-Kit-for-LLM-Agents-in-Complex-Trip-Planning/blob/6ceb4ebb2debd69c5c7c4ba34b5b17524756912b/LICENSE", "data|CC-BY-4.0|declared|https://github.com/TonyQJH/TREK-A-Travel-Reasoning-and-Evaluation-Kit-for-LLM-Agents-in-Complex-Trip-Planning/blob/6ceb4ebb2debd69c5c7c4ba34b5b17524756912b/README.md#data-and-license", "evaluator|MIT|declared|https://github.com/TonyQJH/TREK-A-Travel-Reasoning-and-Evaluation-Kit-for-LLM-Agents-in-Complex-Trip-Planning/blob/6ceb4ebb2debd69c5c7c4ba34b5b17524756912b/LICENSE"], "metrics": ["task_perfect_feasible|task_perfect_feasible|task-perfect feasible|https://github.com/TonyQJH/TREK-A-Travel-Reasoning-and-Evaluation-Kit-for-LLM-Agents-in-Complex-Trip-Planning/blob/6ceb4ebb2debd69c5c7c4ba34b5b17524756912b/scoring.py", "task_perfect_infeasible|task_perfect_infeasible|task-perfect infeasible|https://github.com/TonyQJH/TREK-A-Travel-Reasoning-and-Evaluation-Kit-for-LLM-Agents-in-Complex-Trip-Planning/blob/6ceb4ebb2debd69c5c7c4ba34b5b17524756912b/scoring.py", "cat_efficiency|cat_efficiency|category efficiency|https://github.com/TonyQJH/TREK-A-Travel-Reasoning-and-Evaluation-Kit-for-LLM-Agents-in-Complex-Trip-Planning/blob/6ceb4ebb2debd69c5c7c4ba34b5b17524756912b/scoring.py"] },
24
+ "travelplanner": { "owner": "OSU-NLP-Group", "pins": ["official_entry|https://github.com/OSU-NLP-Group/TravelPlanner/blob/e52c87f4ac348a3410c46dc3553c519db5ec5e23/README.md|git_commit|e52c87f4ac348a3410c46dc3553c519db5ec5e23|official definition", "data|https://huggingface.co/datasets/osunlp/TravelPlanner/tree/8736504ecfc31b7f8b7e40122873c337e83fff7c|git_commit|8736504ecfc31b7f8b7e40122873c337e83fff7c|official Hugging Face dataset git revision", "evaluator|https://github.com/OSU-NLP-Group/TravelPlanner/blob/e52c87f4ac348a3410c46dc3553c519db5ec5e23/evaluation/eval.py|git_commit|e52c87f4ac348a3410c46dc3553c519db5ec5e23|official evaluator"], "rights": ["code|MIT|declared|https://github.com/OSU-NLP-Group/TravelPlanner/blob/e52c87f4ac348a3410c46dc3553c519db5ec5e23/LICENSE", "data|CC-BY-4.0|declared|https://huggingface.co/datasets/osunlp/TravelPlanner/blob/8736504ecfc31b7f8b7e40122873c337e83fff7c/README.md", "evaluator|MIT|declared|https://github.com/OSU-NLP-Group/TravelPlanner/blob/e52c87f4ac348a3410c46dc3553c519db5ec5e23/LICENSE"], "metrics": ["commonsense_micro_pass_rate|Commonsense Constraint Micro Pass Rate|commonsense micro|https://github.com/OSU-NLP-Group/TravelPlanner/blob/e52c87f4ac348a3410c46dc3553c519db5ec5e23/evaluation/eval.py", "commonsense_macro_pass_rate|Commonsense Constraint Macro Pass Rate|commonsense macro|https://github.com/OSU-NLP-Group/TravelPlanner/blob/e52c87f4ac348a3410c46dc3553c519db5ec5e23/evaluation/eval.py", "hard_micro_pass_rate|Hard Constraint Micro Pass Rate|hard-constraint micro|https://github.com/OSU-NLP-Group/TravelPlanner/blob/e52c87f4ac348a3410c46dc3553c519db5ec5e23/evaluation/eval.py", "hard_macro_pass_rate|Hard Constraint Macro Pass Rate|hard-constraint macro|https://github.com/OSU-NLP-Group/TravelPlanner/blob/e52c87f4ac348a3410c46dc3553c519db5ec5e23/evaluation/eval.py", "final_pass_rate|Final Pass Rate|complete itinerary|https://github.com/OSU-NLP-Group/TravelPlanner/blob/e52c87f4ac348a3410c46dc3553c519db5ec5e23/evaluation/eval.py"] },
25
+ "chinatravel": { "owner": "chinatravel-competition", "pins": ["official_entry|https://github.com/chinatravel-competition/IJCAI2026/blob/49d02bc322dda7ffbf53dfb7c3d2ced6b4bd4e8b/index.html|git_commit|49d02bc322dda7ffbf53dfb7c3d2ced6b4bd4e8b|official competition entry", "data|https://github.com/chinatravel-competition/IJCAI2026/blob/49d02bc322dda7ffbf53dfb7c3d2ced6b4bd4e8b/TPC_IJCAI_2026_phase2_familiar_100_data.zip|git_commit|49d02bc322dda7ffbf53dfb7c3d2ced6b4bd4e8b|public familiar-track archive", "evaluator|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/eval_tpc.py|git_commit|b071db251905b14002ec98e8b36afca7b6d6cd04|official TPC evaluator implementation"], "rights": ["code|not_separately_declared|not_separately_declared|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/README.md", "data|CC-BY-NC-SA-4.0|declared|https://huggingface.co/datasets/LAMDA-NeSy/ChinaTravel/blob/44d5dbf3bba26bdf9a212c3e76d3242b67f0d349/README.md", "evaluator|not_separately_declared|not_separately_declared|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/README.md"], "metrics": ["epr_micro|EPR-micro|element pass micro|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/eval_tpc.py", "epr_macro|EPR-macro|element pass macro|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/eval_tpc.py", "c_lpr|C-LPR|constraint-level pass|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/eval_tpc.py", "fpr|FPR|final pass|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/eval_tpc.py", "dav|DAV|Daily Average Attractions Visited|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/eval_tpc.py", "att|ATT|Averaged Transportation Time|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/eval_tpc.py", "ddr|DDR|Daily Dining Recommendations|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/eval_tpc.py", "overall_score|Overall Score|weighted overall score|https://github.com/LAMDA-NeSy/ChinaTravel/blob/b071db251905b14002ec98e8b36afca7b6d6cd04/eval_tpc.py"] },
26
+ "travelbench": { "owner": "small-xiangcheng", "pins": ["official_entry|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/README.md|git_commit|445a29d9a9b6457fc95fe647c532b6b79e21c43f|official definition", "data|https://github.com/small-xiangcheng/TravelBench/tree/445a29d9a9b6457fc95fe647c532b6b79e21c43f/datas|git_commit|445a29d9a9b6457fc95fe647c532b6b79e21c43f|official data directory", "evaluator|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/travelbench/evaluation/evaluate.py|git_commit|445a29d9a9b6457fc95fe647c532b6b79e21c43f|official evaluator"], "rights": ["code|MIT|declared|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/LICENSE", "data|CC-BY-NC-4.0|declared|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/datas/LICENSE", "evaluator|MIT|declared|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/LICENSE"], "metrics": ["reasoning_planning_score|reasoning_planning_score|reasoning and planning|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/travelbench/evaluation/evaluate.py", "summarization_extraction_score|summarization_extraction_score|summarization and extraction|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/travelbench/evaluation/evaluate.py", "presentation_score|presentation_score|presentation|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/travelbench/evaluation/evaluate.py", "user_interaction_score|user_interaction_score|user interaction|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/travelbench/evaluation/evaluate.py", "average_score|average_score|average across dimensions|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/travelbench/evaluation/evaluate.py", "unsolved_accuracy|unsolved_accuracy|unsolved cases|https://github.com/small-xiangcheng/TravelBench/blob/445a29d9a9b6457fc95fe647c532b6b79e21c43f/travelbench/evaluation/evaluate_unsolved.py"] },
27
+ "tau2": { "owner": "sierra-research", "pins": ["official_entry|https://github.com/sierra-research/tau2-bench/blob/a2c024725189473d2d7cea3a5cfdbcc67478e41f/README.md|git_commit|a2c024725189473d2d7cea3a5cfdbcc67478e41f|official definition", "data|https://github.com/sierra-research/tau2-bench/tree/a2c024725189473d2d7cea3a5cfdbcc67478e41f/data/tau2|git_commit|a2c024725189473d2d7cea3a5cfdbcc67478e41f|official data", "evaluator|https://github.com/sierra-research/tau2-bench/blob/a2c024725189473d2d7cea3a5cfdbcc67478e41f/src/tau2/metrics/agent_metrics.py|git_commit|a2c024725189473d2d7cea3a5cfdbcc67478e41f|official agent metrics implementation"], "rights": ["code|MIT|declared|https://github.com/sierra-research/tau2-bench/blob/a2c024725189473d2d7cea3a5cfdbcc67478e41f/LICENSE", "data|not_separately_declared|not_separately_declared|https://github.com/sierra-research/tau2-bench/blob/a2c024725189473d2d7cea3a5cfdbcc67478e41f/README.md", "evaluator|MIT|declared|https://github.com/sierra-research/tau2-bench/blob/a2c024725189473d2d7cea3a5cfdbcc67478e41f/LICENSE"], "metrics": ["avg_reward|avg_reward|average reward|https://github.com/sierra-research/tau2-bench/blob/a2c024725189473d2d7cea3a5cfdbcc67478e41f/src/tau2/metrics/agent_metrics.py", "pass_hat_1|pass^1|mean task pass^1|https://github.com/sierra-research/tau2-bench/blob/a2c024725189473d2d7cea3a5cfdbcc67478e41f/src/tau2/metrics/agent_metrics.py"] },
28
+ "locomo": { "owner": "snap-research", "pins": ["official_entry|https://github.com/snap-research/locomo/blob/3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376/README.MD|git_commit|3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376|official definition", "data|https://github.com/snap-research/locomo/blob/3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376/data/locomo10.json|git_commit|3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376|official data", "evaluator|https://github.com/snap-research/locomo/tree/3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376/task_eval|git_commit|3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376|official task evaluation directory"], "rights": ["code|CC-BY-NC-4.0|declared|https://github.com/snap-research/locomo/blob/3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376/LICENSE.txt", "data|CC-BY-NC-4.0|declared|https://github.com/snap-research/locomo/blob/3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376/LICENSE.txt", "evaluator|CC-BY-NC-4.0|declared|https://github.com/snap-research/locomo/blob/3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376/LICENSE.txt"], "metrics": ["qa_f1|F1|question-answering token F1|https://github.com/snap-research/locomo/blob/3eb6f2c585f5e1699204e3c3bdf7adc5c28cb376/task_eval/evaluate_qa.py"] },
29
+ "bfcl": { "owner": "ShishirPatil", "pins": ["official_entry|https://github.com/ShishirPatil/gorilla/blob/6ea57973c7a6097fd7c5915698c54c17c5b1b6c8/berkeley-function-call-leaderboard/README.md|git_commit|6ea57973c7a6097fd7c5915698c54c17c5b1b6c8|official BFCL definition", "data|https://github.com/ShishirPatil/gorilla/tree/6ea57973c7a6097fd7c5915698c54c17c5b1b6c8/berkeley-function-call-leaderboard/bfcl_eval/data|git_commit|6ea57973c7a6097fd7c5915698c54c17c5b1b6c8|BFCL data", "evaluator|https://github.com/ShishirPatil/gorilla/tree/6ea57973c7a6097fd7c5915698c54c17c5b1b6c8/berkeley-function-call-leaderboard/bfcl_eval|git_commit|6ea57973c7a6097fd7c5915698c54c17c5b1b6c8|BFCL evaluator"], "rights": ["code|Apache-2.0|declared|https://github.com/ShishirPatil/gorilla/blob/6ea57973c7a6097fd7c5915698c54c17c5b1b6c8/LICENSE", "data|Apache-2.0|declared|https://github.com/ShishirPatil/gorilla/blob/6ea57973c7a6097fd7c5915698c54c17c5b1b6c8/berkeley-function-call-leaderboard/README.md", "evaluator|Apache-2.0|declared|https://github.com/ShishirPatil/gorilla/blob/6ea57973c7a6097fd7c5915698c54c17c5b1b6c8/LICENSE"], "metrics": ["category_accuracy|accuracy|per test_category|https://github.com/ShishirPatil/gorilla/blob/6ea57973c7a6097fd7c5915698c54c17c5b1b6c8/berkeley-function-call-leaderboard/bfcl_eval/eval_checker/eval_runner_helper.py", "overall_accuracy|Overall Acc|overall accuracy|https://github.com/ShishirPatil/gorilla/blob/6ea57973c7a6097fd7c5915698c54c17c5b1b6c8/berkeley-function-call-leaderboard/README.md"] },
199
30
  });
200
31
  const raw = load('data/evaluation/known-good.json');
201
- const diagnostic = parseEvaluationFoundation({
202
- registry,
203
- ...raw
204
- });
32
+ const diagnostic = parseEvaluationFoundation({ registry, ...raw });
205
33
  assert.equal(diagnostic.cases.length, 1);
206
34
  assert.equal(diagnostic.run_receipts.length, 1);
207
35
  assert.equal(diagnostic.run_receipts[0].evidence_kind, 'synthetic_fixture');
208
36
  assert.equal(diagnostic.run_receipts[0].pairing, null);
209
37
  assert.equal(diagnostic.run_receipts[0].qualification.official_result, false);
210
- const emptyResolver = {
211
- resolve: ()=>undefined
212
- };
38
+ const emptyResolver = { resolve: () => undefined };
213
39
  assert.deepEqual(deriveMatchedPairs(diagnostic, emptyResolver), []);
214
- for (const item of diagnostic.cases)parseEvalCase(item);
215
- for (const item of diagnostic.run_receipts)parseEvalRunReceipt(item);
216
- for (const item of diagnostic.failure_clusters)parseEvalFailureCluster(item);
217
- for (const item of [
218
- ...diagnostic.cases,
219
- ...diagnostic.run_receipts,
220
- ...diagnostic.failure_clusters
221
- ])assertPublicArtifactSafe(item, 'repository fixture');
222
- const trek = registry.find((item)=>item.benchmark_id === 'trek');
40
+ for (const item of diagnostic.cases)
41
+ parseEvalCase(item);
42
+ for (const item of diagnostic.run_receipts)
43
+ parseEvalRunReceipt(item);
44
+ for (const item of diagnostic.failure_clusters)
45
+ parseEvalFailureCluster(item);
46
+ for (const item of [...diagnostic.cases, ...diagnostic.run_receipts, ...diagnostic.failure_clusters])
47
+ assertPublicArtifactSafe(item, 'repository fixture');
48
+ const trek = registry.find(item => item.benchmark_id === 'trek');
223
49
  const evalCase = diagnostic.cases[0];
224
- const observedCase = {
225
- ...evalCase,
226
- input_ref: {
227
- ...evalCase.input_ref,
228
- kind: 'external_opaque_reference'
229
- }
230
- };
50
+ const observedCase = { ...evalCase, input_ref: { ...evalCase.input_ref, kind: 'external_opaque_reference' } };
231
51
  const seed = diagnostic.run_receipts[0];
232
52
  const controls = {
233
53
  ...seed.controls,
234
- case_set_sha256: evaluationFingerprint([
235
- observedCase
236
- ]),
54
+ case_set_sha256: evaluationFingerprint([observedCase]),
237
55
  scorer_sha256: evaluationFingerprint(observedCase.scorer_revision),
238
56
  source_fence_sha256: evaluationFingerprint(trek.source_fence),
239
- official_evaluator_sha256: evaluationFingerprint(trek.provenance.evaluator)
57
+ official_evaluator_sha256: evaluationFingerprint(trek.provenance.evaluator),
240
58
  };
241
- const observed = (role)=>{
59
+ const observed = (role) => {
242
60
  const run = {
243
61
  ...seed,
244
- run_id: `run:trek:${role}-test-only`,
245
- evidence_kind: 'observed_external',
62
+ run_id: `run:trek:${role}-test-only`, evidence_kind: 'observed_external',
246
63
  gotry_sha: role === 'baseline' ? '1111111111111111111111111111111111111111' : '2222222222222222222222222222222222222222',
247
- pairing: {
248
- pair_id: 'pair:trek:test-only',
249
- role,
250
- counterpart_run_id: `run:trek:${role === 'baseline' ? 'treatment' : 'baseline'}-test-only`
251
- },
252
- model: {
253
- provider: 'test-provider',
254
- model: 'test-model'
255
- },
256
- controls,
64
+ pairing: { pair_id: 'pair:trek:test-only', role, counterpart_run_id: `run:trek:${role === 'baseline' ? 'treatment' : 'baseline'}-test-only` },
65
+ model: { provider: 'test-provider', model: 'test-model' }, controls,
257
66
  qualification: {
258
- official_result: true,
259
- source_fence_passed: true,
260
- integrity_passed: true,
261
- evidence_receipts: {
262
- official_evaluator_output_sha256: null,
263
- source_fence_audit_sha256: null,
264
- integrity_audit_sha256: null
265
- }
67
+ official_result: true, source_fence_passed: true, integrity_passed: true,
68
+ evidence_receipts: { official_evaluator_output_sha256: null, source_fence_audit_sha256: null, integrity_audit_sha256: null },
266
69
  },
267
70
  experiment: {
268
- changed_variables: role === 'baseline' ? [] : [
269
- 'gotry_sha'
270
- ],
271
- candidate_sha256: evaluationFingerprint({
272
- treatment_variable: 'gotry_sha',
273
- gotry_sha: role === 'baseline' ? '1111111111111111111111111111111111111111' : '2222222222222222222222222222222222222222'
274
- })
71
+ changed_variables: role === 'baseline' ? [] : ['gotry_sha'],
72
+ candidate_sha256: evaluationFingerprint({ treatment_variable: 'gotry_sha', gotry_sha: role === 'baseline' ? '1111111111111111111111111111111111111111' : '2222222222222222222222222222222222222222' }),
275
73
  },
276
- evidence_summary: {
277
- ...seed.evidence_summary,
278
- fixture_only: false,
279
- statement: 'test-only observed-external aggregate admission object'
280
- }
74
+ evidence_summary: { ...seed.evidence_summary, fixture_only: false, statement: 'test-only observed-external aggregate admission object' },
281
75
  };
282
76
  const { evidence_receipts: _receipts, ...qualification } = run.qualification;
283
- const bound = {
284
- ...run,
285
- qualification
286
- };
287
- const base = {
288
- schema_version: 'gotry_eval_evidence_artifact_v0',
289
- run_id: run.run_id,
290
- benchmark_id: run.benchmark_id,
291
- case_id: run.case_id,
292
- run_binding_sha256: evaluationFingerprint(bound)
293
- };
77
+ const bound = { ...run, qualification };
78
+ const base = { schema_version: 'gotry_eval_evidence_artifact_v0', run_id: run.run_id, benchmark_id: run.benchmark_id, case_id: run.case_id, run_binding_sha256: evaluationFingerprint(bound) };
294
79
  const artifacts = {
295
- official_evaluator: {
296
- ...base,
297
- artifact_kind: 'official_evaluator',
298
- evaluator_sha256: run.controls.official_evaluator_sha256,
299
- native_metrics_sha256: evaluationFingerprint(run.native_metrics),
300
- native_metrics: run.native_metrics,
301
- official_result: true
302
- },
303
- source_fence_audit: {
304
- ...base,
305
- artifact_kind: 'source_fence_audit',
306
- source_fence_sha256: run.controls.source_fence_sha256,
307
- input_digest_sha256: observedCase.input_ref.digest_sha256,
308
- source_fence_passed: true,
309
- forbidden_field_hits: 0
310
- },
311
- integrity_audit: {
312
- ...base,
313
- artifact_kind: 'integrity_audit',
314
- integrity_sha256: run.controls.integrity_sha256,
315
- candidate_sha256: run.experiment.candidate_sha256,
316
- integrity_passed: true
317
- }
318
- };
319
- run.qualification.evidence_receipts = {
320
- official_evaluator_output_sha256: evaluationFingerprint(artifacts.official_evaluator),
321
- source_fence_audit_sha256: evaluationFingerprint(artifacts.source_fence_audit),
322
- integrity_audit_sha256: evaluationFingerprint(artifacts.integrity_audit)
80
+ official_evaluator: { ...base, artifact_kind: 'official_evaluator', evaluator_sha256: run.controls.official_evaluator_sha256, native_metrics_sha256: evaluationFingerprint(run.native_metrics), native_metrics: run.native_metrics, official_result: true },
81
+ source_fence_audit: { ...base, artifact_kind: 'source_fence_audit', source_fence_sha256: run.controls.source_fence_sha256, input_digest_sha256: observedCase.input_ref.digest_sha256, source_fence_passed: true, forbidden_field_hits: 0 },
82
+ integrity_audit: { ...base, artifact_kind: 'integrity_audit', integrity_sha256: run.controls.integrity_sha256, candidate_sha256: run.experiment.candidate_sha256, integrity_passed: true },
323
83
  };
84
+ run.qualification.evidence_receipts = { official_evaluator_output_sha256: evaluationFingerprint(artifacts.official_evaluator), source_fence_audit_sha256: evaluationFingerprint(artifacts.source_fence_audit), integrity_audit_sha256: evaluationFingerprint(artifacts.integrity_audit) };
324
85
  return run;
325
86
  };
326
87
  const countable = parseEvaluationFoundation({
327
- registry,
328
- cases: [
329
- observedCase
330
- ],
331
- run_receipts: [
332
- observed('baseline'),
333
- observed('treatment')
334
- ],
335
- failure_clusters: [
336
- {
337
- ...diagnostic.failure_clusters[0],
338
- run_ids: [
339
- 'run:trek:baseline-test-only',
340
- 'run:trek:treatment-test-only'
341
- ]
342
- }
343
- ]
88
+ registry, cases: [observedCase], run_receipts: [observed('baseline'), observed('treatment')],
89
+ failure_clusters: [{ ...diagnostic.failure_clusters[0], run_ids: ['run:trek:baseline-test-only', 'run:trek:treatment-test-only'] }],
344
90
  });
345
- const artifactResolver = {
346
- resolve (sha256) {
347
- for (const run of countable.run_receipts){
91
+ const artifactResolver = { resolve(sha256) {
92
+ for (const run of countable.run_receipts) {
348
93
  const { evidence_receipts: _receipts, ...qualification } = run.qualification;
349
- const bound = {
350
- ...run,
351
- qualification
352
- };
353
- const base = {
354
- schema_version: 'gotry_eval_evidence_artifact_v0',
355
- run_id: run.run_id,
356
- benchmark_id: run.benchmark_id,
357
- case_id: run.case_id,
358
- run_binding_sha256: evaluationFingerprint(bound)
359
- };
360
- const artifacts = [
361
- {
362
- ...base,
363
- artifact_kind: 'official_evaluator',
364
- evaluator_sha256: run.controls.official_evaluator_sha256,
365
- native_metrics_sha256: evaluationFingerprint(run.native_metrics),
366
- native_metrics: run.native_metrics,
367
- official_result: true
368
- },
369
- {
370
- ...base,
371
- artifact_kind: 'source_fence_audit',
372
- source_fence_sha256: run.controls.source_fence_sha256,
373
- input_digest_sha256: observedCase.input_ref.digest_sha256,
374
- source_fence_passed: true,
375
- forbidden_field_hits: 0
376
- },
377
- {
378
- ...base,
379
- artifact_kind: 'integrity_audit',
380
- integrity_sha256: run.controls.integrity_sha256,
381
- candidate_sha256: run.experiment.candidate_sha256,
382
- integrity_passed: true
383
- }
384
- ];
385
- const found = artifacts.find((item)=>evaluationFingerprint(item) === sha256);
386
- if (found) return found;
94
+ const bound = { ...run, qualification };
95
+ const base = { schema_version: 'gotry_eval_evidence_artifact_v0', run_id: run.run_id, benchmark_id: run.benchmark_id, case_id: run.case_id, run_binding_sha256: evaluationFingerprint(bound) };
96
+ const artifacts = [{ ...base, artifact_kind: 'official_evaluator', evaluator_sha256: run.controls.official_evaluator_sha256, native_metrics_sha256: evaluationFingerprint(run.native_metrics), native_metrics: run.native_metrics, official_result: true }, { ...base, artifact_kind: 'source_fence_audit', source_fence_sha256: run.controls.source_fence_sha256, input_digest_sha256: observedCase.input_ref.digest_sha256, source_fence_passed: true, forbidden_field_hits: 0 }, { ...base, artifact_kind: 'integrity_audit', integrity_sha256: run.controls.integrity_sha256, candidate_sha256: run.experiment.candidate_sha256, integrity_passed: true }];
97
+ const found = artifacts.find(item => evaluationFingerprint(item) === sha256);
98
+ if (found)
99
+ return found;
387
100
  }
388
101
  return undefined;
389
- }
390
- };
391
- const fingerprintMismatchResolver = {
392
- resolve (sha256) {
393
- const artifact = artifactResolver.resolve(sha256);
394
- if (!artifact) return undefined;
395
- const changed = structuredClone(artifact);
396
- if (changed.artifact_kind === 'official_evaluator') changed.official_result = false;
397
- return changed;
398
- }
399
- };
400
- assert.throws(()=>deriveMatchedPairs(countable, fingerprintMismatchResolver), /fingerprint mismatch/);
102
+ } };
103
+ const fingerprintMismatchResolver = { resolve(sha256) { const artifact = artifactResolver.resolve(sha256); if (!artifact)
104
+ return undefined; const changed = structuredClone(artifact); if (changed.artifact_kind === 'official_evaluator')
105
+ changed.official_result = false; return changed; } };
106
+ assert.throws(() => deriveMatchedPairs(countable, fingerprintMismatchResolver), /fingerprint mismatch/);
401
107
  const pairs = deriveMatchedPairs(countable, artifactResolver);
402
- assert.deepEqual(pairs, [
403
- {
404
- schema_version: 'gotry_eval_matched_pair_derived_v0',
405
- pair_id: 'pair:trek:test-only',
406
- benchmark_id: 'trek',
407
- case_id: 'gotry:foundation:case-001',
408
- baseline_run_id: 'run:trek:baseline-test-only',
409
- treatment_run_id: 'run:trek:treatment-test-only',
410
- treatment_variable: 'gotry_sha',
411
- matched_pair_countable: true
412
- }
413
- ]);
414
- const exerciseArtifact = (runIndex, kind, mutate, expected)=>{
108
+ assert.deepEqual(pairs, [{
109
+ schema_version: 'gotry_eval_matched_pair_derived_v0', pair_id: 'pair:trek:test-only', benchmark_id: 'trek',
110
+ case_id: 'gotry:foundation:case-001', baseline_run_id: 'run:trek:baseline-test-only',
111
+ treatment_run_id: 'run:trek:treatment-test-only', treatment_variable: 'gotry_sha', matched_pair_countable: true,
112
+ }]);
113
+ // Each adversarial artifact is re-signed and its receipt updated, so deriveMatchedPairs
114
+ // reaches the semantic closure under test rather than stopping at the fingerprint gate.
115
+ const exerciseArtifact = (runIndex, kind, mutate, expected) => {
415
116
  const foundation = structuredClone(countable);
416
117
  const run = foundation.run_receipts[runIndex];
417
118
  const receiptKey = kind === 'official_evaluator' ? 'official_evaluator_output_sha256' : kind === 'source_fence_audit' ? 'source_fence_audit_sha256' : 'integrity_audit_sha256';
@@ -420,44 +121,113 @@ const exerciseArtifact = (runIndex, kind, mutate, expected)=>{
420
121
  mutate(artifact);
421
122
  const digest = evaluationFingerprint(artifact);
422
123
  run.qualification.evidence_receipts[receiptKey] = digest;
423
- const resolver = {
424
- resolve (sha256) {
425
- return sha256 === digest ? artifact : artifactResolver.resolve(sha256);
426
- }
427
- };
428
- assert.throws(()=>deriveMatchedPairs(foundation, resolver), expected);
124
+ const resolver = { resolve(sha256) { return sha256 === digest ? artifact : artifactResolver.resolve(sha256); } };
125
+ assert.throws(() => deriveMatchedPairs(foundation, resolver), expected);
429
126
  };
430
- assert.throws(()=>deriveMatchedPairs(countable, {
431
- resolve: ()=>undefined
432
- }), /artifact/);
433
- exerciseArtifact(0, 'official_evaluator', (a)=>{
434
- a.evaluator_sha256 = 'f'.repeat(64);
435
- }, /evaluator artifact mismatch/);
436
- exerciseArtifact(0, 'official_evaluator', (a)=>{
437
- a.native_metrics = {
438
- altered: 1
439
- };
440
- a.native_metrics_sha256 = evaluationFingerprint(a.native_metrics);
441
- }, /evaluator artifact mismatch/);
442
- exerciseArtifact(0, 'source_fence_audit', (a)=>{
443
- a.input_digest_sha256 = 'f'.repeat(64);
444
- }, /source-fence artifact mismatch/);
445
- exerciseArtifact(0, 'source_fence_audit', (a)=>{
446
- a.source_fence_passed = false;
447
- }, /source-fence artifact mismatch/);
448
- exerciseArtifact(0, 'source_fence_audit', (a)=>{
449
- a.forbidden_field_hits = 1;
450
- }, /source-fence artifact mismatch/);
451
- exerciseArtifact(0, 'integrity_audit', (a)=>{
452
- a.candidate_sha256 = 'f'.repeat(64);
453
- }, /integrity artifact mismatch/);
454
- exerciseArtifact(0, 'integrity_audit', (a)=>{
455
- a.integrity_passed = false;
456
- }, /integrity artifact mismatch/);
127
+ assert.throws(() => deriveMatchedPairs(countable, { resolve: () => undefined }), /artifact/);
128
+ exerciseArtifact(0, 'official_evaluator', a => { a.evaluator_sha256 = 'f'.repeat(64); }, /evaluator artifact mismatch/);
129
+ exerciseArtifact(0, 'official_evaluator', a => { a.native_metrics = { altered: 1 }; a.native_metrics_sha256 = evaluationFingerprint(a.native_metrics); }, /evaluator artifact mismatch/);
130
+ exerciseArtifact(0, 'source_fence_audit', a => { a.input_digest_sha256 = 'f'.repeat(64); }, /source-fence artifact mismatch/);
131
+ exerciseArtifact(0, 'source_fence_audit', a => { a.source_fence_passed = false; }, /source-fence artifact mismatch/);
132
+ exerciseArtifact(0, 'source_fence_audit', a => { a.forbidden_field_hits = 1; }, /source-fence artifact mismatch/);
133
+ exerciseArtifact(0, 'integrity_audit', a => { a.candidate_sha256 = 'f'.repeat(64); }, /integrity artifact mismatch/);
134
+ exerciseArtifact(0, 'integrity_audit', a => { a.integrity_passed = false; }, /integrity artifact mismatch/);
457
135
  const treatmentReuse = structuredClone(countable);
458
136
  const baselineReceipt = treatmentReuse.run_receipts[0].qualification.evidence_receipts.official_evaluator_output_sha256;
459
137
  treatmentReuse.run_receipts[1].qualification.evidence_receipts.official_evaluator_output_sha256 = baselineReceipt;
460
- assert.throws(()=>deriveMatchedPairs(treatmentReuse, artifactResolver), /fingerprint mismatch|binding mismatch/);
138
+ assert.throws(() => deriveMatchedPairs(treatmentReuse, artifactResolver), /fingerprint mismatch|binding mismatch/);
139
+ // D-28 admission gate solidification (issue #203): the registry file's countability
140
+ // face is a frozen fact — chinatravel/travelbench/locomo are diagnostic_only. The
141
+ // `pair-diagnostic-default` vector proves the mechanism on registry[0]; this block
142
+ // pins the published face itself and proves an otherwise fully-qualified ChinaTravel
143
+ // paired construction (reciprocal observed_external roles, identical model identity,
144
+ // all eight controls, evaluator/source-fence/integrity artifacts resolved and closed)
145
+ // is rejected as diagnostic-only, and becomes derivable only when that frozen face is
146
+ // flipped in memory. Per docs/evaluation/evaluation-foundation.md these in-memory
147
+ // observed_external objects are countable_test_only falsification inputs: never
148
+ // written to git, never a baseline, production result, official score, or
149
+ // Agent-quality evidence.
150
+ const countability = Object.fromEntries(registry.map(item => [item.benchmark_id, item.countability_default]));
151
+ assert.deepEqual(countability, {
152
+ trek: 'countable_if_qualified',
153
+ travelplanner: 'countable_if_qualified',
154
+ chinatravel: 'diagnostic_only',
155
+ travelbench: 'diagnostic_only',
156
+ tau2: 'countable_if_qualified',
157
+ locomo: 'diagnostic_only',
158
+ bfcl: 'countable_if_qualified',
159
+ });
160
+ const chinatravel = registry.find(item => item.benchmark_id === 'chinatravel');
161
+ const ctCase = {
162
+ ...structuredClone(observedCase),
163
+ benchmark_id: 'chinatravel',
164
+ case_id: 'gotry:foundation:chinatravel-admission-probe',
165
+ };
166
+ const ctMetrics = Object.fromEntries(chinatravel.native_metrics.values.map(metric => [metric.receipt_key, 0.5]));
167
+ const ctControls = {
168
+ ...seed.controls,
169
+ case_set_sha256: evaluationFingerprint([ctCase]),
170
+ scorer_sha256: evaluationFingerprint(ctCase.scorer_revision),
171
+ source_fence_sha256: evaluationFingerprint(chinatravel.source_fence),
172
+ official_evaluator_sha256: evaluationFingerprint(chinatravel.provenance.evaluator),
173
+ };
174
+ const ctRun = (role) => {
175
+ const sha = role === 'baseline' ? '3333333333333333333333333333333333333333' : '4444444444444444444444444444444444444444';
176
+ const run = {
177
+ ...seed,
178
+ run_id: `run:chinatravel:${role}-probe`, benchmark_id: 'chinatravel', case_id: ctCase.case_id,
179
+ evidence_kind: 'observed_external',
180
+ gotry_sha: sha,
181
+ pairing: { pair_id: 'pair:chinatravel:admission-gate-probe', role, counterpart_run_id: `run:chinatravel:${role === 'baseline' ? 'treatment' : 'baseline'}-probe` },
182
+ model: { provider: 'test-provider', model: 'test-model' }, controls: ctControls,
183
+ qualification: {
184
+ official_result: true, source_fence_passed: true, integrity_passed: true,
185
+ evidence_receipts: { official_evaluator_output_sha256: null, source_fence_audit_sha256: null, integrity_audit_sha256: null },
186
+ },
187
+ experiment: {
188
+ changed_variables: role === 'baseline' ? [] : ['gotry_sha'],
189
+ candidate_sha256: evaluationFingerprint({ treatment_variable: 'gotry_sha', gotry_sha: sha }),
190
+ },
191
+ native_metrics: ctMetrics,
192
+ evidence_summary: { ...seed.evidence_summary, fixture_only: false, statement: 'test-only diagnostic-gate falsification pair' },
193
+ };
194
+ const { evidence_receipts: _receipts, ...qualification } = run.qualification;
195
+ const bound = { ...run, qualification };
196
+ const base = { schema_version: 'gotry_eval_evidence_artifact_v0', run_id: run.run_id, benchmark_id: run.benchmark_id, case_id: run.case_id, run_binding_sha256: evaluationFingerprint(bound) };
197
+ const artifacts = {
198
+ official_evaluator: { ...base, artifact_kind: 'official_evaluator', evaluator_sha256: run.controls.official_evaluator_sha256, native_metrics_sha256: evaluationFingerprint(run.native_metrics), native_metrics: run.native_metrics, official_result: true },
199
+ source_fence_audit: { ...base, artifact_kind: 'source_fence_audit', source_fence_sha256: run.controls.source_fence_sha256, input_digest_sha256: ctCase.input_ref.digest_sha256, source_fence_passed: true, forbidden_field_hits: 0 },
200
+ integrity_audit: { ...base, artifact_kind: 'integrity_audit', integrity_sha256: run.controls.integrity_sha256, candidate_sha256: run.experiment.candidate_sha256, integrity_passed: true },
201
+ };
202
+ run.qualification.evidence_receipts = { official_evaluator_output_sha256: evaluationFingerprint(artifacts.official_evaluator), source_fence_audit_sha256: evaluationFingerprint(artifacts.source_fence_audit), integrity_audit_sha256: evaluationFingerprint(artifacts.integrity_audit) };
203
+ return run;
204
+ };
205
+ const ctFoundation = parseEvaluationFoundation({
206
+ registry, cases: [ctCase], run_receipts: [ctRun('baseline'), ctRun('treatment')], failure_clusters: [],
207
+ });
208
+ const ctResolver = { resolve(sha256) {
209
+ for (const run of ctFoundation.run_receipts) {
210
+ const { evidence_receipts: _receipts, ...qualification } = run.qualification;
211
+ const bound = { ...run, qualification };
212
+ const base = { schema_version: 'gotry_eval_evidence_artifact_v0', run_id: run.run_id, benchmark_id: run.benchmark_id, case_id: run.case_id, run_binding_sha256: evaluationFingerprint(bound) };
213
+ const artifacts = [{ ...base, artifact_kind: 'official_evaluator', evaluator_sha256: run.controls.official_evaluator_sha256, native_metrics_sha256: evaluationFingerprint(run.native_metrics), native_metrics: run.native_metrics, official_result: true }, { ...base, artifact_kind: 'source_fence_audit', source_fence_sha256: run.controls.source_fence_sha256, input_digest_sha256: ctCase.input_ref.digest_sha256, source_fence_passed: true, forbidden_field_hits: 0 }, { ...base, artifact_kind: 'integrity_audit', integrity_sha256: run.controls.integrity_sha256, candidate_sha256: run.experiment.candidate_sha256, integrity_passed: true }];
214
+ const found = artifacts.find(item => evaluationFingerprint(item) === sha256);
215
+ if (found)
216
+ return found;
217
+ }
218
+ return undefined;
219
+ } };
220
+ assert.throws(() => deriveMatchedPairs(ctFoundation, ctResolver), /diagnostic only/);
221
+ const flippedRegistry = structuredClone(registry);
222
+ flippedRegistry[2].countability_default = 'countable_if_qualified';
223
+ const flippedFoundation = parseEvaluationFoundation({
224
+ registry: flippedRegistry, cases: [ctCase], run_receipts: [ctRun('baseline'), ctRun('treatment')], failure_clusters: [],
225
+ });
226
+ assert.deepEqual(deriveMatchedPairs(flippedFoundation, ctResolver), [{
227
+ schema_version: 'gotry_eval_matched_pair_derived_v0', pair_id: 'pair:chinatravel:admission-gate-probe', benchmark_id: 'chinatravel',
228
+ case_id: 'gotry:foundation:chinatravel-admission-probe', baseline_run_id: 'run:chinatravel:baseline-probe',
229
+ treatment_run_id: 'run:chinatravel:treatment-probe', treatment_variable: 'gotry_sha', matched_pair_countable: true,
230
+ }]);
461
231
  const canonical1 = stableEvaluationJson(diagnostic);
462
232
  const canonical2 = stableEvaluationJson(parseEvaluationFoundation(JSON.parse(canonical1)));
463
233
  const digest1 = createHash('sha256').update(canonical1).digest('hex');
@@ -467,108 +237,32 @@ assert.equal(digest1, digest2);
467
237
  assert.match(digest1, /^[0-9a-f]{64}$/);
468
238
  const vectors = parseMutationVectors(load('data/evaluation/known-bad.json'));
469
239
  assert.equal(vectors.length, 39);
470
- for (const vector of vectors){
240
+ for (const vector of vectors) {
471
241
  const base = vector.foundation_kind === 'countable_test_only' ? countable : diagnostic;
472
242
  const mutated = applyMutationVector(base, vector);
473
- assert.throws(()=>vector.target === 'foundation' ? deriveMatchedPairs(parseEvaluationFoundation(mutated), vector.foundation_kind === 'countable_test_only' ? artifactResolver : emptyResolver) : vector.target === 'registry' ? parseBenchmarkRegistry(mutated) : vector.target === 'case' ? parseEvalCase(mutated) : vector.target === 'run' ? parseEvalRunReceipt(mutated) : parseEvalFailureCluster(mutated), new RegExp(vector.expected_error), vector.id);
243
+ assert.throws(() => vector.target === 'foundation' ? deriveMatchedPairs(parseEvaluationFoundation(mutated), vector.foundation_kind === 'countable_test_only' ? artifactResolver : emptyResolver)
244
+ : vector.target === 'registry' ? parseBenchmarkRegistry(mutated)
245
+ : vector.target === 'case' ? parseEvalCase(mutated)
246
+ : vector.target === 'run' ? parseEvalRunReceipt(mutated) : parseEvalFailureCluster(mutated), new RegExp(vector.expected_error), vector.id);
474
247
  }
475
248
  const runAll = readFileSync('../scripts/run-all-tests.sh', 'utf8');
476
249
  assert.match(runAll, /=== 46\. Evaluation Phase 0 foundation/);
477
250
  assert.match(runAll, /npx tsx scripts\/evaluation-contract-tests\.ts/);
478
- assert.throws(()=>deriveMatchedPairs(countable, emptyResolver), /artifact/);
479
- for (const [key, value] of [
480
- [
481
- 'apikey',
482
- 'secret'
483
- ],
484
- [
485
- 'access-token',
486
- 'secret'
487
- ],
488
- [
489
- 'apiKey',
490
- 'secret'
491
- ],
492
- [
493
- 'ACCESS-TOKEN',
494
- 'secret'
495
- ],
496
- [
497
- 'client_secret',
498
- 'secret'
499
- ],
500
- [
501
- 'authorization',
502
- 'Bearer abcdefghijklmnopqrstuvwxyz123456'
503
- ],
504
- [
505
- 'value',
506
- '/private/file'
507
- ],
508
- [
509
- 'value',
510
- '~/private/file'
511
- ],
512
- [
513
- 'value',
514
- 'C:\\private\\file'
515
- ],
516
- [
517
- 'value',
518
- 'file:///private/file'
519
- ],
520
- [
521
- 'value',
522
- 'sk-abcdefghijklmnopqrstuv'
523
- ],
524
- [
525
- 'value',
526
- 'ghp_abcdefghijklmnopqrstuvwxyz123456'
527
- ],
528
- [
529
- 'value',
530
- 'AKIA1234567890ABCDEF'
531
- ]
532
- ])assert.throws(()=>assertPublicArtifactSafe({
533
- [key]: value
534
- }, 'adversarial'), /absolute path or secret|credentials/);
535
- assert.doesNotThrow(()=>assertPublicArtifactSafe({
536
- url: 'https://github.com/org/repo/blob/main/README.md',
537
- label: 'question-answering token F1'
538
- }, 'benign'));
539
- assert.throws(()=>assertPublicArtifactSafe({
540
- value: 'https://example.test/?token=sk-abcdefghijklmnopqrstuv'
541
- }, 'https-url-secret'), /absolute path or secret/);
542
- for (const value of [
543
- 'log=/Users/a/private.json',
544
- 'C:\\Users\\a\\secret',
545
- 'file:///tmp/x',
546
- '~/x',
547
- 'https://github.com/org/repo log=/Users/a/x',
548
- 'Bearer abcdefghijklmnopqrstuvwxyz123456',
549
- 'sk-abcdefghijklmnopqrstuv',
550
- 'ghp_abcdefghijklmnopqrstuvwxyz123456',
551
- 'AKIA1234567890ABCDEF'
552
- ])assert.throws(()=>assertPublicArtifactSafe({
553
- value
554
- }, 'path-or-secret'), /absolute path or secret/);
555
- assert.doesNotThrow(()=>assertPublicArtifactSafe({
556
- github: 'https://github.com/org/repo',
557
- huggingface: 'https://huggingface.co/datasets/org/name'
558
- }, 'public urls'));
559
- for (const key of [
560
- 'source_fence_passed',
561
- 'integrity_passed'
562
- ]){
251
+ assert.throws(() => deriveMatchedPairs(countable, emptyResolver), /artifact/);
252
+ for (const [key, value] of [['apikey', 'secret'], ['access-token', 'secret'], ['apiKey', 'secret'], ['ACCESS-TOKEN', 'secret'], ['client_secret', 'secret'], ['authorization', 'Bearer abcdefghijklmnopqrstuvwxyz123456'], ['value', '/private/file'], ['value', '~/private/file'], ['value', 'C:\\private\\file'], ['value', 'file:///private/file'], ['value', 'sk-abcdefghijklmnopqrstuv'], ['value', 'ghp_abcdefghijklmnopqrstuvwxyz123456'], ['value', 'AKIA1234567890ABCDEF']])
253
+ assert.throws(() => assertPublicArtifactSafe({ [key]: value }, 'adversarial'), /absolute path or secret|credentials/);
254
+ assert.doesNotThrow(() => assertPublicArtifactSafe({ url: 'https://github.com/org/repo/blob/main/README.md', label: 'question-answering token F1' }, 'benign'));
255
+ assert.throws(() => assertPublicArtifactSafe({ value: 'https://example.test/?token=sk-abcdefghijklmnopqrstuv' }, 'https-url-secret'), /absolute path or secret/);
256
+ for (const value of ['log=/Users/a/private.json', 'C:\\Users\\a\\secret', 'file:///tmp/x', '~/x', 'https://github.com/org/repo log=/Users/a/x', 'Bearer abcdefghijklmnopqrstuvwxyz123456', 'sk-abcdefghijklmnopqrstuv', 'ghp_abcdefghijklmnopqrstuvwxyz123456', 'AKIA1234567890ABCDEF'])
257
+ assert.throws(() => assertPublicArtifactSafe({ value }, 'path-or-secret'), /absolute path or secret/);
258
+ assert.doesNotThrow(() => assertPublicArtifactSafe({ github: 'https://github.com/org/repo', huggingface: 'https://huggingface.co/datasets/org/name' }, 'public urls'));
259
+ for (const key of ['source_fence_passed', 'integrity_passed']) {
563
260
  const syntheticFlags = JSON.parse(JSON.stringify(load('data/evaluation/known-good.json')));
564
261
  const run = syntheticFlags.run_receipts[0];
565
262
  const qualification = run.qualification;
566
263
  qualification[key] = true;
567
264
  assert.equal(qualification[key === 'source_fence_passed' ? 'integrity_passed' : 'source_fence_passed'], false);
568
- assert.throws(()=>parseEvalRunReceipt(run), /synthetic fixture/);
265
+ assert.throws(() => parseEvalRunReceipt(run), /synthetic fixture/);
569
266
  }
570
267
  console.log(`canonical sha256: ${digest1}`);
571
- console.log(`evaluation-contract tests: ${registry.length} registry, ${pairs.length} test-only matched pair, ${vectors.length} negative vectors green`);
572
-
573
-
574
- //# sourceURL=ts/scripts/evaluation-contract-tests.ts
268
+ console.log(`evaluation-contract tests: ${registry.length} registry, 1 test-only matched pair, 39 negative vectors, chinatravel diagnostic-only gate green`);