@hassangameryt/freeflow 0.3.0 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (690) hide show
  1. package/.claude-plugin/marketplace.json +4 -4
  2. package/.claude-plugin/plugin.json +5 -2
  3. package/.codex-plugin/plugin.json +8 -9
  4. package/README.md +190 -128
  5. package/assets/feedback-loop.png +0 -0
  6. package/assets/freeflow_workflow_map.png +0 -0
  7. package/assets/workflow.png +0 -0
  8. package/command-surface.json +51 -7
  9. package/hooks/freeflow-runtime-context.mjs +264 -136
  10. package/hooks/tests/check-runtime-context-hook.sh +223 -0
  11. package/package.json +23 -24
  12. package/pi-extension/dist/index.js +264 -80
  13. package/pi-extension/dist/integrations/mcp-config.js +29 -0
  14. package/pi-extension/dist/output-router/host-producer-identification.js +232 -0
  15. package/pi-extension/dist/output-router/native-safety-net.js +216 -0
  16. package/pi-extension/dist/output-router/observed-tool-routing.js +122 -0
  17. package/pi-extension/dist/output-router/renderers.js +1023 -0
  18. package/pi-extension/dist/output-router/router-tools.js +554 -0
  19. package/pi-extension/dist/output-router/schemas.js +383 -0
  20. package/pi-extension/dist/output-router/status.js +744 -0
  21. package/pi-extension/dist/output-router/utils.js +502 -0
  22. package/pi-extension/dist/runtime/runtime-context.js +798 -0
  23. package/pi-extension/dist/settings/settings-tui.js +314 -0
  24. package/pi-extension/dist/settings/settings-ui.js +1487 -0
  25. package/pi-extension/freeflow/index.js +1 -0
  26. package/pi-extension/src/index.ts +230 -56
  27. package/pi-extension/src/{host-producer-identification.ts → output-router/host-producer-identification.ts} +37 -7
  28. package/pi-extension/src/{native-safety-net.ts → output-router/native-safety-net.ts} +7 -11
  29. package/pi-extension/src/{observed-tool-routing.ts → output-router/observed-tool-routing.ts} +19 -11
  30. package/pi-extension/src/{renderers.ts → output-router/renderers.ts} +246 -55
  31. package/pi-extension/src/{router-tools.ts → output-router/router-tools.ts} +130 -29
  32. package/pi-extension/src/{schemas.ts → output-router/schemas.ts} +171 -43
  33. package/pi-extension/src/output-router/status.ts +791 -0
  34. package/pi-extension/src/{utils.ts → output-router/utils.ts} +80 -18
  35. package/pi-extension/src/runtime/runtime-context.ts +895 -0
  36. package/pi-extension/src/settings/settings-tui.ts +408 -0
  37. package/pi-extension/src/settings/settings-ui.ts +1730 -0
  38. package/pi-extension/tests/integration/pi-extension.test.js +4018 -0
  39. package/pi-extension/tests/output-router/observed-producers.test.js +132 -0
  40. package/pi-extension/tests/output-router/search.test.js +722 -0
  41. package/pi-extension/tests/settings/settings-tui.test.js +243 -0
  42. package/router/dist/benchmarks/benchmark-harness.d.ts +16 -13
  43. package/router/dist/benchmarks/benchmark-harness.js +62 -62
  44. package/router/dist/benchmarks/benchmarks.d.ts +80 -73
  45. package/router/dist/benchmarks/benchmarks.js +860 -761
  46. package/router/dist/benchmarks/codex-qa-benchmarks.d.ts +71 -67
  47. package/router/dist/benchmarks/codex-qa-benchmarks.js +429 -390
  48. package/router/dist/benchmarks/command-benchmarks.d.ts +107 -92
  49. package/router/dist/benchmarks/command-benchmarks.js +616 -571
  50. package/router/dist/benchmarks/context-mode-normalized-benchmarks.d.ts +64 -56
  51. package/router/dist/benchmarks/context-mode-normalized-benchmarks.js +679 -613
  52. package/router/dist/benchmarks/context-mode-real-deep-benchmark.d.ts +103 -95
  53. package/router/dist/benchmarks/context-mode-real-deep-benchmark.js +1188 -1103
  54. package/router/dist/benchmarks/context-saving-baseline.d.ts +47 -41
  55. package/router/dist/benchmarks/context-saving-baseline.js +405 -374
  56. package/router/dist/benchmarks/index-benchmarks.d.ts +74 -69
  57. package/router/dist/benchmarks/index-benchmarks.js +761 -661
  58. package/router/dist/benchmarks/storage-policy-benchmarks.d.ts +80 -69
  59. package/router/dist/benchmarks/storage-policy-benchmarks.js +549 -469
  60. package/router/dist/benchmarks/vault-index-benchmarks.d.ts +43 -34
  61. package/router/dist/benchmarks/vault-index-benchmarks.js +294 -229
  62. package/router/dist/config/config.d.ts +61 -54
  63. package/router/dist/config/config.js +551 -372
  64. package/router/dist/config/router-contract.d.ts +2 -2
  65. package/router/dist/config/router-contract.js +38 -38
  66. package/router/dist/config/schema.d.ts +19 -10
  67. package/router/dist/config/schema.js +586 -538
  68. package/router/dist/config/types.d.ts +413 -361
  69. package/router/dist/config/types.js +19 -8
  70. package/router/dist/evidence/bounded-evidence.d.ts +26 -26
  71. package/router/dist/evidence/bounded-evidence.js +265 -252
  72. package/router/dist/evidence/evidence-range-selector.d.ts +16 -14
  73. package/router/dist/evidence/evidence-range-selector.js +192 -191
  74. package/router/dist/evidence/evidence-search.d.ts +18 -16
  75. package/router/dist/evidence/evidence-search.js +401 -377
  76. package/router/dist/evidence/evidence.d.ts +17 -17
  77. package/router/dist/evidence/evidence.js +163 -159
  78. package/router/dist/evidence/failure-contracts.d.ts +25 -15
  79. package/router/dist/evidence/failure-contracts.js +132 -126
  80. package/router/dist/evidence/line-ranges.d.ts +17 -15
  81. package/router/dist/evidence/line-ranges.js +18 -18
  82. package/router/dist/experiments/local-index.d.ts +47 -41
  83. package/router/dist/experiments/local-index.js +477 -458
  84. package/router/dist/local/local-traversal.d.ts +18 -0
  85. package/router/dist/local/local-traversal.js +334 -0
  86. package/router/dist/processing/engine.d.ts +94 -70
  87. package/router/dist/processing/engine.js +462 -364
  88. package/router/dist/processing/reducers.d.ts +208 -194
  89. package/router/dist/processing/reducers.js +1434 -1256
  90. package/router/dist/processing/renderers.d.ts +24 -18
  91. package/router/dist/processing/renderers.js +161 -152
  92. package/router/dist/processing/scripts.d.ts +80 -67
  93. package/router/dist/processing/scripts.js +343 -290
  94. package/router/dist/repo/repo-traversal.d.ts +9 -9
  95. package/router/dist/repo/repo-traversal.js +205 -202
  96. package/router/dist/routing/observed-reducers.d.ts +25 -19
  97. package/router/dist/routing/observed-reducers.js +559 -545
  98. package/router/dist/routing/observed-routing.d.ts +23 -14
  99. package/router/dist/routing/observed-routing.js +319 -318
  100. package/router/dist/routing/parsers.d.ts +10 -10
  101. package/router/dist/routing/parsers.js +454 -406
  102. package/router/dist/routing/run-filters.d.ts +45 -41
  103. package/router/dist/routing/run-filters.js +215 -207
  104. package/router/dist/routing/run-reducers.d.ts +45 -26
  105. package/router/dist/routing/run-reducers.js +102 -90
  106. package/router/dist/sandbox/adapter-roots.d.ts +34 -26
  107. package/router/dist/sandbox/adapter-roots.js +43 -41
  108. package/router/dist/sandbox/eryx-python-adapter.d.ts +9 -5
  109. package/router/dist/sandbox/eryx-python-adapter.js +659 -588
  110. package/router/dist/sandbox/jq-wasm-adapter.d.ts +3 -3
  111. package/router/dist/sandbox/jq-wasm-adapter.js +319 -311
  112. package/router/dist/sandbox/quickjs-wasi-adapter.d.ts +9 -5
  113. package/router/dist/sandbox/quickjs-wasi-adapter.js +336 -333
  114. package/router/dist/sandbox/script-sandbox.d.ts +105 -84
  115. package/router/dist/sandbox/script-sandbox.js +294 -260
  116. package/router/dist/setup/script-transform-adapters.d.ts +23 -19
  117. package/router/dist/setup/script-transform-adapters.js +223 -204
  118. package/router/dist/tools/batch.d.ts +27 -16
  119. package/router/dist/tools/batch.js +493 -416
  120. package/router/dist/tools/run.d.ts +47 -35
  121. package/router/dist/tools/run.js +1171 -1086
  122. package/router/dist/tools/search.d.ts +53 -31
  123. package/router/dist/tools/search.js +1224 -1065
  124. package/router/dist/transform/engine.d.ts +121 -96
  125. package/router/dist/transform/engine.js +1853 -1736
  126. package/router/dist/vault/vault-index.d.ts +97 -78
  127. package/router/dist/vault/vault-index.js +347 -342
  128. package/router/dist/vault/vault.d.ts +109 -74
  129. package/router/dist/vault/vault.js +528 -533
  130. package/runtime/interaction-contract.md +16 -0
  131. package/skills/bypass/SKILL.md +52 -38
  132. package/skills/commit-work/SKILL.md +54 -46
  133. package/skills/commit-work/references/staging-decisions.md +46 -24
  134. package/skills/decision-gate/SKILL.md +48 -0
  135. package/skills/design-for-depth/SKILL.md +75 -59
  136. package/skills/design-for-depth/references/design-pressure-signals.md +56 -7
  137. package/skills/design-for-depth/references/interface-design-loop.md +156 -0
  138. package/skills/design-for-depth/references/software-design-philosophy.md +32 -3
  139. package/skills/diagnose-failure/SKILL.md +65 -60
  140. package/skills/diagnose-failure/references/diagnostic-loop-catalog.md +36 -0
  141. package/skills/diagnose-failure/references/flaky-and-performance.md +30 -18
  142. package/skills/discuss/SKILL.md +121 -0
  143. package/skills/discuss/references/checkpoints.md +66 -0
  144. package/skills/evaluate-skill/SKILL.md +62 -53
  145. package/skills/evaluate-skill/references/definition-schema.md +345 -0
  146. package/skills/evaluate-skill/references/evaluation-design.md +86 -0
  147. package/skills/evaluate-skill/references/execution-and-evidence.md +85 -0
  148. package/skills/evaluate-skill/references/review-and-revision.md +51 -0
  149. package/skills/evaluate-skill/scripts/lib/definitions.mjs +296 -0
  150. package/skills/evaluate-skill/scripts/lib/evidence.mjs +46 -0
  151. package/skills/evaluate-skill/scripts/lib/grade-comparison.mjs +60 -0
  152. package/skills/evaluate-skill/scripts/lib/grade-interaction.mjs +148 -0
  153. package/skills/evaluate-skill/scripts/lib/grade-support.mjs +126 -0
  154. package/skills/evaluate-skill/scripts/lib/grade-workspace.mjs +192 -0
  155. package/skills/evaluate-skill/scripts/lib/grade.mjs +56 -0
  156. package/skills/evaluate-skill/scripts/lib/pi.mjs +489 -0
  157. package/skills/evaluate-skill/scripts/lib/process.mjs +79 -0
  158. package/skills/evaluate-skill/scripts/lib/rpc.mjs +444 -0
  159. package/skills/evaluate-skill/scripts/lib/runner.mjs +346 -0
  160. package/skills/evaluate-skill/scripts/lib/sandbox.mjs +409 -0
  161. package/skills/evaluate-skill/scripts/lib/view.mjs +337 -0
  162. package/skills/evaluate-skill/scripts/pi-guard.mjs +164 -0
  163. package/skills/evaluate-skill/scripts/skill-eval.mjs +101 -0
  164. package/skills/execute-work/SKILL.md +99 -0
  165. package/skills/execute-work/references/code-practices.md +78 -0
  166. package/skills/execute-work/references/execution-loop.md +77 -0
  167. package/skills/finish-branch/SKILL.md +117 -0
  168. package/skills/finish-branch/references/integration-options.md +80 -0
  169. package/skills/handoff/SKILL.md +65 -39
  170. package/skills/handoff/references/templates.md +104 -27
  171. package/skills/launch-work/SKILL.md +116 -0
  172. package/skills/launch-work/references/launch-readiness.md +85 -0
  173. package/skills/migration-work/SKILL.md +115 -0
  174. package/skills/migration-work/references/migration-lifecycle.md +82 -0
  175. package/skills/mode-contract/SKILL.md +50 -52
  176. package/skills/output-router/SKILL.md +21 -17
  177. package/skills/output-router/references/safety-policy.md +1 -1
  178. package/skills/release-work/SKILL.md +118 -0
  179. package/skills/release-work/references/release-evidence.md +78 -0
  180. package/skills/review-artifact/SKILL.md +77 -69
  181. package/skills/review-artifact/references/reviewer-prompt.md +133 -42
  182. package/skills/review-work/SKILL.md +82 -57
  183. package/skills/review-work/references/reviewer-prompt.md +97 -60
  184. package/skills/review-work/references/security-risk-lens.md +67 -0
  185. package/skills/setup-freeflow/SKILL.md +58 -66
  186. package/skills/setup-freeflow/references/activation-contract.md +89 -69
  187. package/skills/setup-freeflow/references/host-setup.md +54 -17
  188. package/skills/setup-freeflow/references/output-router-setup.md +62 -54
  189. package/skills/simplify-code/SKILL.md +80 -0
  190. package/skills/simplify-code/references/simplification-patterns.md +70 -0
  191. package/skills/tdd/SKILL.md +96 -0
  192. package/skills/tdd/references/test-design.md +96 -0
  193. package/skills/track-work/SKILL.md +84 -0
  194. package/skills/track-work/references/working-record-schema.md +378 -0
  195. package/skills/verify-work/SKILL.md +59 -38
  196. package/skills/verify-work/references/browser-runtime-evidence.md +55 -0
  197. package/skills/verify-work/references/integration-evidence.md +51 -0
  198. package/skills/verify-work/references/performance-evidence.md +57 -0
  199. package/skills/workflow/SKILL.md +53 -59
  200. package/skills/workflow/references/domain-skill-composition.md +57 -0
  201. package/skills/workflow/references/workflow-loop.md +92 -0
  202. package/skills/write-plan/SKILL.md +85 -58
  203. package/skills/write-plan/references/plan-shapes.md +132 -46
  204. package/skills/write-skill/SKILL.md +82 -51
  205. package/skills/write-skill/references/activation-boundaries.md +62 -0
  206. package/skills/write-skill/references/agent-first-instructions.md +87 -0
  207. package/skills/write-skill/references/progressive-disclosure.md +63 -0
  208. package/skills/write-skill/scripts/lib/skill-author.mjs +653 -0
  209. package/skills/write-skill/scripts/skill-author.mjs +104 -0
  210. package/skills/write-spec/SKILL.md +65 -54
  211. package/skills/write-spec/references/artifact-standards.md +60 -41
  212. package/skills/write-spec/references/decision-records.md +77 -0
  213. package/skills/write-spec/references/spec-shapes.md +119 -60
  214. package/evals/README.md +0 -32
  215. package/evals/fixtures/copy-conventions.md +0 -31
  216. package/evals/fixtures/output-router/README.md +0 -12
  217. package/evals/fixtures/output-router/failed-command-output.txt +0 -9
  218. package/evals/fixtures/output-router/large-router-manual.md +0 -63
  219. package/evals/fixtures/output-router/native-large-output.txt +0 -40
  220. package/evals/fixtures/output-router/noisy-test-output.txt +0 -30
  221. package/evals/fixtures/output-router/verification-output.txt +0 -8
  222. package/evals/fixtures/tiny-artifact-review-app/README.md +0 -5
  223. package/evals/fixtures/tiny-artifact-review-app/docs/billing-policy.md +0 -10
  224. package/evals/fixtures/tiny-artifact-review-app/docs/specs/billing-webhook-api-draft.md +0 -21
  225. package/evals/fixtures/tiny-artifact-review-app/docs/specs/failed-payment-grace-period.md +0 -24
  226. package/evals/fixtures/tiny-artifact-review-app/docs/specs/immediate-downgrade.md +0 -17
  227. package/evals/fixtures/tiny-artifact-review-app/tests/billing.test.md +0 -8
  228. package/evals/fixtures/tiny-commit-ambiguous-app/.freeflow-eval-setup.sh +0 -15
  229. package/evals/fixtures/tiny-commit-ambiguous-app/README.md +0 -3
  230. package/evals/fixtures/tiny-commit-ambiguous-app/src/billing.ts +0 -5
  231. package/evals/fixtures/tiny-commit-ambiguous-app/src/settings-page.ts +0 -1
  232. package/evals/fixtures/tiny-commit-ambiguous-app/tests/settings.test.md +0 -5
  233. package/evals/fixtures/tiny-commit-app/.freeflow-eval-setup.sh +0 -14
  234. package/evals/fixtures/tiny-commit-app/README.md +0 -3
  235. package/evals/fixtures/tiny-commit-app/docs/specs/settings-title.md +0 -5
  236. package/evals/fixtures/tiny-commit-app/src/billing.ts +0 -5
  237. package/evals/fixtures/tiny-commit-app/src/settings-page.ts +0 -1
  238. package/evals/fixtures/tiny-commit-app/tests/settings.test.md +0 -5
  239. package/evals/fixtures/tiny-commit-everything-app/.freeflow-eval-setup.sh +0 -15
  240. package/evals/fixtures/tiny-commit-everything-app/README.md +0 -3
  241. package/evals/fixtures/tiny-commit-everything-app/docs/specs/settings-title.md +0 -5
  242. package/evals/fixtures/tiny-commit-everything-app/src/billing.ts +0 -5
  243. package/evals/fixtures/tiny-commit-everything-app/src/settings-page.ts +0 -1
  244. package/evals/fixtures/tiny-commit-everything-app/tests/settings.test.md +0 -5
  245. package/evals/fixtures/tiny-commit-staged-app/.freeflow-eval-setup.sh +0 -15
  246. package/evals/fixtures/tiny-commit-staged-app/README.md +0 -3
  247. package/evals/fixtures/tiny-commit-staged-app/docs/specs/settings-title.md +0 -5
  248. package/evals/fixtures/tiny-commit-staged-app/src/billing.ts +0 -5
  249. package/evals/fixtures/tiny-commit-staged-app/src/settings-page.ts +0 -1
  250. package/evals/fixtures/tiny-commit-staged-app/tests/settings.test.md +0 -5
  251. package/evals/fixtures/tiny-commit-staged-mixed-app/.freeflow-eval-setup.sh +0 -15
  252. package/evals/fixtures/tiny-commit-staged-mixed-app/README.md +0 -3
  253. package/evals/fixtures/tiny-commit-staged-mixed-app/docs/billing-policy.md +0 -3
  254. package/evals/fixtures/tiny-commit-staged-mixed-app/docs/release-notes.md +0 -3
  255. package/evals/fixtures/tiny-commit-staged-mixed-app/src/billing.ts +0 -5
  256. package/evals/fixtures/tiny-dashboard-stale-app/README.md +0 -11
  257. package/evals/fixtures/tiny-dashboard-stale-app/src/api-client.ts +0 -13
  258. package/evals/fixtures/tiny-dashboard-stale-app/src/dashboard-data.ts +0 -19
  259. package/evals/fixtures/tiny-dashboard-stale-app/tests/dashboard-data.test.md +0 -9
  260. package/evals/fixtures/tiny-decision-destination-app/README.md +0 -6
  261. package/evals/fixtures/tiny-decision-destination-app/src/risk.ts +0 -8
  262. package/evals/fixtures/tiny-decision-destination-app/tests/risk.test.md +0 -4
  263. package/evals/fixtures/tiny-design-depth-app/README.md +0 -15
  264. package/evals/fixtures/tiny-design-depth-app/src/routes.ts +0 -25
  265. package/evals/fixtures/tiny-design-depth-app/src/sendEmail.ts +0 -3
  266. package/evals/fixtures/tiny-design-depth-app/src/sendSms.ts +0 -3
  267. package/evals/fixtures/tiny-design-depth-app/src/telemetry.ts +0 -3
  268. package/evals/fixtures/tiny-design-depth-app/tests/routes.test.md +0 -12
  269. package/evals/fixtures/tiny-eval-method-app/README.md +0 -8
  270. package/evals/fixtures/tiny-eval-method-app/evals/reports/review-pr-eval-result.md +0 -5
  271. package/evals/fixtures/tiny-eval-method-app/evals/reports/triage-question-failure.md +0 -17
  272. package/evals/fixtures/tiny-eval-method-app/evals/runs/review-pr-with-skill-output.diff +0 -11
  273. package/evals/fixtures/tiny-eval-method-app/evals/runs/review-pr-with-skill-output.md +0 -3
  274. package/evals/fixtures/tiny-eval-method-app/skills/review-pr/SKILL.md +0 -10
  275. package/evals/fixtures/tiny-eval-method-app/skills/triage-question/SKILL.md +0 -10
  276. package/evals/fixtures/tiny-execute-plan-app/README.md +0 -5
  277. package/evals/fixtures/tiny-execute-plan-app/checks/settings-and-billing-check.sh +0 -5
  278. package/evals/fixtures/tiny-execute-plan-app/docs/billing-policy.md +0 -10
  279. package/evals/fixtures/tiny-execute-plan-app/docs/plans/immediate-downgrade-plan.md +0 -11
  280. package/evals/fixtures/tiny-execute-plan-app/docs/plans/settings-title-plan.md +0 -12
  281. package/evals/fixtures/tiny-execute-plan-app/docs/plans/settings-title-with-bad-check.md +0 -15
  282. package/evals/fixtures/tiny-execute-plan-app/docs/plans/unverified-billing-plan.md +0 -9
  283. package/evals/fixtures/tiny-execute-plan-app/docs/specs/failed-payment-grace-period.md +0 -9
  284. package/evals/fixtures/tiny-execute-plan-app/docs/specs/settings-title.md +0 -9
  285. package/evals/fixtures/tiny-execute-plan-app/src/billing.ts +0 -7
  286. package/evals/fixtures/tiny-execute-plan-app/src/settings-page.ts +0 -1
  287. package/evals/fixtures/tiny-execute-plan-app/tests/billing.test.md +0 -7
  288. package/evals/fixtures/tiny-execute-plan-app/tests/settings.test.md +0 -5
  289. package/evals/fixtures/tiny-execute-review-loop-app/README.md +0 -5
  290. package/evals/fixtures/tiny-execute-review-loop-app/docs/billing-policy.md +0 -9
  291. package/evals/fixtures/tiny-execute-review-loop-app/docs/plans/settings-title-plan.md +0 -12
  292. package/evals/fixtures/tiny-execute-review-loop-app/docs/review/previous-agent-summary.md +0 -15
  293. package/evals/fixtures/tiny-execute-review-loop-app/docs/review/review-pass-1-non-pass.md +0 -11
  294. package/evals/fixtures/tiny-execute-review-loop-app/docs/specs/settings-title.md +0 -9
  295. package/evals/fixtures/tiny-execute-review-loop-app/src/billing.ts +0 -7
  296. package/evals/fixtures/tiny-execute-review-loop-app/src/settings-page.ts +0 -1
  297. package/evals/fixtures/tiny-execute-review-loop-app/tests/billing.test.md +0 -7
  298. package/evals/fixtures/tiny-execute-review-loop-app/tests/settings.test.md +0 -5
  299. package/evals/fixtures/tiny-flaky-session-app/README.md +0 -10
  300. package/evals/fixtures/tiny-flaky-session-app/src/session-timeout.ts +0 -13
  301. package/evals/fixtures/tiny-flaky-session-app/tests/session-timeout.test.md +0 -8
  302. package/evals/fixtures/tiny-handoff-app/README.md +0 -5
  303. package/evals/fixtures/tiny-handoff-app/docs/billing-policy.md +0 -10
  304. package/evals/fixtures/tiny-handoff-app/docs/handoffs/old-agent-handoff.md +0 -8
  305. package/evals/fixtures/tiny-handoff-app/docs/plans/billing-retry-plan.md +0 -11
  306. package/evals/fixtures/tiny-handoff-app/src/billing.ts +0 -7
  307. package/evals/fixtures/tiny-handoff-report-app/README.md +0 -3
  308. package/evals/fixtures/tiny-handoff-report-app/evals/runs/handoff-3/hof-003/with-skill-output.diff +0 -1
  309. package/evals/fixtures/tiny-handoff-report-app/evals/runs/handoff-3/hof-003/with-skill-output.md +0 -1
  310. package/evals/fixtures/tiny-handoff-report-app/evals/scores/hof-003-score.txt +0 -4
  311. package/evals/fixtures/tiny-plan-app/README.md +0 -5
  312. package/evals/fixtures/tiny-plan-app/docs/billing-policy.md +0 -10
  313. package/evals/fixtures/tiny-plan-app/docs/specs/failed-payment-grace-period.md +0 -25
  314. package/evals/fixtures/tiny-plan-app/src/billing.ts +0 -17
  315. package/evals/fixtures/tiny-plan-app/src/settings-page.ts +0 -1
  316. package/evals/fixtures/tiny-plan-app/tests/billing.test.md +0 -8
  317. package/evals/fixtures/tiny-plan-app/tests/settings.test.md +0 -5
  318. package/evals/fixtures/tiny-plan-strict-api-app/README.md +0 -3
  319. package/evals/fixtures/tiny-plan-strict-api-app/docs/billing-policy.md +0 -5
  320. package/evals/fixtures/tiny-plan-strict-api-app/docs/specs/billing-webhook-api.md +0 -25
  321. package/evals/fixtures/tiny-plan-strict-api-app/src/billing.ts +0 -5
  322. package/evals/fixtures/tiny-plan-strict-api-app/src/webhooks.ts +0 -3
  323. package/evals/fixtures/tiny-plan-strict-api-app/tests/billing-webhook.test.md +0 -8
  324. package/evals/fixtures/tiny-post-setup-invalid-config-app/.freeflow/config.json +0 -3
  325. package/evals/fixtures/tiny-post-setup-invalid-config-app/AGENTS.md +0 -15
  326. package/evals/fixtures/tiny-post-setup-invalid-config-app/README.md +0 -16
  327. package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/auth-review.md +0 -15
  328. package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/billing-policy.md +0 -10
  329. package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/copy-conventions.md +0 -15
  330. package/evals/fixtures/tiny-post-setup-invalid-config-app/src/auth-middleware.ts +0 -12
  331. package/evals/fixtures/tiny-post-setup-invalid-config-app/src/billing.ts +0 -20
  332. package/evals/fixtures/tiny-post-setup-invalid-config-app/src/login-copy.ts +0 -1
  333. package/evals/fixtures/tiny-post-setup-invalid-config-app/src/settings-page.ts +0 -1
  334. package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/auth-middleware.test.md +0 -8
  335. package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/billing.test.md +0 -8
  336. package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/copy.test.md +0 -7
  337. package/evals/fixtures/tiny-post-setup-missing-config-app/AGENTS.md +0 -15
  338. package/evals/fixtures/tiny-post-setup-missing-config-app/README.md +0 -16
  339. package/evals/fixtures/tiny-post-setup-missing-config-app/docs/auth-review.md +0 -15
  340. package/evals/fixtures/tiny-post-setup-missing-config-app/docs/billing-policy.md +0 -10
  341. package/evals/fixtures/tiny-post-setup-missing-config-app/docs/copy-conventions.md +0 -15
  342. package/evals/fixtures/tiny-post-setup-missing-config-app/src/auth-middleware.ts +0 -12
  343. package/evals/fixtures/tiny-post-setup-missing-config-app/src/billing.ts +0 -20
  344. package/evals/fixtures/tiny-post-setup-missing-config-app/src/login-copy.ts +0 -1
  345. package/evals/fixtures/tiny-post-setup-missing-config-app/src/settings-page.ts +0 -1
  346. package/evals/fixtures/tiny-post-setup-missing-config-app/tests/auth-middleware.test.md +0 -8
  347. package/evals/fixtures/tiny-post-setup-missing-config-app/tests/billing.test.md +0 -8
  348. package/evals/fixtures/tiny-post-setup-missing-config-app/tests/copy.test.md +0 -7
  349. package/evals/fixtures/tiny-post-setup-source-conflict-app/.freeflow/config.json +0 -3
  350. package/evals/fixtures/tiny-post-setup-source-conflict-app/AGENTS.md +0 -15
  351. package/evals/fixtures/tiny-post-setup-source-conflict-app/README.md +0 -16
  352. package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/auth-review.md +0 -15
  353. package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/billing-policy.md +0 -10
  354. package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/copy-conventions.md +0 -15
  355. package/evals/fixtures/tiny-post-setup-source-conflict-app/src/auth-middleware.ts +0 -12
  356. package/evals/fixtures/tiny-post-setup-source-conflict-app/src/billing.ts +0 -20
  357. package/evals/fixtures/tiny-post-setup-source-conflict-app/src/login-copy.ts +0 -1
  358. package/evals/fixtures/tiny-post-setup-source-conflict-app/src/settings-page.ts +0 -1
  359. package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/auth-middleware.test.md +0 -8
  360. package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/billing.test.md +0 -8
  361. package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/copy.test.md +0 -7
  362. package/evals/fixtures/tiny-report-performance-app/README.md +0 -11
  363. package/evals/fixtures/tiny-report-performance-app/docs/performance.md +0 -10
  364. package/evals/fixtures/tiny-report-performance-app/src/report-summary.ts +0 -29
  365. package/evals/fixtures/tiny-report-performance-app/tests/report-performance.test.md +0 -8
  366. package/evals/fixtures/tiny-review-request-app/README.md +0 -3
  367. package/evals/fixtures/tiny-review-request-app/docs/billing-policy.md +0 -5
  368. package/evals/fixtures/tiny-review-request-app/docs/plans/billing-webhook-api.md +0 -19
  369. package/evals/fixtures/tiny-review-request-app/docs/review/previous-agent-summary.md +0 -20
  370. package/evals/fixtures/tiny-review-request-app/docs/specs/billing-webhook-api.md +0 -25
  371. package/evals/fixtures/tiny-review-request-app/src/billing.ts +0 -11
  372. package/evals/fixtures/tiny-review-request-app/src/webhooks.ts +0 -19
  373. package/evals/fixtures/tiny-review-request-app/tests/billing-webhook.test.md +0 -8
  374. package/evals/fixtures/tiny-review-work-app/README.md +0 -5
  375. package/evals/fixtures/tiny-review-work-app/docs/billing-policy.md +0 -9
  376. package/evals/fixtures/tiny-review-work-app/docs/plans/settings-title-plan.md +0 -12
  377. package/evals/fixtures/tiny-review-work-app/docs/review/previous-agent-summary.md +0 -15
  378. package/evals/fixtures/tiny-review-work-app/docs/specs/settings-title.md +0 -9
  379. package/evals/fixtures/tiny-review-work-app/src/billing.ts +0 -7
  380. package/evals/fixtures/tiny-review-work-app/src/settings-page.ts +0 -1
  381. package/evals/fixtures/tiny-review-work-app/tests/billing.test.md +0 -7
  382. package/evals/fixtures/tiny-review-work-app/tests/settings.test.md +0 -5
  383. package/evals/fixtures/tiny-saas-app/README.md +0 -16
  384. package/evals/fixtures/tiny-saas-app/docs/auth-review.md +0 -15
  385. package/evals/fixtures/tiny-saas-app/docs/billing-policy.md +0 -10
  386. package/evals/fixtures/tiny-saas-app/docs/copy-conventions.md +0 -15
  387. package/evals/fixtures/tiny-saas-app/docs/specs/settings-title.md +0 -13
  388. package/evals/fixtures/tiny-saas-app/src/auth-middleware.ts +0 -12
  389. package/evals/fixtures/tiny-saas-app/src/billing.ts +0 -20
  390. package/evals/fixtures/tiny-saas-app/src/login-copy.ts +0 -1
  391. package/evals/fixtures/tiny-saas-app/src/settings-page.ts +0 -1
  392. package/evals/fixtures/tiny-saas-app/tests/auth-middleware.test.md +0 -8
  393. package/evals/fixtures/tiny-saas-app/tests/billing.test.md +0 -8
  394. package/evals/fixtures/tiny-saas-app/tests/copy.test.md +0 -7
  395. package/evals/fixtures/tiny-setup-agents-app/AGENTS.md +0 -6
  396. package/evals/fixtures/tiny-setup-both-app/AGENTS.md +0 -5
  397. package/evals/fixtures/tiny-setup-both-app/CLAUDE.md +0 -5
  398. package/evals/fixtures/tiny-setup-claude-app/CLAUDE.md +0 -6
  399. package/evals/fixtures/tiny-setup-codex-rules-app/.codex/rules/shell.rules +0 -5
  400. package/evals/fixtures/tiny-setup-codex-rules-app/AGENTS.md +0 -6
  401. package/evals/fixtures/tiny-setup-conflict-app/AGENTS.md +0 -6
  402. package/evals/fixtures/tiny-setup-existing-block-app/AGENTS.md +0 -14
  403. package/evals/fixtures/tiny-setup-four-rules-app/CLAUDE.md +0 -6
  404. package/evals/fixtures/tiny-skill-dev-app/README.md +0 -10
  405. package/evals/fixtures/tiny-skill-dev-app/evals/prompts/review-pr-001.txt +0 -8
  406. package/evals/fixtures/tiny-skill-dev-app/evals/reports/review-pr-failure.md +0 -17
  407. package/evals/fixtures/tiny-skill-dev-app/skills/review-pr/SKILL.md +0 -13
  408. package/evals/fixtures/tiny-team-app/README.md +0 -5
  409. package/evals/fixtures/tiny-team-app/docs/product.md +0 -6
  410. package/evals/fixtures/tiny-team-app/src/teams.ts +0 -9
  411. package/evals/fixtures/tiny-team-app/src/users.ts +0 -5
  412. package/evals/fixtures/tiny-team-app/tests/teams.test.md +0 -7
  413. package/evals/fixtures/tiny-verify-app/README.md +0 -5
  414. package/evals/fixtures/tiny-verify-app/src/settings-nav.ts +0 -1
  415. package/evals/fixtures/tiny-verify-app/src/settings-page.ts +0 -1
  416. package/evals/fixtures/tiny-verify-app/tests/settings.test.md +0 -7
  417. package/evals/prompts/aon-001.txt +0 -2
  418. package/evals/prompts/byp-001.txt +0 -2
  419. package/evals/prompts/byp-002.txt +0 -2
  420. package/evals/prompts/cap-001.txt +0 -3
  421. package/evals/prompts/cap-002.txt +0 -3
  422. package/evals/prompts/cmd-001.txt +0 -3
  423. package/evals/prompts/cmd-002.txt +0 -3
  424. package/evals/prompts/cmd-003.txt +0 -6
  425. package/evals/prompts/cmd-004.txt +0 -5
  426. package/evals/prompts/cmd-005.txt +0 -5
  427. package/evals/prompts/cmd-006.txt +0 -5
  428. package/evals/prompts/cmd-007.txt +0 -5
  429. package/evals/prompts/cmd-008.txt +0 -5
  430. package/evals/prompts/cmd-009.txt +0 -8
  431. package/evals/prompts/cmd-010.txt +0 -5
  432. package/evals/prompts/cmd-011.txt +0 -5
  433. package/evals/prompts/cmd-012.txt +0 -5
  434. package/evals/prompts/cmd-013.txt +0 -5
  435. package/evals/prompts/cmd-014.txt +0 -7
  436. package/evals/prompts/cmd-015.txt +0 -7
  437. package/evals/prompts/cmd-016.txt +0 -5
  438. package/evals/prompts/cmt-001.txt +0 -1
  439. package/evals/prompts/cmt-002.txt +0 -1
  440. package/evals/prompts/cmt-003.txt +0 -1
  441. package/evals/prompts/cmt-004.txt +0 -1
  442. package/evals/prompts/cmt-005.txt +0 -1
  443. package/evals/prompts/dfd-001.txt +0 -3
  444. package/evals/prompts/dia-001.txt +0 -3
  445. package/evals/prompts/dia-002.txt +0 -3
  446. package/evals/prompts/dia-003.txt +0 -3
  447. package/evals/prompts/dis-001.txt +0 -5
  448. package/evals/prompts/dis-002.txt +0 -5
  449. package/evals/prompts/esk-001.txt +0 -5
  450. package/evals/prompts/esk-002.txt +0 -5
  451. package/evals/prompts/esk-003.txt +0 -5
  452. package/evals/prompts/grc-001.txt +0 -3
  453. package/evals/prompts/hof-001.txt +0 -3
  454. package/evals/prompts/hof-002.txt +0 -1
  455. package/evals/prompts/hof-003.txt +0 -1
  456. package/evals/prompts/hof-004.txt +0 -1
  457. package/evals/prompts/hof-005.txt +0 -1
  458. package/evals/prompts/ivg-001.txt +0 -1
  459. package/evals/prompts/ivg-002.txt +0 -11
  460. package/evals/prompts/ivg-003.txt +0 -1
  461. package/evals/prompts/ivg-004.txt +0 -1
  462. package/evals/prompts/mode-001.txt +0 -3
  463. package/evals/prompts/mode-002.txt +0 -1
  464. package/evals/prompts/mode-003.txt +0 -3
  465. package/evals/prompts/mode-004.txt +0 -3
  466. package/evals/prompts/mode-005.txt +0 -3
  467. package/evals/prompts/mode-006.txt +0 -3
  468. package/evals/prompts/mode-007.txt +0 -3
  469. package/evals/prompts/otr-001.txt +0 -3
  470. package/evals/prompts/otr-002.txt +0 -3
  471. package/evals/prompts/rar-001.txt +0 -5
  472. package/evals/prompts/rar-002.txt +0 -3
  473. package/evals/prompts/rar-003.txt +0 -6
  474. package/evals/prompts/rar-004.txt +0 -15
  475. package/evals/prompts/rar-005.txt +0 -10
  476. package/evals/prompts/rbr-001.txt +0 -3
  477. package/evals/prompts/rbr-002.txt +0 -3
  478. package/evals/prompts/rbr-003.txt +0 -7
  479. package/evals/prompts/rev-001.txt +0 -3
  480. package/evals/prompts/rev-002.txt +0 -5
  481. package/evals/prompts/rev-003.txt +0 -6
  482. package/evals/prompts/rev-004.txt +0 -1
  483. package/evals/prompts/rev-005.txt +0 -15
  484. package/evals/prompts/rev-006.txt +0 -5
  485. package/evals/prompts/stp-001.txt +0 -1
  486. package/evals/prompts/stp-002.txt +0 -1
  487. package/evals/prompts/stp-003.txt +0 -1
  488. package/evals/prompts/stp-004.txt +0 -1
  489. package/evals/prompts/stp-005.txt +0 -1
  490. package/evals/prompts/stp-006.txt +0 -1
  491. package/evals/prompts/stp-007.txt +0 -1
  492. package/evals/prompts/stp-008.txt +0 -1
  493. package/evals/prompts/stp-009.txt +0 -1
  494. package/evals/prompts/stp-010.txt +0 -1
  495. package/evals/prompts/stp-011.txt +0 -1
  496. package/evals/prompts/vfy-003.txt +0 -1
  497. package/evals/prompts/wpl-001.txt +0 -3
  498. package/evals/prompts/wpl-002.txt +0 -5
  499. package/evals/prompts/wpl-003.txt +0 -3
  500. package/evals/prompts/wpl-004.txt +0 -5
  501. package/evals/prompts/wpl-005.txt +0 -1
  502. package/evals/prompts/wrc-001.txt +0 -10
  503. package/evals/prompts/wrc-002.txt +0 -3
  504. package/evals/prompts/wsk-001.txt +0 -6
  505. package/evals/prompts/wsp-001.txt +0 -5
  506. package/evals/prompts/wsp-002.txt +0 -15
  507. package/evals/prompts/wsp-003.txt +0 -3
  508. package/evals/prompts/wsp-004.txt +0 -15
  509. package/evals/prompts/wsp-005.txt +0 -5
  510. package/evals/prompts/wsp-006.txt +0 -12
  511. package/evals/prompts/wsp-007.txt +0 -9
  512. package/evals/prompts/wsp-008.txt +0 -13
  513. package/evals/prompts/xpl-001.txt +0 -1
  514. package/evals/prompts/xpl-002.txt +0 -3
  515. package/evals/prompts/xpl-003.txt +0 -3
  516. package/evals/prompts/xpl-004.txt +0 -3
  517. package/evals/prompts/xpl-005.txt +0 -5
  518. package/evals/prompts/xpl-006.txt +0 -3
  519. package/evals/registries/adversarial-evals.json +0 -39
  520. package/evals/registries/fixture-evals.json +0 -2513
  521. package/evals/registries/handoff-evals.json +0 -74
  522. package/evals/registries/legacy-evals.json +0 -147
  523. package/evals/registries/skill-evidence.json +0 -193
  524. package/evals/registries/verify-work-evals.json +0 -46
  525. package/evals/reports/acceptance/v0.1-acceptance-report.md +0 -130
  526. package/evals/reports/by-command-surface/command-surface-1-report.md +0 -45
  527. package/evals/reports/by-command-surface/command-surface-10-report.md +0 -76
  528. package/evals/reports/by-command-surface/command-surface-11-report.md +0 -77
  529. package/evals/reports/by-command-surface/command-surface-12-report.md +0 -91
  530. package/evals/reports/by-command-surface/command-surface-13-report.md +0 -64
  531. package/evals/reports/by-command-surface/command-surface-14-report.md +0 -66
  532. package/evals/reports/by-command-surface/command-surface-15-report.md +0 -124
  533. package/evals/reports/by-command-surface/command-surface-16-report.md +0 -39
  534. package/evals/reports/by-command-surface/command-surface-2-report.md +0 -80
  535. package/evals/reports/by-command-surface/command-surface-3-report.md +0 -86
  536. package/evals/reports/by-command-surface/command-surface-4-report.md +0 -76
  537. package/evals/reports/by-command-surface/command-surface-5-report.md +0 -80
  538. package/evals/reports/by-command-surface/command-surface-6-report.md +0 -74
  539. package/evals/reports/by-command-surface/command-surface-7-report.md +0 -84
  540. package/evals/reports/by-command-surface/command-surface-8-report.md +0 -79
  541. package/evals/reports/by-command-surface/command-surface-9-report.md +0 -79
  542. package/evals/reports/by-command-surface/command-surface-matrix.md +0 -91
  543. package/evals/reports/by-skill/bypass-1-report.md +0 -124
  544. package/evals/reports/by-skill/capture-decisions-1-report.md +0 -99
  545. package/evals/reports/by-skill/capture-decisions-2-report.md +0 -102
  546. package/evals/reports/by-skill/commit-work-1-report.md +0 -165
  547. package/evals/reports/by-skill/commit-work-2-report.md +0 -109
  548. package/evals/reports/by-skill/design-for-depth-1-report.md +0 -95
  549. package/evals/reports/by-skill/diagnose-failure-1-report.md +0 -91
  550. package/evals/reports/by-skill/diagnose-failure-2-report.md +0 -94
  551. package/evals/reports/by-skill/discover-1-report.md +0 -118
  552. package/evals/reports/by-skill/evaluate-skill-2-report.md +0 -71
  553. package/evals/reports/by-skill/execute-plan-1-report.md +0 -103
  554. package/evals/reports/by-skill/execute-plan-2-report.md +0 -112
  555. package/evals/reports/by-skill/execute-plan-3-report.md +0 -87
  556. package/evals/reports/by-skill/grill-context-1-report.md +0 -103
  557. package/evals/reports/by-skill/handoff-1-report.md +0 -123
  558. package/evals/reports/by-skill/handoff-2-report.md +0 -105
  559. package/evals/reports/by-skill/handoff-3-report.md +0 -100
  560. package/evals/reports/by-skill/handoff-7-report.md +0 -77
  561. package/evals/reports/by-skill/interview-gate-1-report.md +0 -63
  562. package/evals/reports/by-skill/interview-gate-2-report.md +0 -105
  563. package/evals/reports/by-skill/mode-contract-1-report.md +0 -74
  564. package/evals/reports/by-skill/mode-contract-2-report.md +0 -87
  565. package/evals/reports/by-skill/mode-contract-3-report.md +0 -65
  566. package/evals/reports/by-skill/mode-contract-4-report.md +0 -71
  567. package/evals/reports/by-skill/mode-contract-5-report.md +0 -70
  568. package/evals/reports/by-skill/output-router-1-report.md +0 -76
  569. package/evals/reports/by-skill/output-router-2-report.md +0 -65
  570. package/evals/reports/by-skill/research-1-report.md +0 -144
  571. package/evals/reports/by-skill/research-brief-1-report.md +0 -94
  572. package/evals/reports/by-skill/research-brief-2-report.md +0 -75
  573. package/evals/reports/by-skill/review-artifact-1-report.md +0 -91
  574. package/evals/reports/by-skill/review-artifact-2-report.md +0 -79
  575. package/evals/reports/by-skill/review-artifact-3-report.md +0 -120
  576. package/evals/reports/by-skill/review-artifact-4-report.md +0 -89
  577. package/evals/reports/by-skill/review-artifact-5-report.md +0 -66
  578. package/evals/reports/by-skill/review-work-1-report.md +0 -85
  579. package/evals/reports/by-skill/review-work-2-report.md +0 -87
  580. package/evals/reports/by-skill/review-work-3-report.md +0 -104
  581. package/evals/reports/by-skill/review-work-4-report.md +0 -108
  582. package/evals/reports/by-skill/review-work-5-report.md +0 -73
  583. package/evals/reports/by-skill/review-work-6-report.md +0 -66
  584. package/evals/reports/by-skill/setup-freeflow-1-report.md +0 -199
  585. package/evals/reports/by-skill/setup-freeflow-2-report.md +0 -105
  586. package/evals/reports/by-skill/setup-freeflow-3-report.md +0 -105
  587. package/evals/reports/by-skill/setup-freeflow-4-report.md +0 -88
  588. package/evals/reports/by-skill/setup-freeflow-5-report.md +0 -115
  589. package/evals/reports/by-skill/skill-authoring-1-report.md +0 -81
  590. package/evals/reports/by-skill/verify-work-1-report.md +0 -111
  591. package/evals/reports/by-skill/verify-work-2-report.md +0 -120
  592. package/evals/reports/by-skill/workflow-1-report.md +0 -65
  593. package/evals/reports/by-skill/write-plan-1-report.md +0 -123
  594. package/evals/reports/by-skill/write-plan-2-report.md +0 -98
  595. package/evals/reports/by-skill/write-plan-3-report.md +0 -110
  596. package/evals/reports/by-skill/write-spec-1-report.md +0 -88
  597. package/evals/reports/by-skill/write-spec-2-report.md +0 -89
  598. package/evals/reports/by-skill/write-spec-3-report.md +0 -90
  599. package/evals/reports/by-skill/write-spec-4-report.md +0 -167
  600. package/evals/reports/harness/claude-harness-1-report.md +0 -103
  601. package/evals/reports/harness/eval-harness-1-report.md +0 -91
  602. package/evals/reports/iterations/iteration-1-report.md +0 -71
  603. package/evals/reports/iterations/iteration-2-report.md +0 -78
  604. package/evals/reports/iterations/iteration-3-report.md +0 -118
  605. package/evals/reports/iterations/iteration-4-report.md +0 -131
  606. package/evals/reports/iterations/iteration-5-report.md +0 -149
  607. package/evals/reports/iterations/iteration-6-report.md +0 -136
  608. package/evals/reports/runtime/always-on-runtime-1-report.md +0 -107
  609. package/evals/reports/runtime/context-mode-normalized-benchmark-1-report.md +0 -52
  610. package/evals/reports/runtime/context-mode-real-deep-baseline-1-report.md +0 -410
  611. package/evals/reports/runtime/context-mode-real-deep-final-slice-11-report.md +0 -203
  612. package/evals/reports/runtime/context-mode-real-deep-final-slice-11-review.md +0 -51
  613. package/evals/reports/runtime/context-saving-native-tools-baseline-1-report.md +0 -99
  614. package/evals/reports/runtime/eryx-python-compatibility-reprobe-1-report.md +0 -166
  615. package/evals/reports/runtime/eryx-python-proof-spike-1-report.md +0 -96
  616. package/evals/reports/runtime/eryx-python-proof-spike-2-report.md +0 -151
  617. package/evals/reports/runtime/eryx-python-script-derive-execution-1-report.md +0 -233
  618. package/evals/reports/runtime/jq-script-derive-execution-1-report.md +0 -215
  619. package/evals/reports/runtime/jq-wasm-proof-spike-1-report.md +0 -67
  620. package/evals/reports/runtime/output-router-benchmark-1-report.md +0 -81
  621. package/evals/reports/runtime/output-router-capture-derive-provider-eval-1-report.md +0 -35
  622. package/evals/reports/runtime/output-router-codex-large-index-sqlite-adhoc-report.md +0 -150
  623. package/evals/reports/runtime/output-router-codex-qa-benchmark-1-report.md +0 -46
  624. package/evals/reports/runtime/output-router-command-benchmark-1-report.md +0 -62
  625. package/evals/reports/runtime/output-router-index-benchmark-1-report.md +0 -64
  626. package/evals/reports/runtime/output-router-regression-1-report.md +0 -81
  627. package/evals/reports/runtime/output-router-transform-eval-1-report.md +0 -28
  628. package/evals/reports/runtime/pi-observed-routing-eval-1-report.md +0 -44
  629. package/evals/reports/runtime/quickjs-script-derive-execution-1-report.md +0 -159
  630. package/evals/reports/runtime/quickjs-wasi-proof-spike-1-report.md +0 -55
  631. package/evals/reports/runtime/render-format-row-protocol-1-report.md +0 -58
  632. package/evals/reports/runtime/script-sandbox-adapter-selection-review-1-report.md +0 -84
  633. package/evals/reports/runtime/script-sandbox-probe-resource-hardening-1-report.md +0 -51
  634. package/evals/reports/runtime/storage-policy-benchmark-1-report.md +0 -176
  635. package/evals/reports/runtime/vault-index-storage-spike-1-report.md +0 -39
  636. package/evals/reports/runtime/workflow-context-hook-1-report.md +0 -82
  637. package/evals/runbooks/adversarial-eval-runbook.md +0 -28
  638. package/evals/runbooks/fixture-eval-runbook.md +0 -137
  639. package/evals/runbooks/handoff-eval-runbook.md +0 -22
  640. package/evals/runbooks/verify-work-eval-runbook.md +0 -27
  641. package/evals/scripts/audit-command-surface.sh +0 -160
  642. package/evals/scripts/check-activation-contract.sh +0 -121
  643. package/evals/scripts/check-runtime-context-hook.sh +0 -183
  644. package/evals/scripts/grade-fixture-eval.sh +0 -446
  645. package/evals/scripts/run-claude-fixture-eval.sh +0 -26
  646. package/evals/scripts/run-codex-fixture-eval.sh +0 -26
  647. package/evals/scripts/run-eryx-python-proof-spike.js +0 -559
  648. package/evals/scripts/run-fixture-eval-by-id.sh +0 -23
  649. package/evals/scripts/run-fixture-eval.sh +0 -464
  650. package/evals/scripts/run-jq-wasm-proof-spike.js +0 -299
  651. package/evals/scripts/run-output-router-transform-eval.js +0 -115
  652. package/evals/scripts/run-pi-observed-routing-eval.js +0 -478
  653. package/evals/scripts/run-quickjs-wasi-proof-spike.js +0 -339
  654. package/evals/scripts/skill-evidence.sh +0 -316
  655. package/evals/scripts/validate-release-metadata.sh +0 -486
  656. package/evals/suites/v0.1-acceptance-suite.md +0 -131
  657. package/pi-extension/dist/host-producer-identification.js +0 -186
  658. package/pi-extension/dist/mcp-config.js +0 -30
  659. package/pi-extension/dist/native-safety-net.js +0 -209
  660. package/pi-extension/dist/observed-tool-routing.js +0 -114
  661. package/pi-extension/dist/renderers.js +0 -835
  662. package/pi-extension/dist/router-tools.js +0 -438
  663. package/pi-extension/dist/runtime-context.js +0 -288
  664. package/pi-extension/dist/schemas.js +0 -254
  665. package/pi-extension/dist/status.js +0 -449
  666. package/pi-extension/dist/utils.js +0 -467
  667. package/pi-extension/src/runtime-context.ts +0 -347
  668. package/pi-extension/src/status.ts +0 -505
  669. package/plugin-docs/README.md +0 -40
  670. package/plugin-docs/adr/0001-three-modes.md +0 -27
  671. package/plugin-docs/adr/0002-evals-before-hooks.md +0 -17
  672. package/plugin-docs/adr/0003-release-boundary.md +0 -21
  673. package/plugin-docs/adr/0004-discover-replaces-shallow-discovery-skills.md +0 -26
  674. package/plugin-docs/adr/README.md +0 -10
  675. package/plugin-docs/architecture.md +0 -89
  676. package/plugin-docs/output-router.md +0 -396
  677. package/plugin-docs/release-evidence.md +0 -77
  678. package/plugin-docs/skills.md +0 -44
  679. package/plugin-docs/workflow.md +0 -57
  680. package/skills/diagnose-failure/references/feedback-loop-catalog.md +0 -25
  681. package/skills/discover/ARTIFACT-DESTINATIONS.md +0 -58
  682. package/skills/discover/CHECKPOINTS.md +0 -74
  683. package/skills/discover/SKILL.md +0 -173
  684. package/skills/evaluate-skill/references/eval-patterns.md +0 -41
  685. package/skills/evaluate-skill/references/grading-priority.md +0 -33
  686. package/skills/execute-plan/SKILL.md +0 -133
  687. package/skills/execute-plan/references/execution-map.md +0 -122
  688. package/skills/interview-gate/SKILL.md +0 -90
  689. package/skills/workflow/references/workflow-map.md +0 -104
  690. /package/pi-extension/src/{mcp-config.ts → integrations/mcp-config.ts} +0 -0
