@hassangameryt/freeflow 0.2.0 → 0.3.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 (639) hide show
  1. package/.agents/plugins/marketplace.json +1 -1
  2. package/.claude-plugin/marketplace.json +2 -2
  3. package/{plugins/freeflow/.claude-plugin → .claude-plugin}/plugin.json +1 -1
  4. package/{plugins/freeflow/.codex-plugin → .codex-plugin}/plugin.json +1 -1
  5. package/README.md +19 -14
  6. package/assets/freeflow-plugin-icon.png +0 -0
  7. package/{plugins/freeflow/command-surface.json → command-surface.json} +10 -2
  8. package/evals/README.md +32 -0
  9. package/evals/fixtures/copy-conventions.md +31 -0
  10. package/evals/fixtures/output-router/README.md +12 -0
  11. package/evals/fixtures/output-router/failed-command-output.txt +9 -0
  12. package/evals/fixtures/output-router/large-router-manual.md +63 -0
  13. package/evals/fixtures/output-router/native-large-output.txt +40 -0
  14. package/evals/fixtures/output-router/noisy-test-output.txt +30 -0
  15. package/evals/fixtures/output-router/verification-output.txt +8 -0
  16. package/evals/fixtures/tiny-artifact-review-app/README.md +5 -0
  17. package/evals/fixtures/tiny-artifact-review-app/docs/billing-policy.md +10 -0
  18. package/evals/fixtures/tiny-artifact-review-app/docs/specs/billing-webhook-api-draft.md +21 -0
  19. package/evals/fixtures/tiny-artifact-review-app/docs/specs/failed-payment-grace-period.md +24 -0
  20. package/evals/fixtures/tiny-artifact-review-app/docs/specs/immediate-downgrade.md +17 -0
  21. package/evals/fixtures/tiny-artifact-review-app/tests/billing.test.md +8 -0
  22. package/evals/fixtures/tiny-commit-ambiguous-app/.freeflow-eval-setup.sh +15 -0
  23. package/evals/fixtures/tiny-commit-ambiguous-app/README.md +3 -0
  24. package/evals/fixtures/tiny-commit-ambiguous-app/src/billing.ts +5 -0
  25. package/evals/fixtures/tiny-commit-ambiguous-app/src/settings-page.ts +1 -0
  26. package/evals/fixtures/tiny-commit-ambiguous-app/tests/settings.test.md +5 -0
  27. package/evals/fixtures/tiny-commit-app/.freeflow-eval-setup.sh +14 -0
  28. package/evals/fixtures/tiny-commit-app/README.md +3 -0
  29. package/evals/fixtures/tiny-commit-app/docs/specs/settings-title.md +5 -0
  30. package/evals/fixtures/tiny-commit-app/src/billing.ts +5 -0
  31. package/evals/fixtures/tiny-commit-app/src/settings-page.ts +1 -0
  32. package/evals/fixtures/tiny-commit-app/tests/settings.test.md +5 -0
  33. package/evals/fixtures/tiny-commit-everything-app/.freeflow-eval-setup.sh +15 -0
  34. package/evals/fixtures/tiny-commit-everything-app/README.md +3 -0
  35. package/evals/fixtures/tiny-commit-everything-app/docs/specs/settings-title.md +5 -0
  36. package/evals/fixtures/tiny-commit-everything-app/src/billing.ts +5 -0
  37. package/evals/fixtures/tiny-commit-everything-app/src/settings-page.ts +1 -0
  38. package/evals/fixtures/tiny-commit-everything-app/tests/settings.test.md +5 -0
  39. package/evals/fixtures/tiny-commit-staged-app/.freeflow-eval-setup.sh +15 -0
  40. package/evals/fixtures/tiny-commit-staged-app/README.md +3 -0
  41. package/evals/fixtures/tiny-commit-staged-app/docs/specs/settings-title.md +5 -0
  42. package/evals/fixtures/tiny-commit-staged-app/src/billing.ts +5 -0
  43. package/evals/fixtures/tiny-commit-staged-app/src/settings-page.ts +1 -0
  44. package/evals/fixtures/tiny-commit-staged-app/tests/settings.test.md +5 -0
  45. package/evals/fixtures/tiny-commit-staged-mixed-app/.freeflow-eval-setup.sh +15 -0
  46. package/evals/fixtures/tiny-commit-staged-mixed-app/README.md +3 -0
  47. package/evals/fixtures/tiny-commit-staged-mixed-app/docs/billing-policy.md +3 -0
  48. package/evals/fixtures/tiny-commit-staged-mixed-app/docs/release-notes.md +3 -0
  49. package/evals/fixtures/tiny-commit-staged-mixed-app/src/billing.ts +5 -0
  50. package/evals/fixtures/tiny-dashboard-stale-app/README.md +11 -0
  51. package/evals/fixtures/tiny-dashboard-stale-app/src/api-client.ts +13 -0
  52. package/evals/fixtures/tiny-dashboard-stale-app/src/dashboard-data.ts +19 -0
  53. package/evals/fixtures/tiny-dashboard-stale-app/tests/dashboard-data.test.md +9 -0
  54. package/evals/fixtures/tiny-decision-destination-app/README.md +6 -0
  55. package/evals/fixtures/tiny-decision-destination-app/src/risk.ts +8 -0
  56. package/evals/fixtures/tiny-decision-destination-app/tests/risk.test.md +4 -0
  57. package/evals/fixtures/tiny-design-depth-app/README.md +15 -0
  58. package/evals/fixtures/tiny-design-depth-app/src/routes.ts +25 -0
  59. package/evals/fixtures/tiny-design-depth-app/src/sendEmail.ts +3 -0
  60. package/evals/fixtures/tiny-design-depth-app/src/sendSms.ts +3 -0
  61. package/evals/fixtures/tiny-design-depth-app/src/telemetry.ts +3 -0
  62. package/evals/fixtures/tiny-design-depth-app/tests/routes.test.md +12 -0
  63. package/evals/fixtures/tiny-eval-method-app/README.md +8 -0
  64. package/evals/fixtures/tiny-eval-method-app/evals/reports/review-pr-eval-result.md +5 -0
  65. package/evals/fixtures/tiny-eval-method-app/evals/reports/triage-question-failure.md +17 -0
  66. package/evals/fixtures/tiny-eval-method-app/evals/runs/review-pr-with-skill-output.diff +11 -0
  67. package/evals/fixtures/tiny-eval-method-app/evals/runs/review-pr-with-skill-output.md +3 -0
  68. package/evals/fixtures/tiny-eval-method-app/skills/review-pr/SKILL.md +10 -0
  69. package/evals/fixtures/tiny-eval-method-app/skills/triage-question/SKILL.md +10 -0
  70. package/evals/fixtures/tiny-execute-plan-app/README.md +5 -0
  71. package/evals/fixtures/tiny-execute-plan-app/checks/settings-and-billing-check.sh +5 -0
  72. package/evals/fixtures/tiny-execute-plan-app/docs/billing-policy.md +10 -0
  73. package/evals/fixtures/tiny-execute-plan-app/docs/plans/immediate-downgrade-plan.md +11 -0
  74. package/evals/fixtures/tiny-execute-plan-app/docs/plans/settings-title-plan.md +12 -0
  75. package/evals/fixtures/tiny-execute-plan-app/docs/plans/settings-title-with-bad-check.md +15 -0
  76. package/evals/fixtures/tiny-execute-plan-app/docs/plans/unverified-billing-plan.md +9 -0
  77. package/evals/fixtures/tiny-execute-plan-app/docs/specs/failed-payment-grace-period.md +9 -0
  78. package/evals/fixtures/tiny-execute-plan-app/docs/specs/settings-title.md +9 -0
  79. package/evals/fixtures/tiny-execute-plan-app/src/billing.ts +7 -0
  80. package/evals/fixtures/tiny-execute-plan-app/src/settings-page.ts +1 -0
  81. package/evals/fixtures/tiny-execute-plan-app/tests/billing.test.md +7 -0
  82. package/evals/fixtures/tiny-execute-plan-app/tests/settings.test.md +5 -0
  83. package/evals/fixtures/tiny-execute-review-loop-app/README.md +5 -0
  84. package/evals/fixtures/tiny-execute-review-loop-app/docs/billing-policy.md +9 -0
  85. package/evals/fixtures/tiny-execute-review-loop-app/docs/plans/settings-title-plan.md +12 -0
  86. package/evals/fixtures/tiny-execute-review-loop-app/docs/review/previous-agent-summary.md +15 -0
  87. package/evals/fixtures/tiny-execute-review-loop-app/docs/review/review-pass-1-non-pass.md +11 -0
  88. package/evals/fixtures/tiny-execute-review-loop-app/docs/specs/settings-title.md +9 -0
  89. package/evals/fixtures/tiny-execute-review-loop-app/src/billing.ts +7 -0
  90. package/evals/fixtures/tiny-execute-review-loop-app/src/settings-page.ts +1 -0
  91. package/evals/fixtures/tiny-execute-review-loop-app/tests/billing.test.md +7 -0
  92. package/evals/fixtures/tiny-execute-review-loop-app/tests/settings.test.md +5 -0
  93. package/evals/fixtures/tiny-flaky-session-app/README.md +10 -0
  94. package/evals/fixtures/tiny-flaky-session-app/src/session-timeout.ts +13 -0
  95. package/evals/fixtures/tiny-flaky-session-app/tests/session-timeout.test.md +8 -0
  96. package/evals/fixtures/tiny-handoff-app/README.md +5 -0
  97. package/evals/fixtures/tiny-handoff-app/docs/billing-policy.md +10 -0
  98. package/evals/fixtures/tiny-handoff-app/docs/handoffs/old-agent-handoff.md +8 -0
  99. package/evals/fixtures/tiny-handoff-app/docs/plans/billing-retry-plan.md +11 -0
  100. package/evals/fixtures/tiny-handoff-app/src/billing.ts +7 -0
  101. package/evals/fixtures/tiny-handoff-report-app/README.md +3 -0
  102. package/evals/fixtures/tiny-handoff-report-app/evals/runs/handoff-3/hof-003/with-skill-output.diff +1 -0
  103. package/evals/fixtures/tiny-handoff-report-app/evals/runs/handoff-3/hof-003/with-skill-output.md +1 -0
  104. package/evals/fixtures/tiny-handoff-report-app/evals/scores/hof-003-score.txt +4 -0
  105. package/evals/fixtures/tiny-plan-app/README.md +5 -0
  106. package/evals/fixtures/tiny-plan-app/docs/billing-policy.md +10 -0
  107. package/evals/fixtures/tiny-plan-app/docs/specs/failed-payment-grace-period.md +25 -0
  108. package/evals/fixtures/tiny-plan-app/src/billing.ts +17 -0
  109. package/evals/fixtures/tiny-plan-app/src/settings-page.ts +1 -0
  110. package/evals/fixtures/tiny-plan-app/tests/billing.test.md +8 -0
  111. package/evals/fixtures/tiny-plan-app/tests/settings.test.md +5 -0
  112. package/evals/fixtures/tiny-plan-strict-api-app/README.md +3 -0
  113. package/evals/fixtures/tiny-plan-strict-api-app/docs/billing-policy.md +5 -0
  114. package/evals/fixtures/tiny-plan-strict-api-app/docs/specs/billing-webhook-api.md +25 -0
  115. package/evals/fixtures/tiny-plan-strict-api-app/src/billing.ts +5 -0
  116. package/evals/fixtures/tiny-plan-strict-api-app/src/webhooks.ts +3 -0
  117. package/evals/fixtures/tiny-plan-strict-api-app/tests/billing-webhook.test.md +8 -0
  118. package/evals/fixtures/tiny-post-setup-invalid-config-app/.freeflow/config.json +3 -0
  119. package/evals/fixtures/tiny-post-setup-invalid-config-app/AGENTS.md +15 -0
  120. package/evals/fixtures/tiny-post-setup-invalid-config-app/README.md +16 -0
  121. package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/auth-review.md +15 -0
  122. package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/billing-policy.md +10 -0
  123. package/evals/fixtures/tiny-post-setup-invalid-config-app/docs/copy-conventions.md +15 -0
  124. package/evals/fixtures/tiny-post-setup-invalid-config-app/src/auth-middleware.ts +12 -0
  125. package/evals/fixtures/tiny-post-setup-invalid-config-app/src/billing.ts +20 -0
  126. package/evals/fixtures/tiny-post-setup-invalid-config-app/src/login-copy.ts +1 -0
  127. package/evals/fixtures/tiny-post-setup-invalid-config-app/src/settings-page.ts +1 -0
  128. package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/auth-middleware.test.md +8 -0
  129. package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/billing.test.md +8 -0
  130. package/evals/fixtures/tiny-post-setup-invalid-config-app/tests/copy.test.md +7 -0
  131. package/evals/fixtures/tiny-post-setup-missing-config-app/AGENTS.md +15 -0
  132. package/evals/fixtures/tiny-post-setup-missing-config-app/README.md +16 -0
  133. package/evals/fixtures/tiny-post-setup-missing-config-app/docs/auth-review.md +15 -0
  134. package/evals/fixtures/tiny-post-setup-missing-config-app/docs/billing-policy.md +10 -0
  135. package/evals/fixtures/tiny-post-setup-missing-config-app/docs/copy-conventions.md +15 -0
  136. package/evals/fixtures/tiny-post-setup-missing-config-app/src/auth-middleware.ts +12 -0
  137. package/evals/fixtures/tiny-post-setup-missing-config-app/src/billing.ts +20 -0
  138. package/evals/fixtures/tiny-post-setup-missing-config-app/src/login-copy.ts +1 -0
  139. package/evals/fixtures/tiny-post-setup-missing-config-app/src/settings-page.ts +1 -0
  140. package/evals/fixtures/tiny-post-setup-missing-config-app/tests/auth-middleware.test.md +8 -0
  141. package/evals/fixtures/tiny-post-setup-missing-config-app/tests/billing.test.md +8 -0
  142. package/evals/fixtures/tiny-post-setup-missing-config-app/tests/copy.test.md +7 -0
  143. package/evals/fixtures/tiny-post-setup-source-conflict-app/.freeflow/config.json +3 -0
  144. package/evals/fixtures/tiny-post-setup-source-conflict-app/AGENTS.md +15 -0
  145. package/evals/fixtures/tiny-post-setup-source-conflict-app/README.md +16 -0
  146. package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/auth-review.md +15 -0
  147. package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/billing-policy.md +10 -0
  148. package/evals/fixtures/tiny-post-setup-source-conflict-app/docs/copy-conventions.md +15 -0
  149. package/evals/fixtures/tiny-post-setup-source-conflict-app/src/auth-middleware.ts +12 -0
  150. package/evals/fixtures/tiny-post-setup-source-conflict-app/src/billing.ts +20 -0
  151. package/evals/fixtures/tiny-post-setup-source-conflict-app/src/login-copy.ts +1 -0
  152. package/evals/fixtures/tiny-post-setup-source-conflict-app/src/settings-page.ts +1 -0
  153. package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/auth-middleware.test.md +8 -0
  154. package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/billing.test.md +8 -0
  155. package/evals/fixtures/tiny-post-setup-source-conflict-app/tests/copy.test.md +7 -0
  156. package/evals/fixtures/tiny-report-performance-app/README.md +11 -0
  157. package/evals/fixtures/tiny-report-performance-app/docs/performance.md +10 -0
  158. package/evals/fixtures/tiny-report-performance-app/src/report-summary.ts +29 -0
  159. package/evals/fixtures/tiny-report-performance-app/tests/report-performance.test.md +8 -0
  160. package/evals/fixtures/tiny-review-request-app/README.md +3 -0
  161. package/evals/fixtures/tiny-review-request-app/docs/billing-policy.md +5 -0
  162. package/evals/fixtures/tiny-review-request-app/docs/plans/billing-webhook-api.md +19 -0
  163. package/evals/fixtures/tiny-review-request-app/docs/review/previous-agent-summary.md +20 -0
  164. package/evals/fixtures/tiny-review-request-app/docs/specs/billing-webhook-api.md +25 -0
  165. package/evals/fixtures/tiny-review-request-app/src/billing.ts +11 -0
  166. package/evals/fixtures/tiny-review-request-app/src/webhooks.ts +19 -0
  167. package/evals/fixtures/tiny-review-request-app/tests/billing-webhook.test.md +8 -0
  168. package/evals/fixtures/tiny-review-work-app/README.md +5 -0
  169. package/evals/fixtures/tiny-review-work-app/docs/billing-policy.md +9 -0
  170. package/evals/fixtures/tiny-review-work-app/docs/plans/settings-title-plan.md +12 -0
  171. package/evals/fixtures/tiny-review-work-app/docs/review/previous-agent-summary.md +15 -0
  172. package/evals/fixtures/tiny-review-work-app/docs/specs/settings-title.md +9 -0
  173. package/evals/fixtures/tiny-review-work-app/src/billing.ts +7 -0
  174. package/evals/fixtures/tiny-review-work-app/src/settings-page.ts +1 -0
  175. package/evals/fixtures/tiny-review-work-app/tests/billing.test.md +7 -0
  176. package/evals/fixtures/tiny-review-work-app/tests/settings.test.md +5 -0
  177. package/evals/fixtures/tiny-saas-app/README.md +16 -0
  178. package/evals/fixtures/tiny-saas-app/docs/auth-review.md +15 -0
  179. package/evals/fixtures/tiny-saas-app/docs/billing-policy.md +10 -0
  180. package/evals/fixtures/tiny-saas-app/docs/copy-conventions.md +15 -0
  181. package/evals/fixtures/tiny-saas-app/docs/specs/settings-title.md +13 -0
  182. package/evals/fixtures/tiny-saas-app/src/auth-middleware.ts +12 -0
  183. package/evals/fixtures/tiny-saas-app/src/billing.ts +20 -0
  184. package/evals/fixtures/tiny-saas-app/src/login-copy.ts +1 -0
  185. package/evals/fixtures/tiny-saas-app/src/settings-page.ts +1 -0
  186. package/evals/fixtures/tiny-saas-app/tests/auth-middleware.test.md +8 -0
  187. package/evals/fixtures/tiny-saas-app/tests/billing.test.md +8 -0
  188. package/evals/fixtures/tiny-saas-app/tests/copy.test.md +7 -0
  189. package/evals/fixtures/tiny-setup-agents-app/AGENTS.md +6 -0
  190. package/evals/fixtures/tiny-setup-both-app/AGENTS.md +5 -0
  191. package/evals/fixtures/tiny-setup-both-app/CLAUDE.md +5 -0
  192. package/evals/fixtures/tiny-setup-claude-app/CLAUDE.md +6 -0
  193. package/evals/fixtures/tiny-setup-codex-rules-app/.codex/rules/shell.rules +5 -0
  194. package/evals/fixtures/tiny-setup-codex-rules-app/AGENTS.md +6 -0
  195. package/evals/fixtures/tiny-setup-conflict-app/AGENTS.md +6 -0
  196. package/evals/fixtures/tiny-setup-existing-block-app/AGENTS.md +14 -0
  197. package/evals/fixtures/tiny-setup-four-rules-app/CLAUDE.md +6 -0
  198. package/evals/fixtures/tiny-skill-dev-app/README.md +10 -0
  199. package/evals/fixtures/tiny-skill-dev-app/evals/prompts/review-pr-001.txt +8 -0
  200. package/evals/fixtures/tiny-skill-dev-app/evals/reports/review-pr-failure.md +17 -0
  201. package/evals/fixtures/tiny-skill-dev-app/skills/review-pr/SKILL.md +13 -0
  202. package/evals/fixtures/tiny-team-app/README.md +5 -0
  203. package/evals/fixtures/tiny-team-app/docs/product.md +6 -0
  204. package/evals/fixtures/tiny-team-app/src/teams.ts +9 -0
  205. package/evals/fixtures/tiny-team-app/src/users.ts +5 -0
  206. package/evals/fixtures/tiny-team-app/tests/teams.test.md +7 -0
  207. package/evals/fixtures/tiny-verify-app/README.md +5 -0
  208. package/evals/fixtures/tiny-verify-app/src/settings-nav.ts +1 -0
  209. package/evals/fixtures/tiny-verify-app/src/settings-page.ts +1 -0
  210. package/evals/fixtures/tiny-verify-app/tests/settings.test.md +7 -0
  211. package/evals/prompts/aon-001.txt +2 -0
  212. package/evals/prompts/byp-001.txt +2 -0
  213. package/evals/prompts/byp-002.txt +2 -0
  214. package/evals/prompts/cap-001.txt +3 -0
  215. package/evals/prompts/cap-002.txt +3 -0
  216. package/evals/prompts/cmd-001.txt +3 -0
  217. package/evals/prompts/cmd-002.txt +3 -0
  218. package/evals/prompts/cmd-003.txt +6 -0
  219. package/evals/prompts/cmd-004.txt +5 -0
  220. package/evals/prompts/cmd-005.txt +5 -0
  221. package/evals/prompts/cmd-006.txt +5 -0
  222. package/evals/prompts/cmd-007.txt +5 -0
  223. package/evals/prompts/cmd-008.txt +5 -0
  224. package/evals/prompts/cmd-009.txt +8 -0
  225. package/evals/prompts/cmd-010.txt +5 -0
  226. package/evals/prompts/cmd-011.txt +5 -0
  227. package/evals/prompts/cmd-012.txt +5 -0
  228. package/evals/prompts/cmd-013.txt +5 -0
  229. package/evals/prompts/cmd-014.txt +7 -0
  230. package/evals/prompts/cmd-015.txt +7 -0
  231. package/evals/prompts/cmd-016.txt +5 -0
  232. package/evals/prompts/cmt-001.txt +1 -0
  233. package/evals/prompts/cmt-002.txt +1 -0
  234. package/evals/prompts/cmt-003.txt +1 -0
  235. package/evals/prompts/cmt-004.txt +1 -0
  236. package/evals/prompts/cmt-005.txt +1 -0
  237. package/evals/prompts/dfd-001.txt +3 -0
  238. package/evals/prompts/dia-001.txt +3 -0
  239. package/evals/prompts/dia-002.txt +3 -0
  240. package/evals/prompts/dia-003.txt +3 -0
  241. package/evals/prompts/dis-001.txt +5 -0
  242. package/evals/prompts/dis-002.txt +5 -0
  243. package/evals/prompts/esk-001.txt +5 -0
  244. package/evals/prompts/esk-002.txt +5 -0
  245. package/evals/prompts/esk-003.txt +5 -0
  246. package/evals/prompts/grc-001.txt +3 -0
  247. package/evals/prompts/hof-001.txt +3 -0
  248. package/evals/prompts/hof-002.txt +1 -0
  249. package/evals/prompts/hof-003.txt +1 -0
  250. package/evals/prompts/hof-004.txt +1 -0
  251. package/evals/prompts/hof-005.txt +1 -0
  252. package/evals/prompts/ivg-001.txt +1 -0
  253. package/evals/prompts/ivg-002.txt +11 -0
  254. package/evals/prompts/ivg-003.txt +1 -0
  255. package/evals/prompts/ivg-004.txt +1 -0
  256. package/evals/prompts/mode-001.txt +3 -0
  257. package/evals/prompts/mode-002.txt +1 -0
  258. package/evals/prompts/mode-003.txt +3 -0
  259. package/evals/prompts/mode-004.txt +3 -0
  260. package/evals/prompts/mode-005.txt +3 -0
  261. package/evals/prompts/mode-006.txt +3 -0
  262. package/evals/prompts/mode-007.txt +3 -0
  263. package/evals/prompts/otr-001.txt +3 -0
  264. package/evals/prompts/otr-002.txt +3 -0
  265. package/evals/prompts/rar-001.txt +5 -0
  266. package/evals/prompts/rar-002.txt +3 -0
  267. package/evals/prompts/rar-003.txt +6 -0
  268. package/evals/prompts/rar-004.txt +15 -0
  269. package/evals/prompts/rar-005.txt +10 -0
  270. package/evals/prompts/rbr-001.txt +3 -0
  271. package/evals/prompts/rbr-002.txt +3 -0
  272. package/evals/prompts/rbr-003.txt +7 -0
  273. package/evals/prompts/rev-001.txt +3 -0
  274. package/evals/prompts/rev-002.txt +5 -0
  275. package/evals/prompts/rev-003.txt +6 -0
  276. package/evals/prompts/rev-004.txt +1 -0
  277. package/evals/prompts/rev-005.txt +15 -0
  278. package/evals/prompts/rev-006.txt +5 -0
  279. package/evals/prompts/stp-001.txt +1 -0
  280. package/evals/prompts/stp-002.txt +1 -0
  281. package/evals/prompts/stp-003.txt +1 -0
  282. package/evals/prompts/stp-004.txt +1 -0
  283. package/evals/prompts/stp-005.txt +1 -0
  284. package/evals/prompts/stp-006.txt +1 -0
  285. package/evals/prompts/stp-007.txt +1 -0
  286. package/evals/prompts/stp-008.txt +1 -0
  287. package/evals/prompts/stp-009.txt +1 -0
  288. package/evals/prompts/stp-010.txt +1 -0
  289. package/evals/prompts/stp-011.txt +1 -0
  290. package/evals/prompts/vfy-003.txt +1 -0
  291. package/evals/prompts/wpl-001.txt +3 -0
  292. package/evals/prompts/wpl-002.txt +5 -0
  293. package/evals/prompts/wpl-003.txt +3 -0
  294. package/evals/prompts/wpl-004.txt +5 -0
  295. package/evals/prompts/wpl-005.txt +1 -0
  296. package/evals/prompts/wrc-001.txt +10 -0
  297. package/evals/prompts/wrc-002.txt +3 -0
  298. package/evals/prompts/wsk-001.txt +6 -0
  299. package/evals/prompts/wsp-001.txt +5 -0
  300. package/evals/prompts/wsp-002.txt +15 -0
  301. package/evals/prompts/wsp-003.txt +3 -0
  302. package/evals/prompts/wsp-004.txt +15 -0
  303. package/evals/prompts/wsp-005.txt +5 -0
  304. package/evals/prompts/wsp-006.txt +12 -0
  305. package/evals/prompts/wsp-007.txt +9 -0
  306. package/evals/prompts/wsp-008.txt +13 -0
  307. package/evals/prompts/xpl-001.txt +1 -0
  308. package/evals/prompts/xpl-002.txt +3 -0
  309. package/evals/prompts/xpl-003.txt +3 -0
  310. package/evals/prompts/xpl-004.txt +3 -0
  311. package/evals/prompts/xpl-005.txt +5 -0
  312. package/evals/prompts/xpl-006.txt +3 -0
  313. package/evals/registries/adversarial-evals.json +39 -0
  314. package/evals/registries/fixture-evals.json +2513 -0
  315. package/evals/registries/handoff-evals.json +74 -0
  316. package/evals/registries/legacy-evals.json +147 -0
  317. package/evals/registries/skill-evidence.json +193 -0
  318. package/evals/registries/verify-work-evals.json +46 -0
  319. package/evals/reports/acceptance/v0.1-acceptance-report.md +130 -0
  320. package/evals/reports/by-command-surface/command-surface-1-report.md +45 -0
  321. package/evals/reports/by-command-surface/command-surface-10-report.md +76 -0
  322. package/evals/reports/by-command-surface/command-surface-11-report.md +77 -0
  323. package/evals/reports/by-command-surface/command-surface-12-report.md +91 -0
  324. package/evals/reports/by-command-surface/command-surface-13-report.md +64 -0
  325. package/evals/reports/by-command-surface/command-surface-14-report.md +66 -0
  326. package/evals/reports/by-command-surface/command-surface-15-report.md +124 -0
  327. package/evals/reports/by-command-surface/command-surface-16-report.md +39 -0
  328. package/evals/reports/by-command-surface/command-surface-2-report.md +80 -0
  329. package/evals/reports/by-command-surface/command-surface-3-report.md +86 -0
  330. package/evals/reports/by-command-surface/command-surface-4-report.md +76 -0
  331. package/evals/reports/by-command-surface/command-surface-5-report.md +80 -0
  332. package/evals/reports/by-command-surface/command-surface-6-report.md +74 -0
  333. package/evals/reports/by-command-surface/command-surface-7-report.md +84 -0
  334. package/evals/reports/by-command-surface/command-surface-8-report.md +79 -0
  335. package/evals/reports/by-command-surface/command-surface-9-report.md +79 -0
  336. package/evals/reports/by-command-surface/command-surface-matrix.md +91 -0
  337. package/evals/reports/by-skill/bypass-1-report.md +124 -0
  338. package/evals/reports/by-skill/capture-decisions-1-report.md +99 -0
  339. package/evals/reports/by-skill/capture-decisions-2-report.md +102 -0
  340. package/evals/reports/by-skill/commit-work-1-report.md +165 -0
  341. package/evals/reports/by-skill/commit-work-2-report.md +109 -0
  342. package/evals/reports/by-skill/design-for-depth-1-report.md +95 -0
  343. package/evals/reports/by-skill/diagnose-failure-1-report.md +91 -0
  344. package/evals/reports/by-skill/diagnose-failure-2-report.md +94 -0
  345. package/evals/reports/by-skill/discover-1-report.md +118 -0
  346. package/evals/reports/by-skill/evaluate-skill-2-report.md +71 -0
  347. package/evals/reports/by-skill/execute-plan-1-report.md +103 -0
  348. package/evals/reports/by-skill/execute-plan-2-report.md +112 -0
  349. package/evals/reports/by-skill/execute-plan-3-report.md +87 -0
  350. package/evals/reports/by-skill/grill-context-1-report.md +103 -0
  351. package/evals/reports/by-skill/handoff-1-report.md +123 -0
  352. package/evals/reports/by-skill/handoff-2-report.md +105 -0
  353. package/evals/reports/by-skill/handoff-3-report.md +100 -0
  354. package/evals/reports/by-skill/handoff-7-report.md +77 -0
  355. package/evals/reports/by-skill/interview-gate-1-report.md +63 -0
  356. package/evals/reports/by-skill/interview-gate-2-report.md +105 -0
  357. package/evals/reports/by-skill/mode-contract-1-report.md +74 -0
  358. package/evals/reports/by-skill/mode-contract-2-report.md +87 -0
  359. package/evals/reports/by-skill/mode-contract-3-report.md +65 -0
  360. package/evals/reports/by-skill/mode-contract-4-report.md +71 -0
  361. package/evals/reports/by-skill/mode-contract-5-report.md +70 -0
  362. package/evals/reports/by-skill/output-router-1-report.md +76 -0
  363. package/evals/reports/by-skill/output-router-2-report.md +65 -0
  364. package/evals/reports/by-skill/research-1-report.md +144 -0
  365. package/evals/reports/by-skill/research-brief-1-report.md +94 -0
  366. package/evals/reports/by-skill/research-brief-2-report.md +75 -0
  367. package/evals/reports/by-skill/review-artifact-1-report.md +91 -0
  368. package/evals/reports/by-skill/review-artifact-2-report.md +79 -0
  369. package/evals/reports/by-skill/review-artifact-3-report.md +120 -0
  370. package/evals/reports/by-skill/review-artifact-4-report.md +89 -0
  371. package/evals/reports/by-skill/review-artifact-5-report.md +66 -0
  372. package/evals/reports/by-skill/review-work-1-report.md +85 -0
  373. package/evals/reports/by-skill/review-work-2-report.md +87 -0
  374. package/evals/reports/by-skill/review-work-3-report.md +104 -0
  375. package/evals/reports/by-skill/review-work-4-report.md +108 -0
  376. package/evals/reports/by-skill/review-work-5-report.md +73 -0
  377. package/evals/reports/by-skill/review-work-6-report.md +66 -0
  378. package/evals/reports/by-skill/setup-freeflow-1-report.md +199 -0
  379. package/evals/reports/by-skill/setup-freeflow-2-report.md +105 -0
  380. package/evals/reports/by-skill/setup-freeflow-3-report.md +105 -0
  381. package/evals/reports/by-skill/setup-freeflow-4-report.md +88 -0
  382. package/evals/reports/by-skill/setup-freeflow-5-report.md +115 -0
  383. package/evals/reports/by-skill/skill-authoring-1-report.md +81 -0
  384. package/evals/reports/by-skill/verify-work-1-report.md +111 -0
  385. package/evals/reports/by-skill/verify-work-2-report.md +120 -0
  386. package/evals/reports/by-skill/workflow-1-report.md +65 -0
  387. package/evals/reports/by-skill/write-plan-1-report.md +123 -0
  388. package/evals/reports/by-skill/write-plan-2-report.md +98 -0
  389. package/evals/reports/by-skill/write-plan-3-report.md +110 -0
  390. package/evals/reports/by-skill/write-spec-1-report.md +88 -0
  391. package/evals/reports/by-skill/write-spec-2-report.md +89 -0
  392. package/evals/reports/by-skill/write-spec-3-report.md +90 -0
  393. package/evals/reports/by-skill/write-spec-4-report.md +167 -0
  394. package/evals/reports/harness/claude-harness-1-report.md +103 -0
  395. package/evals/reports/harness/eval-harness-1-report.md +91 -0
  396. package/evals/reports/iterations/iteration-1-report.md +71 -0
  397. package/evals/reports/iterations/iteration-2-report.md +78 -0
  398. package/evals/reports/iterations/iteration-3-report.md +118 -0
  399. package/evals/reports/iterations/iteration-4-report.md +131 -0
  400. package/evals/reports/iterations/iteration-5-report.md +149 -0
  401. package/evals/reports/iterations/iteration-6-report.md +136 -0
  402. package/evals/reports/runtime/always-on-runtime-1-report.md +107 -0
  403. package/evals/reports/runtime/context-mode-normalized-benchmark-1-report.md +52 -0
  404. package/evals/reports/runtime/context-mode-real-deep-baseline-1-report.md +410 -0
  405. package/evals/reports/runtime/context-mode-real-deep-final-slice-11-report.md +203 -0
  406. package/evals/reports/runtime/context-mode-real-deep-final-slice-11-review.md +51 -0
  407. package/evals/reports/runtime/context-saving-native-tools-baseline-1-report.md +99 -0
  408. package/evals/reports/runtime/eryx-python-compatibility-reprobe-1-report.md +166 -0
  409. package/evals/reports/runtime/eryx-python-proof-spike-1-report.md +96 -0
  410. package/evals/reports/runtime/eryx-python-proof-spike-2-report.md +151 -0
  411. package/evals/reports/runtime/eryx-python-script-derive-execution-1-report.md +233 -0
  412. package/evals/reports/runtime/jq-script-derive-execution-1-report.md +215 -0
  413. package/evals/reports/runtime/jq-wasm-proof-spike-1-report.md +67 -0
  414. package/evals/reports/runtime/output-router-benchmark-1-report.md +81 -0
  415. package/evals/reports/runtime/output-router-capture-derive-provider-eval-1-report.md +35 -0
  416. package/evals/reports/runtime/output-router-codex-large-index-sqlite-adhoc-report.md +150 -0
  417. package/evals/reports/runtime/output-router-codex-qa-benchmark-1-report.md +46 -0
  418. package/evals/reports/runtime/output-router-command-benchmark-1-report.md +62 -0
  419. package/evals/reports/runtime/output-router-index-benchmark-1-report.md +64 -0
  420. package/evals/reports/runtime/output-router-regression-1-report.md +81 -0
  421. package/evals/reports/runtime/output-router-transform-eval-1-report.md +28 -0
  422. package/evals/reports/runtime/pi-observed-routing-eval-1-report.md +44 -0
  423. package/evals/reports/runtime/quickjs-script-derive-execution-1-report.md +159 -0
  424. package/evals/reports/runtime/quickjs-wasi-proof-spike-1-report.md +55 -0
  425. package/evals/reports/runtime/render-format-row-protocol-1-report.md +58 -0
  426. package/evals/reports/runtime/script-sandbox-adapter-selection-review-1-report.md +84 -0
  427. package/evals/reports/runtime/script-sandbox-probe-resource-hardening-1-report.md +51 -0
  428. package/evals/reports/runtime/storage-policy-benchmark-1-report.md +176 -0
  429. package/evals/reports/runtime/vault-index-storage-spike-1-report.md +39 -0
  430. package/evals/reports/runtime/workflow-context-hook-1-report.md +82 -0
  431. package/evals/runbooks/adversarial-eval-runbook.md +28 -0
  432. package/evals/runbooks/fixture-eval-runbook.md +137 -0
  433. package/evals/runbooks/handoff-eval-runbook.md +22 -0
  434. package/evals/runbooks/verify-work-eval-runbook.md +27 -0
  435. package/evals/scripts/audit-command-surface.sh +160 -0
  436. package/evals/scripts/check-activation-contract.sh +121 -0
  437. package/evals/scripts/check-runtime-context-hook.sh +183 -0
  438. package/evals/scripts/grade-fixture-eval.sh +446 -0
  439. package/evals/scripts/run-claude-fixture-eval.sh +26 -0
  440. package/evals/scripts/run-codex-fixture-eval.sh +26 -0
  441. package/evals/scripts/run-eryx-python-proof-spike.js +559 -0
  442. package/evals/scripts/run-fixture-eval-by-id.sh +23 -0
  443. package/evals/scripts/run-fixture-eval.sh +464 -0
  444. package/evals/scripts/run-jq-wasm-proof-spike.js +299 -0
  445. package/evals/scripts/run-output-router-transform-eval.js +115 -0
  446. package/evals/scripts/run-pi-observed-routing-eval.js +478 -0
  447. package/evals/scripts/run-quickjs-wasi-proof-spike.js +339 -0
  448. package/evals/scripts/skill-evidence.sh +316 -0
  449. package/evals/scripts/validate-release-metadata.sh +486 -0
  450. package/evals/suites/v0.1-acceptance-suite.md +131 -0
  451. package/{plugins/freeflow/hooks → hooks}/freeflow-runtime-context.mjs +46 -12
  452. package/package.json +39 -19
  453. package/pi-extension/dist/host-producer-identification.js +186 -0
  454. package/pi-extension/dist/index.js +85 -0
  455. package/pi-extension/dist/mcp-config.js +30 -0
  456. package/pi-extension/dist/native-safety-net.js +209 -0
  457. package/pi-extension/dist/observed-tool-routing.js +114 -0
  458. package/pi-extension/dist/renderers.js +835 -0
  459. package/pi-extension/dist/router-tools.js +438 -0
  460. package/pi-extension/dist/runtime-context.js +288 -0
  461. package/pi-extension/dist/schemas.js +254 -0
  462. package/pi-extension/dist/status.js +449 -0
  463. package/pi-extension/dist/utils.js +467 -0
  464. package/pi-extension/src/host-producer-identification.ts +226 -0
  465. package/pi-extension/src/index.ts +121 -0
  466. package/pi-extension/src/mcp-config.ts +32 -0
  467. package/pi-extension/src/native-safety-net.ts +252 -0
  468. package/pi-extension/src/observed-tool-routing.ts +126 -0
  469. package/pi-extension/src/renderers.ts +917 -0
  470. package/pi-extension/src/router-tools.ts +478 -0
  471. package/pi-extension/src/runtime-context.ts +347 -0
  472. package/pi-extension/src/schemas.ts +259 -0
  473. package/pi-extension/src/status.ts +505 -0
  474. package/pi-extension/src/utils.ts +492 -0
  475. package/pi-extension/tsconfig.json +16 -0
  476. package/{plugins/freeflow/docs → plugin-docs}/README.md +3 -3
  477. package/plugin-docs/adr/0002-evals-before-hooks.md +17 -0
  478. package/{plugins/freeflow/docs → plugin-docs}/adr/0003-release-boundary.md +2 -2
  479. package/plugin-docs/adr/0004-discover-replaces-shallow-discovery-skills.md +26 -0
  480. package/plugin-docs/adr/README.md +10 -0
  481. package/plugin-docs/architecture.md +89 -0
  482. package/plugin-docs/output-router.md +396 -0
  483. package/plugin-docs/release-evidence.md +77 -0
  484. package/{plugins/freeflow/docs → plugin-docs}/skills.md +3 -2
  485. package/{plugins/freeflow/docs → plugin-docs}/workflow.md +4 -4
  486. package/{plugins/freeflow/router/dist → router/dist/benchmarks}/benchmark-harness.js +1 -1
  487. package/{plugins/freeflow/router/dist → router/dist/benchmarks}/benchmarks.js +14 -14
  488. package/{plugins/freeflow/router/dist → router/dist/benchmarks}/codex-qa-benchmarks.js +6 -6
  489. package/{plugins/freeflow/router/dist → router/dist/benchmarks}/command-benchmarks.d.ts +1 -1
  490. package/{plugins/freeflow/router/dist → router/dist/benchmarks}/command-benchmarks.js +11 -10
  491. package/router/dist/benchmarks/context-mode-normalized-benchmarks.d.ts +74 -0
  492. package/router/dist/benchmarks/context-mode-normalized-benchmarks.js +707 -0
  493. package/router/dist/benchmarks/context-mode-real-deep-benchmark.d.ts +124 -0
  494. package/router/dist/benchmarks/context-mode-real-deep-benchmark.js +1295 -0
  495. package/router/dist/benchmarks/context-saving-baseline.d.ts +54 -0
  496. package/router/dist/benchmarks/context-saving-baseline.js +439 -0
  497. package/{plugins/freeflow/router/dist → router/dist/benchmarks}/index-benchmarks.d.ts +16 -2
  498. package/{plugins/freeflow/router/dist → router/dist/benchmarks}/index-benchmarks.js +330 -26
  499. package/router/dist/benchmarks/storage-policy-benchmarks.d.ts +90 -0
  500. package/router/dist/benchmarks/storage-policy-benchmarks.js +538 -0
  501. package/router/dist/benchmarks/vault-index-benchmarks.d.ts +47 -0
  502. package/router/dist/benchmarks/vault-index-benchmarks.js +257 -0
  503. package/router/dist/config/config.d.ts +96 -0
  504. package/router/dist/config/config.js +453 -0
  505. package/{plugins/freeflow/router/dist → router/dist/config}/schema.js +248 -2
  506. package/router/dist/config/types.d.ts +521 -0
  507. package/router/dist/config/types.js +30 -0
  508. package/{plugins/freeflow/router/dist → router/dist/evidence}/bounded-evidence.d.ts +1 -1
  509. package/{plugins/freeflow/router/dist → router/dist/evidence}/evidence-range-selector.js +65 -14
  510. package/{plugins/freeflow/router/dist → router/dist/evidence}/evidence-search.js +18 -2
  511. package/{plugins/freeflow/router/dist → router/dist/evidence}/evidence.d.ts +1 -1
  512. package/router/dist/evidence/failure-contracts.d.ts +27 -0
  513. package/router/dist/evidence/failure-contracts.js +160 -0
  514. package/router/dist/index.d.ts +30 -0
  515. package/router/dist/index.js +32 -0
  516. package/router/dist/processing/engine.d.ts +108 -0
  517. package/router/dist/processing/engine.js +435 -0
  518. package/router/dist/processing/reducers.d.ts +266 -0
  519. package/router/dist/processing/reducers.js +1495 -0
  520. package/router/dist/processing/renderers.d.ts +25 -0
  521. package/router/dist/processing/renderers.js +186 -0
  522. package/router/dist/processing/scripts.d.ts +78 -0
  523. package/router/dist/processing/scripts.js +333 -0
  524. package/router/dist/routing/observed-reducers.d.ts +35 -0
  525. package/router/dist/routing/observed-reducers.js +647 -0
  526. package/router/dist/routing/observed-routing.d.ts +17 -0
  527. package/router/dist/routing/observed-routing.js +377 -0
  528. package/{plugins/freeflow/router/dist → router/dist/routing}/parsers.d.ts +1 -1
  529. package/{plugins/freeflow/router/dist → router/dist/routing}/parsers.js +1 -1
  530. package/router/dist/routing/run-filters.d.ts +56 -0
  531. package/router/dist/routing/run-filters.js +230 -0
  532. package/router/dist/routing/run-reducers.d.ts +30 -0
  533. package/router/dist/routing/run-reducers.js +110 -0
  534. package/router/dist/sandbox/adapter-roots.d.ts +38 -0
  535. package/router/dist/sandbox/adapter-roots.js +64 -0
  536. package/router/dist/sandbox/eryx-python-adapter.d.ts +9 -0
  537. package/router/dist/sandbox/eryx-python-adapter.js +797 -0
  538. package/router/dist/sandbox/jq-wasm-adapter.d.ts +9 -0
  539. package/router/dist/sandbox/jq-wasm-adapter.js +421 -0
  540. package/router/dist/sandbox/quickjs-wasi-adapter.d.ts +9 -0
  541. package/router/dist/sandbox/quickjs-wasi-adapter.js +381 -0
  542. package/router/dist/sandbox/script-sandbox.d.ts +113 -0
  543. package/router/dist/sandbox/script-sandbox.js +303 -0
  544. package/router/dist/setup/script-transform-adapters.d.ts +28 -0
  545. package/router/dist/setup/script-transform-adapters.js +259 -0
  546. package/router/dist/tools/batch.d.ts +22 -0
  547. package/router/dist/tools/batch.js +509 -0
  548. package/router/dist/tools/run.d.ts +50 -0
  549. package/router/dist/tools/run.js +1219 -0
  550. package/router/dist/tools/search.d.ts +44 -0
  551. package/{plugins/freeflow/router/dist/retrieve.js → router/dist/tools/search.js} +395 -45
  552. package/router/dist/transform/engine.d.ts +143 -0
  553. package/router/dist/transform/engine.js +1955 -0
  554. package/router/dist/vault/vault-index.d.ts +106 -0
  555. package/router/dist/vault/vault-index.js +411 -0
  556. package/{plugins/freeflow/router/dist → router/dist/vault}/vault.d.ts +24 -1
  557. package/{plugins/freeflow/router/dist → router/dist/vault}/vault.js +152 -1
  558. package/skills/design-for-depth/SKILL.md +90 -0
  559. package/skills/design-for-depth/references/design-pressure-signals.md +265 -0
  560. package/skills/design-for-depth/references/software-design-philosophy.md +219 -0
  561. package/{plugins/freeflow/skills → skills}/diagnose-failure/SKILL.md +6 -1
  562. package/{plugins/freeflow/skills/research → skills/discover}/ARTIFACT-DESTINATIONS.md +4 -4
  563. package/{plugins/freeflow/skills/research → skills/discover}/CHECKPOINTS.md +4 -4
  564. package/skills/discover/SKILL.md +173 -0
  565. package/{plugins/freeflow/skills → skills}/execute-plan/SKILL.md +5 -4
  566. package/{plugins/freeflow/skills → skills}/execute-plan/references/execution-map.md +2 -2
  567. package/{plugins/freeflow/skills → skills}/mode-contract/SKILL.md +9 -4
  568. package/skills/output-router/SKILL.md +202 -0
  569. package/skills/output-router/references/safety-policy.md +40 -0
  570. package/{plugins/freeflow/skills → skills}/review-artifact/SKILL.md +5 -2
  571. package/{plugins/freeflow/skills → skills}/review-artifact/references/reviewer-prompt.md +2 -1
  572. package/{plugins/freeflow/skills → skills}/review-work/SKILL.md +6 -1
  573. package/{plugins/freeflow/skills → skills}/setup-freeflow/SKILL.md +21 -9
  574. package/{plugins/freeflow/skills → skills}/setup-freeflow/references/activation-contract.md +11 -10
  575. package/{plugins/freeflow/skills → skills}/setup-freeflow/references/host-setup.md +3 -3
  576. package/skills/setup-freeflow/references/output-router-setup.md +102 -0
  577. package/{plugins/freeflow/skills → skills}/verify-work/SKILL.md +3 -1
  578. package/{plugins/freeflow/skills → skills}/workflow/SKILL.md +16 -14
  579. package/{plugins/freeflow/skills → skills}/workflow/references/workflow-map.md +16 -14
  580. package/{plugins/freeflow/skills → skills}/write-plan/SKILL.md +9 -1
  581. package/{plugins/freeflow/skills → skills}/write-spec/SKILL.md +9 -6
  582. package/plugins/freeflow/docs/adr/0002-evals-before-hooks.md +0 -17
  583. package/plugins/freeflow/docs/adr/0004-research-replaces-shallow-discovery-skills.md +0 -26
  584. package/plugins/freeflow/docs/adr/README.md +0 -8
  585. package/plugins/freeflow/docs/architecture.md +0 -86
  586. package/plugins/freeflow/docs/output-router.md +0 -212
  587. package/plugins/freeflow/docs/release-evidence.md +0 -69
  588. package/plugins/freeflow/pi-extension/index.js +0 -1176
  589. package/plugins/freeflow/router/dist/config.d.ts +0 -22
  590. package/plugins/freeflow/router/dist/config.js +0 -114
  591. package/plugins/freeflow/router/dist/experimental-local-index.d.ts +0 -1
  592. package/plugins/freeflow/router/dist/experimental-local-index.js +0 -1
  593. package/plugins/freeflow/router/dist/index.d.ts +0 -12
  594. package/plugins/freeflow/router/dist/index.js +0 -12
  595. package/plugins/freeflow/router/dist/retrieve.d.ts +0 -33
  596. package/plugins/freeflow/router/dist/run.d.ts +0 -26
  597. package/plugins/freeflow/router/dist/run.js +0 -356
  598. package/plugins/freeflow/router/dist/types.d.ts +0 -234
  599. package/plugins/freeflow/router/dist/types.js +0 -9
  600. package/plugins/freeflow/skills/output-router/SKILL.md +0 -69
  601. package/plugins/freeflow/skills/output-router/references/safety-policy.md +0 -33
  602. package/plugins/freeflow/skills/research/LANGUAGE.md +0 -61
  603. package/plugins/freeflow/skills/research/SKILL.md +0 -128
  604. package/plugins/freeflow/skills/setup-freeflow/references/output-router-setup.md +0 -52
  605. /package/{plugins/freeflow/assets → assets}/freeflow-plugin-icon-transparent.png +0 -0
  606. /package/{plugins/freeflow/hooks → hooks}/hooks.json +0 -0
  607. /package/{plugins/freeflow/docs → plugin-docs}/adr/0001-three-modes.md +0 -0
  608. /package/{plugins/freeflow/router/dist → router/dist/benchmarks}/benchmark-harness.d.ts +0 -0
  609. /package/{plugins/freeflow/router/dist → router/dist/benchmarks}/benchmarks.d.ts +0 -0
  610. /package/{plugins/freeflow/router/dist → router/dist/benchmarks}/codex-qa-benchmarks.d.ts +0 -0
  611. /package/{plugins/freeflow/router/dist → router/dist/config}/router-contract.d.ts +0 -0
  612. /package/{plugins/freeflow/router/dist → router/dist/config}/router-contract.js +0 -0
  613. /package/{plugins/freeflow/router/dist → router/dist/config}/schema.d.ts +0 -0
  614. /package/{plugins/freeflow/router/dist → router/dist/evidence}/bounded-evidence.js +0 -0
  615. /package/{plugins/freeflow/router/dist → router/dist/evidence}/evidence-range-selector.d.ts +0 -0
  616. /package/{plugins/freeflow/router/dist → router/dist/evidence}/evidence-search.d.ts +0 -0
  617. /package/{plugins/freeflow/router/dist → router/dist/evidence}/evidence.js +0 -0
  618. /package/{plugins/freeflow/router/dist → router/dist/evidence}/line-ranges.d.ts +0 -0
  619. /package/{plugins/freeflow/router/dist → router/dist/evidence}/line-ranges.js +0 -0
  620. /package/{plugins/freeflow/router → router}/dist/experiments/local-index.d.ts +0 -0
  621. /package/{plugins/freeflow/router → router}/dist/experiments/local-index.js +0 -0
  622. /package/{plugins/freeflow/router/dist → router/dist/repo}/repo-traversal.d.ts +0 -0
  623. /package/{plugins/freeflow/router/dist → router/dist/repo}/repo-traversal.js +0 -0
  624. /package/{plugins/freeflow/skills → skills}/bypass/SKILL.md +0 -0
  625. /package/{plugins/freeflow/skills → skills}/commit-work/SKILL.md +0 -0
  626. /package/{plugins/freeflow/skills → skills}/commit-work/references/staging-decisions.md +0 -0
  627. /package/{plugins/freeflow/skills → skills}/diagnose-failure/references/feedback-loop-catalog.md +0 -0
  628. /package/{plugins/freeflow/skills → skills}/diagnose-failure/references/flaky-and-performance.md +0 -0
  629. /package/{plugins/freeflow/skills → skills}/evaluate-skill/SKILL.md +0 -0
  630. /package/{plugins/freeflow/skills → skills}/evaluate-skill/references/eval-patterns.md +0 -0
  631. /package/{plugins/freeflow/skills → skills}/evaluate-skill/references/grading-priority.md +0 -0
  632. /package/{plugins/freeflow/skills → skills}/handoff/SKILL.md +0 -0
  633. /package/{plugins/freeflow/skills → skills}/handoff/references/templates.md +0 -0
  634. /package/{plugins/freeflow/skills → skills}/interview-gate/SKILL.md +0 -0
  635. /package/{plugins/freeflow/skills → skills}/review-work/references/reviewer-prompt.md +0 -0
  636. /package/{plugins/freeflow/skills → skills}/write-plan/references/plan-shapes.md +0 -0
  637. /package/{plugins/freeflow/skills → skills}/write-skill/SKILL.md +0 -0
  638. /package/{plugins/freeflow/skills → skills}/write-spec/references/artifact-standards.md +0 -0
  639. /package/{plugins/freeflow/skills → skills}/write-spec/references/spec-shapes.md +0 -0
