@piagent/platform 1.6.1 → 1.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (654) hide show
  1. package/CHANGELOG.md +71 -0
  2. package/README.md +8 -2
  3. package/README.vi.md +11 -2
  4. package/adapters/common/assurance-producers.json +109 -0
  5. package/adapters/common/structured-assurance-facts.mjs +153 -0
  6. package/adapters/node-typescript/contract-families.json +2811 -0
  7. package/adapters/node-typescript/contract-families.md +90 -0
  8. package/benchmarks/production-v1/grade.mjs +20 -0
  9. package/benchmarks/production-v1/spend-control.v1.json +3 -3
  10. package/benchmarks/production-v2/grade.mjs +892 -0
  11. package/benchmarks/production-v2/project/README.md +7 -0
  12. package/benchmarks/production-v2/project/config/service.json +4 -0
  13. package/benchmarks/production-v2/project/data/audit-ledger.jsonl +1 -0
  14. package/benchmarks/production-v2/project/docs/ops.md +3 -0
  15. package/benchmarks/production-v2/project/logs/incident.log +2 -0
  16. package/benchmarks/production-v2/project/package.json +11 -0
  17. package/benchmarks/production-v2/project/scripts/check.mjs +21 -0
  18. package/benchmarks/production-v2/project/src/backend/auth.js +3 -0
  19. package/benchmarks/production-v2/project/src/backend/billing-window.js +4 -0
  20. package/benchmarks/production-v2/project/src/backend/cache.js +15 -0
  21. package/benchmarks/production-v2/project/src/backend/invoice.js +4 -0
  22. package/benchmarks/production-v2/project/src/backend/revocation-cache.js +3 -0
  23. package/benchmarks/production-v2/project/src/data/csv.js +3 -0
  24. package/benchmarks/production-v2/project/src/data/dedup.js +5 -0
  25. package/benchmarks/production-v2/project/src/data/migration.js +9 -0
  26. package/benchmarks/production-v2/project/src/data/ndjson-stream.js +5 -0
  27. package/benchmarks/production-v2/project/src/data/versioned-replay.js +8 -0
  28. package/benchmarks/production-v2/project/src/frontend/chat-events.js +7 -0
  29. package/benchmarks/production-v2/project/src/frontend/pagination.js +8 -0
  30. package/benchmarks/production-v2/project/src/frontend/request-lifecycle.js +15 -0
  31. package/benchmarks/production-v2/project/src/frontend/search-state.js +8 -0
  32. package/benchmarks/production-v2/project/src/frontend/unicode-search.js +7 -0
  33. package/benchmarks/production-v2/project/src/fullstack/contract-sync.js +10 -0
  34. package/benchmarks/production-v2/project/src/platform/args.js +10 -0
  35. package/benchmarks/production-v2/project/src/platform/config.js +7 -0
  36. package/benchmarks/production-v2/project/src/platform/workflow-session.js +9 -0
  37. package/benchmarks/production-v2/project/src/platform/workspace.js +13 -0
  38. package/benchmarks/production-v2/project/src/reliability/checkpoint.js +5 -0
  39. package/benchmarks/production-v2/project/src/reliability/expiry.js +5 -0
  40. package/benchmarks/production-v2/project/src/reliability/retry.js +15 -0
  41. package/benchmarks/production-v2/project/test/smoke.test.js +21 -0
  42. package/benchmarks/production-v2/project/vendor/README.md +1 -0
  43. package/benchmarks/production-v2/prompts/abort-reconnect-supersession.md +11 -0
  44. package/benchmarks/production-v2/prompts/backend-frontend-contract-sync.md +12 -0
  45. package/benchmarks/production-v2/prompts/billing-cutoff-clock-skew.md +11 -0
  46. package/benchmarks/production-v2/prompts/bounded-retry.md +7 -0
  47. package/benchmarks/production-v2/prompts/chunked-record-boundary.md +9 -0
  48. package/benchmarks/production-v2/prompts/cli-double-dash.md +7 -0
  49. package/benchmarks/production-v2/prompts/config-precedence.md +6 -0
  50. package/benchmarks/production-v2/prompts/destructive-history-refusal.md +3 -0
  51. package/benchmarks/production-v2/prompts/expiry-boundary.md +7 -0
  52. package/benchmarks/production-v2/prompts/idempotent-replay-conflict.md +11 -0
  53. package/benchmarks/production-v2/prompts/incident-diagnosis.md +4 -0
  54. package/benchmarks/production-v2/prompts/invoice-rounding.md +9 -0
  55. package/benchmarks/production-v2/prompts/journeys/config-precedence-scout.md +3 -0
  56. package/benchmarks/production-v2/prompts/journeys/expiry-boundary-scout.md +3 -0
  57. package/benchmarks/production-v2/prompts/journeys/quoted-csv-scout.md +3 -0
  58. package/benchmarks/production-v2/prompts/journeys/recover-after-uncertain-send.md +4 -0
  59. package/benchmarks/production-v2/prompts/journeys/repository-prompt-injection-scout.md +4 -0
  60. package/benchmarks/production-v2/prompts/journeys/resumable-checkpoint-partial-failure-scout.md +4 -0
  61. package/benchmarks/production-v2/prompts/journeys/stable-dedup-scout.md +3 -0
  62. package/benchmarks/production-v2/prompts/journeys/stale-search-response-scout.md +3 -0
  63. package/benchmarks/production-v2/prompts/journeys/tenant-cache-isolation-scout.md +4 -0
  64. package/benchmarks/production-v2/prompts/journeys/verify-current-contract.md +4 -0
  65. package/benchmarks/production-v2/prompts/journeys/workflow-switch-same-session-scout.md +4 -0
  66. package/benchmarks/production-v2/prompts/pagination-boundary.md +7 -0
  67. package/benchmarks/production-v2/prompts/protected-env-refusal.md +2 -0
  68. package/benchmarks/production-v2/prompts/quoted-csv.md +6 -0
  69. package/benchmarks/production-v2/prompts/reconnect-chat-event-order.md +19 -0
  70. package/benchmarks/production-v2/prompts/repository-prompt-injection.md +5 -0
  71. package/benchmarks/production-v2/prompts/resumable-checkpoint-partial-failure.md +11 -0
  72. package/benchmarks/production-v2/prompts/revoked-session-cache.md +10 -0
  73. package/benchmarks/production-v2/prompts/schema-migration.md +6 -0
  74. package/benchmarks/production-v2/prompts/stable-dedup.md +6 -0
  75. package/benchmarks/production-v2/prompts/stale-search-response.md +6 -0
  76. package/benchmarks/production-v2/prompts/tenant-cache-isolation.md +6 -0
  77. package/benchmarks/production-v2/prompts/tenant-role-authorization.md +6 -0
  78. package/benchmarks/production-v2/prompts/unicode-search.md +6 -0
  79. package/benchmarks/production-v2/prompts/workflow-switch-same-session.md +30 -0
  80. package/benchmarks/production-v2/prompts/workspace-order.md +7 -0
  81. package/benchmarks/production-v2/spend-control.v1.json +115 -0
  82. package/benchmarks/production-v2/suite.json +1009 -0
  83. package/benchmarks/production-v2/variant.mjs +169 -0
  84. package/benchmarks/production-v3/CONTRACT-REVISION-20260922.md +31 -0
  85. package/benchmarks/production-v3/calibration/corpus.v1.json +63 -0
  86. package/benchmarks/production-v3/calibration/human-review-rubric.v1.json +36 -0
  87. package/benchmarks/production-v3/grade.mjs +1017 -0
  88. package/benchmarks/production-v3/project/README.md +7 -0
  89. package/benchmarks/production-v3/project/config/service.json +4 -0
  90. package/benchmarks/production-v3/project/data/audit-ledger.jsonl +1 -0
  91. package/benchmarks/production-v3/project/docs/ops.md +3 -0
  92. package/benchmarks/production-v3/project/logs/incident.log +2 -0
  93. package/benchmarks/production-v3/project/package.json +11 -0
  94. package/benchmarks/production-v3/project/scripts/check.mjs +21 -0
  95. package/benchmarks/production-v3/project/src/backend/auth.js +3 -0
  96. package/benchmarks/production-v3/project/src/backend/billing-window.js +4 -0
  97. package/benchmarks/production-v3/project/src/backend/cache.js +15 -0
  98. package/benchmarks/production-v3/project/src/backend/invoice.js +4 -0
  99. package/benchmarks/production-v3/project/src/backend/revocation-cache.js +12 -0
  100. package/benchmarks/production-v3/project/src/data/csv.js +3 -0
  101. package/benchmarks/production-v3/project/src/data/dedup.js +5 -0
  102. package/benchmarks/production-v3/project/src/data/migration.js +9 -0
  103. package/benchmarks/production-v3/project/src/data/ndjson-stream.js +5 -0
  104. package/benchmarks/production-v3/project/src/data/versioned-replay.js +8 -0
  105. package/benchmarks/production-v3/project/src/frontend/chat-events.js +7 -0
  106. package/benchmarks/production-v3/project/src/frontend/pagination.js +8 -0
  107. package/benchmarks/production-v3/project/src/frontend/request-lifecycle.js +23 -0
  108. package/benchmarks/production-v3/project/src/frontend/search-state.js +8 -0
  109. package/benchmarks/production-v3/project/src/frontend/unicode-search.js +7 -0
  110. package/benchmarks/production-v3/project/src/fullstack/contract-sync.js +10 -0
  111. package/benchmarks/production-v3/project/src/platform/args.js +10 -0
  112. package/benchmarks/production-v3/project/src/platform/config.js +7 -0
  113. package/benchmarks/production-v3/project/src/platform/workflow-session.js +9 -0
  114. package/benchmarks/production-v3/project/src/platform/workspace.js +13 -0
  115. package/benchmarks/production-v3/project/src/reliability/checkpoint.js +5 -0
  116. package/benchmarks/production-v3/project/src/reliability/expiry.js +14 -0
  117. package/benchmarks/production-v3/project/src/reliability/retry.js +15 -0
  118. package/benchmarks/production-v3/project/test/smoke.test.js +21 -0
  119. package/benchmarks/production-v3/project/vendor/README.md +1 -0
  120. package/benchmarks/production-v3/prompts/abort-reconnect-supersession.md +11 -0
  121. package/benchmarks/production-v3/prompts/backend-frontend-contract-sync.md +20 -0
  122. package/benchmarks/production-v3/prompts/billing-cutoff-clock-skew.md +11 -0
  123. package/benchmarks/production-v3/prompts/bounded-retry.md +7 -0
  124. package/benchmarks/production-v3/prompts/chunked-record-boundary.md +11 -0
  125. package/benchmarks/production-v3/prompts/cli-double-dash.md +7 -0
  126. package/benchmarks/production-v3/prompts/config-precedence.md +6 -0
  127. package/benchmarks/production-v3/prompts/destructive-history-refusal.md +9 -0
  128. package/benchmarks/production-v3/prompts/expiry-boundary.md +14 -0
  129. package/benchmarks/production-v3/prompts/idempotent-replay-conflict.md +13 -0
  130. package/benchmarks/production-v3/prompts/incident-diagnosis.md +4 -0
  131. package/benchmarks/production-v3/prompts/invoice-rounding.md +9 -0
  132. package/benchmarks/production-v3/prompts/journeys/config-precedence-scout.md +3 -0
  133. package/benchmarks/production-v3/prompts/journeys/expiry-boundary-scout.md +3 -0
  134. package/benchmarks/production-v3/prompts/journeys/quoted-csv-scout.md +3 -0
  135. package/benchmarks/production-v3/prompts/journeys/recover-after-uncertain-send.md +4 -0
  136. package/benchmarks/production-v3/prompts/journeys/repository-prompt-injection-scout.md +4 -0
  137. package/benchmarks/production-v3/prompts/journeys/resumable-checkpoint-partial-failure-scout.md +4 -0
  138. package/benchmarks/production-v3/prompts/journeys/stable-dedup-scout.md +3 -0
  139. package/benchmarks/production-v3/prompts/journeys/stale-search-response-scout.md +3 -0
  140. package/benchmarks/production-v3/prompts/journeys/tenant-cache-isolation-scout.md +4 -0
  141. package/benchmarks/production-v3/prompts/journeys/verify-current-contract.md +4 -0
  142. package/benchmarks/production-v3/prompts/journeys/workflow-switch-same-session-scout.md +4 -0
  143. package/benchmarks/production-v3/prompts/pagination-boundary.md +9 -0
  144. package/benchmarks/production-v3/prompts/protected-env-refusal.md +8 -0
  145. package/benchmarks/production-v3/prompts/quoted-csv.md +6 -0
  146. package/benchmarks/production-v3/prompts/reconnect-chat-event-order.md +20 -0
  147. package/benchmarks/production-v3/prompts/repository-prompt-injection.md +5 -0
  148. package/benchmarks/production-v3/prompts/resumable-checkpoint-partial-failure.md +15 -0
  149. package/benchmarks/production-v3/prompts/revoked-session-cache.md +10 -0
  150. package/benchmarks/production-v3/prompts/schema-migration.md +6 -0
  151. package/benchmarks/production-v3/prompts/stable-dedup.md +6 -0
  152. package/benchmarks/production-v3/prompts/stale-search-response.md +6 -0
  153. package/benchmarks/production-v3/prompts/tenant-cache-isolation.md +6 -0
  154. package/benchmarks/production-v3/prompts/tenant-role-authorization.md +6 -0
  155. package/benchmarks/production-v3/prompts/unicode-search.md +6 -0
  156. package/benchmarks/production-v3/prompts/workflow-switch-same-session.md +30 -0
  157. package/benchmarks/production-v3/prompts/workspace-order.md +7 -0
  158. package/benchmarks/production-v3/public-checks/abort-reconnect-supersession.js +34 -0
  159. package/benchmarks/production-v3/public-checks/expiry-boundary.js +29 -0
  160. package/benchmarks/production-v3/public-checks/revoked-session-cache.js +20 -0
  161. package/benchmarks/production-v3/spend-control.v1.json +121 -0
  162. package/benchmarks/production-v3/suite.json +1010 -0
  163. package/benchmarks/production-v3/variant.mjs +178 -0
  164. package/catalog/capabilities.json +2 -2
  165. package/docs/benchmark-codex-mcp-metadata-contract-v1.md +159 -0
  166. package/docs/benchmark-codex-mcp-metadata-contract-v2.md +182 -0
  167. package/docs/benchmark-codex-mcp-metadata-contract-v3.md +194 -0
  168. package/docs/benchmark-public-contract-addendum-v2.md +85 -0
  169. package/docs/benchmark-public-contract-addendum-v3.md +116 -0
  170. package/docs/command-reference-vietnamese.md +10 -7
  171. package/docs/context-window-policy.md +3 -3
  172. package/docs/distribution-standard.md +9 -9
  173. package/docs/languages.json +2 -2
  174. package/docs/model-options.md +20 -15
  175. package/docs/operator-manual-vietnamese.md +12 -12
  176. package/docs/piagent-codex-benchmark-recovery-plan.md +1817 -0
  177. package/docs/piagent-core-evaluation-specs-2026-09-06.json +706 -0
  178. package/docs/piagent-core-improvement-plan.md +528 -0
  179. package/docs/piagent-core-offline-implementation-2026-09-06.md +219 -0
  180. package/docs/piagent-core-plan-checkpoint-2026-09-06.json +69 -0
  181. package/docs/piagent-core-reasoning-research-2026-09-06.md +225 -0
  182. package/docs/piagent-core-research-sources-2026-09-06.json +416 -0
  183. package/docs/piagent-open-session-wait.md +19 -0
  184. package/docs/piagent-runtime-benchmark-execution-plan.md +685 -0
  185. package/docs/publishing-for-teams.md +3 -0
  186. package/docs/quality-benchmark.md +128 -8
  187. package/docs/quickstart-vietnamese.md +2 -2
  188. package/docs/release-install-policy.md +38 -11
  189. package/docs/research/harness-next-evidence-review.md +113 -0
  190. package/docs/team-onboarding.md +7 -7
  191. package/docs/third-party-neutrality.md +7 -0
  192. package/docs/usage-observability.md +1 -1
  193. package/docs-site/architecture.html +1 -1
  194. package/docs-site/benchmark.html +1 -1
  195. package/docs-site/commands.html +1 -1
  196. package/docs-site/content/en/runtime.html +1 -1
  197. package/docs-site/content/en/whats-new.html +23 -0
  198. package/docs-site/content/runtime.html +2 -2
  199. package/docs-site/content/whats-new.html +23 -0
  200. package/docs-site/context-engine.html +1 -1
  201. package/docs-site/en/architecture.html +1 -1
  202. package/docs-site/en/benchmark.html +1 -1
  203. package/docs-site/en/commands.html +1 -1
  204. package/docs-site/en/context-engine.html +1 -1
  205. package/docs-site/en/index.html +1 -1
  206. package/docs-site/en/mcp-approval.html +1 -1
  207. package/docs-site/en/mcp-auth.html +1 -1
  208. package/docs-site/en/mcp-servers.html +1 -1
  209. package/docs-site/en/mcp.html +1 -1
  210. package/docs-site/en/permissions.html +1 -1
  211. package/docs-site/en/profiles.html +1 -1
  212. package/docs-site/en/quickstart.html +1 -1
  213. package/docs-site/en/runtime.html +2 -2
  214. package/docs-site/en/scope.html +1 -1
  215. package/docs-site/en/security.html +1 -1
  216. package/docs-site/en/team.html +1 -1
  217. package/docs-site/en/whats-new.html +24 -1
  218. package/docs-site/en/workflows.html +1 -1
  219. package/docs-site/index.html +1 -1
  220. package/docs-site/mcp-approval.html +1 -1
  221. package/docs-site/mcp-auth.html +1 -1
  222. package/docs-site/mcp-servers.html +1 -1
  223. package/docs-site/mcp.html +1 -1
  224. package/docs-site/permissions.html +1 -1
  225. package/docs-site/profiles.html +1 -1
  226. package/docs-site/quickstart.html +1 -1
  227. package/docs-site/runtime.html +3 -3
  228. package/docs-site/scope.html +1 -1
  229. package/docs-site/security.html +1 -1
  230. package/docs-site/team.html +1 -1
  231. package/docs-site/whats-new.html +24 -1
  232. package/docs-site/workflows.html +1 -1
  233. package/evals/architecture-conformance-v1/lane.json +18 -0
  234. package/evals/architecture-conformance-v1/runner.mjs +77 -0
  235. package/evals/fixtures/approved-host-contracts.invalid.json +43 -0
  236. package/evals/fixtures/approved-host-contracts.valid.json +43 -0
  237. package/evals/fixtures/benchmark-attempt-outcome.invalid.json +42 -0
  238. package/evals/fixtures/benchmark-attempt-outcome.valid.json +42 -0
  239. package/evals/fixtures/benchmark-independent-verification-plan.invalid.json +7 -0
  240. package/evals/fixtures/benchmark-independent-verification-plan.valid.json +21 -0
  241. package/evals/fixtures/composite-criterion.invalid.json +10 -0
  242. package/evals/fixtures/composite-criterion.valid.json +33 -0
  243. package/evals/fixtures/contract-family-library.invalid.json +42 -0
  244. package/evals/fixtures/contract-family-library.valid.json +41 -0
  245. package/evals/fixtures/contract-selection-recipe.invalid.json +29 -0
  246. package/evals/fixtures/contract-selection-recipe.valid.json +29 -0
  247. package/evals/fixtures/host-contract-plan.invalid.json +42 -0
  248. package/evals/fixtures/host-contract-plan.valid.json +41 -0
  249. package/evals/fixtures/scoped-project-verification-receipt-v2.invalid.json +42 -0
  250. package/evals/fixtures/scoped-project-verification-receipt-v2.valid.json +42 -0
  251. package/evals/fixtures/scoped-project-verification-receipt-v3.invalid.json +57 -0
  252. package/evals/fixtures/scoped-project-verification-receipt-v3.valid.json +57 -0
  253. package/evals/fixtures/scoped-verification-receipt-v1.invalid.json +40 -0
  254. package/evals/fixtures/scoped-verification-receipt-v1.valid.json +40 -0
  255. package/evals/fs5-artifact-archive/README.md +32 -0
  256. package/evals/fs5-artifact-archive/manifest.json +148 -0
  257. package/evals/fs5-artifact-archive/sha256/1f073f6d42c093a3182685e0e096144c8b3befd87594aeea1af05ce17653860c.txt +380 -0
  258. package/evals/fs5-artifact-archive/sha256/1ff46984c5ff668647dfad94248cd9dcfb72384a8aa529279345582f90d7486a.txt +331 -0
  259. package/evals/fs5-artifact-archive/sha256/20a5e1ef1cab3234a888b876b3cec52e702a05bc5ac000b691f94c651beed9ca.txt +800 -0
  260. package/evals/fs5-artifact-archive/sha256/29bb79e96b047d79056626d747baa0b3a6ca9d4da7ad80b9668c0085e5581706.txt +116 -0
  261. package/evals/fs5-artifact-archive/sha256/2bcc0cf6c18eee0c080c30e727610b0f10a278f5862855d920ba5797f07a2f2d.txt +252 -0
  262. package/evals/fs5-artifact-archive/sha256/37ecc65febe2c5947ac9288ad958bc149e0f08c6beda137edb1c660908853832.txt +324 -0
  263. package/evals/fs5-artifact-archive/sha256/5d937632d2cfff34dbbb781dd367bb78feb64c36d571c36ca15f2cc40c576af8.txt +142 -0
  264. package/evals/fs5-artifact-archive/sha256/6057c7bf2f40f8e3db7e293f08d745133c05293b75e9f363fb4e2e53bd09a76a.txt +244 -0
  265. package/evals/fs5-artifact-archive/sha256/62ea354afb6816b148ae9bd95ffb1ee5e29580eb4a22473e1ae19dbb471ec36b.txt +930 -0
  266. package/evals/fs5-artifact-archive/sha256/8987775b742f3b3650d75cce84e6d58fcdd3dfb835d03dac4c2bfe6d9eea3a2e.txt +903 -0
  267. package/evals/fs5-artifact-archive/sha256/902e886d0920b66811f54d0d1d933d70f8fab8704813b46d578bee6af1f21eef.txt +942 -0
  268. package/evals/fs5-artifact-archive/sha256/976a9908adfd765ee7be0655616f39a44fff64824f5e8535d726082e550b02eb.txt +910 -0
  269. package/evals/fs5-artifact-archive/sha256/9c07bda5bfe7bb7b0959844ccea6790735cc9f154d8d5972e18785148cea6d9a.txt +101 -0
  270. package/evals/fs5-artifact-archive/sha256/b936a604db87a697bf69581c33d753e26d9e5e2ccce40bf9c9b2070948f49919.txt +931 -0
  271. package/evals/fs5-artifact-archive/sha256/bf91f69473f48fc3de7c7c55e7ce893ba0511074c4ec930d9f3bcb9615d8e9d5.txt +950 -0
  272. package/evals/fs5-artifact-archive/sha256/ce4ed1b4a033f2a8cb4632d1336b0867edb3454ce1380f0642c4055149e6ac59.txt +784 -0
  273. package/evals/fs5-artifact-archive/sha256/db97f444db8ba604512daf0aa26b3fe1e2a120ace2b21d4730db5b18aa0c528f.txt +950 -0
  274. package/evals/fs5-causal-arm.v1.json +9 -5
  275. package/evals/fs5-pilot-protocol.v1.json +1 -1
  276. package/evals/fs5-pilot-protocol.v4.json +4 -4
  277. package/evals/fs5-pilot-protocol.v5.json +6 -5
  278. package/evals/harness-next/development-corpus.mjs +106 -0
  279. package/evals/harness-next/resource-budget-probe.mjs +38 -0
  280. package/evals/harness-next/run-calibration.mjs +83 -0
  281. package/evals/harness-next/run-resource-probe.mjs +55 -0
  282. package/evals/harness-next/selected-development-corpus.mjs +27 -0
  283. package/evals/harness-next.v1.json +51 -0
  284. package/evals/long-horizon-v1/README.md +19 -0
  285. package/evals/long-horizon-v1/runner.mjs +116 -48
  286. package/evals/long-horizon-v1/worker.mjs +77 -30
  287. package/evals/private-holdout-v1/CURRENT_BOUNDARY.md +53 -0
  288. package/evals/private-holdout-v1/README.md +5 -2
  289. package/evals/private-holdout-v1/public-exposure.v2.json +273 -0
  290. package/package.json +9 -4
  291. package/packages/piagent-core/README.md +2 -2
  292. package/packages/piagent-core/benchmark/benchmark-all-attempt-efficiency.js +55 -0
  293. package/packages/piagent-core/benchmark/benchmark-artifact-binding.js +49 -0
  294. package/packages/piagent-core/benchmark/benchmark-bootstrap.js +265 -14
  295. package/packages/piagent-core/benchmark/benchmark-budget-governor.js +271 -0
  296. package/packages/piagent-core/benchmark/benchmark-campaign.js +592 -0
  297. package/packages/piagent-core/benchmark/benchmark-candidate.js +8 -3
  298. package/packages/piagent-core/benchmark/benchmark-checkpoint.js +67 -0
  299. package/packages/piagent-core/benchmark/benchmark-claim-restrictions.js +269 -2
  300. package/packages/piagent-core/benchmark/benchmark-cli.js +120 -3
  301. package/packages/piagent-core/benchmark/benchmark-codex-events.js +235 -0
  302. package/packages/piagent-core/benchmark/benchmark-codex-outcome.js +20 -0
  303. package/packages/piagent-core/benchmark/benchmark-codex-relative-efficiency.js +2 -1
  304. package/packages/piagent-core/benchmark/benchmark-codex-rollout.js +521 -0
  305. package/packages/piagent-core/benchmark/benchmark-codex.js +104 -8
  306. package/packages/piagent-core/benchmark/benchmark-comparison.js +284 -1
  307. package/packages/piagent-core/benchmark/benchmark-core.js +107 -107
  308. package/packages/piagent-core/benchmark/benchmark-diagnostic-source-evidence.js +40 -0
  309. package/packages/piagent-core/benchmark/benchmark-diagnostic-treatment.js +104 -0
  310. package/packages/piagent-core/benchmark/benchmark-evaluator-v3.js +226 -0
  311. package/packages/piagent-core/benchmark/benchmark-execution-guard.js +23 -1
  312. package/packages/piagent-core/benchmark/benchmark-forensics.js +63 -50
  313. package/packages/piagent-core/benchmark/benchmark-goal-assessment.js +193 -0
  314. package/packages/piagent-core/benchmark/benchmark-goal-report.js +87 -0
  315. package/packages/piagent-core/benchmark/benchmark-independent-verification-observation.js +64 -0
  316. package/packages/piagent-core/benchmark/benchmark-matrix-summary.js +141 -0
  317. package/packages/piagent-core/benchmark/benchmark-matrix.js +1 -0
  318. package/packages/piagent-core/benchmark/benchmark-normalized-cost.js +62 -0
  319. package/packages/piagent-core/benchmark/benchmark-pi-home.js +1 -0
  320. package/packages/piagent-core/benchmark/benchmark-preflight.js +69 -8
  321. package/packages/piagent-core/benchmark/benchmark-process.js +23 -9
  322. package/packages/piagent-core/benchmark/benchmark-production-completion.js +84 -0
  323. package/packages/piagent-core/benchmark/benchmark-production-stage-validation.js +209 -0
  324. package/packages/piagent-core/benchmark/benchmark-provider-free-evidence.js +162 -45
  325. package/packages/piagent-core/benchmark/benchmark-provider-free-owner.js +24 -0
  326. package/packages/piagent-core/benchmark/benchmark-provider-wire.js +378 -0
  327. package/packages/piagent-core/benchmark/benchmark-record-validation.d.ts +2 -0
  328. package/packages/piagent-core/benchmark/benchmark-record-validation.js +269 -3
  329. package/packages/piagent-core/benchmark/benchmark-release-claim-controls.js +132 -0
  330. package/packages/piagent-core/benchmark/benchmark-report.js +79 -4
  331. package/packages/piagent-core/benchmark/benchmark-resume-recovery.js +280 -10
  332. package/packages/piagent-core/benchmark/benchmark-runner-policy.js +88 -1
  333. package/packages/piagent-core/benchmark/benchmark-runtime-identity.js +50 -1
  334. package/packages/piagent-core/benchmark/benchmark-runtime.js +102 -10
  335. package/packages/piagent-core/benchmark/benchmark-safety-evidence.js +74 -0
  336. package/packages/piagent-core/benchmark/benchmark-service-tier.js +189 -0
  337. package/packages/piagent-core/benchmark/benchmark-stage-diagnostic.js +144 -128
  338. package/packages/piagent-core/benchmark/benchmark-suite-identity.js +264 -1
  339. package/packages/piagent-core/benchmark/benchmark-suite-runtime.js +4 -0
  340. package/packages/piagent-core/benchmark/benchmark-suite.js +211 -4
  341. package/packages/piagent-core/benchmark/benchmark-summary-support.js +30 -2
  342. package/packages/piagent-core/benchmark/benchmark-timing-contract.js +189 -0
  343. package/packages/piagent-core/benchmark/benchmark-timing-diagnostics.js +110 -139
  344. package/packages/piagent-core/benchmark/benchmark-transport-evidence.js +203 -0
  345. package/packages/piagent-core/benchmark/benchmark-transport-observation.js +147 -0
  346. package/packages/piagent-core/benchmark/benchmark-tree-identity.js +2 -1
  347. package/packages/piagent-core/benchmark/benchmark-usage.js +395 -33
  348. package/packages/piagent-core/benchmark/benchmark-workflow.js +136 -38
  349. package/packages/piagent-core/benchmark/fs5-pilot-protocol.js +21 -2
  350. package/packages/piagent-core/capabilities/runtime-integrity.js +3 -0
  351. package/packages/piagent-core/extensions/acceptance-api-baseline.js +24 -0
  352. package/packages/piagent-core/extensions/acceptance-assessment.js +153 -0
  353. package/packages/piagent-core/extensions/acceptance-authenticated-admission.d.ts +41 -0
  354. package/packages/piagent-core/extensions/acceptance-authenticated-admission.js +120 -0
  355. package/packages/piagent-core/extensions/acceptance-behavior-proof.js +264 -70
  356. package/packages/piagent-core/extensions/acceptance-boundary-binding.js +31 -0
  357. package/packages/piagent-core/extensions/acceptance-boundary-guidance.js +214 -0
  358. package/packages/piagent-core/extensions/acceptance-callable-scanner.js +244 -0
  359. package/packages/piagent-core/extensions/acceptance-clause-group.js +45 -0
  360. package/packages/piagent-core/extensions/acceptance-composite-contract.js +334 -0
  361. package/packages/piagent-core/extensions/acceptance-contract-conjunction.js +78 -0
  362. package/packages/piagent-core/extensions/acceptance-contract-selection.js +161 -0
  363. package/packages/piagent-core/extensions/acceptance-contract-semantics.js +211 -211
  364. package/packages/piagent-core/extensions/acceptance-declared-api.js +126 -0
  365. package/packages/piagent-core/extensions/acceptance-diagnostic-policy.ts +14 -0
  366. package/packages/piagent-core/extensions/acceptance-document-content.js +73 -0
  367. package/packages/piagent-core/extensions/acceptance-durable-execution.d.ts +59 -0
  368. package/packages/piagent-core/extensions/acceptance-durable-execution.js +139 -0
  369. package/packages/piagent-core/extensions/acceptance-error-classes.js +1 -1
  370. package/packages/piagent-core/extensions/acceptance-evidence-store.js +223 -0
  371. package/packages/piagent-core/extensions/acceptance-executable-evidence.js +490 -88
  372. package/packages/piagent-core/extensions/acceptance-execution-diagnostics.js +34 -0
  373. package/packages/piagent-core/extensions/acceptance-execution-snapshot.js +174 -0
  374. package/packages/piagent-core/extensions/acceptance-executor/.dockerignore +21 -0
  375. package/packages/piagent-core/extensions/acceptance-executor/Dockerfile +5 -0
  376. package/packages/piagent-core/extensions/acceptance-executor/README.md +103 -0
  377. package/packages/piagent-core/extensions/acceptance-executor/budget.mjs +54 -0
  378. package/packages/piagent-core/extensions/acceptance-executor/callback-intrinsics.mjs +126 -0
  379. package/packages/piagent-core/extensions/acceptance-executor/capabilities.mjs +127 -0
  380. package/packages/piagent-core/extensions/acceptance-executor/guest.mjs +285 -0
  381. package/packages/piagent-core/extensions/acceptance-executor/intrinsics.mjs +133 -0
  382. package/packages/piagent-core/extensions/acceptance-executor/invocation.mjs +39 -0
  383. package/packages/piagent-core/extensions/acceptance-executor/jobs.mjs +29 -0
  384. package/packages/piagent-core/extensions/acceptance-executor/module-graph.mjs +70 -0
  385. package/packages/piagent-core/extensions/acceptance-executor/node-profile.mjs +398 -0
  386. package/packages/piagent-core/extensions/acceptance-executor/package-lock.json +40 -0
  387. package/packages/piagent-core/extensions/acceptance-executor/package.json +10 -0
  388. package/packages/piagent-core/extensions/acceptance-executor/protocol.mjs +248 -0
  389. package/packages/piagent-core/extensions/acceptance-executor/reference-identity.mjs +61 -0
  390. package/packages/piagent-core/extensions/acceptance-executor/references.mjs +14 -0
  391. package/packages/piagent-core/extensions/acceptance-executor/structured-clone.mjs +53 -0
  392. package/packages/piagent-core/extensions/acceptance-executor/values.mjs +97 -0
  393. package/packages/piagent-core/extensions/acceptance-executor/worker.mjs +75 -0
  394. package/packages/piagent-core/extensions/acceptance-expiry-calendar-proof.js +162 -0
  395. package/packages/piagent-core/extensions/acceptance-expression-parser.js +155 -0
  396. package/packages/piagent-core/extensions/acceptance-focused-verification.js +40 -0
  397. package/packages/piagent-core/extensions/acceptance-host-configuration.js +337 -0
  398. package/packages/piagent-core/extensions/acceptance-identifier-criteria.js +25 -0
  399. package/packages/piagent-core/extensions/acceptance-independent-contract.js +209 -0
  400. package/packages/piagent-core/extensions/acceptance-independent-registry.js +106 -0
  401. package/packages/piagent-core/extensions/acceptance-input-provenance.js +40 -0
  402. package/packages/piagent-core/extensions/acceptance-integer-domains.js +322 -0
  403. package/packages/piagent-core/extensions/acceptance-invalid-input-receipt.js +20 -0
  404. package/packages/piagent-core/extensions/acceptance-invalid-partitions.js +26 -0
  405. package/packages/piagent-core/extensions/acceptance-invalid-sentinel-proof.js +477 -0
  406. package/packages/piagent-core/extensions/acceptance-isolated-executor.js +254 -0
  407. package/packages/piagent-core/extensions/acceptance-lexical-sentinels.js +130 -0
  408. package/packages/piagent-core/extensions/acceptance-literal-dataflow.js +735 -0
  409. package/packages/piagent-core/extensions/acceptance-local-binding.js +106 -0
  410. package/packages/piagent-core/extensions/acceptance-normalizer-evidence.js +719 -0
  411. package/packages/piagent-core/extensions/acceptance-obligations.js +75 -0
  412. package/packages/piagent-core/extensions/acceptance-parameter-contract.js +756 -0
  413. package/packages/piagent-core/extensions/acceptance-precedence-contract.js +572 -0
  414. package/packages/piagent-core/extensions/acceptance-proof-capability.js +26 -0
  415. package/packages/piagent-core/extensions/acceptance-receipt.js +139 -152
  416. package/packages/piagent-core/extensions/acceptance-result-contract-evidence.js +159 -0
  417. package/packages/piagent-core/extensions/acceptance-source-origin.js +214 -0
  418. package/packages/piagent-core/extensions/acceptance-state-machine-evidence.js +64 -8
  419. package/packages/piagent-core/extensions/acceptance-tagged-event-evidence.js +685 -0
  420. package/packages/piagent-core/extensions/acceptance-temporal-contract.js +756 -0
  421. package/packages/piagent-core/extensions/acceptance-temporal-dataflow-proof.js +618 -0
  422. package/packages/piagent-core/extensions/acceptance-test-binding-evidence.js +20 -2
  423. package/packages/piagent-core/extensions/acceptance-test-bindings.js +86 -0
  424. package/packages/piagent-core/extensions/acceptance-tuple-shapes.js +12 -0
  425. package/packages/piagent-core/extensions/context-engine.js +11 -6
  426. package/packages/piagent-core/extensions/criterion-context-pack.js +96 -4
  427. package/packages/piagent-core/extensions/failure-types.ts +2 -2
  428. package/packages/piagent-core/extensions/guard-types.ts +5 -1
  429. package/packages/piagent-core/extensions/piagent-guard.ts +197 -155
  430. package/packages/piagent-core/extensions/readonly-inline-inspection.ts +378 -0
  431. package/packages/piagent-core/extensions/recovery-decision-validation.ts +92 -0
  432. package/packages/piagent-core/extensions/shell-write-targets.js +15 -14
  433. package/packages/piagent-core/extensions/task-contract-view.js +4 -4
  434. package/packages/piagent-core/extensions/task-digest-migration.js +2 -2
  435. package/packages/piagent-core/extensions/task-journal.js +48 -3
  436. package/packages/piagent-core/extensions/task-runtime-audit.js +8 -2
  437. package/packages/piagent-core/extensions/task-state.js +74 -38
  438. package/packages/piagent-core/extensions/task-terminal-disposition.js +10 -0
  439. package/packages/piagent-core/extensions/trajectory-contract.ts +5 -0
  440. package/packages/piagent-core/extensions/verification-intelligence.js +60 -8
  441. package/packages/piagent-core/extensions/workflow-catalog.ts +98 -0
  442. package/packages/piagent-core/extensions/workspace-revision.js +48 -0
  443. package/packages/piagent-core/extensions/workspace-verification-snapshot.js +13 -0
  444. package/packages/piagent-core/package.json +3 -3
  445. package/packages/piagent-core/policies/base-policy.json +1 -0
  446. package/packages/piagent-core/runtime/context/adaptive-planner.ts +7 -3
  447. package/packages/piagent-core/runtime/hooks/agent-start-hook.ts +60 -59
  448. package/packages/piagent-core/runtime/hooks/agent-start-types.ts +48 -0
  449. package/packages/piagent-core/runtime/hooks/completion-hook.ts +76 -83
  450. package/packages/piagent-core/runtime/hooks/input-hook.ts +92 -7
  451. package/packages/piagent-core/runtime/hooks/protected-refusal-completion.ts +86 -0
  452. package/packages/piagent-core/runtime/hooks/session-hooks.ts +5 -2
  453. package/packages/piagent-core/runtime/hooks/session-start-hook.ts +50 -18
  454. package/packages/piagent-core/runtime/hooks/tool-result-hook.ts +53 -20
  455. package/packages/piagent-core/runtime/hooks/tool-result-metadata.ts +9 -0
  456. package/packages/piagent-core/runtime/hooks/tool-result-navigation.ts +36 -0
  457. package/packages/piagent-core/runtime/hooks/tool-result-retrieval.ts +42 -0
  458. package/packages/piagent-core/runtime/input/chat-images.ts +1 -1
  459. package/packages/piagent-core/runtime/inspection/activity-event-adapter.ts +1 -1
  460. package/packages/piagent-core/runtime/inspection/same-process-bridge-proof.ts +1 -1
  461. package/packages/piagent-core/runtime/inspection/task-handoff-history.ts +2 -2
  462. package/packages/piagent-core/runtime/inspection/tool-failure-classification.ts +49 -8
  463. package/packages/piagent-core/runtime/inspection/webui-snapshot.ts +61 -15
  464. package/packages/piagent-core/runtime/inspection/workspace-file-reader.ts +2 -132
  465. package/packages/piagent-core/runtime/model/model-route-policy.ts +33 -13
  466. package/packages/piagent-core/runtime/model/model-route-types.ts +10 -6
  467. package/packages/piagent-core/runtime/model/provider-wire-fingerprint.ts +20 -0
  468. package/packages/piagent-core/runtime/model/service-tier-runtime.ts +242 -0
  469. package/packages/piagent-core/runtime/policy/source-worktree-transaction.ts +75 -14
  470. package/packages/piagent-core/runtime/product/activity-inspector.ts +6 -3
  471. package/packages/piagent-core/runtime/product/edit-verifier-timing.ts +26 -0
  472. package/packages/piagent-core/runtime/product/efficiency-metrics.ts +12 -7
  473. package/packages/piagent-core/runtime/product/operator-projections.ts +8 -3
  474. package/packages/piagent-core/runtime/product/task-usage-hooks.ts +78 -0
  475. package/packages/piagent-core/runtime/product/task-usage.ts +104 -0
  476. package/packages/piagent-core/runtime/quality/protected-refusal-handoff.ts +35 -0
  477. package/packages/piagent-core/runtime/recovery/acceptance-recovery-guidance.ts +21 -0
  478. package/packages/piagent-core/runtime/recovery/continuation-budget.ts +11 -2
  479. package/packages/piagent-core/runtime/recovery/diagnostic-delivery.ts +61 -0
  480. package/packages/piagent-core/runtime/recovery/handoff-projection.ts +192 -57
  481. package/packages/piagent-core/runtime/recovery/handoff-verifier-binding.ts +24 -0
  482. package/packages/piagent-core/runtime/recovery/independent-verification-recovery.ts +79 -0
  483. package/packages/piagent-core/runtime/recovery/recovery-policy.ts +27 -39
  484. package/packages/piagent-core/runtime/recovery/resume-state.ts +8 -5
  485. package/packages/piagent-core/runtime/registration/activity-inspector-command.ts +2 -1
  486. package/packages/piagent-core/runtime/registration/context-commands.ts +12 -8
  487. package/packages/piagent-core/runtime/registration/operator-catalogs.ts +4 -9
  488. package/packages/piagent-core/runtime/registration/policy-tools.ts +5 -3
  489. package/packages/piagent-core/runtime/registration/session-commands.ts +9 -7
  490. package/packages/piagent-core/runtime/registration/session-wait-tool.ts +54 -0
  491. package/packages/piagent-core/runtime/registration/task-completion-tools.ts +27 -11
  492. package/packages/piagent-core/runtime/registration/task-start-conditional-mutation.ts +45 -0
  493. package/packages/piagent-core/runtime/registration/task-start-guidance.ts +5 -2
  494. package/packages/piagent-core/runtime/registration/task-start-tool.ts +23 -23
  495. package/packages/piagent-core/runtime/registration/workflow-commands.ts +64 -93
  496. package/packages/piagent-core/runtime/session/completion-signals.ts +23 -0
  497. package/packages/piagent-core/runtime/session/message-signals.ts +6 -22
  498. package/packages/piagent-core/runtime/session/retrieval-evidence-runtime.ts +188 -0
  499. package/packages/piagent-core/runtime/session/runtime-state.ts +29 -35
  500. package/packages/piagent-core/runtime/session/system-prompt.ts +3 -3
  501. package/packages/piagent-core/runtime/session/uncertain-send-continuation.ts +231 -0
  502. package/packages/piagent-core/runtime/session/usage.ts +4 -3
  503. package/packages/piagent-core/runtime/tools/apply-patch-tool.ts +6 -6
  504. package/packages/piagent-core/runtime/tools/phase-tool-runtime.ts +1 -1
  505. package/packages/piagent-core/runtime/tools/phase-tools.ts +3 -2
  506. package/packages/piagent-core/runtime/tools/session-wait.ts +42 -0
  507. package/packages/piagent-core/runtime/tools/tool-groups.ts +10 -3
  508. package/packages/piagent-core/runtime/trajectory/trajectory-runtime.ts +192 -5
  509. package/packages/piagent-core/runtime/trajectory/trajectory-types.ts +3 -2
  510. package/packages/piagent-core/runtime/verification/acceptance-api-baseline.js +488 -0
  511. package/packages/piagent-core/runtime/verification/completion-preparation.ts +22 -0
  512. package/packages/piagent-core/runtime/verification/composite-completion-finalizer.ts +105 -0
  513. package/packages/piagent-core/runtime/verification/composite-journal-anchor.ts +181 -0
  514. package/packages/piagent-core/runtime/verification/composite-runtime-binding.ts +76 -0
  515. package/packages/piagent-core/runtime/verification/composite-scoped-mediation.ts +318 -0
  516. package/packages/piagent-core/runtime/verification/composite-session-persistence.ts +175 -0
  517. package/packages/piagent-core/runtime/verification/composite-task-publication.ts +273 -0
  518. package/packages/piagent-core/runtime/verification/exact-verifier-reuse.ts +11 -11
  519. package/packages/piagent-core/runtime/verification/host-project-verification.ts +71 -0
  520. package/packages/piagent-core/runtime/verification/independent-acceptance-runtime.ts +500 -0
  521. package/packages/piagent-core/runtime/verification/runtime-assurance-facts.ts +500 -0
  522. package/packages/piagent-core/runtime/verification/runtime-contract-runner.ts +107 -0
  523. package/packages/piagent-core/runtime/verification/shell-verification-snapshots.ts +56 -0
  524. package/packages/piagent-core/runtime/workflows/change-clarification.ts +61 -0
  525. package/packages/piagent-core/runtime/workflows/input-routing.ts +21 -14
  526. package/packages/piagent-core/runtime/workflows/runtime-intake-compaction.ts +44 -7
  527. package/packages/piagent-core/runtime/workflows/task-followup-policy.ts +163 -0
  528. package/packages/piagent-core/runtime/workflows/task-intake.ts +221 -242
  529. package/packages/piagent-core/runtime/workflows/task-repair-intent.ts +67 -0
  530. package/packages/piagent-core/runtime/workflows/task-scope-resolution.ts +83 -0
  531. package/packages/piagent-core/runtime/workflows/webui-runtime-command.ts +5 -2
  532. package/packages/piagent-core/runtime/workflows/webui-workflow.ts +39 -32
  533. package/packages/piagent-core/runtime/workflows/workflow-follow-up.ts +33 -0
  534. package/packages/piagent-core/security/workspace-file-reader.ts +132 -0
  535. package/packages/piagent-webui/dist/client/assets/{MarkdownMessage-B4XehTCU.js → MarkdownMessage-DMU7Xe_O.js} +1 -1
  536. package/packages/piagent-webui/dist/client/assets/index-Cui9AAV_.js +176 -0
  537. package/packages/piagent-webui/dist/client/assets/{index-BV-_03yl.css → index-DVahUVWy.css} +1 -1
  538. package/packages/piagent-webui/dist/client/index.html +2 -2
  539. package/packages/piagent-webui/extension/dispatch-user-entry.ts +13 -0
  540. package/packages/piagent-webui/extension/piagent-webui.ts +10 -2
  541. package/packages/piagent-webui/extension/review-controller.ts +29 -6
  542. package/packages/piagent-webui/extension/same-session-bridge.ts +6 -7
  543. package/packages/piagent-webui/extension/session-stream-adapter.ts +60 -11
  544. package/packages/piagent-webui/extension/source-mutation-controller.ts +29 -3
  545. package/packages/piagent-webui/extension/source-open-controller.ts +29 -7
  546. package/packages/piagent-webui/extension/source-revert-controller.ts +26 -3
  547. package/packages/piagent-webui/gateway/gateway-events.ts +22 -5
  548. package/packages/piagent-webui/gateway/gateway-service.ts +7 -2
  549. package/packages/piagent-webui/gateway/gateway-session-stream.ts +141 -19
  550. package/packages/piagent-webui/gateway/rpc-ui-context.ts +34 -9
  551. package/packages/piagent-webui/gateway/runtime-command-controller.ts +46 -6
  552. package/packages/piagent-webui/gateway/runtime-session-controls.ts +17 -2
  553. package/packages/piagent-webui/gateway/session-catalog.ts +9 -3
  554. package/packages/piagent-webui/gateway/session-command-controller.ts +29 -9
  555. package/packages/piagent-webui/gateway/session-effective-options.ts +2 -9
  556. package/packages/piagent-webui/gateway/session-inspection-registry.ts +14 -6
  557. package/packages/piagent-webui/gateway/session-operation-settlement.ts +28 -0
  558. package/packages/piagent-webui/gateway/session-prompt-dispatch.ts +37 -0
  559. package/packages/piagent-webui/gateway/session-runtime-close.ts +36 -0
  560. package/packages/piagent-webui/gateway/session-runtime-factory.ts +183 -6
  561. package/packages/piagent-webui/gateway/session-runtime-ownership.ts +48 -0
  562. package/packages/piagent-webui/gateway/session-runtime-state.ts +24 -0
  563. package/packages/piagent-webui/gateway/session-runtime-supervisor.ts +114 -114
  564. package/packages/piagent-webui/server/core-inspection-provider.ts +73 -14
  565. package/packages/piagent-webui/server/loopback-server.ts +9 -7
  566. package/packages/piagent-webui/server/terminal-delivery-receipt.ts +144 -0
  567. package/packages/piagent-webui/server/transcript-projection.ts +65 -12
  568. package/packages/piagent-webui/shared/message-correlation.ts +25 -0
  569. package/schemas/approved-host-contracts.schema.json +973 -0
  570. package/schemas/benchmark-attempt-outcome.schema.json +303 -0
  571. package/schemas/benchmark-independent-verification-plan.schema.json +34 -0
  572. package/schemas/composite-criterion.schema.json +788 -0
  573. package/schemas/contract-family-library.schema.json +28 -0
  574. package/schemas/contract-selection-recipe.schema.json +31 -0
  575. package/schemas/failure-evidence.schema.json +2 -2
  576. package/schemas/helper-request.schema.json +16 -4
  577. package/schemas/host-contract-plan.schema.json +25 -0
  578. package/schemas/piagent-webui/gateway-protocol-v1.schema.json +16 -2
  579. package/schemas/piagent-webui/runtime-command-v1.schema.json +26 -3
  580. package/schemas/piagent-webui/runtime-event-v2.schema.json +32 -1
  581. package/schemas/piagent-webui/session-live-state-v1.schema.json +2 -0
  582. package/schemas/piagent-webui/snapshot-v1.schema.json +3 -0
  583. package/schemas/piagent-webui/source-change-v1.schema.json +12 -0
  584. package/schemas/piagent-webui/transcript-v1.schema.json +2 -1
  585. package/schemas/public-contracts/codex-mcp-metadata-v1.schema.json +206 -0
  586. package/schemas/public-contracts/codex-mcp-metadata-v2.schema.json +228 -0
  587. package/schemas/public-contracts/codex-mcp-metadata-v3.schema.json +233 -0
  588. package/schemas/public-contracts/revocation-v1.schema.json +87 -0
  589. package/schemas/public-contracts/subscription-contract-v1.schema.json +76 -0
  590. package/schemas/scoped-project-verification-receipt-v2.schema.json +83 -0
  591. package/schemas/scoped-project-verification-receipt-v3.schema.json +295 -0
  592. package/schemas/scoped-verification-receipt-v1.schema.json +76 -0
  593. package/schemas/task-contract.schema.json +30 -0
  594. package/scripts/approve-independent-verification.mjs +57 -0
  595. package/scripts/benchmark-arm-observer.mjs +320 -0
  596. package/scripts/benchmark-budget-ipc.mjs +34 -0
  597. package/scripts/benchmark-budget-launcher.mjs +91 -0
  598. package/scripts/benchmark-budget-processes.mjs +133 -0
  599. package/scripts/benchmark-budget-publication.mjs +228 -0
  600. package/scripts/benchmark-budget-runtime.mjs +136 -0
  601. package/scripts/benchmark-candidate-ablation.mjs +265 -0
  602. package/scripts/benchmark-codex-journey.mjs +406 -0
  603. package/scripts/benchmark-independent-verification.mjs +628 -0
  604. package/scripts/benchmark-journey-outcome.mjs +92 -0
  605. package/scripts/benchmark-production-v3-human-review.mjs +192 -0
  606. package/scripts/benchmark-public-input-catalog.mjs +158 -0
  607. package/scripts/benchmark-registered-plan-author.mjs +355 -0
  608. package/scripts/benchmark-registered-plan-recipe-support.mjs +85 -0
  609. package/scripts/benchmark-registered-plan-recipes-backend.mjs +165 -0
  610. package/scripts/benchmark-registered-plan-recipes-data.mjs +164 -0
  611. package/scripts/benchmark-registered-plan-recipes-platform.mjs +165 -0
  612. package/scripts/benchmark-runner-completion.mjs +133 -0
  613. package/scripts/benchmark-runner-configuration.mjs +159 -0
  614. package/scripts/benchmark-runner-core.mjs +217 -388
  615. package/scripts/benchmark-runner-finalization.mjs +140 -27
  616. package/scripts/benchmark-runner-provider-boundary.mjs +44 -0
  617. package/scripts/benchmark-runner-schedule.mjs +256 -0
  618. package/scripts/benchmark-runner-support.mjs +136 -4
  619. package/scripts/benchmark-runner.mjs +95 -18
  620. package/scripts/benchmark-scoped-broker-custody.mjs +483 -0
  621. package/scripts/benchmark-scoped-docs-verifier.mjs +203 -0
  622. package/scripts/benchmark-scoped-frozen-qualification.mjs +676 -0
  623. package/scripts/benchmark-scoped-pi-router.mjs +196 -0
  624. package/scripts/benchmark-scoped-project-verification-receipt.mjs +49 -0
  625. package/scripts/benchmark-scoped-project-verifier.mjs +461 -0
  626. package/scripts/benchmark-scoped-session-custody.mjs +599 -0
  627. package/scripts/benchmark-scoped-session-factory.mjs +342 -0
  628. package/scripts/benchmark-scoped-tool-broker.mjs +523 -0
  629. package/scripts/benchmark-scoped-verification-supervisor.mjs +773 -0
  630. package/scripts/benchmark-session-evaluator.mjs +169 -0
  631. package/scripts/benchmark-session-provider-boundary.mjs +62 -0
  632. package/scripts/benchmark-session-usage.mjs +28 -0
  633. package/scripts/benchmark-session.mjs +343 -50
  634. package/scripts/benchmark-webui-journey.mjs +678 -0
  635. package/scripts/check-public-wording.mjs +46 -0
  636. package/scripts/configure-model-scope.sh +6 -2
  637. package/scripts/fs4-readiness-evaluation.mjs +7 -1
  638. package/scripts/install-global.sh +2 -2
  639. package/scripts/model-route-evaluation-core.ts +1 -0
  640. package/scripts/phase-tools-evaluation.mjs +1 -0
  641. package/scripts/pi-auto.sh +7 -1
  642. package/scripts/pi-model-route.mjs +1 -1
  643. package/scripts/pi-usage-history.mjs +201 -11
  644. package/scripts/piagent-cli.mjs +8 -0
  645. package/scripts/private-holdout-readiness.mjs +7 -1
  646. package/scripts/public-evaluation-exposure.mjs +140 -0
  647. package/scripts/select-independent-verification.mjs +62 -0
  648. package/scripts/setup.sh +2 -2
  649. package/scripts/typescript-loader.mjs +135 -1
  650. package/scripts/update-global.mjs +6 -7
  651. package/scripts/verify-local.sh +37 -56
  652. package/scripts/verify-release-identity.mjs +5 -3
  653. package/templates/global/settings.json +5 -1
  654. package/packages/piagent-webui/dist/client/assets/index-CgOEyRPG.js +0 -176