@@ -1,600 +1,648 @@
1
- import { BATCH_STEP_KINDS, EXECUTION_STATUSES, EVIDENCE_WINDOWS, FAILURE_EXECUTION_STATUSES, OUTPUT_STREAMS, PERSISTENCE_STATUSES, PRESERVE_MODES, PRODUCER_KINDS, RECOVERABILITY_MODES, RETRIEVAL_ACTIONS, ROUTE_KINDS, ROUTER_FAILURE_KINDS, ROUTING_STATUSES, STORAGE_POLICY_MODES, TOOL_STATUSES, } from "./types.js";
2
- import { isValidPostToolRoutingMode, validateNormalizedRouterHints, validatePositiveIntegerThreshold, validateVaultRetentionPolicy, } from "./router-contract.js";
1
+ import {
2
+ BATCH_STEP_KINDS,
3
+ EXECUTION_STATUSES,
4
+ EVIDENCE_WINDOWS,
5
+ FAILURE_EXECUTION_STATUSES,
6
+ OUTPUT_STREAMS,
7
+ PERSISTENCE_STATUSES,
8
+ PRESERVE_MODES,
9
+ PRODUCER_KINDS,
10
+ RECOVERABILITY_MODES,
11
+ RETRIEVAL_ACTIONS,
12
+ ROUTE_KINDS,
13
+ ROUTER_FAILURE_KINDS,
14
+ ROUTING_STATUSES,
15
+ STORAGE_POLICY_MODES,
16
+ TOOL_STATUSES,
17
+ } from "./types.js";
18
+ import {
19
+ isValidPostToolRoutingMode,
20
+ validateNormalizedRouterHints,
21
+ validatePositiveIntegerThreshold,
22
+ validateVaultRetentionPolicy,
23
+ } from "./router-contract.js";
3
24
  function isRecord(value) {
4
- return typeof value === "object" && value !== null && !Array.isArray(value);
25
+ return typeof value === "object" && value !== null && !Array.isArray(value);
5
26
  }
