@piagent/platform 1.6.0 → 1.7.1

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