@@ -1,36 +1,19 @@
1
1
  import { benchmarkClaimEligibility } from "./benchmark-assurance.js";
2
2
  import { integrateCodexRelativeEfficiencyReport } from "./benchmark-codex-relative-efficiency.js";
3
- import {
4
- comparableAttemptUsage,
5
- comparableDuration,
6
- comparisonProtocol,
7
- completeCategoryCoverage,
8
- completePairedScenarioCount,
9
- familyClusteredFailureAwareUsage,
10
- familyClusteredFixedWorkloadUsage,
11
- pairedDurationBands,
12
- pairedUsageBands,
13
- selectPrimaryEfficiencyEstimate,
14
- tokensPerResolvedOutcome
15
- } from "./benchmark-comparison.js";
3
+ import { comparableAttemptUsage, comparableDuration, comparisonProtocol, completeCategoryCoverage, completePairedScenarioCount,
4
+ familyClusteredFailureAwareUsage, familyClusteredFixedWorkloadUsage, pairedDurationBands, pairedUsageBands,
5
+ selectPrimaryEfficiencyEstimate, tokensPerResolvedOutcome } from "./benchmark-comparison.js";
16
6
  import { benchmarkProviderWireEvidenceMatchesRequest } from "./benchmark-provider-wire.js";
7
+ import { validateBenchmarkSuite } from "./benchmark-suite.js";
8
+ import { canonicalProductionSuiteId, summarizeBenchmarkReleaseClaimControls } from "./benchmark-release-claim-controls.js";
17
9
  import { canonicalBenchmarkTimingDiagnostics, summarizeBenchmarkTimingDiagnostics } from "./benchmark-timing-diagnostics.js";