6
27
  function success(value) {
7
- return { ok: true, value };
28
+ return { ok: true, value };
8
29
  }
9
30
  function failure(issues) {
10
- return { ok: false, issues };
31
+ return { ok: false, issues };
11
32
  }
12
33
  function isOneOf(value, allowed) {
13
- return typeof value === "string" && allowed.includes(value);
34
+ return typeof value === "string" && allowed.includes(value);
14
35
  }
15
36
  function requireString(record, key, path, issues) {
16
- if (typeof record[key] !== "string" || record[key] === "") {
17
- issues.push({ path: `${path}.${key}`, message: "Expected a non-empty string." });
18
- }
37
+ if (typeof record[key] !== "string" || record[key] === "") {
38
+ issues.push({ path: `${path}.${key}`, message: "Expected a non-empty string." });
39
+ }
19
40
  }
20
41
  function requireBoolean(record, key, path, issues) {
21
- if (typeof record[key] !== "boolean") {
22
- issues.push({ path: `${path}.${key}`, message: "Expected a boolean." });
23
- }
42
+ if (typeof record[key] !== "boolean") {
43
+ issues.push({ path: `${path}.${key}`, message: "Expected a boolean." });
44
+ }
24
45
  }
25
46
  function requireNonNegativeNumber(record, key, path, issues) {
26
- if (typeof record[key] !== "number" || !Number.isFinite(record[key]) || record[key] < 0) {
27
- issues.push({ path: `${path}.${key}`, message: "Expected a non-negative finite number." });
28
- }
47
+ if (typeof record[key] !== "number" || !Number.isFinite(record[key]) || record[key] < 0) {
48
+ issues.push({ path: `${path}.${key}`, message: "Expected a non-negative finite number." });
49
+ }
29
50
  }