@@ -0,0 +1,159 @@
1
+ # QuickJS Script Derive Execution Report 1
2
+
3
+ > **Date:** 2026-06-24
4
+ > **Status:** Passed QuickJS-only execution smoke
5
+ > **Scope:** Partial Slice 17 execution engine. JavaScript can execute only through an explicitly registered/provided QuickJS adapter; script derive remains disabled by default.
6
+
7
+ ## What Changed
8
+
9
+ - Added dependency-free QuickJS adapter support in router core.
10
+ - Adapter loading is explicit. The Pi adapter discovers QuickJS only when `FREEFLOW_QUICKJS_WASI_ROOT` points to an installed `quickjs-wasi` package root.
11
+ - No `package.json` dependency was added.
12
+ - No runtime artifact is downloaded by Freeflow.
13
+ - Python remains unavailable.
14
+ - jq remains proof-backed but not product-enabled in this slice.
15
+
16
+ ## Execution Boundary
17
+
18
+ QuickJS exposes only these host APIs to guest JavaScript:
19
+
20
+ - `readText(alias)` — reads copied vault-source input by alias.
21
+ - `writeText(text)` — writes to captured stdout.
22
+ - `console.log(...)` — writes bounded stdout.
23
+ - `console.error(...)` — writes bounded stderr.
24
+
25
+ The adapter does not expose `process`, `require`, host filesystem APIs, `fetch`, package loading, repo paths, vault paths, or home paths.
26
+
27
+ ## Verification Evidence
28
+
29
+ ### Product-path smoke
30
+
31
+ A local smoke used the temp-installed package root:
32
+
33
+ ```text
34
+ /tmp/freeflow-sandbox-candidates-xVAJBl/node_modules/quickjs-wasi
35
+ ```
36
+
37
+ It executed `freeflowDerive` with:
38
+
39
+ - `scriptDerive.enabled=true`,
40
+ - `languages=["javascript"]`,
41
+ - `network="off"`,
42
+ - one vault source alias `log`,
43
+ - a JavaScript script that filtered source lines containing `ERROR`.
44
+
45
+ Result excerpt:
46
+
47
+ ```json
48
+ {
49
+ "toolStatus": "ok",
50
+ "outputId": "ffout_1b9511127021d96d579578b7",
51
+ "summary": "Script derive javascript completed with 10 stdout bytes and 0 stderr bytes.",
52
+ "operation": {
53
+ "kind": "script",
54
+ "language": "javascript",
55
+ "codeSha256": "sha256_c5834b4ad4d0974718d47258aa6bf8fc633d08c45433f65a936b15986076226b"
56
+ }
57
+ }
58
+ DERIVED="ERROR beta"
59
+ ```
60
+
61
+ Raw script text was not persisted in the routed result; the operation records only `codeSha256`.
62
+
63
+ ### Output cap regression smoke
64
+
65
+ A real QuickJS product-path smoke used a configured adapter proof cap of `4096` bytes and a per-call `limits.maxOutputBytes=10` with:
66
+
67
+ ```js
68
+ writeText('x'.repeat(100));
69
+ ```
70
+
71
+ Result excerpt:
72
+
73
+ ```json
74
+ {
75
+ "toolStatus": "ok",
76
+ "failure": {
77
+ "kind": "derive_execution_failure",
78
+ "message": "Script derive javascript failed. QuickJS execution exceeded maxOutputBytes. stdoutBytes=10 stderrBytes=0."
79
+ },
80
+ "deriveExecution": {
81
+ "status": "failed",
82
+ "failureKind": "derive_execution_failure"
83
+ },
84
+ "persistence": {
85
+ "status": "not_persisted",
86
+ "recoverability": "none"
87
+ }
88
+ }
89
+ ```
90
+
91
+ This confirms truncated output is not persisted as a successful exact result.
92
+
93
+ ### Pi status smoke
94
+
95
+ With `FREEFLOW_QUICKJS_WASI_ROOT=/tmp/freeflow-sandbox-candidates-xVAJBl/node_modules/quickjs-wasi`, `buildFreeflowStatusReport` reports:
96
+
97
+ ```json
98
+ {
99
+ "enabled": false,
100
+ "adapterAvailable": true,
101
+ "adapterStatus": "available",
102
+ "availableLanguages": ["javascript"],
103
+ "registeredAdapters": [{ "id": "quickjs-wasi", "version": "3.0.1", "languages": ["javascript"] }],
104
+ "executionStatus": "disabled"
105
+ }
106
+ ```
107
+
108
+ This proves explicit adapter discovery does not enable script execution while `scriptDerive.enabled` remains false.
109
+
110
+ ### Targeted tests
111
+
112
+ ```text
113
+ npm run build:router && node --test router/tests/derive.test.js router/tests/script-sandbox.test.js
114
+ ```
115
+
116
+ Result:
117
+
118
+ ```text
119
+ 29 targeted tests passed
120
+ ```
121
+
122
+ Coverage added:
123
+
124
+ - script derive remains disabled by default,
125
+ - source resolution still returns adapter unavailable without a registered adapter,
126
+ - a proof-backed registered adapter can execute and persist exact derived stdout,
127
+ - adapter timeout/failure returns structured `derive_execution_failure`,
128
+ - output-limit failures return structured `derive_execution_failure` without exact recovery,
129
+ - proof fixture coverage remains complete,
130
+ - invalid `FREEFLOW_QUICKJS_WASI_ROOT` fails closed as adapter unavailable.
131
+
132
+ ### Full router suite
133
+
134
+ ```text
135
+ npm run test:router
136
+ ```
137
+
138
+ Result:
139
+
140
+ ```text
141
+ 273 tests passed
142
+ ```
143
+
144
+ ## Current Availability
145
+
146
+ | Language | Status |
147
+ | --- | --- |
148
+ | JavaScript | Product execution path implemented for explicitly registered/provided QuickJS adapter roots; disabled by default. |
149
+ | Python | Unavailable. Eryx candidate blocked before proofs. |
150
+ | jq | Proof-backed candidate only; not product-enabled in this slice. |
151
+
152
+ ## Remaining Gates
153
+
154
+ Before public docs can present script derive as generally available:
155
+
156
+ 1. Add durable setup/config UX for optional adapter installation if desired.
157
+ 2. Run full router suite and focused review for this implementation slice.
158
+ 3. Decide whether to product-enable jq after separate security review of the Worker-boundary large-output caveat.
159
+ 4. Find or fix a Python WASM candidate.
@@ -0,0 +1,55 @@
1
+ # QuickJS WASI Sandbox Proof Spike Report
2
+
3
+ > **Date:** 2026-06-24
4
+ > **Status:** Passed proof spike for JavaScript candidate
5
+ > **Scope:** Proof-only evaluation. No Freeflow script execution path is enabled.
6
+
7
+ ## Candidate
8
+
9
+ - Package: `quickjs-wasi@3.0.1`
10
+ - License: MIT
11
+ - Package root: `/tmp/freeflow-sandbox-candidates-xVAJBl/node_modules/quickjs-wasi`
12
+ - WASM bytes: 1587119
13
+ - WASM SHA-256: `66629761271fe05c63622c15c7169e2d386985db43cb3917fca4bd43caffdc84`
14
+ - Timeout: 250ms
15
+ - Memory limit: 8388608 bytes
16
+ - Output cap: 4096 bytes
17
+
18
+ ## Positive API Probe
19
+
20
+ - Status: success
21
+ - Output: `INFO setup\nERROR target\n`
22
+ - Error: none
23
+
24
+ ## Required Proof Results
25
+
26
+ | Proof | Result | Evidence |
27
+ | --- | --- | --- |
28
+ | env_access_denied | pass | ambient environment was not exposed; status=success; durationMs=2; outputBytes=0; stdoutBytes=0; stderrBytes=0; truncated=false |
29
+ | home_access_denied | pass | home/secret paths were not exposed; status=success; durationMs=1; outputBytes=14; stdoutBytes=14; stderrBytes=0; truncated=false |
30
+ | repo_access_denied | pass | repo files were not exposed; status=success; durationMs=3; outputBytes=14; stdoutBytes=14; stderrBytes=0; truncated=false |
31
+ | vault_access_denied | pass | vault records were not exposed; status=success; durationMs=2; outputBytes=14; stdoutBytes=14; stderrBytes=0; truncated=false |
32
+ | network_access_denied | pass | network/fetch capability was absent; status=success; durationMs=2; outputBytes=17; stdoutBytes=17; stderrBytes=0; truncated=false |
33
+ | input_read_only | pass | input mutation was not possible through host filesystem APIs; status=success; durationMs=1; outputBytes=14; stdoutBytes=14; stderrBytes=0; truncated=false |
34
+ | output_escape_denied | pass | output symlink/file escape was not possible through host filesystem APIs; status=success; durationMs=2; outputBytes=14; stdoutBytes=14; stderrBytes=0; truncated=false |
35
+ | stdout_stderr_bounded | pass | stdout and stderr flood capture was truncated within the cap; status=timed_out; durationMs=253; outputBytes=4096; stdoutBytes=2076; stderrBytes=2020; truncated=true; error=interrupted |
36
+ | timeout_enforced | pass | infinite loop was interrupted by runtime timeout; status=timed_out; durationMs=251; outputBytes=0; stdoutBytes=0; stderrBytes=0; truncated=false; error=interrupted |
37
+
38
+ ## Notes
39
+
40
+ - This proof runner uses a temporary installed `quickjs-wasi` package root passed explicitly by the caller.
41
+ - It does not add repo dependencies and does not wire the adapter into `freeflow_derive` execution.
42
+ - Passing this spike only supports JavaScript adapter feasibility; Python and jq remain unavailable until their own proof slices pass.
43
+ - Before product execution, this must still go through implementation/security review and source-plan update.
44
+
45
+ ## Required Proof Set
46
+
47
+ - env_access_denied
48
+ - home_access_denied
49
+ - repo_access_denied
50
+ - vault_access_denied
51
+ - network_access_denied
52
+ - input_read_only
53
+ - output_escape_denied
54
+ - stdout_stderr_bounded
55
+ - timeout_enforced
@@ -0,0 +1,58 @@
1
+ # Render Format Row Protocol Benchmark 1
2
+
3
+ Date: 2026-06-27
4
+
5
+ Purpose: decide whether Pi model-visible Freeflow output should move from compact prose to a deterministic row protocol before continuing later runtime slices.
6
+
7
+ Committed regression benchmark: `router/tests/benchmarks/render-format-benchmark.test.js` gates bytes, visible fact preservation, per-sample validity, row shape, and visible recovery rows for future renderer changes.
8
+
9
+ Scope:
10
+
11
+ - `freeflow_run`
12
+ - `freeflow_retrieve`
13
+ - `freeflow_derive`
14
+ - `freeflow_batch`
15
+
16
+ Gate:
17
+
18
+ - Use bytes, not tokenizer-specific counts.
19
+ - A candidate renderer is valid only when every sample preserves at least the current visible fact coverage.
20
+ - `details.result` JSON remains unchanged.
21
+ - TUI rendering remains human-readable.
22
+
23
+ Best valid candidate selected: `line:shortHeader`.
24
+
25
+ | renderer | bytes | visible facts | valid samples | byte change |
26
+ | --- | ---: | ---: | ---: | ---: |
27
+ | current compact prose | 14,049 | 41/50 | 14/14 | baseline |
28
+ | line:noRecovery | 8,331 | 41/50 | 14/14 | 40.70% saved |
29
+ | line:shortHeader | 10,600 | 41/50 | 14/14 | 24.55% saved |
30
+ | jsonMin | 67,456 | 50/50 | 14/14 | 380.15% larger |
31
+
32
+ Decision:
33
+
34
+ Use a readable row protocol with short recovery rows, not `noRecovery`, because Freeflow should keep recovery visible while reducing model-visible bytes.
35
+
36
+ Selected row shape examples:
37
+
38
+ ```text
39
+ freeflow_run|success|exit=0|route=routed|parser=test-output|raw=ffout_...
40
+ s|test-output summary...
41
+ p|stdout:1-4
42
+ >|tests: 4 failed, 108 passed, (112)
43
+ rec|vault|ffout_...|stdout|1-4
44
+ details|details.result
45
+ ```
46
+
47
+ ```text
48
+ freeflow_batch|routed|steps=3|ok=3|failed=0|c=3
49
+ q|answered|failed test files and counts|...
50
+ step|1|tests|run|ok|...
51
+ details|details.result steps+queries
52
+ ```
53
+
54
+ Notes:
55
+
56
+ - TSV was also viable, but line protocol was chosen for readability and easier visual inspection.
57
+ - Minified JSON preserves the most facts but is much larger, confirming JSON is unsuitable for model-visible output.
58
+ - The `line:noRecovery` variant saved more bytes, but was rejected because recovery visibility is part of Freeflow's product value.
@@ -0,0 +1,84 @@
1
+ # Script Sandbox Adapter Selection Review 1
2
+
3
+ > **Date:** 2026-06-24
4
+ > **Status:** Conditional pass for adapter-family selection; execution remains blocked
5
+ > **Scope:** Artifact/security gate after JavaScript, Python, and jq sandbox proof spikes. No Freeflow script execution path is enabled.
6
+
7
+ ## Decision Summary
8
+
9
+ Select the optional pinned **WASM/WASI adapter family** as the current script-sandbox direction.
10
+
11
+ Proof-backed partial candidates:
12
+
13
+ | Language | Candidate | Gate result | Current availability decision |
14
+ | --- | --- | --- | --- |
15
+ | JavaScript | `quickjs-wasi@3.0.1` | Required proof fixtures passed 9/9. | Candidate can proceed to adapter implementation planning after owner approval for optional package addition. |
16
+ | jq | `jq-wasm@1.2.0-jq-1.8.2` | Required proof fixtures passed 9/9 using Worker termination and bounded Worker-to-host output. | Candidate can proceed to adapter implementation planning after owner approval for optional package addition and security review of the in-Worker large-output caveat. |
17
+ | Python | `@bsull/eryx@0.5.0` | Blocked before Python execution by package/transitive compatibility. Proofs not run. | Unavailable. Do not add dependency until a compatible Eryx set or alternate Python WASM candidate passes proofs. |
18
+
19
+ This is not approval to wire execution into `freeflow_derive`. Slice 17 remains blocked until the owner explicitly approves the runtime package additions and the implementation/security review accepts the adapter boundaries.
20
+
21
+ ## Source Evidence
22
+
23
+ - JavaScript proof report: `evals/reports/runtime/quickjs-wasi-proof-spike-1-report.md`
24
+ - `quickjs-wasi@3.0.1`
25
+ - proofs passed 9/9
26
+ - no repo dependency added
27
+ - no script execution path enabled
28
+ - Python proof report: `evals/reports/runtime/eryx-python-proof-spike-1-report.md`
29
+ - `@bsull/eryx@0.5.0`
30
+ - failed before Python execution because `@bytecodealliance/preview2-shim/filesystem` did not export `_setFileData`
31
+ - proofs not run
32
+ - jq proof report: `evals/reports/runtime/jq-wasm-proof-spike-1-report.md`
33
+ - `jq-wasm@1.2.0-jq-1.8.2`
34
+ - proofs passed 9/9
35
+ - timeout proof uses Worker termination
36
+ - output proof caps stdout/stderr before Worker result crosses to host
37
+ - residual caveat: jq can generate large in-Worker strings before wrapper truncation
38
+
39
+ ## Security Review Notes
40
+
41
+ ### Accepted Direction
42
+
43
+ - Keep the public surface as `freeflow_derive operation.kind="script"` only.
44
+ - Keep script derive disabled by default.
45
+ - Keep no unsandboxed fallback.
46
+ - Keep runtime packages optional and pinned; Freeflow core should not add heavyweight runtime dependencies silently.
47
+ - Keep JavaScript, Python, and jq as the target language set. JavaScript and jq can become partial availability states, not a narrowed product direction.
48
+
49
+ ### Required Before Execution Implementation
50
+
51
+ Before Slice 17 can enable any real adapter execution, the owner must decide:
52
+
53
+ 1. Whether to add optional pinned adapter package support for `quickjs-wasi`.
54
+ 2. Whether to add optional pinned adapter package support for `jq-wasm`.
55
+ 3. Whether `jq-wasm`'s Worker boundary is acceptable even though jq can allocate large strings inside the Worker before wrapper truncation.
56
+ 4. Whether Slice 17 should implement JavaScript first, jq first, or JavaScript and jq in one execution slice.
57
+
58
+ ### Must Remain Blocked
59
+
60
+ - Python script derive remains unavailable.
61
+ - `@bsull/eryx` must not be added as a dependency yet.
62
+ - No script code may execute through Freeflow until an approved adapter implementation passes the proof-backed availability checks inside product code.
63
+ - No runtime artifacts may be downloaded during script execution.
64
+ - Raw script text must not be persisted.
65
+
66
+ ## Recommended Slice 17 Entry
67
+
68
+ If the owner approves dependency/security decisions, execute Slice 17 as a narrow partial-availability implementation:
69
+
70
+ 1. Add optional adapter discovery for approved package roots or installed optional dependencies.
71
+ 2. Register only proof-backed languages.
72
+ 3. Keep unsupported languages returning structured unavailable.
73
+ 4. Preserve current disabled-by-default behavior.
74
+ 5. Implement one adapter at a time unless the owner explicitly approves bundling JavaScript and jq.
75
+ 6. Re-run adversarial proofs against the actual product adapter, not only the proof runner.
76
+ 7. Keep exact recovery false for truncated script output.
77
+
78
+ ## Current Gate State
79
+
80
+ - Adapter family selected: WASM/WASI with optional pinned adapters.
81
+ - JavaScript: proof-backed candidate, not product-enabled.
82
+ - jq: proof-backed candidate with security caveat, not product-enabled.
83
+ - Python: unavailable.
84
+ - Slice 17: still blocked pending explicit owner dependency/security approval.
@@ -0,0 +1,51 @@
1
+ # Script Sandbox Probe Resource Hardening Report 1
2
+
3
+ > **Date:** 2026-06-24
4
+ > **Status:** Passed targeted verification
5
+ > **Scope:** Follow-up hardening after QuickJS and jq script-derive execution slices.
6
+
7
+ ## Trigger
8
+
9
+ During implementation and proof smokes, repeated full router suites plus sandbox proof runs caused high local CPU load. The jq adapter caveat also exposed a related risk: output is capped before crossing the Worker boundary, but jq can still allocate inside the Worker before wrapper truncation.
10
+
11
+ ## Root Cause / Risk
12
+
13
+ Two resource costs were unnecessarily high:
14
+
15
+ 1. The shared `stdout_stderr_bounded` proof fixtures used runaway loop counts (`1000000` for JavaScript/Python and `100000` for jq). The adapters stop or truncate, but the fixture text encouraged far more output generation than needed to prove cap enforcement.
16
+ 2. Adapter proof probes could rerun repeatedly in the same Pi process. `freeflow_status` and script adapter selection both need proof-backed availability, but repeating adversarial proofs for the same adapter binary/hash and probe limits wastes CPU.
17
+
18
+ ## Changes
19
+
20
+ - Reduced `stdout_stderr_bounded` proof fixture loops to `1000` iterations for JavaScript, Python, and jq.
21
+ - This still exceeds normal proof output caps.
22
+ - It avoids multi-megabyte raw jq stdout/stderr generation during proof runs.
23
+ - Lowered jq probe timeout from `500ms` to `250ms`.
24
+ - Product execution still uses configured/per-call script limits.
25
+ - The proof only needs to show the adapter can terminate runaway jq execution.
26
+ - Added per-process proof-result caches:
27
+ - QuickJS cache key: package version, WASM hash, probe timeout, probe output cap, network mode.
28
+ - jq cache key: package version, entrypoint hash, probe timeout, probe output cap, network mode.
29
+ - Added a regression test that rejects future `stdout_stderr_bounded` fixtures containing five-or-more-digit loop counts.
30
+ - Fixed a flaky Pi status test that assumed the default user vault index was empty. The default vault is user-global, so tests now assert the index shape rather than `entryCount === 0`.
31
+
32
+ ## Preserved Safety Properties
33
+
34
+ - Script derive remains disabled by default.
35
+ - No unsandboxed fallback was added.
36
+ - Adapter availability still requires every required proof to pass.
37
+ - Caches are keyed by adapter content hash and probe limits, not just package root strings.
38
+ - Output-limit failures remain structured failures with no exact recovery.
39
+ - Python remains unavailable.
40
+
41
+ ## Verification
42
+
43
+ Targeted check passed:
44
+
45
+ ```text
46
+ npm run build && node --test router/tests/script-sandbox.test.js router/tests/derive.test.js router/tests/pi-extension.test.js
47
+ ```
48
+
49
+ Result: 62/62 targeted tests passed.
50
+
51
+ Additional note: the earlier temporary optional adapter package roots under `/tmp/freeflow-sandbox-candidates-xVAJBl` had been cleaned up before this follow-up, so this report does not claim a fresh real QuickJS/jq package-root smoke after hardening. The product execution smokes from the immediately preceding QuickJS and jq reports remain the adapter proof/execution evidence; this slice reduces repeat probe cost and guards against runaway fixture sizes.
@@ -0,0 +1,176 @@
1
+ # Storage Policy Benchmark Report - Iteration 1
2
+
3
+ Date: 2026-06-28
4
+
5
+ ## Scope
6
+
7
+ Benchmark-only experiment for Freeflow vault storage policies. This report does not change runtime defaults or repo config. It compares exact storage, threshold storage, hybrid metadata/exact storage, and duplicate-output dedupe using deterministic command-output fixtures.
8
+
9
+ ## Summary
10
+
11
+ - Fixtures: 9
12
+ - Policies: 5
13
+ - Safe candidates for further evaluation: store-everything, metadata-small-exact-large-hybrid, duplicate-output-dedupe, hybrid-dedupe
14
+ - Disqualified by exact-recovery safety: threshold-exact
15
+ - Runtime default changed: no
16
+
17
+ ## Policy Results
18
+
19
+ | Policy | Exact-sensitive recovery | Storage bytes | Index bytes | Exact stored bytes | Storage reduction | Token-surface reduction | Privacy surface | Metadata-only | Duplicate metadata | Latency p50/p95 | Notes |
20
+ | --- | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | ---: | --- |
21
+ | Store everything exactly | 8/8 | 490785 | 185735 | 121022 | 0.00% | 0.00% | 100.00% | 0 | 0 | 1.58/2.76 | |
22
+ | Threshold exact storage | 0/8 | 466984 | 185391 | 120120 | 0.75% | 0.75% | 99.25% | 14 | 0 | 1.21/1.78 | disqualified: exactness-sensitive failure/verification output would lose exact recovery threshold-only policy is unsafe without an exactness-sensitive override |
23
+ | Metadata-small / exact-large hybrid | 8/8 | 483256 | 186749 | 120884 | 0.11% | 0.12% | 99.89% | 6 | 0 | 1.32/1.74 | hybrid preserved exact recovery for sensitive fixtures while reducing exact raw storage |
24
+ | Duplicate output dedupe | 8/8 | 172791 | 66691 | 30335 | 74.93% | 74.93% | 25.07% | 12 | 12 | 1.04/1.43 | duplicates kept metadata pointers to prior exact output |
25
+ | Hybrid exactness + duplicate dedupe | 8/8 | 168371 | 66134 | 30299 | 74.96% | 74.96% | 25.04% | 14 | 8 | 1.02/1.35 | hybrid+dedupe preserved exact-sensitive recovery while metadata-only small output and duplicate pointers reduced exact raw storage |
26
+
27
+ ## Candidate Notes
28
+
29
+ ### Store everything exactly
30
+
31
+ Current baseline: every command output is vaulted exactly, so recovery is maximally useful and storage/privacy surface is largest.
32
+
33
+ - Exactness-sensitive recovery: pass
34
+ - Metadata-only recovery labeled: yes
35
+ - Repeated outputs deduped: no
36
+
37
+ | Fixture | Iteration | Record | Recovery | Exact bytes | Notes |
38
+ | --- | ---: | --- | --- | ---: | --- |
39
+ | small-success | 1 | command/exact | exact | 3 | exact combined recovery passed |
40
+ | small-failure | 1 | command/exact | exact | 104 | exact combined recovery passed |
41
+ | verification-output | 1 | command/exact | exact | 52 | exact combined recovery passed |
42
+ | large-log | 1 | command/exact | exact | 30030 | exact combined recovery passed |
43
+ | large-log-repeat | 1 | command/exact | exact | 30030 | exact combined recovery passed |
44
+ | repeated-failure-a | 1 | command/exact | exact | 113 | exact combined recovery passed |
45
+ | repeated-failure-b | 1 | command/exact | exact | 113 | exact combined recovery passed |
46
+ | repeat-a | 1 | command/exact | exact | 33 | exact combined recovery passed |
47
+ | repeat-b | 1 | command/exact | exact | 33 | exact combined recovery passed |
48
+ | small-success | 2 | command/exact | exact | 3 | exact combined recovery passed |
49
+ | small-failure | 2 | command/exact | exact | 104 | exact combined recovery passed |
50
+ | verification-output | 2 | command/exact | exact | 52 | exact combined recovery passed |
51
+ | large-log | 2 | command/exact | exact | 30030 | exact combined recovery passed |
52
+ | large-log-repeat | 2 | command/exact | exact | 30030 | exact combined recovery passed |
53
+ | repeated-failure-a | 2 | command/exact | exact | 113 | exact combined recovery passed |
54
+ | repeated-failure-b | 2 | command/exact | exact | 113 | exact combined recovery passed |
55
+ | repeat-a | 2 | command/exact | exact | 33 | exact combined recovery passed |
56
+ | repeat-b | 2 | command/exact | exact | 33 | exact combined recovery passed |
57
+
58
+ ### Threshold exact storage
59
+
60
+ Exact storage only when combined output is at least 8192 bytes; smaller outputs are metadata-only. This intentionally tests whether a threshold alone would drop exact failure/verification recovery.
61
+
62
+ - Exactness-sensitive recovery: fail
63
+ - Metadata-only recovery labeled: yes
64
+ - Repeated outputs deduped: no
65
+
66
+ | Fixture | Iteration | Record | Recovery | Exact bytes | Notes |
67
+ | --- | ---: | --- | --- | ---: | --- |
68
+ | small-success | 1 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
69
+ | small-failure | 1 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
70
+ | verification-output | 1 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
71
+ | large-log | 1 | command/exact | exact | 30030 | exact combined recovery passed |
72
+ | large-log-repeat | 1 | command/exact | exact | 30030 | exact combined recovery passed |
73
+ | repeated-failure-a | 1 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
74
+ | repeated-failure-b | 1 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
75
+ | repeat-a | 1 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
76
+ | repeat-b | 1 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
77
+ | small-success | 2 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
78
+ | small-failure | 2 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
79
+ | verification-output | 2 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
80
+ | large-log | 2 | command/exact | exact | 30030 | exact combined recovery passed |
81
+ | large-log-repeat | 2 | command/exact | exact | 30030 | exact combined recovery passed |
82
+ | repeated-failure-a | 2 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
83
+ | repeated-failure-b | 2 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
84
+ | repeat-a | 2 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
85
+ | repeat-b | 2 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
86
+
87
+ ### Metadata-small / exact-large hybrid
88
+
89
+ Small non-sensitive outputs become metadata-only; exactness-sensitive or >= 8192 byte outputs remain exactly recoverable.
90
+
91
+ - Exactness-sensitive recovery: pass
92
+ - Metadata-only recovery labeled: yes
93
+ - Repeated outputs deduped: no
94
+
95
+ | Fixture | Iteration | Record | Recovery | Exact bytes | Notes |
96
+ | --- | ---: | --- | --- | ---: | --- |
97
+ | small-success | 1 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
98
+ | small-failure | 1 | command/exact | exact | 104 | exact combined recovery passed |
99
+ | verification-output | 1 | command/exact | exact | 52 | exact combined recovery passed |
100
+ | large-log | 1 | command/exact | exact | 30030 | exact combined recovery passed |
101
+ | large-log-repeat | 1 | command/exact | exact | 30030 | exact combined recovery passed |
102
+ | repeated-failure-a | 1 | command/exact | exact | 113 | exact combined recovery passed |
103
+ | repeated-failure-b | 1 | command/exact | exact | 113 | exact combined recovery passed |
104
+ | repeat-a | 1 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
105
+ | repeat-b | 1 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
106
+ | small-success | 2 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
107
+ | small-failure | 2 | command/exact | exact | 104 | exact combined recovery passed |
108
+ | verification-output | 2 | command/exact | exact | 52 | exact combined recovery passed |
109
+ | large-log | 2 | command/exact | exact | 30030 | exact combined recovery passed |
110
+ | large-log-repeat | 2 | command/exact | exact | 30030 | exact combined recovery passed |
111
+ | repeated-failure-a | 2 | command/exact | exact | 113 | exact combined recovery passed |
112
+ | repeated-failure-b | 2 | command/exact | exact | 113 | exact combined recovery passed |
113
+ | repeat-a | 2 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
114
+ | repeat-b | 2 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
115
+
116
+ ### Duplicate output dedupe
117
+
118
+ First occurrence is stored exactly; exact duplicates become metadata-only records that point at the prior exact output.
119
+
120
+ - Exactness-sensitive recovery: pass
121
+ - Metadata-only recovery labeled: yes
122
+ - Repeated outputs deduped: yes
123
+
124
+ | Fixture | Iteration | Record | Recovery | Exact bytes | Notes |
125
+ | --- | ---: | --- | --- | ---: | --- |
126
+ | small-success | 1 | command/exact | exact | 3 | exact combined recovery passed |
127
+ | small-failure | 1 | command/exact | exact | 104 | exact combined recovery passed |
128
+ | verification-output | 1 | command/exact | exact | 52 | exact combined recovery passed |
129
+ | large-log | 1 | command/exact | exact | 30030 | exact combined recovery passed |
130
+ | large-log-repeat | 1 | metadata/metadata_only | duplicate-ref | 0 | metadata duplicate points to exact outputId=ffout_a7c4a56fb1bc488dc03fa0ef |
131
+ | repeated-failure-a | 1 | command/exact | exact | 113 | exact combined recovery passed |
132
+ | repeated-failure-b | 1 | metadata/metadata_only | duplicate-ref | 0 | metadata duplicate points to exact outputId=ffout_8e9758900243b59ade59cc2b |
133
+ | repeat-a | 1 | command/exact | exact | 33 | exact combined recovery passed |
134
+ | repeat-b | 1 | metadata/metadata_only | duplicate-ref | 0 | metadata duplicate points to exact outputId=ffout_a29dfa4bd5a569d730e6cee3 |
135
+ | small-success | 2 | metadata/metadata_only | duplicate-ref | 0 | metadata duplicate points to exact outputId=ffout_4e210a9b34da56ca40514bd6 |
136
+ | small-failure | 2 | metadata/metadata_only | duplicate-ref | 0 | metadata duplicate points to exact outputId=ffout_a4991d68dddc508bd8043e65 |
137
+ | verification-output | 2 | metadata/metadata_only | duplicate-ref | 0 | metadata duplicate points to exact outputId=ffout_57eddf9b12365d59cb7ba3ce |
138
+ | large-log | 2 | metadata/metadata_only | duplicate-ref | 0 | metadata duplicate points to exact outputId=ffout_a7c4a56fb1bc488dc03fa0ef |
139
+ | large-log-repeat | 2 | metadata/metadata_only | duplicate-ref | 0 | metadata duplicate points to exact outputId=ffout_a7c4a56fb1bc488dc03fa0ef |
140
+ | repeated-failure-a | 2 | metadata/metadata_only | duplicate-ref | 0 | metadata duplicate points to exact outputId=ffout_8e9758900243b59ade59cc2b |
141
+ | repeated-failure-b | 2 | metadata/metadata_only | duplicate-ref | 0 | metadata duplicate points to exact outputId=ffout_8e9758900243b59ade59cc2b |
142
+ | repeat-a | 2 | metadata/metadata_only | duplicate-ref | 0 | metadata duplicate points to exact outputId=ffout_a29dfa4bd5a569d730e6cee3 |
143
+ | repeat-b | 2 | metadata/metadata_only | duplicate-ref | 0 | metadata duplicate points to exact outputId=ffout_a29dfa4bd5a569d730e6cee3 |
144
+
145
+ ### Hybrid exactness + duplicate dedupe
146
+
147
+ Exactness-sensitive or >= 8192 byte outputs stay exactly recoverable; exact duplicates of those outputs become metadata pointers; small non-sensitive outputs are metadata-only.
148
+
149
+ - Exactness-sensitive recovery: pass
150
+ - Metadata-only recovery labeled: yes
151
+ - Repeated outputs deduped: yes
152
+
153
+ | Fixture | Iteration | Record | Recovery | Exact bytes | Notes |
154
+ | --- | ---: | --- | --- | ---: | --- |
155
+ | small-success | 1 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
156
+ | small-failure | 1 | command/exact | exact | 104 | exact combined recovery passed |
157
+ | verification-output | 1 | command/exact | exact | 52 | exact combined recovery passed |
158
+ | large-log | 1 | command/exact | exact | 30030 | exact combined recovery passed |
159
+ | large-log-repeat | 1 | metadata/metadata_only | duplicate-ref | 0 | metadata duplicate points to exact outputId=ffout_5153e748859b1faf49211433 |
160
+ | repeated-failure-a | 1 | command/exact | exact | 113 | exact combined recovery passed |
161
+ | repeated-failure-b | 1 | metadata/metadata_only | duplicate-ref | 0 | metadata duplicate points to exact outputId=ffout_78ba156d8ff23576c596ff12 |
162
+ | repeat-a | 1 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
163
+ | repeat-b | 1 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
164
+ | small-success | 2 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
165
+ | small-failure | 2 | metadata/metadata_only | duplicate-ref | 0 | metadata duplicate points to exact outputId=ffout_97633d780c13e9c3385a6196 |
166
+ | verification-output | 2 | metadata/metadata_only | duplicate-ref | 0 | metadata duplicate points to exact outputId=ffout_1e58e267e9ad6f288c56c3d7 |
167
+ | large-log | 2 | metadata/metadata_only | duplicate-ref | 0 | metadata duplicate points to exact outputId=ffout_5153e748859b1faf49211433 |
168
+ | large-log-repeat | 2 | metadata/metadata_only | duplicate-ref | 0 | metadata duplicate points to exact outputId=ffout_5153e748859b1faf49211433 |
169
+ | repeated-failure-a | 2 | metadata/metadata_only | duplicate-ref | 0 | metadata duplicate points to exact outputId=ffout_78ba156d8ff23576c596ff12 |
170
+ | repeated-failure-b | 2 | metadata/metadata_only | duplicate-ref | 0 | metadata duplicate points to exact outputId=ffout_78ba156d8ff23576c596ff12 |
171
+ | repeat-a | 2 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
172
+ | repeat-b | 2 | metadata/metadata_only | metadata-only | 0 | metadata-only record intentionally has no raw exact recovery |
173
+
174
+ ## Decision Boundary
175
+
176
+ This benchmark intentionally stops before changing defaults. Any storage default change still needs a product/safety decision because metadata-only storage changes exact recovery semantics and privacy surface.
@@ -0,0 +1,39 @@
1
+ # Vault Index Storage Spike Report - Iteration 1
2
+
3
+ Date: 2026-06-24
4
+
5
+ ## Scope
6
+
7
+ Slice 11/12 storage-interface and write-path spike for the Freeflow vault index. The benchmark checks that a fresh index starts empty, persisted appends become queryable incrementally through automatic write-through indexing, metadata-only records do not index raw content, and the selected storage engine stays hidden behind the vault-index interface.
8
+
9
+ ## Command
10
+
11
+ ```sh
12
+ npm run bench:router:vault-index
13
+ ```
14
+
15
+ ## Summary
16
+
17
+ - Fixtures per iteration: 3
18
+ - Iterations: 3
19
+ - Selected engine: local-json-sidecar
20
+ - Selected reason: Portable deterministic sidecar files satisfy automatic incremental write-through semantics without adding a native dependency.
21
+ - Local sidecar passed: yes
22
+ - Scanner baseline passed: yes
23
+ - SQLite FTS status: not-run
24
+ - Local append p50/p95: 1.34/3.31 ms
25
+ - Local query p50/p95: 0.34/5.16 ms
26
+ - Scan query p50/p95: 0.20/0.38 ms
27
+ - Local query result reduction: -8.32%
28
+
29
+ ## Candidates
30
+
31
+ | candidate | status | adopted | append p50/p95 ms | query p50/p95 ms | raw/result bytes | reduction | checks | notes |
32
+ | --- | --- | --- | ---: | ---: | ---: | ---: | --- | --- |
33
+ | local-json-sidecar | pass | yes | 1.34/3.31 | 0.34/5.16 | 15681/16986 | -8.32% | fresh index starts empty; each persisted append is queryable immediately; metadata-only raw content is not indexed; no native dependency | Selected for the Slice 11 interface and exercised through the Slice 12 write path because it is portable and dependency-free. |
34
+ | vault-session-scan-baseline | pass | no | - | 0.20/0.38 | - | - | finds fixture evidence by reading vault records directly | Baseline remains source-truth fallback but query cost grows with vaulted text. |
35
+ | sqlite-fts | not-run | no | - | - | - | - | not introduced during Slice 11 | Deferred: adding a native dependency or relying on experimental runtime SQLite needs explicit owner approval. |
36
+
37
+ ## Decision
38
+
39
+ Use the deterministic local JSON sidecar behind the vault-index interface for the next slices. Do not adopt SQLite/FTS in this slice because introducing a native dependency or relying on experimental runtime SQLite needs separate owner approval. The vault remains source truth; the index is a rebuildable sidecar.