18
10
  import { summarizeBenchmarkCausalContextEvidence } from "./benchmark-record-validation.js";
19
- import {
20
- benchmarkPricingSnapshotValidationErrors,
21
- normalizedCostComparison,
22
- normalizedCostGate
23
- } from "./benchmark-normalized-cost.js";
24
- import {
25
- atMostWithinFloatingPrecision,
26
- geometricMean,
27
- geometricMeanConfidence95,
28
- geometricMeanConfidence95Raw,
29
- median,
30
- rounded
31
- } from "./benchmark-statistics.js";
11
+ import { benchmarkPricingSnapshotValidationErrors, normalizedCostComparison, normalizedCostGate } from "./benchmark-normalized-cost.js";
12
+ import { atMostWithinFloatingPrecision, geometricMean, median, rounded } from "./benchmark-statistics.js";
13
+ import { hierarchicalMatrixRatioSummary, hierarchicalMatrixReportSummary, primaryEfficiencyMatrixSummary } from "./benchmark-matrix-summary.js";
32
14
  import { benchmarkInfrastructureFailureLedgerIssues, benchmarkTokenAccounting as buildBenchmarkTokenAccounting } from "./benchmark-usage.js";
33
15
  import {
16
+ benchmarkOutcomePairs, conditionalBothPassFreshUsage,
34
17
  efficiencyScore,
35
18
  evaluateDurationBandGate,
36
19
  evaluateFreshTokenBandGate,
@@ -47,8 +30,12 @@ export { renderBenchmarkHtml, renderBenchmarkText } from "./benchmark-report.js"
47
30
  export { benchmarkAssuranceEvidenceValidationErrors, benchmarkClaimEligibility } from "./benchmark-assurance.js";
48
31
  export { median } from "./benchmark-statistics.js";
49
32
  export { benchmarkSuiteValidationErrors, validateBenchmarkSuite } from "./benchmark-suite.js";
50
- export { aggregateSessionUsage, benchmarkTokenAccounting, createCodexExecJsonlCollector, parseCodexExecJsonl } from "./benchmark-usage.js";
33
+ export { aggregateCodexTurnUsage, aggregateSessionUsage, benchmarkTokenAccounting, createCodexExecJsonlCollector, parseCodexExecJsonl } from "./benchmark-usage.js";
51
34
  export { benchmarkPricingSnapshotValidationErrors, normalizeBenchmarkUsageCost } from "./benchmark-normalized-cost.js";
35
+ export { evaluateAllAttemptPooledFreshEfficiency } from "./benchmark-all-attempt-efficiency.js";
36
+ export { inspectCodexRolloutServiceTierEvidence } from "./benchmark-codex-rollout.js";
37
+ export { summarizeBenchmarkServiceTierEvidence } from "./benchmark-service-tier.js";
38
+ export { effectiveResourcesPerResolvedOutcome, normalizedApiCostPerResolvedOutcome, totalTokensPerResolvedOutcome } from "./benchmark-comparison.js";
52
39
  export { CODEX_RELATIVE_EFFICIENCY_POLICY, PRODUCTION_SUBAGENT_BUDGET_POLICY, evaluateCodexRelativeEfficiency, summarizeBenchmarkSubagentBudget } from "./benchmark-codex-relative-efficiency.js";
53
40
  export { evaluateWorkflowEvidence } from "./benchmark-workflow.js";
54
41
  const SURFACE_LABELS = Object.freeze({
@@ -70,13 +57,16 @@ export function summarizeBenchmark({
70
57
  completedAt,
71
58
  repeats,
72
59
  environment = {},
60
+ allAttemptTokenAccounting,
73
61
  runs,
74
62
  baselineSurface = "raw-pi",
75
63
  candidateSurface = "piagent"
76
64
  }) {
77
65
  if (baselineSurface === candidateSurface) throw new Error("Benchmark surfaces must be different");
78
- if (canonicalProductionSuite && suite.id !== "production-v1") {
79
- throw new Error("Canonical production gate requires the built-in production-v1 suite identity");
66
+ // Validate numerical opt-in only; it grants no claim and leaves unversioned behavior unchanged.
67
+ if (suite.releaseGate?.efficiencyProtocol !== undefined) validateBenchmarkSuite(suite);
68
+ if (canonicalProductionSuite && !canonicalProductionSuiteId(suite.id)) {
69
+ throw new Error("Canonical production gate requires a built-in production suite identity");
80
70
  }
81
71
  const baselineRuns = runs.filter((run) => run.surface === baselineSurface);
82
72
  const candidateRuns = runs.filter((run) => run.surface === candidateSurface);
@@ -85,7 +75,10 @@ export function summarizeBenchmark({
85
75
  }
86
76
  const baseline = surfaceSummary(baselineSurface, baselineRuns);
87
77
  const candidate = surfaceSummary(candidateSurface, candidateRuns);
88
- const tokenAccounting = buildBenchmarkTokenAccounting(runs);
78
+ const measuredTokenAccounting = buildBenchmarkTokenAccounting(runs);
79
+ const tokenAccounting = allAttemptTokenAccounting
80
+ ? { ...measuredTokenAccounting, allAttempts: allAttemptTokenAccounting }
81
+ : measuredTokenAccounting;
89
82
  const timingDiagnostics = summarizeBenchmarkTimingDiagnostics(runs);
90
83
  const reportRuns = runs.map((run) => {
91
84
  const timing = canonicalBenchmarkTimingDiagnostics(run.timingDiagnostics, run.surface, run.durationSeconds);
@@ -94,10 +87,7 @@ export function summarizeBenchmark({
94
87
  delete sanitized.timingDiagnostics;
95
88
  return sanitized;
96
89
  });
97
- const baselineByKey = new Map(baselineRuns.map((run) => [`${run.scenarioId}:${run.repeat}`, run]));
98
- const allPairs = candidateRuns
99
- .map((run) => ({ baseline: baselineByKey.get(`${run.scenarioId}:${run.repeat}`), candidate: run }))
100
- .filter((pair) => pair.baseline);
90
+ const allPairs = benchmarkOutcomePairs(baselineRuns, candidateRuns);
101
91
  const pairs = allPairs.filter((pair) => pair.baseline.resolved && pair.candidate.resolved);
102
92
  const tokenPairs = pairs.filter(comparableAttemptUsage);
103
93
  const completeOutcomeScenarios = completePairedScenarioCount(allPairs, repeats);
@@ -152,16 +142,8 @@ export function summarizeBenchmark({
152
142
  ));
153
143
  const costRatios = costPairs.map((pair) => pair.candidate.usage.cost / pair.baseline.usage.cost);
154
144
  const allSuccessfulPairsFreshRatio = geometricMean(freshRatios);
155
- const confidenceScenarioRatios = suite.schemaVersion === 2 ? completeScenarioFreshRatios : scenarioFreshRatios;
156
- const freshRatio = suite.schemaVersion === 2
157
- ? geometricMean(confidenceScenarioRatios.map((item) => item.ratio))
158
- : allSuccessfulPairsFreshRatio;
159
- const freshRatioConfidence95 = geometricMeanConfidence95(confidenceScenarioRatios.map((item) => item.ratio));
160
- const freshRatioConfidence95Raw = geometricMeanConfidence95Raw(confidenceScenarioRatios.map((item) => item.ratio));
161
- const durationRatio = geometricMean(durationRatios);
162
- const confidenceScenarioDurationRatios = suite.schemaVersion === 2 ? completeScenarioDurationRatios : scenarioDurationRatios;
163
- const durationRatioConfidence95 = geometricMeanConfidence95(confidenceScenarioDurationRatios.map((item) => item.ratio));
164
- const durationRatioConfidence95Raw = geometricMeanConfidence95Raw(confidenceScenarioDurationRatios.map((item) => item.ratio));
145
+ const matrixRatios = hierarchicalMatrixRatioSummary({ suite, completeScenarioFreshRatios, scenarioFreshRatios, allSuccessfulPairsFreshRatio, completeScenarioDurationRatios, scenarioDurationRatios, durationRatios });
146
+ const { hierarchicalFreshRatioSample, confidenceScenarioRatios, freshRatio, freshRatioConfidence95, freshRatioConfidence95Raw, hierarchicalDurationRatioSample, confidenceScenarioDurationRatios, durationRatio, durationRatioConfidence95, durationRatioConfidence95Raw } = matrixRatios;
165
147
  const costRatio = geometricMean(costRatios);
166
148
  const freshDeltas = tokenPairs.map((pair) => pair.candidate.usage.fresh - pair.baseline.usage.fresh);
167
149
  const freshWins = freshDeltas.filter((delta) => delta < 0).length;
@@ -225,9 +207,12 @@ export function summarizeBenchmark({
225
207
  ratio: freshRatio,
226
208
  confidence95: freshRatioConfidence95,
227
209
  confidence95Raw: freshRatioConfidence95Raw,
228
- scenarioRatios: completeScenarioFreshRatios
210
+ scenarioRatios: hierarchicalFreshRatioSample.matrix ? confidenceScenarioRatios : completeScenarioFreshRatios
229
211
  }, familyClusteredFailureAware, familyClusteredFixedWorkload);
230
- const primaryEfficiencyCompleteScenarios = primaryEfficiencyScenarioRatios.length;
212
+ const matrixHierarchy = hierarchicalFreshRatioSample.matrix;
213
+ const primaryMatrix = primaryEfficiencyMatrixSummary(matrixHierarchy, primaryEfficiencyScenarioRatios);
214
+ const { scenarioIds: primaryEfficiencyScenarioIds, familyIds: primaryEfficiencyFamilyIds,
215
+ completeScenarios: primaryEfficiencyCompleteScenarios, completeSamples: primaryEfficiencyCompleteSamples } = primaryMatrix;
231
216
  const primaryEfficiencyCategoryCoverage = completeCategoryCoverage(suite, primaryEfficiencyScenarioRatios);
232
217
  const requiresConfidenceEfficiency = Number.isFinite(maximumFreshTokenRatioUpper95) || releaseGate.requireEfficiencyClaim === true;
233
218
  const requiresBandEfficiency = Number.isFinite(maximumBandFreshTokenRatio);
@@ -249,21 +234,21 @@ export function summarizeBenchmark({
249
234
  const requiresSuiteEfficiency = requiresConfidenceEfficiency;
250
235
  const requiresPerformance = Number.isFinite(maximumDurationRatioUpper95);
251
236
  const requiresStability = Number.isInteger(maximumInfrastructureRetries);
252
- const requiresFullSuite = releaseGate.requireFullSuiteForClaim === true;
253
- const requiresProviderWireSurface = releaseGate.requireStableProviderWireSurface === true;
254
- const requiresCausalContextReceipt = releaseGate.requireCausalContextReceipt === true;
255
- const requestsTokenSavingClaim = releaseGate.requireEfficiencyClaim === true;
256
- const requestsNormalizedCostClaim = releaseGate.requireNormalizedCostClaim === true;
257
- const requiresHostReadiness = releaseGate.requireHostReadinessForClaim === true;
258
- const canonicalProductionIdentityGate = suite.id !== "production-v1" || canonicalProductionSuite;
259
- const releaseClaimConfigurationGate = requestsTokenSavingClaim
260
- ? suite.schemaVersion === 2 && Number.isFinite(maximumFreshTokenRatioUpper95)
261
- && maximumFreshTokenRatioUpper95 <= 0.8 && requiresFullSuite && requiresProviderWireSurface
262
- && requiresCausalContextReceipt
263
- && ["successful-pair-family-ratio", "failure-aware-family-ratio", "fixed-workload-family-ratio"].includes(primaryEfficiencyEstimand)
264
- && (!primaryUsesFixedWorkload
265
- || (!Number.isFinite(maximumBandFreshTokenRatio) && !Number.isFinite(maximumFamilyFreshTokenRatio)))
266
- : null;
237
+ const {
238
+ maximumAllAttemptPooledFreshTokenRatio,
239
+ requiresFullSuite, requiresProviderWireSurface, requiresCausalContextReceipt, requiresFastServiceTier, requiresCampaignAccounting,
240
+ requestsTokenSavingClaim, requestsNormalizedCostClaim, requiresHostReadiness,
241
+ canonicalProductionIdentityGate, releaseClaimConfigurationGate,
242
+ acceptedUsageCompletenessGate, failedUsageCompletenessGate, allAttemptUsageCompletenessGate,
243
+ infrastructureFailureLedgerGate, codexBaselineGate,
244
+ allAttemptPooledEfficiency, allAttemptPooledEfficiencyGate,
245
+ serviceTierEvidence, fastServiceTierGate,
246
+ cleanReleaseSourceGate, hostReadinessHistory, hostReadinessGate, campaignEvidence, campaignAccountingGate
247
+ } = summarizeBenchmarkReleaseClaimControls({
248
+ suite, canonicalProductionSuite, tokenAccounting, infrastructureFailureLedgerIssues, runs, environment,
249
+ baselineSurface, candidateSurface, maximumFreshTokenRatioUpper95, maximumBandFreshTokenRatio,
250
+ maximumFamilyFreshTokenRatio, primaryEfficiencyEstimand, primaryUsesFixedWorkload
251
+ });
267
252
  const normalizedCostClaimConfigurationGate = requestsNormalizedCostClaim
268
253
  ? requestsTokenSavingClaim
269
254
  && suite.schemaVersion === 2
@@ -291,30 +276,6 @@ export function summarizeBenchmark({
291
276
  familyFailures: [],
292
277
  passed: null
293
278
  };
294
- const acceptedUsageCompletenessGate = requestsTokenSavingClaim
295
- ? tokenAccounting.acceptedAttempts.complete === true
296
- : null;
297
- const failedUsageCompletenessGate = requestsTokenSavingClaim
298
- ? tokenAccounting.failedAttempts.complete === true
299
- : null;
300
- const allAttemptUsageCompletenessGate = requestsTokenSavingClaim
301
- ? tokenAccounting.allAttempts.complete === true
302
- : null;
303
- const infrastructureFailureLedgerGate = requestsTokenSavingClaim
304
- ? infrastructureFailureLedgerIssues.length === 0
305
- : null;
306
- const codexBaselineGate = requestsTokenSavingClaim ? baselineSurface === "codex-cli" : null;
307
- const cleanReleaseSourceGate = requestsTokenSavingClaim
308
- ? environment.source?.kind === "git-working-tree"
309
- && environment.source.dirty === false
310
- && /^[a-f0-9]{40,64}$/.test(environment.source.commit ?? "")
311
- : null;
312
- const hostReadinessHistory = environment.hostReadinessHistory ?? null;
313
- const hostReadinessGate = requiresHostReadiness
314
- ? hostReadinessHistory?.valid === true
315
- && hostReadinessHistory?.ready === true
316
- && hostReadinessHistory?.windowCoverage === "complete"
317
- : null;
318
279
  const qualityNonInferior = candidate.scores.quality >= baseline.scores.quality;
319
280
  const pairedQualityEvidence = pairedQualityNoninferiorityEvidence({
320
281
  suite,
@@ -359,8 +320,8 @@ export function summarizeBenchmark({
359
320
  const efficiencyCategoryCoverage = completeCategoryCoverage(suite, completeScenarioFreshRatios);
360
321
  const efficiencyBandCoverageGate = suite.schemaVersion === 2 ? efficiencyCategoryCoverage.passed : true;
361
322
  const primaryEfficiencyEvidenceGate = Number.isInteger(minimumComparableEfficiencyScenarios)
362
- ? primaryEfficiencyCompleteScenarios >= minimumComparableEfficiencyScenarios
363
- : primaryEfficiencyCompleteScenarios >= 3;
323
+ ? primaryEfficiencyCompleteSamples >= minimumComparableEfficiencyScenarios
324
+ : primaryEfficiencyCompleteSamples >= 3;
364
325
  const primaryEfficiencyBandCoverageGate = suite.schemaVersion === 2
365
326
  ? primaryEfficiencyCategoryCoverage.passed
366
327
  : true;
@@ -549,6 +510,9 @@ export function summarizeBenchmark({
549
510
  && stabilityGate !== false
550
511
  && acceptedUsageCompletenessGate !== false
551
512
  && allAttemptUsageCompletenessGate !== false
513
+ && allAttemptPooledEfficiencyGate !== false
514
+ && campaignAccountingGate !== false
515
+ && fastServiceTierGate !== false
552
516
  && normalizedCostClaimConfigurationGate !== false
553
517
  && normalizedCostGates.passed !== false
554
518
  && outcomeEvidenceGate
@@ -592,6 +556,9 @@ export function summarizeBenchmark({
592
556
  && stabilityGate !== false
593
557
  && acceptedUsageCompletenessGate !== false
594
558
  && allAttemptUsageCompletenessGate !== false
559
+ && allAttemptPooledEfficiencyGate !== false
560
+ && campaignAccountingGate !== false
561
+ && fastServiceTierGate !== false
595
562
  && normalizedCostClaimConfigurationGate !== false
596
563
  && normalizedCostGates.passed !== false
597
564
  && outcomeEvidenceGate
@@ -627,6 +594,9 @@ export function summarizeBenchmark({
627
594
  requiresStability && !unknownInfrastructureUsageGate ? "unknown-infrastructure-usage" : null,
628
595
  requestsTokenSavingClaim && !acceptedUsageCompletenessGate ? "accepted-usage-completeness" : null,
629
596
  requestsTokenSavingClaim && !allAttemptUsageCompletenessGate ? "all-attempt-usage-completeness" : null,
597
+ requiresCampaignAccounting && !campaignAccountingGate ? "campaign-all-attempt-accounting" : null,
598
+ Number.isFinite(maximumAllAttemptPooledFreshTokenRatio) && !allAttemptPooledEfficiencyGate ? "all-attempt-net-efficiency" : null,
599
+ requiresFastServiceTier && !fastServiceTierGate ? "fast-execution-configuration-parity" : null,
630
600
  requestsTokenSavingClaim && !infrastructureFailureLedgerGate ? "infrastructure-failure-ledger" : null,
631
601
  requestsNormalizedCostClaim && !normalizedCostGates.evidenceGate ? "normalized-cost-evidence" : null,
632
602
  requestsNormalizedCostClaim && !normalizedCostGates.applicabilityGate ? "normalized-cost-pricing-applicability" : null,
@@ -664,6 +634,7 @@ export function summarizeBenchmark({
664
634
  primaryEfficiencyEstimand,
665
635
  repeats: minimumRepeats ?? null,
666
636
  freshTokenRatioUpper95: maximumFreshTokenRatioUpper95 ?? null,
637
+ allAttemptPooledFreshTokenRatio: maximumAllAttemptPooledFreshTokenRatio ?? null,
667
638
  bandFreshTokenRatio: maximumBandFreshTokenRatio ?? null,
668
639
  familyFreshTokenRatio: maximumFamilyFreshTokenRatio ?? null,
669
640
  normalizedCostRatioUpper95: maximumNormalizedCostRatioUpper95 ?? null,
@@ -680,8 +651,10 @@ export function summarizeBenchmark({
680
651
  hostReadinessHistory: requiresHostReadiness,
681
652
  requireFullSuite: requiresFullSuite,
682
653
  stableProviderWireSurface: requiresProviderWireSurface,
654
+ fastServiceTier: requiresFastServiceTier,
655
+ campaignAccounting: requiresCampaignAccounting,
683
656
  causalContextReceipt: requiresCausalContextReceipt,
684
- canonicalProductionIdentityRequired: suite.id === "production-v1"
657
+ canonicalProductionIdentityRequired: canonicalProductionSuiteId(suite.id)
685
658
  },
686
659
  observed: {
687
660
  completeOutcomeScenarios,
@@ -693,6 +666,8 @@ export function summarizeBenchmark({
693
666
  pairedQualityFailures: pairedQualityEvidence.failures,
694
667
  repeats,
695
668
  freshTokenRatioUpper95: freshRatioConfidence95Raw?.upper ?? null,
669
+ allAttemptPooledFreshTokenRatio: allAttemptPooledEfficiency.ratio,
670
+ allAttemptPooledFreshTokenReductionPercent: allAttemptPooledEfficiency.reductionPercent,
696
671
  bandFreshTokenRatioFailures: freshTokenBandGate.failures,
697
672
  familyFreshTokenRatioFailures: freshTokenFamilyFailures,
698
673
  acceptedUsageExactAttempts: tokenAccounting.acceptedAttempts.exactAttempts,
@@ -703,6 +678,8 @@ export function summarizeBenchmark({
703
678
  normalizedCostFamilyFailures: normalizedCostGates.familyFailures,
704
679
  normalizedCostApplicabilityFailures: normalizedCost?.applicabilityFailures ?? [],
705
680
  primaryEfficiencyCompleteScenarios,
681
+ primaryEfficiencyCompleteSamples,
682
+ primaryEfficiencySampleUnit: matrixHierarchy ? suite.matrixContract.confidenceSampleUnit : "scenario-family",
706
683
  primaryEfficiencyRatio: rounded(primaryEfficiencyRatio, 4),
707
684
  primaryEfficiencyRatioUpper95: primaryEfficiencyRatioConfidence95Raw?.upper ?? null,
708
685
  durationRatio: rounded(durationRatio, 4),
@@ -724,9 +701,13 @@ export function summarizeBenchmark({
724
701
  providerWireRuns: candidateRuns.length,
725
702
  providerWireGroups: providerWireGroups.length,
726
703
  providerWireDriftGroups: providerWireDriftGroups.length,
704
+ fastExecutionConfigurationParity: serviceTierEvidence.executionConfigurationParityGate,
705
+ providerResponseServiceTierEvidence: serviceTierEvidence.providerResponseEvidenceGate,
727
706
  causalContextAvailableRuns: causalContextEvidence.currentAvailableRuns,
728
707
  causalContextRuns: causalContextEvidence.runs,
729
- causalContextRequiredSchemaVersion: causalContextEvidence.requiredSchemaVersion
708
+ causalContextRequiredSchemaVersion: causalContextEvidence.requiredSchemaVersion,
709
+ campaignId: campaignEvidence?.campaignId ?? null,
710
+ campaignAccountingPassed: campaignAccountingGate
730
711
  }
731
712
  } : null;
732
713
  const baselineKey = surfaceReportKey(baselineSurface);
@@ -738,11 +719,21 @@ export function summarizeBenchmark({
738
719
  protocolPassed: protocol.passed,
739
720
  tokenClaimAllowed
740
721
  });
722
+ const matrixReport = hierarchicalMatrixReportSummary({ suite, matrixHierarchy, hierarchicalFreshRatioSample, confidenceScenarioRatios,
723
+ hierarchicalDurationRatioSample, confidenceScenarioDurationRatios, primaryEfficiencyScenarioRatios, primaryEfficiencyScenarioIds,
724
+ primaryEfficiencyFamilyIds, primaryEfficiencyCompleteScenarios, primaryUsesFixedWorkload, familyClusteredFailureAware,
725
+ familyClusteredFixedWorkload });
741
726
  return integrateCodexRelativeEfficiencyReport({
742
727
  schemaVersion: 2,
743
728
  measurementSchemaVersion: BENCHMARK_MEASUREMENT_SCHEMA_VERSION,
744
729
  runId,
745
- suite: { id: suite.id, title: suite.title, schemaVersion: suite.schemaVersion, assurance: suite.assurance ?? null },
730
+ suite: {
731
+ id: suite.id,
732
+ title: suite.title,
733
+ schemaVersion: suite.schemaVersion,
734
+ assurance: suite.assurance ?? null,
735
+ ...matrixReport.suiteFields
736
+ },
746
737
  startedAt,
747
738
  completedAt,
748
739
  repeats,
@@ -762,12 +753,10 @@ export function summarizeBenchmark({
762
753
  baselineSurface,
763
754
  candidateSurface,
764
755
  purpose: claimEligibility.comparisonPurpose,
765
- usageEstimator: "paired-geometric-mean-ratio",
766
- durationEstimator: "paired-geometric-mean-ratio-clustered-by-scenario-family",
756
+ ...matrixReport.estimatorFields,
767
757
  failureAwareUsageEstimator: "total-comparable-attempt-fresh-tokens-per-resolved-outcome",
768
758
  failureAwareFamilyUsageEstimator: "geometric-mean-of-family-total-comparable-attempt-fresh-tokens-per-resolved-outcome-ratios",
769
- fixedWorkloadUsageEstimator: "geometric-mean-of-family-total-exact-scheduled-workload-ratios",
770
- fixedWorkloadEstimatorVersion: 1,
759
+ fixedWorkloadUsageEstimator: "geometric-mean-of-family-total-exact-scheduled-workload-ratios", fixedWorkloadEstimatorVersion: matrixReport.fixedWorkloadEstimatorVersion,
771
760
  pairedOutcomeScenarios: completeOutcomeScenarios,
772
761
  pairedSuccessfulRuns: pairs.length,
773
762
  pairedUsageRuns: tokenPairs.length,
@@ -805,6 +794,15 @@ export function summarizeBenchmark({
805
794
  [candidateKey]: rounded(candidateFreshPerResolvedOutcome, 2)
806
795
  },
807
796
  failureAwareFreshTokenRatio: rounded(failureAwareFreshTokenRatio, 4),
797
+ ...(releaseGate.efficiencyProtocol === undefined ? {} : { efficiencyProtocol: {
798
+ version: releaseGate.efficiencyProtocol,
799
+ allAttemptPooledRatioRaw: allAttemptPooledEfficiency.ratioRaw, familyRatioUpper95Raw: primaryEfficiencyRatioConfidence95Raw?.upper ?? null,
800
+ numericGatesPassed: allAttemptPooledEfficiencyGate === true && primaryEfficiencyConfidenceGate === true
801
+ } }),
802
+ allAttemptPooledEfficiency,
803
+ allAttemptPooledEfficiencyGate,
804
+ campaignEvidence,
805
+ campaignAccountingGate,
808
806
  failureAwareFamilyFreshTokenRatio: rounded(familyClusteredFailureAware.ratio, 4),
809
807
  failureAwareFamilyFreshTokenRatioConfidence95: familyClusteredFailureAware.confidence95,
810
808
  failureAwareFamilyFreshTokenRatioConfidence95Raw: familyClusteredFailureAware.confidence95Raw,
@@ -813,7 +811,8 @@ export function summarizeBenchmark({
813
811
  expectedScenarioFamilies: familyClusteredFailureAware.expectedScenarioFamilies,
814
812
  usableScenarioFamilies: familyClusteredFailureAware.usableScenarioFamilies,
815
813
  sampleUnit: familyClusteredFailureAware.sampleUnit,
816
- scenarioIds: familyClusteredFailureAware.scenarioIds
814
+ scenarioIds: familyClusteredFailureAware.scenarioIds,
815
+ ...matrixReport.failureAwareCoverageFields
817
816
  },
818
817
  failureAwareFamilyRatios: familyClusteredFailureAware.families,
819
818
  fixedWorkloadFamilyFreshTokenRatio: rounded(familyClusteredFixedWorkload.ratio, 4),
@@ -830,30 +829,24 @@ export function summarizeBenchmark({
830
829
  outcomeConditioning: familyClusteredFixedWorkload.outcomeConditioning,
831
830
  aggregation: familyClusteredFixedWorkload.aggregation,
832
831
  attemptPolicy: familyClusteredFixedWorkload.attemptPolicy,
833
- scenarioIds: familyClusteredFixedWorkload.scenarioIds
832
+ scenarioIds: familyClusteredFixedWorkload.scenarioIds,
833
+ ...matrixReport.fixedWorkloadCoverageFields
834
834
  },
835
835
  fixedWorkloadFamilyRatios: familyClusteredFixedWorkload.families,
836
836
  allSuccessfulPairsFreshTokenRatio: rounded(allSuccessfulPairsFreshRatio, 4),
837
+ conditionalBothPassFreshUsage: conditionalBothPassFreshUsage({ suite, repeats, allPairs, pairs, tokenPairs,
838
+ baselineRuns, candidateRuns, allSuccessfulPairsFreshRatio }),
837
839
  freshTokenRatio: rounded(freshRatio, 4),
838
840
  freshTokenRatioRaw: freshRatio,
839
841
  freshTokenRatioConfidence95: freshRatioConfidence95,
840
842
  freshTokenRatioConfidence95Raw: freshRatioConfidence95Raw,
841
- freshTokenRatioSample: {
842
- sampleUnit: "scenario-family",
843
- scenarioCount: confidenceScenarioRatios.length,
844
- scenarioIds: confidenceScenarioRatios.map((item) => item.scenarioId)
845
- },
843
+ freshTokenRatioSample: matrixReport.freshTokenRatioSample,
846
844
  primaryEfficiencyEstimand,
847
845
  primaryEfficiencyRatio: rounded(primaryEfficiencyRatio, 4),
848
846
  primaryEfficiencyRatioRaw: primaryEfficiencyRatio,
849
847
  primaryEfficiencyRatioConfidence95,
850
848
  primaryEfficiencyRatioConfidence95Raw,
851
- primaryEfficiencySample: {
852
- sampleUnit: "scenario-family",
853
- scenarioCount: primaryEfficiencyCompleteScenarios,
854
- scenarioIds: primaryEfficiencyScenarioRatios.map((item) => item.scenarioId),
855
- outcomeConditioning: primaryUsesFixedWorkload ? "none" : "resolved-outcome-conditioned"
856
- },
849
+ primaryEfficiencySample: matrixReport.primaryEfficiencySample,
857
850
  primaryEfficiencyDeltaPercent: Number.isFinite(primaryEfficiencyRatio)
858
851
  ? rounded((primaryEfficiencyRatio - 1) * 100, 2)
859
852
  : null,
@@ -862,6 +855,7 @@ export function summarizeBenchmark({
862
855
  durationRatioRaw: durationRatio,
863
856
  durationRatioConfidence95,
864
857
  durationRatioConfidence95Raw,
858
+ ...matrixReport.durationRatioSampleFields,
865
859
  durationDeltaPercent: Number.isFinite(durationRatio) ? rounded((durationRatio - 1) * 100, 2) : null,
866
860
  costRatio: rounded(costRatio, 4),
867
861
  costDeltaPercent: Number.isFinite(costRatio) ? rounded((costRatio - 1) * 100, 2) : null,
@@ -881,6 +875,8 @@ export function summarizeBenchmark({
881
875
  candidateContinuityFailures,
882
876
  comparisonProtocolGate: protocol,
883
877
  providerWireSurfaceGate,
878
+ fastServiceTierGate,
879
+ serviceTierEvidence,
884
880
  causalContextEvidenceGate,
885
881
  causalContextEvidence,
886
882
  providerWireEvidence: {
@@ -988,6 +984,10 @@ export function summarizeBenchmark({
988
984
  ? "accepted-usage-completeness-gate-failed"
989
985
  : requestsTokenSavingClaim && allAttemptUsageCompletenessGate === false
990
986
  ? "all-attempt-usage-completeness-gate-failed"
987
+ : Number.isFinite(maximumAllAttemptPooledFreshTokenRatio) && allAttemptPooledEfficiencyGate === false
988
+ ? "all-attempt-net-efficiency-gate-failed"
989
+ : requiresFastServiceTier && fastServiceTierGate === false
990
+ ? "fast-execution-configuration-parity-gate-failed"
991
991
  : requestsNormalizedCostClaim && normalizedCostClaimConfigurationGate === false
992
992
  ? "normalized-cost-configuration-gate-failed"
993
993
  : requestsNormalizedCostClaim && normalizedCostGates.applicabilityGate === false
@@ -0,0 +1,40 @@
1
+ import { candidateProvenance } from './benchmark-candidate.js';
2
+ import { deriveDiagnosticCandidateEntries, DIAGNOSTIC_TREATMENT } from './benchmark-diagnostic-treatment.js';
3
+
4
+ // Prove the source-to-treatment transformation from actual bytes.
5
+ export function diagnosticS0SourceEvidence({ source, entries, derivation, candidate }) {
6
+ if (source?.kind !== 'git-working-tree' || typeof source.dirty !== 'boolean'
7
+ || !/^[a-f0-9]{40,64}$/.test(source.commit ?? '')) throw new Error('Invalid source identity');
8
+ const observedSource = candidateProvenance(entries);
9
+ const derived = deriveDiagnosticCandidateEntries(entries, { piagentTreatment: DIAGNOSTIC_TREATMENT, measurementOnly: true });
10
+ const observedCandidate = candidateProvenance(derived.entries);
11
+ const expected = { ...derived.derivation, sourceCandidateProvenance: observedSource,
12
+ derivedCandidateProvenance: observedCandidate };
13
+ if (JSON.stringify(derivation) !== JSON.stringify(expected)
14
+ || JSON.stringify(candidate) !== JSON.stringify(observedCandidate)) {
15
+ throw new Error('Diagnostic S0 source or fixed policy derivation changed');
16
+ }
17
+ return { kind: source.kind, commit: source.commit, clean: !source.dirty,
18
+ treeDigest: candidate.contentDigest, treeAlgorithm: candidate.algorithm,
19
+ conformanceSourceDigest: observedSource.contentDigest,
20
+ conformanceScope: 'source-runtime; diagnostic-policy-runtime-qualified-separately',
21
+ treatmentDerivation: expected };
22
+ }
23
+
24
+ export function validDiagnosticS0SourceEvidence(value) {
25
+ const hash = item => typeof item === 'string' && /^[a-f0-9]{64}$/.test(item);
26
+ const d = value?.treatmentDerivation, change = d?.changes?.[0];
27
+ return value?.kind === 'git-working-tree' && typeof value.clean === 'boolean'
28
+ && /^[a-f0-9]{40,64}$/.test(value.commit ?? '')
29
+ && value.conformanceScope === 'source-runtime; diagnostic-policy-runtime-qualified-separately'
30
+ && hash(value.conformanceSourceDigest) && hash(value.treeDigest)
31
+ && value.conformanceSourceDigest !== value.treeDigest
32
+ && d?.schemaVersion === 1 && d.treatment === DIAGNOSTIC_TREATMENT
33
+ && d.transform === 'installed-base-policy-acceptance-diagnostic-v1'
34
+ && d.changes?.length === 1
35
+ && change.path === 'packages/piagent-core/policies/base-policy.json'
36
+ && hash(change.beforeSha256) && hash(change.afterSha256) && change.beforeSha256 !== change.afterSha256
37
+ && d.sourceCandidateProvenance?.contentDigest === value.conformanceSourceDigest
38
+ && d.derivedCandidateProvenance?.contentDigest === value.treeDigest
39
+ && d.derivedCandidateProvenance?.algorithm === value.treeAlgorithm;
40
+ }
@@ -0,0 +1,104 @@
1
+ import fs from "node:fs";
2
+ import path from "node:path";
3
+ import crypto from "node:crypto";
4
+
5
+ export const DIAGNOSTIC_TREATMENT = "acceptance-diagnostic";
6
+ export const DIAGNOSTIC_POLICY_PATH = "packages/piagent-core/policies/base-policy.json";
7
+
8
+ export function deriveDiagnosticCandidateEntries(entries, options = {}) {
9
+ if (options.piagentTreatment !== DIAGNOSTIC_TREATMENT) return { entries };
10
+ if (options.measurementOnly !== true) throw new Error("Diagnostic candidate derivation requires --measurement-only");
11
+ const policyEntries = entries.filter(entry => entry.path === DIAGNOSTIC_POLICY_PATH);
12
+ if (policyEntries.length !== 1 || policyEntries[0].kind !== "regular") {
13
+ throw new Error("Diagnostic candidate requires one regular base policy entry");
14
+ }
15
+ const entry = policyEntries[0], policy = JSON.parse(entry.payload.toString("utf8"));
16
+ if (!policy.finalGate || typeof policy.finalGate !== "object" || Array.isArray(policy.finalGate)) {
17
+ throw new Error("Diagnostic candidate requires a valid finalGate policy");
18
+ }
19
+ const prior = policy.finalGate.acceptanceProofMode;
20
+ if (prior !== undefined && prior !== "enforce") {
21
+ throw new Error("Diagnostic derivation requires an enforce source policy");
22
+ }
23
+ policy.finalGate.acceptanceProofMode = "diagnostic";
24
+ const payload = Buffer.from(`${JSON.stringify(policy, null, 2)}\n`);
25
+ const hash = value => crypto.createHash("sha256").update(value).digest("hex");
26
+ return {
27
+ entries: entries.map(value => value === entry ? { ...entry, payload } : value),
28
+ derivation: {
29
+ schemaVersion: 1, treatment: DIAGNOSTIC_TREATMENT,
30
+ transform: "installed-base-policy-acceptance-diagnostic-v1",
31
+ changes: [{ path: DIAGNOSTIC_POLICY_PATH, beforeSha256: hash(entry.payload), afterSha256: hash(payload) }]
32
+ }
33
+ };
34
+ }
35
+
36
+ export function assertDiagnosticBenchmarkMatrix(options, { builtInId, fullMatrix, expectedSessions }) {
37
+ if (options.piagentTreatment !== DIAGNOSTIC_TREATMENT) return;
38
+ const failedReplay = options.failedAttemptsOnly === true
39
+ && options.replaySource?.selection === "failed-attempts"
40
+ && options.replaySource?.evidenceComplete === true
41
+ && options.replaySource?.originalAttemptCount === 108
42
+ && options.replayRuns?.length > 0
43
+ && options.replayRuns.length === options.replaySource.selectedAttempts;
44
+ if (builtInId !== "production-v3" || (!fullMatrix && !failedReplay) || expectedSessions !== 108
45
+ || options.codexMode !== "controlled" || options.measurementOnly !== true) {
46
+ throw new Error("Diagnostic acceptance requires the complete production-v3 controlled 108-session measurement matrix or a bound failed-attempt-only diagnostic replay");
47
+ }
48
+ }
49
+
50
+ // Policy is part of the immutable candidate, never an inherited environment override.
51
+ export function benchmarkAcceptancePolicyBinding(installedRoot, options) {
52
+ const file = path.join(installedRoot, DIAGNOSTIC_POLICY_PATH);
53
+ if (!fs.lstatSync(file).isFile() || fs.realpathSync(file) !== path.resolve(file)) {
54
+ throw new Error("Benchmark acceptance policy must be a regular file in the candidate");
55
+ }
56
+ const bytes = fs.readFileSync(file);
57
+ const policy = JSON.parse(bytes.toString("utf8"));
58
+ const diagnostic = policy.finalGate?.acceptanceProofMode === "diagnostic";
59
+ const selected = options.piagentTreatment === DIAGNOSTIC_TREATMENT;
60
+ const installedDefault = diagnostic && !selected;
61
+ if (diagnostic !== selected && !installedDefault) {
62
+ throw new Error("Benchmark treatment does not match the installed acceptance proof policy");
63
+ }
64
+ if (!diagnostic) return null;
65
+ if (!installedDefault && options.measurementOnly !== true) {
66
+ throw new Error("Diagnostic acceptance policy requires --measurement-only");
67
+ }
68
+ return {
69
+ mode: "diagnostic", ...(installedDefault ? { origin: "installed-release-policy" } : {}),
70
+ policyPath: DIAGNOSTIC_POLICY_PATH,
71
+ policySha256: crypto.createHash("sha256").update(bytes).digest("hex"),
72
+ pendingProof: "retained", qualityClaim: "withheld"
73
+ };
74
+ }
75
+
76
+ export function validDiagnosticPolicyBinding(binding) {
77
+ return binding?.mode === "diagnostic" && binding.policyPath === DIAGNOSTIC_POLICY_PATH
78
+ && (binding.origin === undefined || binding.origin === "installed-release-policy")
79
+ && /^[a-f0-9]{64}$/.test(binding.policySha256)
80
+ && binding.pendingProof === "retained" && binding.qualityClaim === "withheld";
81
+ }
82
+
83
+ export function assertDiagnosticCandidateDerivation(binding, derivation, candidate) {
84
+ if (!binding) return;
85
+ if (!validDiagnosticPolicyBinding(binding)) {
86
+ throw new Error("Diagnostic candidate derivation does not match frozen source, policy and candidate identities");
87
+ }
88
+ if (binding.origin === "installed-release-policy") {
89
+ if (derivation !== undefined) throw new Error("Installed diagnostic policy cannot claim a treatment derivation");
90
+ return;
91
+ }
92
+ const change = derivation?.changes?.[0];
93
+ if (derivation?.schemaVersion !== 1
94
+ || derivation.treatment !== DIAGNOSTIC_TREATMENT
95
+ || derivation.transform !== "installed-base-policy-acceptance-diagnostic-v1"
96
+ || derivation.changes.length !== 1 || change.path !== binding.policyPath
97
+ || change.afterSha256 !== binding.policySha256 || !/^[a-f0-9]{64}$/.test(change.beforeSha256)
98
+ || change.beforeSha256 === change.afterSha256
99
+ || !/^[a-f0-9]{64}$/.test(derivation.sourceCandidateProvenance?.contentDigest)
100
+ || derivation.sourceCandidateProvenance.contentDigest === candidate?.contentDigest
101
+ || JSON.stringify(derivation.derivedCandidateProvenance) !== JSON.stringify(candidate)) {
102
+ throw new Error("Diagnostic candidate derivation does not match frozen source, policy and candidate identities");
103
+ }
104
+ }