30
51
  function requireInteger(record, key, path, issues) {
31
- if (!Number.isInteger(record[key])) {
32
- issues.push({ path: `${path}.${key}`, message: "Expected an integer." });
33
- }
52
+ if (!Number.isInteger(record[key])) {
53
+ issues.push({ path: `${path}.${key}`, message: "Expected an integer." });
54
+ }
34
55
  }
35
56
  function requireNullableInteger(record, key, path, issues) {
36
- if (record[key] !== null && !Number.isInteger(record[key])) {
37
- issues.push({ path: `${path}.${key}`, message: "Expected an integer or null." });
38
- }
57
+ if (record[key] !== null && !Number.isInteger(record[key])) {
58
+ issues.push({ path: `${path}.${key}`, message: "Expected an integer or null." });
59
+ }
39
60
  }
40
61
  function validateSourceRef(value, path, issues) {
41
- if (!isRecord(value)) {
42
- issues.push({ path, message: "Expected a source object." });
43
- return;
44
- }
45
- if (value.kind === "repo") {
46
- requireString(value, "path", path, issues);
47
- return;
48
- }
49
- if (value.kind === "vault") {
50
- requireString(value, "outputId", path, issues);
51
- if (value.stream !== undefined && !isOneOf(value.stream, OUTPUT_STREAMS)) {
52
- issues.push({ path: `${path}.stream`, message: "Expected a known output stream." });
53
- }
54
- return;
55
- }
56
- if (value.kind === "native") {
57
- requireString(value, "tool", path, issues);
58
- requireString(value, "outputId", path, issues);
59
- return;
60
- }
61
- issues.push({ path: `${path}.kind`, message: "Expected source kind repo, vault, or native." });
62
+ if (!isRecord(value)) {
63
+ issues.push({ path, message: "Expected a source object." });
64
+ return;
65
+ }
66
+ if (value.kind === "repo") {
67
+ requireString(value, "path", path, issues);
68
+ return;
69
+ }
70
+ if (value.kind === "vault") {
71
+ requireString(value, "outputId", path, issues);
72
+ if (value.stream !== undefined && !isOneOf(value.stream, OUTPUT_STREAMS)) {
73
+ issues.push({ path: `${path}.stream`, message: "Expected a known output stream." });
74
+ }
75
+ return;
76
+ }
77
+ if (value.kind === "local") {
78
+ requireString(value, "root", path, issues);
79
+ requireString(value, "path", path, issues);
80
+ return;
81
+ }
82
+ if (value.kind === "native") {
83
+ requireString(value, "tool", path, issues);
84
+ requireString(value, "outputId", path, issues);
85
+ return;
86
+ }
87
+ issues.push({ path: `${path}.kind`, message: "Expected source kind repo, vault, local, or native." });
62
88
  }
63
89
  function validateProducerDescriptor(value, path, issues, required = false) {
64
- if (value === undefined) {
65
- if (required) {
66
- issues.push({ path, message: "Expected producer descriptor object." });
67
- }
68
- return;
69
- }
70
- if (!isRecord(value)) {
71
- issues.push({ path, message: "Expected producer descriptor object." });
72
- return;
73
- }
74
- if (!isOneOf(value.kind, PRODUCER_KINDS)) {
75
- issues.push({ path: `${path}.kind`, message: "Expected a known producer kind." });
76
- }
77
- for (const key of ["adapter", "name", "server", "tool"]) {
78
- if (value[key] !== undefined && typeof value[key] !== "string") {
79
- issues.push({ path: `${path}.${key}`, message: "Expected a string when present." });
80
- }
81
- }
90
+ if (value === undefined) {
91
+ if (required) {
92
+ issues.push({ path, message: "Expected producer descriptor object." });
93
+ }
94
+ return;
95
+ }
96
+ if (!isRecord(value)) {
97
+ issues.push({ path, message: "Expected producer descriptor object." });
98
+ return;
99
+ }
100
+ if (!isOneOf(value.kind, PRODUCER_KINDS)) {
101
+ issues.push({ path: `${path}.kind`, message: "Expected a known producer kind." });
102
+ }
103
+ for (const key of ["adapter", "name", "server", "tool"]) {
104
+ if (value[key] !== undefined && typeof value[key] !== "string") {
105
+ issues.push({ path: `${path}.${key}`, message: "Expected a string when present." });
106
+ }
107
+ }
82
108
  }
83
109
  function validateEvidencePersistence(value, path, issues, required = false) {
84
- if (value === undefined) {
85
- if (required) {
86
- issues.push({ path, message: "Expected persistence object." });
87
- }
88
- return;
89
- }
90
- if (!isRecord(value)) {
91
- issues.push({ path, message: "Expected persistence object." });
92
- return;
93
- }
94
- if (!isOneOf(value.status, PERSISTENCE_STATUSES)) {
95
- issues.push({ path: `${path}.status`, message: "Expected a known persistence status." });
96
- }
97
- if (!isOneOf(value.recoverability, RECOVERABILITY_MODES)) {
98
- issues.push({ path: `${path}.recoverability`, message: "Expected a known recoverability mode." });
99
- }
100
- if (value.recoveryOutputId !== undefined && typeof value.recoveryOutputId !== "string") {
101
- issues.push({ path: `${path}.recoveryOutputId`, message: "Expected recovery output id string when present." });
102
- }
103
- if (value.outputId !== undefined && typeof value.outputId !== "string") {
104
- issues.push({ path: `${path}.outputId`, message: "Expected output id string when present." });
105
- }
106
- if (value.recoverability === "exact" && typeof value.recoveryOutputId !== "string") {
107
- issues.push({ path: `${path}.recoveryOutputId`, message: "Expected recoveryOutputId for exact recoverability." });
108
- }
110
+ if (value === undefined) {
111
+ if (required) {
112
+ issues.push({ path, message: "Expected persistence object." });
113
+ }
114
+ return;
115
+ }
116
+ if (!isRecord(value)) {
117
+ issues.push({ path, message: "Expected persistence object." });
118
+ return;
119
+ }
120
+ if (!isOneOf(value.status, PERSISTENCE_STATUSES)) {
121
+ issues.push({ path: `${path}.status`, message: "Expected a known persistence status." });
122
+ }
123
+ if (!isOneOf(value.recoverability, RECOVERABILITY_MODES)) {
124
+ issues.push({ path: `${path}.recoverability`, message: "Expected a known recoverability mode." });
125
+ }
126
+ if (value.recoveryOutputId !== undefined && typeof value.recoveryOutputId !== "string") {
127
+ issues.push({ path: `${path}.recoveryOutputId`, message: "Expected recovery output id string when present." });
128
+ }
129
+ if (value.outputId !== undefined && typeof value.outputId !== "string") {
130
+ issues.push({ path: `${path}.outputId`, message: "Expected output id string when present." });
131
+ }
132
+ if (value.recoverability === "exact" && typeof value.recoveryOutputId !== "string") {
133
+ issues.push({ path: `${path}.recoveryOutputId`, message: "Expected recoveryOutputId for exact recoverability." });
134
+ }
109
135
  }
110
136
  function validateEvidenceLineage(value, path, issues) {
111
- if (value === undefined) {
112
- return;
113
- }
114
- if (!isRecord(value)) {
115
- issues.push({ path, message: "Expected lineage object." });
116
- return;
117
- }
118
- for (const key of ["sourceRecordIds", "sourceOutputIds"]) {
119
- if (value[key] !== undefined) {
120
- if (!Array.isArray(value[key]) || !value[key].every((item) => typeof item === "string")) {
121
- issues.push({ path: `${path}.${key}`, message: "Expected a string array when present." });
122
- }
123
- }
124
- }
125
- for (const key of ["operation", "operationHash"]) {
126
- if (value[key] !== undefined && typeof value[key] !== "string") {
127
- issues.push({ path: `${path}.${key}`, message: "Expected a string when present." });
128
- }
129
- }
137
+ if (value === undefined) {
138
+ return;
139
+ }
140
+ if (!isRecord(value)) {
141
+ issues.push({ path, message: "Expected lineage object." });
142
+ return;
143
+ }
144
+ for (const key of ["sourceRecordIds", "sourceOutputIds"]) {
145
+ if (value[key] !== undefined) {
146
+ if (!Array.isArray(value[key]) || !value[key].every((item) => typeof item === "string")) {
147
+ issues.push({ path: `${path}.${key}`, message: "Expected a string array when present." });
148
+ }
149
+ }
150
+ }
151
+ for (const key of ["operation", "operationHash"]) {
152
+ if (value[key] !== undefined && typeof value[key] !== "string") {
153
+ issues.push({ path: `${path}.${key}`, message: "Expected a string when present." });
154
+ }
155
+ }
130
156
  }
131
157
  function validateFailure(value, path, issues) {
132
- if (value === undefined) {
133
- return;
134
- }
135
- if (!isRecord(value)) {
136
- issues.push({ path, message: "Expected failure object." });
137
- return;
138
- }
139
- if (!isOneOf(value.kind, ROUTER_FAILURE_KINDS)) {
140
- issues.push({ path: `${path}.kind`, message: "Expected a known router failure kind." });
141
- }
142
- requireString(value, "message", path, issues);
158
+ if (value === undefined) {
159
+ return;
160
+ }
161
+ if (!isRecord(value)) {
162
+ issues.push({ path, message: "Expected failure object." });
163
+ return;
164
+ }
165
+ if (!isOneOf(value.kind, ROUTER_FAILURE_KINDS)) {
166
+ issues.push({ path: `${path}.kind`, message: "Expected a known router failure kind." });
167
+ }
168
+ requireString(value, "message", path, issues);
143
169
  }
144
170
  function validateFailureExecution(value, path, issues) {
145
- if (value === undefined) {
146
- return;
147
- }
148
- if (!isRecord(value)) {
149
- issues.push({ path, message: "Expected failure execution object." });
150
- return;
151
- }
152
- if (!isOneOf(value.status, FAILURE_EXECUTION_STATUSES)) {
153
- issues.push({ path: `${path}.status`, message: "Expected a known failure execution status." });
154
- }
155
- if (!isOneOf(value.failureKind, ROUTER_FAILURE_KINDS)) {
156
- issues.push({ path: `${path}.failureKind`, message: "Expected a known router failure kind." });
157
- }
158
- requireString(value, "message", path, issues);
171
+ if (value === undefined) {
172
+ return;
173
+ }
174
+ if (!isRecord(value)) {
175
+ issues.push({ path, message: "Expected failure execution object." });
176
+ return;
177
+ }
178
+ if (!isOneOf(value.status, FAILURE_EXECUTION_STATUSES)) {
179
+ issues.push({ path: `${path}.status`, message: "Expected a known failure execution status." });
180
+ }
181
+ if (!isOneOf(value.failureKind, ROUTER_FAILURE_KINDS)) {
182
+ issues.push({ path: `${path}.failureKind`, message: "Expected a known router failure kind." });
183
+ }
184
+ requireString(value, "message", path, issues);
159
185
  }
160
186
  function validateParserMetadata(value, path, issues) {
161
- if (value === undefined) {
162
- return;
163
- }
164
- if (!isRecord(value)) {
165
- issues.push({ path, message: "Expected parser metadata object." });
166
- return;
167
- }
168
- requireString(value, "name", path, issues);
169
- if (typeof value.confidence !== "number" || !Number.isFinite(value.confidence) || value.confidence < 0 || value.confidence > 1) {
170
- issues.push({ path: `${path}.confidence`, message: "Expected confidence between 0 and 1." });
171
- }
172
- if (value.fidelity !== "exact" && value.fidelity !== "lossy") {
173
- issues.push({ path: `${path}.fidelity`, message: "Expected parser fidelity exact or lossy." });
174
- }
175
- requireBoolean(value, "compressed", path, issues);
176
- if (value.counts !== undefined) {
177
- if (!isRecord(value.counts)) {
178
- issues.push({ path: `${path}.counts`, message: "Expected parser counts object." });
179
- }
180
- else {
181
- for (const [key, count] of Object.entries(value.counts)) {
182
- if (typeof count !== "number" || !Number.isFinite(count)) {
183
- issues.push({ path: `${path}.counts.${key}`, message: "Expected finite numeric parser count." });
184
- }
185
- }
186
- }
187
- }
188
- if (value.references !== undefined) {
189
- if (!Array.isArray(value.references)) {
190
- issues.push({ path: `${path}.references`, message: "Expected parser references array." });
191
- }
192
- else {
193
- value.references.forEach((reference, index) => validateParserReference(reference, `${path}.references[${index}]`, issues));
187
+ if (value === undefined) {
188
+ return;
189
+ }
190
+ if (!isRecord(value)) {
191
+ issues.push({ path, message: "Expected parser metadata object." });
192
+ return;
193
+ }
194
+ requireString(value, "name", path, issues);
195
+ if (
196
+ typeof value.confidence !== "number" ||
197
+ !Number.isFinite(value.confidence) ||
198
+ value.confidence < 0 ||
199
+ value.confidence > 1
200
+ ) {
201
+ issues.push({ path: `${path}.confidence`, message: "Expected confidence between 0 and 1." });
202
+ }
203
+ if (value.fidelity !== "exact" && value.fidelity !== "lossy") {
204
+ issues.push({ path: `${path}.fidelity`, message: "Expected parser fidelity exact or lossy." });
205
+ }
206
+ requireBoolean(value, "compressed", path, issues);
207
+ if (value.counts !== undefined) {
208
+ if (!isRecord(value.counts)) {
209
+ issues.push({ path: `${path}.counts`, message: "Expected parser counts object." });
210
+ } else {
211
+ for (const [key, count] of Object.entries(value.counts)) {
212
+ if (typeof count !== "number" || !Number.isFinite(count)) {
213
+ issues.push({ path: `${path}.counts.${key}`, message: "Expected finite numeric parser count." });
194
214
  }
195
- }
215
+ }
216
+ }
217
+ }
218
+ if (value.references !== undefined) {
219
+ if (!Array.isArray(value.references)) {
220
+ issues.push({ path: `${path}.references`, message: "Expected parser references array." });
221
+ } else {
222
+ value.references.forEach((reference, index) =>
223
+ validateParserReference(reference, `${path}.references[${index}]`, issues),
224
+ );
225
+ }
226
+ }
196
227
  }
197
228
  function validateRunOutputFilterMetadata(value, path, issues) {
198
- if (value === undefined) {
199
- return;
200
- }
201
- if (!isRecord(value)) {
202
- issues.push({ path, message: "Expected run filter metadata object." });
203
- return;
204
- }
205
- if (value.stream !== "stdout" && value.stream !== "stderr" && value.stream !== "combined") {
206
- issues.push({ path: `${path}.stream`, message: "Expected stdout, stderr, or combined stream." });
207
- }
208
- for (const key of ["include", "exclude"]) {
209
- if (value[key] !== undefined && (!Array.isArray(value[key]) || !value[key].every((item) => typeof item === "string"))) {
210
- issues.push({ path: `${path}.${key}`, message: "Expected string array when present." });
211
- }
212
- }
213
- if (value.flags !== undefined && typeof value.flags !== "string") {
214
- issues.push({ path: `${path}.flags`, message: "Expected string flags when present." });
215
- }
216
- for (const key of ["head", "tail", "maxLines", "maxBytes", "sourceLines", "selectedLines"]) {
217
- const numericValue = value[key];
218
- if (numericValue !== undefined && (typeof numericValue !== "number" || !Number.isInteger(numericValue) || numericValue < 0)) {
219
- issues.push({ path: `${path}.${key}`, message: "Expected non-negative integer when present." });
220
- }
221
- }
222
- if (value.fallbackPreservedFailureEvidence !== undefined && typeof value.fallbackPreservedFailureEvidence !== "boolean") {
223
- issues.push({ path: `${path}.fallbackPreservedFailureEvidence`, message: "Expected boolean when present." });
224
- }
229
+ if (value === undefined) {
230
+ return;
231
+ }
232
+ if (!isRecord(value)) {
233
+ issues.push({ path, message: "Expected run filter metadata object." });
234
+ return;
235
+ }
236
+ if (value.stream !== "stdout" && value.stream !== "stderr" && value.stream !== "combined") {
237
+ issues.push({ path: `${path}.stream`, message: "Expected stdout, stderr, or combined stream." });
238
+ }
239
+ for (const key of ["include", "exclude"]) {
240
+ if (
241
+ value[key] !== undefined &&
242
+ (!Array.isArray(value[key]) || !value[key].every((item) => typeof item === "string"))
243
+ ) {
244
+ issues.push({ path: `${path}.${key}`, message: "Expected string array when present." });
245
+ }
246
+ }
247
+ if (value.flags !== undefined && typeof value.flags !== "string") {
248
+ issues.push({ path: `${path}.flags`, message: "Expected string flags when present." });
249
+ }
250
+ for (const key of ["head", "tail", "maxLines", "maxBytes", "sourceLines", "selectedLines"]) {
251
+ const numericValue = value[key];
252
+ if (
253
+ numericValue !== undefined &&
254
+ (typeof numericValue !== "number" || !Number.isInteger(numericValue) || numericValue < 0)
255
+ ) {
256
+ issues.push({ path: `${path}.${key}`, message: "Expected non-negative integer when present." });
257
+ }
258
+ }
259
+ if (
260
+ value.fallbackPreservedFailureEvidence !== undefined &&
261
+ typeof value.fallbackPreservedFailureEvidence !== "boolean"
262
+ ) {
263
+ issues.push({ path: `${path}.fallbackPreservedFailureEvidence`, message: "Expected boolean when present." });
264
+ }
225
265
  }
226
266
  function validateRunScriptFilterMetadata(value, path, issues) {
227
- if (value === undefined) {
228
- return;
229
- }
230
- if (!isRecord(value)) {
231
- issues.push({ path, message: "Expected run script filter metadata object." });
232
- return;
233
- }
234
- if (typeof value.status !== "string" || value.status.length === 0) {
235
- issues.push({ path: `${path}.status`, message: "Expected script filter status string." });
236
- }
237
- if (typeof value.language !== "string" || value.language.length === 0) {
238
- issues.push({ path: `${path}.language`, message: "Expected script filter language string." });
239
- }
240
- requireString(value, "rawOutputId", path, issues);
241
- if (!Array.isArray(value.sourceAliases) || !value.sourceAliases.every((item) => typeof item === "string")) {
242
- issues.push({ path: `${path}.sourceAliases`, message: "Expected script source alias string array." });
243
- }
244
- if (value.label !== undefined && typeof value.label !== "string") {
245
- issues.push({ path: `${path}.label`, message: "Expected label string when present." });
246
- }
247
- if (value.operation !== undefined && !isRecord(value.operation)) {
248
- issues.push({ path: `${path}.operation`, message: "Expected operation object when present." });
249
- }
250
- if (value.outputId !== undefined && typeof value.outputId !== "string") {
251
- issues.push({ path: `${path}.outputId`, message: "Expected output id string when present." });
252
- }
253
- if (value.recordId !== undefined && typeof value.recordId !== "string") {
254
- issues.push({ path: `${path}.recordId`, message: "Expected record id string when present." });
255
- }
256
- validateEvidencePersistence(value.persistence, `${path}.persistence`, issues);
257
- validateEvidenceLineage(value.lineage, `${path}.lineage`, issues);
258
- validateFailure(value.failure, `${path}.failure`, issues);
259
- validateFailureExecution(value.transformExecution, `${path}.transformExecution`, issues);
260
- if (value.summary !== undefined && typeof value.summary !== "string") {
261
- issues.push({ path: `${path}.summary`, message: "Expected summary string when present." });
262
- }
267
+ if (value === undefined) {
268
+ return;
269
+ }
270
+ if (!isRecord(value)) {
271
+ issues.push({ path, message: "Expected run script filter metadata object." });
272
+ return;
273
+ }
274
+ if (typeof value.status !== "string" || value.status.length === 0) {
275
+ issues.push({ path: `${path}.status`, message: "Expected script filter status string." });
276
+ }
277
+ if (typeof value.language !== "string" || value.language.length === 0) {
278
+ issues.push({ path: `${path}.language`, message: "Expected script filter language string." });
279
+ }
280
+ requireString(value, "rawOutputId", path, issues);
281
+ if (!Array.isArray(value.sourceAliases) || !value.sourceAliases.every((item) => typeof item === "string")) {
282
+ issues.push({ path: `${path}.sourceAliases`, message: "Expected script source alias string array." });
283
+ }
284
+ if (value.label !== undefined && typeof value.label !== "string") {
285
+ issues.push({ path: `${path}.label`, message: "Expected label string when present." });
286
+ }
287
+ if (value.operation !== undefined && !isRecord(value.operation)) {
288
+ issues.push({ path: `${path}.operation`, message: "Expected operation object when present." });
289
+ }
290
+ if (value.outputId !== undefined && typeof value.outputId !== "string") {
291
+ issues.push({ path: `${path}.outputId`, message: "Expected output id string when present." });
292
+ }
293
+ if (value.recordId !== undefined && typeof value.recordId !== "string") {
294
+ issues.push({ path: `${path}.recordId`, message: "Expected record id string when present." });
295
+ }
296
+ validateEvidencePersistence(value.persistence, `${path}.persistence`, issues);
297
+ validateEvidenceLineage(value.lineage, `${path}.lineage`, issues);
298
+ validateFailure(value.failure, `${path}.failure`, issues);
299
+ validateFailureExecution(value.transformExecution, `${path}.transformExecution`, issues);
300
+ if (value.summary !== undefined && typeof value.summary !== "string") {
301
+ issues.push({ path: `${path}.summary`, message: "Expected summary string when present." });
302
+ }
263
303
  }
264
304
  function validateParserReference(value, path, issues) {
265
- if (!isRecord(value)) {
266
- issues.push({ path, message: "Expected parser reference object." });
267
- return;
268
- }
269
- requireString(value, "path", path, issues);
270
- requireString(value, "message", path, issues);
271
- if (value.line !== undefined) {
272
- if (typeof value.line !== "number" || !Number.isInteger(value.line) || value.line <= 0) {
273
- issues.push({ path: `${path}.line`, message: "Expected a positive integer line." });
274
- }
275
- }
276
- if (value.column !== undefined) {
277
- if (typeof value.column !== "number" || !Number.isInteger(value.column) || value.column <= 0) {
278
- issues.push({ path: `${path}.column`, message: "Expected a positive integer column." });
279
- }
280
- }
281
- if (value.code !== undefined && typeof value.code !== "string") {
282
- issues.push({ path: `${path}.code`, message: "Expected parser reference code string." });
283
- }
284
- if (value.severity !== undefined && value.severity !== "error" && value.severity !== "warning" && value.severity !== "info") {
285
- issues.push({ path: `${path}.severity`, message: "Expected parser reference severity error, warning, or info." });
286
- }
305
+ if (!isRecord(value)) {
306
+ issues.push({ path, message: "Expected parser reference object." });
307
+ return;
308
+ }
309
+ requireString(value, "path", path, issues);
310
+ requireString(value, "message", path, issues);
311
+ if (value.line !== undefined) {
312
+ if (typeof value.line !== "number" || !Number.isInteger(value.line) || value.line <= 0) {
313
+ issues.push({ path: `${path}.line`, message: "Expected a positive integer line." });
314
+ }
315
+ }
316
+ if (value.column !== undefined) {
317
+ if (typeof value.column !== "number" || !Number.isInteger(value.column) || value.column <= 0) {
318
+ issues.push({ path: `${path}.column`, message: "Expected a positive integer column." });
319
+ }
320
+ }
321
+ if (value.code !== undefined && typeof value.code !== "string") {
322
+ issues.push({ path: `${path}.code`, message: "Expected parser reference code string." });
323
+ }
324
+ if (
325
+ value.severity !== undefined &&
326
+ value.severity !== "error" &&
327
+ value.severity !== "warning" &&
328
+ value.severity !== "info"
329
+ ) {
330
+ issues.push({ path: `${path}.severity`, message: "Expected parser reference severity error, warning, or info." });
331
+ }
287
332
  }
288
333
  function validateImportantLines(value, path, issues) {
289
- if (value === undefined) {
290
- return;
291
- }
292
- if (!Array.isArray(value)) {
293
- issues.push({ path, message: "Expected importantLines array." });
294
- return;
295
- }
296
- value.forEach((line, index) => validateImportantLine(line, `${path}[${index}]`, issues));
334
+ if (value === undefined) {
335
+ return;
336
+ }
337
+ if (!Array.isArray(value)) {
338
+ issues.push({ path, message: "Expected importantLines array." });
339
+ return;
340
+ }
341
+ value.forEach((line, index) => validateImportantLine(line, `${path}[${index}]`, issues));
297
342
  }
298
343
  function validateImportantLine(value, path, issues) {
299
- if (!isRecord(value)) {
300
- issues.push({ path, message: "Expected important line object." });
301
- return;
302
- }
303
- if (!isOneOf(value.stream, OUTPUT_STREAMS) || value.stream === "raw") {
304
- issues.push({ path: `${path}.stream`, message: "Expected stdout, stderr, or combined stream." });
305
- }
306
- if (typeof value.lines !== "string" || !validLineRange(value.lines)) {
307
- issues.push({ path: `${path}.lines`, message: "Expected line range in start-end form." });
308
- }
309
- if (typeof value.excerpt !== "string") {
310
- issues.push({ path: `${path}.excerpt`, message: "Expected excerpt string." });
311
- }
344
+ if (!isRecord(value)) {
345
+ issues.push({ path, message: "Expected important line object." });
346
+ return;
347
+ }
348
+ if (!isOneOf(value.stream, OUTPUT_STREAMS) || value.stream === "raw") {
349
+ issues.push({ path: `${path}.stream`, message: "Expected stdout, stderr, or combined stream." });
350
+ }
351
+ if (typeof value.lines !== "string" || !validLineRange(value.lines)) {
352
+ issues.push({ path: `${path}.lines`, message: "Expected line range in start-end form." });
353
+ }
354
+ if (typeof value.excerpt !== "string") {
355
+ issues.push({ path: `${path}.excerpt`, message: "Expected excerpt string." });
356
+ }
312
357
  }
313
358
  function validLineRange(value) {
314
- const match = /^(\d+)-(\d+)$/.exec(value);
315
- if (!match?.[1] || !match[2]) {
316
- return false;
317
- }
318
- const start = Number(match[1]);
319
- const end = Number(match[2]);
320
- return Number.isInteger(start) && Number.isInteger(end) && start > 0 && end >= start;
359
+ const match = /^(\d+)-(\d+)$/.exec(value);
360
+ if (!match?.[1] || !match[2]) {
361
+ return false;
362
+ }
363
+ const start = Number(match[1]);
364
+ const end = Number(match[2]);
365
+ return Number.isInteger(start) && Number.isInteger(end) && start > 0 && end >= start;
321
366
  }
322
367
  function validateEvidenceArray(value, path, issues) {
323
- if (value === undefined) {
324
- return;
325
- }
326
- if (!Array.isArray(value)) {
327
- issues.push({ path, message: "Expected an evidence array." });
328
- return;
329
- }
330
- value.forEach((packet, index) => {
331
- const result = validateEvidencePacket(packet);
332
- if (!result.ok) {
333
- for (const issue of result.issues) {
334
- issues.push({ path: `${path}[${index}]${issue.path.slice(1)}`, message: issue.message });
335
- }
336
- }
337
- });
368
+ if (value === undefined) {
369
+ return;
370
+ }
371
+ if (!Array.isArray(value)) {
372
+ issues.push({ path, message: "Expected an evidence array." });
373
+ return;
374
+ }
375
+ value.forEach((packet, index) => {
376
+ const result = validateEvidencePacket(packet);
377
+ if (!result.ok) {
378
+ for (const issue of result.issues) {
379
+ issues.push({ path: `${path}[${index}]${issue.path.slice(1)}`, message: issue.message });
380
+ }
381
+ }
382
+ });
338
383
  }
339
384
  function validateBatchSteps(value, path, issues) {
340
- if (value === undefined) {
341
- return;
342
- }
343
- if (!Array.isArray(value)) {
344
- issues.push({ path, message: "Expected batch steps array." });
345
- return;
346
- }
347
- value.forEach((step, index) => {
348
- const stepPath = `${path}[${index}]`;
349
- if (!isRecord(step)) {
350
- issues.push({ path: stepPath, message: "Expected batch step result object." });
351
- return;
352
- }
353
- requireString(step, "id", stepPath, issues);
354
- requireInteger(step, "index", stepPath, issues);
355
- if (!isOneOf(step.kind, BATCH_STEP_KINDS)) {
356
- issues.push({ path: `${stepPath}.kind`, message: "Expected batch step kind run or search." });
357
- }
358
- if (step.status !== "ok" && step.status !== "failed") {
359
- issues.push({ path: `${stepPath}.status`, message: "Expected batch step status ok or failed." });
360
- }
361
- if (step.toolStatus !== undefined && !isOneOf(step.toolStatus, TOOL_STATUSES)) {
362
- issues.push({ path: `${stepPath}.toolStatus`, message: "Expected toolStatus ok or error when present." });
363
- }
364
- requireNonNegativeNumber(step, "durationMs", stepPath, issues);
365
- if (step.error !== undefined && typeof step.error !== "string") {
366
- issues.push({ path: `${stepPath}.error`, message: "Expected error string when present." });
367
- }
368
- if (step.result !== undefined) {
369
- const nested = validateRoutedResult(step.result);
370
- if (!nested.ok) {
371
- for (const issue of nested.issues) {
372
- issues.push({ path: `${stepPath}.result${issue.path.slice(1)}`, message: issue.message });
373
- }
374
- }
385
+ if (value === undefined) {
386
+ return;
387
+ }
388
+ if (!Array.isArray(value)) {
389
+ issues.push({ path, message: "Expected batch steps array." });
390
+ return;
391
+ }
392
+ value.forEach((step, index) => {
393
+ const stepPath = `${path}[${index}]`;
394
+ if (!isRecord(step)) {
395
+ issues.push({ path: stepPath, message: "Expected batch step result object." });
396
+ return;
397
+ }
398
+ requireString(step, "id", stepPath, issues);
399
+ requireInteger(step, "index", stepPath, issues);
400
+ if (!isOneOf(step.kind, BATCH_STEP_KINDS)) {
401
+ issues.push({ path: `${stepPath}.kind`, message: "Expected batch step kind run or search." });
402
+ }
403
+ if (step.status !== "ok" && step.status !== "failed") {
404
+ issues.push({ path: `${stepPath}.status`, message: "Expected batch step status ok or failed." });
405
+ }
406
+ if (step.toolStatus !== undefined && !isOneOf(step.toolStatus, TOOL_STATUSES)) {
407
+ issues.push({ path: `${stepPath}.toolStatus`, message: "Expected toolStatus ok or error when present." });
408
+ }
409
+ requireNonNegativeNumber(step, "durationMs", stepPath, issues);
410
+ if (step.error !== undefined && typeof step.error !== "string") {
411
+ issues.push({ path: `${stepPath}.error`, message: "Expected error string when present." });
412
+ }
413
+ if (step.result !== undefined) {
414
+ const nested = validateRoutedResult(step.result);
415
+ if (!nested.ok) {
416
+ for (const issue of nested.issues) {
417
+ issues.push({ path: `${stepPath}.result${issue.path.slice(1)}`, message: issue.message });
375
418
  }
376
- });
419
+ }
420
+ }
421
+ });
377
422
  }
378
423
  export function validatePreserveMode(value) {
379
- if (!isOneOf(value, PRESERVE_MODES)) {
380
- return failure([{ path: "$", message: "Expected preserve mode summary, important, or full." }]);
381
- }
382
- return success(value);
424
+ if (!isOneOf(value, PRESERVE_MODES)) {
425
+ return failure([{ path: "$", message: "Expected preserve mode summary, important, or full." }]);
426
+ }
427
+ return success(value);
383
428
  }
384
429
  export function validateRetrievalAction(value) {
385
- if (!isOneOf(value, RETRIEVAL_ACTIONS)) {
386
- return failure([{ path: "$", message: "Expected retrieval action query, locate, get, retrieve, expand, or explain." }]);
387
- }
388
- return success(value);
430
+ if (!isOneOf(value, RETRIEVAL_ACTIONS)) {
431
+ return failure([
432
+ { path: "$", message: "Expected retrieval action query, locate, get, retrieve, expand, or explain." },
433
+ ]);
434
+ }
435
+ return success(value);
389
436
  }
390
437
  export function validateEvidencePacket(value) {
391
- const issues = [];
392
- if (!isRecord(value)) {
393
- return failure([{ path: "$", message: "Expected an evidence packet object." }]);
394
- }
395
- requireString(value, "id", "$", issues);
396
- validateSourceRef(value.source, "$.source", issues);
397
- requireString(value, "excerpt", "$", issues);
398
- requireString(value, "why", "$", issues);
399
- requireBoolean(value, "expandable", "$", issues);
400
- if (!isOneOf(value.window, EVIDENCE_WINDOWS)) {
401
- issues.push({ path: "$.window", message: "Expected a known evidence window." });
402
- }
403
- if (value.path !== undefined && typeof value.path !== "string") {
404
- issues.push({ path: "$.path", message: "Expected a string when present." });
405
- }
406
- if (value.lines !== undefined && typeof value.lines !== "string") {
407
- issues.push({ path: "$.lines", message: "Expected a string when present." });
408
- }
409
- if (value.match !== undefined) {
410
- if (!isRecord(value.match)) {
411
- issues.push({ path: "$.match", message: "Expected match metadata object when present." });
412
- }
413
- else {
414
- if (!["exact_phrase", "lexical", "metadata"].includes(String(value.match.type))) {
415
- issues.push({ path: "$.match.type", message: "Expected known match type." });
416
- }
417
- if (typeof value.match.confidence !== "number" || !Number.isFinite(value.match.confidence) || value.match.confidence < 0 || value.match.confidence > 1) {
418
- issues.push({ path: "$.match.confidence", message: "Expected match confidence between 0 and 1." });
419
- }
420
- }
421
- }
422
- return issues.length === 0 ? success(value) : failure(issues);
438
+ const issues = [];
439
+ if (!isRecord(value)) {
440
+ return failure([{ path: "$", message: "Expected an evidence packet object." }]);
441
+ }
442
+ requireString(value, "id", "$", issues);
443
+ validateSourceRef(value.source, "$.source", issues);
444
+ requireString(value, "excerpt", "$", issues);
445
+ requireString(value, "why", "$", issues);
446
+ requireBoolean(value, "expandable", "$", issues);
447
+ if (!isOneOf(value.window, EVIDENCE_WINDOWS)) {
448
+ issues.push({ path: "$.window", message: "Expected a known evidence window." });
449
+ }
450
+ if (value.path !== undefined && typeof value.path !== "string") {
451
+ issues.push({ path: "$.path", message: "Expected a string when present." });
452
+ }
453
+ if (value.lines !== undefined && typeof value.lines !== "string") {
454
+ issues.push({ path: "$.lines", message: "Expected a string when present." });
455
+ }
456
+ if (value.match !== undefined) {
457
+ if (!isRecord(value.match)) {
458
+ issues.push({ path: "$.match", message: "Expected match metadata object when present." });
459
+ } else {
460
+ if (!["exact_phrase", "lexical", "metadata"].includes(String(value.match.type))) {
461
+ issues.push({ path: "$.match.type", message: "Expected known match type." });
462
+ }
463
+ if (
464
+ typeof value.match.confidence !== "number" ||
465
+ !Number.isFinite(value.match.confidence) ||
466
+ value.match.confidence < 0 ||
467
+ value.match.confidence > 1
468
+ ) {
469
+ issues.push({ path: "$.match.confidence", message: "Expected match confidence between 0 and 1." });
470
+ }
471
+ }
472
+ }
473
+ return issues.length === 0 ? success(value) : failure(issues);
423
474
  }
424
475
  export function validateRoutedResult(value) {
425
- const issues = [];
426
- if (!isRecord(value)) {
427
- return failure([{ path: "$", message: "Expected a routed result object." }]);
428
- }
429
- if ("status" in value) {
430
- issues.push({
431
- path: "$.status",
432
- message: "Do not use ambiguous top-level status; use toolStatus, execution.status, and routing.status.",
433
- });
434
- }
435
- if (!isOneOf(value.toolStatus, TOOL_STATUSES)) {
436
- issues.push({ path: "$.toolStatus", message: "Expected toolStatus ok or error." });
437
- }
438
- requireString(value, "decisionId", "$", issues);
439
- if (!isOneOf(value.preserve, PRESERVE_MODES)) {
440
- issues.push({ path: "$.preserve", message: "Expected preserve mode summary, important, or full." });
441
- }
442
- if (!isRecord(value.routing)) {
443
- issues.push({ path: "$.routing", message: "Expected routing object." });
444
- }
445
- else {
446
- if (!isOneOf(value.routing.status, ROUTING_STATUSES)) {
447
- issues.push({ path: "$.routing.status", message: "Expected a known routing status." });
448
- }
449
- if (!isOneOf(value.routing.route, ROUTE_KINDS)) {
450
- issues.push({ path: "$.routing.route", message: "Expected a known route kind." });
451
- }
452
- requireString(value.routing, "reason", "$.routing", issues);
453
- }
454
- if (value.recovery !== undefined) {
455
- if (!isRecord(value.recovery)) {
456
- issues.push({ path: "$.recovery", message: "Expected recovery object." });
457
- }
458
- else {
459
- requireString(value.recovery, "how", "$.recovery", issues);
460
- }
461
- }
462
- validateEvidenceArray(value.evidence, "$.evidence", issues);
463
- if (value.execution !== undefined) {
464
- if (!isRecord(value.execution)) {
465
- issues.push({ path: "$.execution", message: "Expected execution object." });
466
- }
467
- else {
468
- if (!isOneOf(value.execution.status, EXECUTION_STATUSES)) {
469
- issues.push({ path: "$.execution.status", message: "Expected a known execution status." });
470
- }
471
- requireNullableInteger(value.execution, "exitCode", "$.execution", issues);
472
- if (value.execution.durationMs !== undefined) {
473
- requireNonNegativeNumber(value.execution, "durationMs", "$.execution", issues);
474
- }
475
- }
476
- }
477
- if (value.outputId !== undefined && typeof value.outputId !== "string") {
478
- issues.push({ path: "$.outputId", message: "Expected output id string when present." });
479
- }
480
- if (value.recordId !== undefined && typeof value.recordId !== "string") {
481
- issues.push({ path: "$.recordId", message: "Expected record id string when present." });
482
- }
483
- validateProducerDescriptor(value.producer, "$.producer", issues);
484
- validateEvidencePersistence(value.persistence, "$.persistence", issues);
485
- validateEvidenceLineage(value.lineage, "$.lineage", issues);
486
- validateFailure(value.failure, "$.failure", issues);
487
- validateFailureExecution(value.transformExecution, "$.transformExecution", issues);
488
- validateImportantLines(value.importantLines, "$.importantLines", issues);
489
- validateParserMetadata(value.parser, "$.parser", issues);
490
- validateRunOutputFilterMetadata(value.filters, "$.filters", issues);
491
- validateRunScriptFilterMetadata(value.scriptFilter, "$.scriptFilter", issues);
492
- validateBatchSteps(value.steps, "$.steps", issues);
493
- if (value.stepCount !== undefined) {
494
- requireNonNegativeNumber(value, "stepCount", "$", issues);
495
- }
496
- if (value.okCount !== undefined) {
497
- requireNonNegativeNumber(value, "okCount", "$", issues);
498
- }
499
- if (value.failedCount !== undefined) {
500
- requireNonNegativeNumber(value, "failedCount", "$", issues);
501
- }
502
- if (value.concurrency !== undefined) {
503
- requireNonNegativeNumber(value, "concurrency", "$", issues);
504
- }
505
- return issues.length === 0 ? success(value) : failure(issues);
476
+ const issues = [];
477
+ if (!isRecord(value)) {
478
+ return failure([{ path: "$", message: "Expected a routed result object." }]);
479
+ }
480
+ if ("status" in value) {
481
+ issues.push({
482
+ path: "$.status",
483
+ message: "Do not use ambiguous top-level status; use toolStatus, execution.status, and routing.status.",
484
+ });
485
+ }
486
+ if (!isOneOf(value.toolStatus, TOOL_STATUSES)) {
487
+ issues.push({ path: "$.toolStatus", message: "Expected toolStatus ok or error." });
488
+ }
489
+ requireString(value, "decisionId", "$", issues);
490
+ if (!isOneOf(value.preserve, PRESERVE_MODES)) {
491
+ issues.push({ path: "$.preserve", message: "Expected preserve mode summary, important, or full." });
492
+ }
493
+ if (!isRecord(value.routing)) {
494
+ issues.push({ path: "$.routing", message: "Expected routing object." });
495
+ } else {
496
+ if (!isOneOf(value.routing.status, ROUTING_STATUSES)) {
497
+ issues.push({ path: "$.routing.status", message: "Expected a known routing status." });
498
+ }
499
+ if (!isOneOf(value.routing.route, ROUTE_KINDS)) {
500
+ issues.push({ path: "$.routing.route", message: "Expected a known route kind." });
501
+ }
502
+ requireString(value.routing, "reason", "$.routing", issues);
503
+ }
504
+ if (value.recovery !== undefined) {
505
+ if (!isRecord(value.recovery)) {
506
+ issues.push({ path: "$.recovery", message: "Expected recovery object." });
507
+ } else {
508
+ requireString(value.recovery, "how", "$.recovery", issues);
509
+ }
510
+ }
511
+ validateEvidenceArray(value.evidence, "$.evidence", issues);
512
+ if (value.execution !== undefined) {
513
+ if (!isRecord(value.execution)) {
514
+ issues.push({ path: "$.execution", message: "Expected execution object." });
515
+ } else {
516
+ if (!isOneOf(value.execution.status, EXECUTION_STATUSES)) {
517
+ issues.push({ path: "$.execution.status", message: "Expected a known execution status." });
518
+ }
519
+ requireNullableInteger(value.execution, "exitCode", "$.execution", issues);
520
+ if (value.execution.durationMs !== undefined) {
521
+ requireNonNegativeNumber(value.execution, "durationMs", "$.execution", issues);
522
+ }
523
+ }
524
+ }
525
+ if (value.outputId !== undefined && typeof value.outputId !== "string") {
526
+ issues.push({ path: "$.outputId", message: "Expected output id string when present." });
527
+ }
528
+ if (value.recordId !== undefined && typeof value.recordId !== "string") {
529
+ issues.push({ path: "$.recordId", message: "Expected record id string when present." });
530
+ }
531
+ validateProducerDescriptor(value.producer, "$.producer", issues);
532
+ validateEvidencePersistence(value.persistence, "$.persistence", issues);
533
+ validateEvidenceLineage(value.lineage, "$.lineage", issues);
534
+ validateFailure(value.failure, "$.failure", issues);
535
+ validateFailureExecution(value.transformExecution, "$.transformExecution", issues);
536
+ validateImportantLines(value.importantLines, "$.importantLines", issues);
537
+ validateParserMetadata(value.parser, "$.parser", issues);
538
+ validateRunOutputFilterMetadata(value.filters, "$.filters", issues);
539
+ validateRunScriptFilterMetadata(value.scriptFilter, "$.scriptFilter", issues);
540
+ validateBatchSteps(value.steps, "$.steps", issues);
541
+ if (value.stepCount !== undefined) {
542
+ requireNonNegativeNumber(value, "stepCount", "$", issues);
543
+ }
544
+ if (value.okCount !== undefined) {
545
+ requireNonNegativeNumber(value, "okCount", "$", issues);
546
+ }
547
+ if (value.failedCount !== undefined) {
548
+ requireNonNegativeNumber(value, "failedCount", "$", issues);
549
+ }
550
+ if (value.concurrency !== undefined) {
551
+ requireNonNegativeNumber(value, "concurrency", "$", issues);
552
+ }
553
+ return issues.length === 0 ? success(value) : failure(issues);
506
554
  }
507
555
  export function validateRouterConfig(value) {
508
- const issues = [];
509
- if (!isRecord(value)) {
510
- return failure([{ path: "$", message: "Expected a router config object." }]);
511
- }
512
- if (!isValidPostToolRoutingMode(value.postToolRouting)) {
513
- issues.push({ path: "$.postToolRouting", message: "Expected postToolRouting off, safety-net, or strict." });
514
- }
515
- if (!isOneOf(value.storagePolicy, STORAGE_POLICY_MODES)) {
516
- issues.push({ path: "$.storagePolicy", message: "Expected storagePolicy store-everything or hybrid-dedupe." });
517
- }
518
- if (!isRecord(value.thresholds)) {
519
- issues.push({ path: "$.thresholds", message: "Expected thresholds object." });
520
- }
521
- else {
522
- issues.push(...validatePositiveIntegerThreshold(value.thresholds.largeOutputBytes, "$.thresholds.largeOutputBytes"));
523
- issues.push(...validatePositiveIntegerThreshold(value.thresholds.largeOutputLines, "$.thresholds.largeOutputLines"));
524
- }
525
- if (!isRecord(value.vault)) {
526
- issues.push({ path: "$.vault", message: "Expected vault config object." });
527
- }
528
- else {
529
- requireString(value.vault, "root", "$.vault", issues);
530
- if (value.vault.retention !== undefined) {
531
- issues.push(...validateVaultRetentionPolicy(value.vault.retention, "$.vault.retention"));
532
- }
533
- }
534
- issues.push(...validateNormalizedRouterHints(value.hints, "$.hints"));
535
- return issues.length === 0 ? success(value) : failure(issues);
556
+ const issues = [];
557
+ if (!isRecord(value)) {
558
+ return failure([{ path: "$", message: "Expected a router config object." }]);
559
+ }
560
+ if (!isValidPostToolRoutingMode(value.postToolRouting)) {
561
+ issues.push({ path: "$.postToolRouting", message: "Expected postToolRouting off, safety-net, or strict." });
562
+ }
563
+ if (!isOneOf(value.storagePolicy, STORAGE_POLICY_MODES)) {
564
+ issues.push({ path: "$.storagePolicy", message: "Expected storagePolicy store-everything or hybrid-dedupe." });
565
+ }
566
+ if (!isRecord(value.thresholds)) {
567
+ issues.push({ path: "$.thresholds", message: "Expected thresholds object." });
568
+ } else {
569
+ issues.push(
570
+ ...validatePositiveIntegerThreshold(value.thresholds.largeOutputBytes, "$.thresholds.largeOutputBytes"),
571
+ );
572
+ issues.push(
573
+ ...validatePositiveIntegerThreshold(value.thresholds.largeOutputLines, "$.thresholds.largeOutputLines"),
574
+ );
575
+ }
576
+ if (!isRecord(value.vault)) {
577
+ issues.push({ path: "$.vault", message: "Expected vault config object." });
578
+ } else {
579
+ requireString(value.vault, "root", "$.vault", issues);
580
+ if (value.vault.retention !== undefined) {
581
+ issues.push(...validateVaultRetentionPolicy(value.vault.retention, "$.vault.retention"));
582
+ }
583
+ }
584
+ issues.push(...validateNormalizedRouterHints(value.hints, "$.hints"));
585
+ return issues.length === 0 ? success(value) : failure(issues);
536
586
  }
537
587
  export function validateCommandOutputRecord(value) {
538
- const issues = [];
539
- if (!isRecord(value)) {
540
- return failure([{ path: "$", message: "Expected a command output record object." }]);
541
- }
542
- if ("status" in value) {
543
- issues.push({
544
- path: "$.status",
545
- message: "Do not use ambiguous command record status; use executionStatus.",
546
- });
547
- }
548
- if (value.kind !== "command") {
549
- issues.push({ path: "$.kind", message: "Expected kind command." });
550
- }
551
- requireString(value, "outputId", "$", issues);
552
- requireString(value, "recordId", "$", issues);
553
- requireString(value, "objectId", "$", issues);
554
- requireString(value, "createdAt", "$", issues);
555
- requireString(value, "contentHashSha256", "$", issues);
556
- const commandIsValid = typeof value.command === "string" ||
557
- (Array.isArray(value.command) && value.command.every((part) => typeof part === "string"));
558
- if (!commandIsValid) {
559
- issues.push({ path: "$.command", message: "Expected command string or string array." });
560
- }
561
- if (!isOneOf(value.executionStatus, EXECUTION_STATUSES)) {
562
- issues.push({ path: "$.executionStatus", message: "Expected a known execution status." });
563
- }
564
- requireNullableInteger(value, "exitCode", "$", issues);
565
- if (!isRecord(value.paths)) {
566
- issues.push({ path: "$.paths", message: "Expected command output paths object." });
567
- }
568
- else {
569
- requireString(value.paths, "meta", "$.paths", issues);
570
- requireString(value.paths, "stdout", "$.paths", issues);
571
- requireString(value.paths, "stderr", "$.paths", issues);
572
- requireString(value.paths, "combined", "$.paths", issues);
573
- }
574
- if (!isRecord(value.lineCounts)) {
575
- issues.push({ path: "$.lineCounts", message: "Expected lineCounts object." });
576
- }
577
- else {
578
- requireInteger(value.lineCounts, "stdout", "$.lineCounts", issues);
579
- requireInteger(value.lineCounts, "stderr", "$.lineCounts", issues);
580
- requireInteger(value.lineCounts, "combined", "$.lineCounts", issues);
581
- }
582
- if (!isRecord(value.byteCounts)) {
583
- issues.push({ path: "$.byteCounts", message: "Expected byteCounts object." });
584
- }
585
- else {
586
- requireInteger(value.byteCounts, "stdout", "$.byteCounts", issues);
587
- requireInteger(value.byteCounts, "stderr", "$.byteCounts", issues);
588
- requireInteger(value.byteCounts, "combined", "$.byteCounts", issues);
589
- }
590
- if (!isRecord(value.hashes)) {
591
- issues.push({ path: "$.hashes", message: "Expected hashes object." });
592
- }
593
- if (!Array.isArray(value.decisionIds) || !value.decisionIds.every((item) => typeof item === "string")) {
594
- issues.push({ path: "$.decisionIds", message: "Expected decision id string array." });
595
- }
596
- validateProducerDescriptor(value.producer, "$.producer", issues, true);
597
- validateEvidencePersistence(value.persistence, "$.persistence", issues, true);
598
- validateEvidenceLineage(value.lineage, "$.lineage", issues);
599
- return issues.length === 0 ? success(value) : failure(issues);
588
+ const issues = [];
589
+ if (!isRecord(value)) {
590
+ return failure([{ path: "$", message: "Expected a command output record object." }]);
591
+ }
592
+ if ("status" in value) {
593
+ issues.push({
594
+ path: "$.status",
595
+ message: "Do not use ambiguous command record status; use executionStatus.",
596
+ });
597
+ }
598
+ if (value.kind !== "command") {
599
+ issues.push({ path: "$.kind", message: "Expected kind command." });
600
+ }
601
+ requireString(value, "outputId", "$", issues);
602
+ requireString(value, "recordId", "$", issues);
603
+ requireString(value, "objectId", "$", issues);
604
+ requireString(value, "createdAt", "$", issues);
605
+ requireString(value, "contentHashSha256", "$", issues);
606
+ const commandIsValid =
607
+ typeof value.command === "string" ||
608
+ (Array.isArray(value.command) && value.command.every((part) => typeof part === "string"));
609
+ if (!commandIsValid) {
610
+ issues.push({ path: "$.command", message: "Expected command string or string array." });
611
+ }
612
+ if (!isOneOf(value.executionStatus, EXECUTION_STATUSES)) {
613
+ issues.push({ path: "$.executionStatus", message: "Expected a known execution status." });
614
+ }
615
+ requireNullableInteger(value, "exitCode", "$", issues);
616
+ if (!isRecord(value.paths)) {
617
+ issues.push({ path: "$.paths", message: "Expected command output paths object." });
618
+ } else {
619
+ requireString(value.paths, "meta", "$.paths", issues);
620
+ requireString(value.paths, "stdout", "$.paths", issues);
621
+ requireString(value.paths, "stderr", "$.paths", issues);
622
+ requireString(value.paths, "combined", "$.paths", issues);
623
+ }
624
+ if (!isRecord(value.lineCounts)) {
625
+ issues.push({ path: "$.lineCounts", message: "Expected lineCounts object." });
626
+ } else {
627
+ requireInteger(value.lineCounts, "stdout", "$.lineCounts", issues);
628
+ requireInteger(value.lineCounts, "stderr", "$.lineCounts", issues);
629
+ requireInteger(value.lineCounts, "combined", "$.lineCounts", issues);
630
+ }
631
+ if (!isRecord(value.byteCounts)) {
632
+ issues.push({ path: "$.byteCounts", message: "Expected byteCounts object." });
633
+ } else {
634
+ requireInteger(value.byteCounts, "stdout", "$.byteCounts", issues);
635
+ requireInteger(value.byteCounts, "stderr", "$.byteCounts", issues);
636
+ requireInteger(value.byteCounts, "combined", "$.byteCounts", issues);
637
+ }
638
+ if (!isRecord(value.hashes)) {
639
+ issues.push({ path: "$.hashes", message: "Expected hashes object." });
640
+ }
641
+ if (!Array.isArray(value.decisionIds) || !value.decisionIds.every((item) => typeof item === "string")) {
642
+ issues.push({ path: "$.decisionIds", message: "Expected decision id string array." });
643
+ }
644
+ validateProducerDescriptor(value.producer, "$.producer", issues, true);
645
+ validateEvidencePersistence(value.persistence, "$.persistence", issues, true);
646
+ validateEvidenceLineage(value.lineage, "$.lineage", issues);
647
+ return issues.length === 0 ? success(value) : failure(issues);
600
648
  }