@hassangameryt/freeflow 0.2.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 (312) hide show
  1. package/.agents/plugins/marketplace.json +1 -1
  2. package/.claude-plugin/marketplace.json +4 -4
  3. package/{plugins/freeflow/.claude-plugin → .claude-plugin}/plugin.json +5 -2
  4. package/{plugins/freeflow/.codex-plugin → .codex-plugin}/plugin.json +8 -9
  5. package/README.md +194 -127
  6. package/assets/feedback-loop.png +0 -0
  7. package/assets/freeflow-plugin-icon.png +0 -0
  8. package/assets/freeflow_workflow_map.png +0 -0
  9. package/assets/workflow.png +0 -0
  10. package/command-surface.json +129 -0
  11. package/hooks/freeflow-runtime-context.mjs +419 -0
  12. package/hooks/tests/check-runtime-context-hook.sh +223 -0
  13. package/package.json +41 -22
  14. package/pi-extension/dist/index.js +269 -0
  15. package/pi-extension/dist/integrations/mcp-config.js +29 -0
  16. package/pi-extension/dist/output-router/host-producer-identification.js +232 -0
  17. package/pi-extension/dist/output-router/native-safety-net.js +216 -0
  18. package/pi-extension/dist/output-router/observed-tool-routing.js +122 -0
  19. package/pi-extension/dist/output-router/renderers.js +1023 -0
  20. package/pi-extension/dist/output-router/router-tools.js +554 -0
  21. package/pi-extension/dist/output-router/schemas.js +383 -0
  22. package/pi-extension/dist/output-router/status.js +744 -0
  23. package/pi-extension/dist/output-router/utils.js +502 -0
  24. package/pi-extension/dist/runtime/runtime-context.js +798 -0
  25. package/pi-extension/dist/settings/settings-tui.js +314 -0
  26. package/pi-extension/dist/settings/settings-ui.js +1487 -0
  27. package/pi-extension/freeflow/index.js +1 -0
  28. package/pi-extension/src/index.ts +295 -0
  29. package/pi-extension/src/integrations/mcp-config.ts +32 -0
  30. package/pi-extension/src/output-router/host-producer-identification.ts +256 -0
  31. package/pi-extension/src/output-router/native-safety-net.ts +248 -0
  32. package/pi-extension/src/output-router/observed-tool-routing.ts +134 -0
  33. package/pi-extension/src/output-router/renderers.ts +1108 -0
  34. package/pi-extension/src/output-router/router-tools.ts +579 -0
  35. package/pi-extension/src/output-router/schemas.ts +387 -0
  36. package/pi-extension/src/output-router/status.ts +791 -0
  37. package/pi-extension/src/output-router/utils.ts +554 -0
  38. package/pi-extension/src/runtime/runtime-context.ts +895 -0
  39. package/pi-extension/src/settings/settings-tui.ts +408 -0
  40. package/pi-extension/src/settings/settings-ui.ts +1730 -0
  41. package/pi-extension/tests/integration/pi-extension.test.js +4018 -0
  42. package/pi-extension/tests/output-router/observed-producers.test.js +132 -0
  43. package/pi-extension/tests/output-router/search.test.js +722 -0
  44. package/pi-extension/tests/settings/settings-tui.test.js +243 -0
  45. package/pi-extension/tsconfig.json +16 -0
  46. package/{plugins/freeflow/router/dist → router/dist/benchmarks}/benchmark-harness.d.ts +16 -13
  47. package/router/dist/benchmarks/benchmark-harness.js +92 -0
  48. package/router/dist/benchmarks/benchmarks.d.ts +109 -0
  49. package/router/dist/benchmarks/benchmarks.js +979 -0
  50. package/router/dist/benchmarks/codex-qa-benchmarks.d.ts +95 -0
  51. package/router/dist/benchmarks/codex-qa-benchmarks.js +500 -0
  52. package/router/dist/benchmarks/command-benchmarks.d.ts +143 -0
  53. package/router/dist/benchmarks/command-benchmarks.js +698 -0
  54. package/router/dist/benchmarks/context-mode-normalized-benchmarks.d.ts +82 -0
  55. package/router/dist/benchmarks/context-mode-normalized-benchmarks.js +773 -0
  56. package/router/dist/benchmarks/context-mode-real-deep-benchmark.d.ts +132 -0
  57. package/router/dist/benchmarks/context-mode-real-deep-benchmark.js +1380 -0
  58. package/router/dist/benchmarks/context-saving-baseline.d.ts +60 -0
  59. package/router/dist/benchmarks/context-saving-baseline.js +470 -0
  60. package/router/dist/benchmarks/index-benchmarks.d.ts +103 -0
  61. package/router/dist/benchmarks/index-benchmarks.js +862 -0
  62. package/router/dist/benchmarks/storage-policy-benchmarks.d.ts +101 -0
  63. package/router/dist/benchmarks/storage-policy-benchmarks.js +618 -0
  64. package/router/dist/benchmarks/vault-index-benchmarks.d.ts +56 -0
  65. package/router/dist/benchmarks/vault-index-benchmarks.js +322 -0
  66. package/router/dist/config/config.d.ts +103 -0
  67. package/router/dist/config/config.js +632 -0
  68. package/{plugins/freeflow/router/dist → router/dist/config}/router-contract.d.ts +2 -2
  69. package/router/dist/config/router-contract.js +54 -0
  70. package/{plugins/freeflow/router/dist → router/dist/config}/schema.d.ts +19 -10
  71. package/router/dist/config/schema.js +648 -0
  72. package/router/dist/config/types.d.ts +573 -0
  73. package/router/dist/config/types.js +41 -0
  74. package/router/dist/evidence/bounded-evidence.d.ts +40 -0
  75. package/router/dist/evidence/bounded-evidence.js +323 -0
  76. package/router/dist/evidence/evidence-range-selector.d.ts +24 -0
  77. package/router/dist/evidence/evidence-range-selector.js +232 -0
  78. package/router/dist/evidence/evidence-search.d.ts +27 -0
  79. package/router/dist/evidence/evidence-search.js +490 -0
  80. package/{plugins/freeflow/router/dist → router/dist/evidence}/evidence.d.ts +18 -18
  81. package/router/dist/evidence/evidence.js +200 -0
  82. package/router/dist/evidence/failure-contracts.d.ts +37 -0
  83. package/router/dist/evidence/failure-contracts.js +166 -0
  84. package/router/dist/evidence/line-ranges.d.ts +24 -0
  85. package/router/dist/evidence/line-ranges.js +22 -0
  86. package/router/dist/experiments/local-index.d.ts +64 -0
  87. package/router/dist/experiments/local-index.js +581 -0
  88. package/router/dist/index.d.ts +30 -0
  89. package/router/dist/index.js +32 -0
  90. package/router/dist/local/local-traversal.d.ts +18 -0
  91. package/router/dist/local/local-traversal.js +334 -0
  92. package/router/dist/processing/engine.d.ts +132 -0
  93. package/router/dist/processing/engine.js +533 -0
  94. package/router/dist/processing/reducers.d.ts +280 -0
  95. package/router/dist/processing/reducers.js +1673 -0
  96. package/router/dist/processing/renderers.d.ts +31 -0
  97. package/router/dist/processing/renderers.js +195 -0
  98. package/router/dist/processing/scripts.d.ts +91 -0
  99. package/router/dist/processing/scripts.js +386 -0
  100. package/{plugins/freeflow/router/dist → router/dist/repo}/repo-traversal.d.ts +9 -9
  101. package/router/dist/repo/repo-traversal.js +245 -0
  102. package/router/dist/routing/observed-reducers.d.ts +41 -0
  103. package/router/dist/routing/observed-reducers.js +661 -0
  104. package/router/dist/routing/observed-routing.d.ts +26 -0
  105. package/router/dist/routing/observed-routing.js +378 -0
  106. package/router/dist/routing/parsers.d.ts +16 -0
  107. package/router/dist/routing/parsers.js +521 -0
  108. package/router/dist/routing/run-filters.d.ts +60 -0
  109. package/router/dist/routing/run-filters.js +238 -0
  110. package/router/dist/routing/run-reducers.d.ts +49 -0
  111. package/router/dist/routing/run-reducers.js +122 -0
  112. package/router/dist/sandbox/adapter-roots.d.ts +46 -0
  113. package/router/dist/sandbox/adapter-roots.js +66 -0
  114. package/router/dist/sandbox/eryx-python-adapter.d.ts +13 -0
  115. package/router/dist/sandbox/eryx-python-adapter.js +868 -0
  116. package/router/dist/sandbox/jq-wasm-adapter.d.ts +9 -0
  117. package/router/dist/sandbox/jq-wasm-adapter.js +429 -0
  118. package/router/dist/sandbox/quickjs-wasi-adapter.d.ts +13 -0
  119. package/router/dist/sandbox/quickjs-wasi-adapter.js +384 -0
  120. package/router/dist/sandbox/script-sandbox.d.ts +134 -0
  121. package/router/dist/sandbox/script-sandbox.js +337 -0
  122. package/router/dist/setup/script-transform-adapters.d.ts +32 -0
  123. package/router/dist/setup/script-transform-adapters.js +278 -0
  124. package/router/dist/tools/batch.d.ts +33 -0
  125. package/router/dist/tools/batch.js +586 -0
  126. package/router/dist/tools/run.d.ts +62 -0
  127. package/router/dist/tools/run.js +1304 -0
  128. package/router/dist/tools/search.d.ts +66 -0
  129. package/router/dist/tools/search.js +1364 -0
  130. package/router/dist/transform/engine.d.ts +168 -0
  131. package/router/dist/transform/engine.js +2072 -0
  132. package/router/dist/vault/vault-index.d.ts +125 -0
  133. package/router/dist/vault/vault-index.js +416 -0
  134. package/router/dist/vault/vault.d.ts +138 -0
  135. package/router/dist/vault/vault.js +630 -0
  136. package/runtime/interaction-contract.md +16 -0
  137. package/skills/bypass/SKILL.md +82 -0
  138. package/skills/commit-work/SKILL.md +106 -0
  139. package/skills/commit-work/references/staging-decisions.md +73 -0
  140. package/skills/decision-gate/SKILL.md +48 -0
  141. package/skills/design-for-depth/SKILL.md +106 -0
  142. package/skills/design-for-depth/references/design-pressure-signals.md +314 -0
  143. package/skills/design-for-depth/references/interface-design-loop.md +156 -0
  144. package/skills/design-for-depth/references/software-design-philosophy.md +248 -0
  145. package/skills/diagnose-failure/SKILL.md +105 -0
  146. package/skills/diagnose-failure/references/diagnostic-loop-catalog.md +36 -0
  147. package/skills/diagnose-failure/references/flaky-and-performance.md +43 -0
  148. package/skills/discuss/SKILL.md +121 -0
  149. package/skills/discuss/references/checkpoints.md +66 -0
  150. package/skills/evaluate-skill/SKILL.md +105 -0
  151. package/skills/evaluate-skill/references/definition-schema.md +345 -0
  152. package/skills/evaluate-skill/references/evaluation-design.md +86 -0
  153. package/skills/evaluate-skill/references/execution-and-evidence.md +85 -0
  154. package/skills/evaluate-skill/references/review-and-revision.md +51 -0
  155. package/skills/evaluate-skill/scripts/lib/definitions.mjs +296 -0
  156. package/skills/evaluate-skill/scripts/lib/evidence.mjs +46 -0
  157. package/skills/evaluate-skill/scripts/lib/grade-comparison.mjs +60 -0
  158. package/skills/evaluate-skill/scripts/lib/grade-interaction.mjs +148 -0
  159. package/skills/evaluate-skill/scripts/lib/grade-support.mjs +126 -0
  160. package/skills/evaluate-skill/scripts/lib/grade-workspace.mjs +192 -0
  161. package/skills/evaluate-skill/scripts/lib/grade.mjs +56 -0
  162. package/skills/evaluate-skill/scripts/lib/pi.mjs +489 -0
  163. package/skills/evaluate-skill/scripts/lib/process.mjs +79 -0
  164. package/skills/evaluate-skill/scripts/lib/rpc.mjs +444 -0
  165. package/skills/evaluate-skill/scripts/lib/runner.mjs +346 -0
  166. package/skills/evaluate-skill/scripts/lib/sandbox.mjs +409 -0
  167. package/skills/evaluate-skill/scripts/lib/view.mjs +337 -0
  168. package/skills/evaluate-skill/scripts/pi-guard.mjs +164 -0
  169. package/skills/evaluate-skill/scripts/skill-eval.mjs +101 -0
  170. package/skills/execute-work/SKILL.md +99 -0
  171. package/skills/execute-work/references/code-practices.md +78 -0
  172. package/skills/execute-work/references/execution-loop.md +77 -0
  173. package/skills/finish-branch/SKILL.md +117 -0
  174. package/skills/finish-branch/references/integration-options.md +80 -0
  175. package/skills/handoff/SKILL.md +92 -0
  176. package/skills/handoff/references/templates.md +141 -0
  177. package/skills/launch-work/SKILL.md +116 -0
  178. package/skills/launch-work/references/launch-readiness.md +85 -0
  179. package/skills/migration-work/SKILL.md +115 -0
  180. package/skills/migration-work/references/migration-lifecycle.md +82 -0
  181. package/skills/mode-contract/SKILL.md +82 -0
  182. package/skills/output-router/SKILL.md +206 -0
  183. package/skills/output-router/references/safety-policy.md +40 -0
  184. package/skills/release-work/SKILL.md +118 -0
  185. package/skills/release-work/references/release-evidence.md +78 -0
  186. package/skills/review-artifact/SKILL.md +126 -0
  187. package/skills/review-artifact/references/reviewer-prompt.md +148 -0
  188. package/skills/review-work/SKILL.md +126 -0
  189. package/skills/review-work/references/reviewer-prompt.md +134 -0
  190. package/skills/review-work/references/security-risk-lens.md +67 -0
  191. package/skills/setup-freeflow/SKILL.md +98 -0
  192. package/skills/setup-freeflow/references/activation-contract.md +120 -0
  193. package/skills/setup-freeflow/references/host-setup.md +72 -0
  194. package/skills/setup-freeflow/references/output-router-setup.md +110 -0
  195. package/skills/simplify-code/SKILL.md +80 -0
  196. package/skills/simplify-code/references/simplification-patterns.md +70 -0
  197. package/skills/tdd/SKILL.md +96 -0
  198. package/skills/tdd/references/test-design.md +96 -0
  199. package/skills/track-work/SKILL.md +84 -0
  200. package/skills/track-work/references/working-record-schema.md +378 -0
  201. package/skills/verify-work/SKILL.md +85 -0
  202. package/skills/verify-work/references/browser-runtime-evidence.md +55 -0
  203. package/skills/verify-work/references/integration-evidence.md +51 -0
  204. package/skills/verify-work/references/performance-evidence.md +57 -0
  205. package/skills/workflow/SKILL.md +91 -0
  206. package/skills/workflow/references/domain-skill-composition.md +57 -0
  207. package/skills/workflow/references/workflow-loop.md +92 -0
  208. package/skills/write-plan/SKILL.md +123 -0
  209. package/skills/write-plan/references/plan-shapes.md +156 -0
  210. package/skills/write-skill/SKILL.md +119 -0
  211. package/skills/write-skill/references/activation-boundaries.md +62 -0
  212. package/skills/write-skill/references/agent-first-instructions.md +87 -0
  213. package/skills/write-skill/references/progressive-disclosure.md +63 -0
  214. package/skills/write-skill/scripts/lib/skill-author.mjs +653 -0
  215. package/skills/write-skill/scripts/skill-author.mjs +104 -0
  216. package/skills/write-spec/SKILL.md +104 -0
  217. package/skills/write-spec/references/artifact-standards.md +86 -0
  218. package/skills/write-spec/references/decision-records.md +77 -0
  219. package/skills/write-spec/references/spec-shapes.md +128 -0
  220. package/plugins/freeflow/command-surface.json +0 -77
  221. package/plugins/freeflow/docs/README.md +0 -40
  222. package/plugins/freeflow/docs/adr/0001-three-modes.md +0 -27
  223. package/plugins/freeflow/docs/adr/0002-evals-before-hooks.md +0 -17
  224. package/plugins/freeflow/docs/adr/0003-release-boundary.md +0 -21
  225. package/plugins/freeflow/docs/adr/0004-research-replaces-shallow-discovery-skills.md +0 -26
  226. package/plugins/freeflow/docs/adr/README.md +0 -8
  227. package/plugins/freeflow/docs/architecture.md +0 -86
  228. package/plugins/freeflow/docs/output-router.md +0 -212
  229. package/plugins/freeflow/docs/release-evidence.md +0 -69
  230. package/plugins/freeflow/docs/skills.md +0 -43
  231. package/plugins/freeflow/docs/workflow.md +0 -57
  232. package/plugins/freeflow/hooks/freeflow-runtime-context.mjs +0 -257
  233. package/plugins/freeflow/pi-extension/index.js +0 -1176
  234. package/plugins/freeflow/router/dist/benchmark-harness.js +0 -92
  235. package/plugins/freeflow/router/dist/benchmarks.d.ts +0 -102
  236. package/plugins/freeflow/router/dist/benchmarks.js +0 -880
  237. package/plugins/freeflow/router/dist/bounded-evidence.d.ts +0 -40
  238. package/plugins/freeflow/router/dist/bounded-evidence.js +0 -310
  239. package/plugins/freeflow/router/dist/codex-qa-benchmarks.d.ts +0 -91
  240. package/plugins/freeflow/router/dist/codex-qa-benchmarks.js +0 -461
  241. package/plugins/freeflow/router/dist/command-benchmarks.d.ts +0 -128
  242. package/plugins/freeflow/router/dist/command-benchmarks.js +0 -652
  243. package/plugins/freeflow/router/dist/config.d.ts +0 -22
  244. package/plugins/freeflow/router/dist/config.js +0 -114
  245. package/plugins/freeflow/router/dist/evidence-range-selector.d.ts +0 -22
  246. package/plugins/freeflow/router/dist/evidence-range-selector.js +0 -180
  247. package/plugins/freeflow/router/dist/evidence-search.d.ts +0 -25
  248. package/plugins/freeflow/router/dist/evidence-search.js +0 -450
  249. package/plugins/freeflow/router/dist/evidence.js +0 -196
  250. package/plugins/freeflow/router/dist/experimental-local-index.d.ts +0 -1
  251. package/plugins/freeflow/router/dist/experimental-local-index.js +0 -1
  252. package/plugins/freeflow/router/dist/experiments/local-index.d.ts +0 -58
  253. package/plugins/freeflow/router/dist/experiments/local-index.js +0 -562
  254. package/plugins/freeflow/router/dist/index-benchmarks.d.ts +0 -84
  255. package/plugins/freeflow/router/dist/index-benchmarks.js +0 -458
  256. package/plugins/freeflow/router/dist/index.d.ts +0 -12
  257. package/plugins/freeflow/router/dist/index.js +0 -12
  258. package/plugins/freeflow/router/dist/line-ranges.d.ts +0 -22
  259. package/plugins/freeflow/router/dist/line-ranges.js +0 -22
  260. package/plugins/freeflow/router/dist/parsers.d.ts +0 -16
  261. package/plugins/freeflow/router/dist/parsers.js +0 -473
  262. package/plugins/freeflow/router/dist/repo-traversal.js +0 -242
  263. package/plugins/freeflow/router/dist/retrieve.d.ts +0 -33
  264. package/plugins/freeflow/router/dist/retrieve.js +0 -855
  265. package/plugins/freeflow/router/dist/router-contract.js +0 -54
  266. package/plugins/freeflow/router/dist/run.d.ts +0 -26
  267. package/plugins/freeflow/router/dist/run.js +0 -356
  268. package/plugins/freeflow/router/dist/schema.js +0 -354
  269. package/plugins/freeflow/router/dist/types.d.ts +0 -234
  270. package/plugins/freeflow/router/dist/types.js +0 -9
  271. package/plugins/freeflow/router/dist/vault.d.ts +0 -80
  272. package/plugins/freeflow/router/dist/vault.js +0 -484
  273. package/plugins/freeflow/skills/bypass/SKILL.md +0 -68
  274. package/plugins/freeflow/skills/commit-work/SKILL.md +0 -98
  275. package/plugins/freeflow/skills/commit-work/references/staging-decisions.md +0 -51
  276. package/plugins/freeflow/skills/diagnose-failure/SKILL.md +0 -95
  277. package/plugins/freeflow/skills/diagnose-failure/references/feedback-loop-catalog.md +0 -25
  278. package/plugins/freeflow/skills/diagnose-failure/references/flaky-and-performance.md +0 -31
  279. package/plugins/freeflow/skills/evaluate-skill/SKILL.md +0 -96
  280. package/plugins/freeflow/skills/evaluate-skill/references/eval-patterns.md +0 -41
  281. package/plugins/freeflow/skills/evaluate-skill/references/grading-priority.md +0 -33
  282. package/plugins/freeflow/skills/execute-plan/SKILL.md +0 -132
  283. package/plugins/freeflow/skills/execute-plan/references/execution-map.md +0 -122
  284. package/plugins/freeflow/skills/handoff/SKILL.md +0 -66
  285. package/plugins/freeflow/skills/handoff/references/templates.md +0 -64
  286. package/plugins/freeflow/skills/interview-gate/SKILL.md +0 -90
  287. package/plugins/freeflow/skills/mode-contract/SKILL.md +0 -79
  288. package/plugins/freeflow/skills/output-router/SKILL.md +0 -69
  289. package/plugins/freeflow/skills/output-router/references/safety-policy.md +0 -33
  290. package/plugins/freeflow/skills/research/ARTIFACT-DESTINATIONS.md +0 -58
  291. package/plugins/freeflow/skills/research/CHECKPOINTS.md +0 -74
  292. package/plugins/freeflow/skills/research/LANGUAGE.md +0 -61
  293. package/plugins/freeflow/skills/research/SKILL.md +0 -128
  294. package/plugins/freeflow/skills/review-artifact/SKILL.md +0 -115
  295. package/plugins/freeflow/skills/review-artifact/references/reviewer-prompt.md +0 -56
  296. package/plugins/freeflow/skills/review-work/SKILL.md +0 -96
  297. package/plugins/freeflow/skills/review-work/references/reviewer-prompt.md +0 -97
  298. package/plugins/freeflow/skills/setup-freeflow/SKILL.md +0 -94
  299. package/plugins/freeflow/skills/setup-freeflow/references/activation-contract.md +0 -99
  300. package/plugins/freeflow/skills/setup-freeflow/references/host-setup.md +0 -35
  301. package/plugins/freeflow/skills/setup-freeflow/references/output-router-setup.md +0 -52
  302. package/plugins/freeflow/skills/verify-work/SKILL.md +0 -62
  303. package/plugins/freeflow/skills/workflow/SKILL.md +0 -95
  304. package/plugins/freeflow/skills/workflow/references/workflow-map.md +0 -102
  305. package/plugins/freeflow/skills/write-plan/SKILL.md +0 -88
  306. package/plugins/freeflow/skills/write-plan/references/plan-shapes.md +0 -70
  307. package/plugins/freeflow/skills/write-skill/SKILL.md +0 -88
  308. package/plugins/freeflow/skills/write-spec/SKILL.md +0 -90
  309. package/plugins/freeflow/skills/write-spec/references/artifact-standards.md +0 -67
  310. package/plugins/freeflow/skills/write-spec/references/spec-shapes.md +0 -69
  311. /package/{plugins/freeflow/assets → assets}/freeflow-plugin-icon-transparent.png +0 -0
  312. /package/{plugins/freeflow/hooks → hooks}/hooks.json +0 -0
@@ -0,0 +1,314 @@
1
+ # Design Pressure Signals
2
+
3
+ Use this reference when reviewing code, artifacts, or work for shallow modules and complexity spread.
4
+
5
+ The goal is not to find every smell. The goal is to notice pressure that changes the next route.
6
+
7
+ ## Quick Classifier
8
+
9
+ Ask:
10
+
11
+ 1. What is the module?
12
+ 2. What is the interface?
13
+ 3. What details are callers forced to know?
14
+ 4. What decision is likely to change?
15
+ 5. Where would that decision be localized?
16
+ 6. Would solving this now fit the approved scope?
17
+
18
+ Then classify:
19
+
20
+ - **Continue:** no design pressure that changes the next action.
21
+ - **Local fix:** improve within current module/interface.
22
+ - **Plan revision:** slice boundary or verification path is wrong.
23
+ - **Discuss or revise a Spec:** behavior, scope, or acceptance is unclear.
24
+ - **Owner decision:** public API, compatibility, security, privacy, billing, data loss, permissions, migration, or hard-to-reverse architecture.
25
+ - **Deferred deepening:** real design pressure, but not worth solving in this scope.
26
+
27
+ ## Signals And What They Usually Mean
28
+
29
+ ### Shotgun Surgery
30
+
31
+ Signal: one concept requires many unrelated edits.
32
+
33
+ Examples:
34
+
35
+ - retry policy added to every route;
36
+ - permission check copied into API, UI, and job worker;
37
+ - billing grace-period logic repeated in webhook, email, and dashboard;
38
+ - cache freshness flags threaded through callers.
39
+
40
+ Likely issue: a likely-changing decision is not hidden behind a module.
41
+
42
+ Route:
43
+
44
+ - If behavior or scope is unsettled: Discuss or revise the owning Spec.
45
+ - If behavior is settled but slice spreads edits: plan revision or refactor candidate.
46
+
47
+ ### Caller Choreography
48
+
49
+ Signal: callers must perform steps in the right order.
50
+
51
+ Examples:
52
+
53
+ ```text
54
+ open connection -> set retry -> register cleanup -> call provider -> translate error -> log metric
55
+ ```
56
+
57
+ Likely issue: interface exposes implementation sequence.
58
+
59
+ Better interface asks for outcome:
60
+
61
+ ```text
62
+ deliverNotification(invitation)
63
+ ```
64
+
65
+ while the module owns retry, fallback, logging, cleanup, and provider errors.
66
+
67
+ ### Scattered Policy
68
+
69
+ Signal: product or operational rules appear in many places.
70
+
71
+ Examples:
72
+
73
+ - billing downgrade timing in UI, webhook, worker, and tests;
74
+ - notification fallback rules in every route;
75
+ - authorization rules in frontend and backend separately;
76
+ - migration compatibility gates inside individual callers.
77
+
78
+ Likely issue: policy is not localized.
79
+
80
+ Stop if changing it would alter product, security, privacy, billing, permissions, public API, compatibility, or data-loss behavior.
81
+
82
+ ### Test Knows Too Much
83
+
84
+ Signal: tests assert implementation sequencing instead of behavior.
85
+
86
+ Examples:
87
+
88
+ - tests assert `sendEmail` then `logFailure` then `sendSms` in every route;
89
+ - tests mock five helpers to verify one user-visible behavior;
90
+ - tests duplicate retry counts and provider error types;
91
+ - tests need private methods or internal state.
92
+
93
+ Likely issue: the production interface is not the right test seam.
94
+
95
+ Do not automatically add mocks. Ask whether the module interface should own the behavior.
96
+
97
+ ### Missing Failure Contract
98
+
99
+ Signal: the happy path is planned, but failure modes, observers, state writes, fail-open/closed/degrade/escalate/retry behavior, recovery, or proof are left to each caller or implementer.
100
+
101
+ Likely issue: failure behavior is part of the interface but has not been designed.
102
+
103
+ Route:
104
+
105
+ - If behavior changes product, security, privacy, billing, permissions, public API, compatibility, or data loss: owner decision.
106
+ - If behavior is within scope but scattered: plan/spec revision or refactor candidate.
107
+ - If proof is missing: verification gap before completion claims.
108
+
109
+ ### Caller-Knowledge Growth
110
+
111
+ Signal: each fix adds another flag, state, path, ordering rule, retry instruction, cleanup step, or recovery fact that callers and tests must know.
112
+
113
+ Likely issue: the interface is growing with the implementation instead of hiding it.
114
+
115
+ Route:
116
+
117
+ - stop adding contract detail;
118
+ - inventory caller knowledge;
119
+ - design materially different outcome-level interfaces;
120
+ - use a learning slice if evidence cannot choose between them.
121
+
122
+ ### Contract-Surface Explosion
123
+
124
+ Signal: an internal lifecycle becomes a public protocol of attempts, manifests, orphan states, retry links, grade modes, cache identities, or integrity steps.
125
+
126
+ Likely issue: caller-owned outcome and internal protocol have been confused.
127
+
128
+ Ask whether one operation can own the complete success/failure unit and publish diagnostics without exposing recovery choreography.
129
+
130
+ ### Tests Legitimize Machinery
131
+
132
+ Signal: test count grows quickly, but most new tests protect states and mechanisms introduced by recent patches rather than accepted behavior.
133
+
134
+ Likely issue: passing tests are making accidental complexity look required.
135
+
136
+ Every architecture-bearing test should name its accepted requirement or measured failure. If deleting the mechanism also deletes its tests without weakening acceptance, the tests do not justify it.
137
+
138
+ ### Scope And Remaining-Work Growth
139
+
140
+ Signal: completed slices increase the estimated remaining work, pull deferred capabilities into scope, require an unplanned subsystem, or invalidate earlier evidence.
141
+
142
+ Likely issue: the milestone or plan has been invalidated even if each local change remains technically in scope.
143
+
144
+ Return the evidence and options to Workflow: keep, simplify, split, defer, revise the owning Plan or Spec, or stop for owner direction.
145
+
146
+ ### Edge-Case Patch Stream
147
+
148
+ Signal: each review pass finds another special case.
149
+
150
+ Examples:
151
+
152
+ - “also handle null phone”; then “also handle email bounce”; then “also handle duplicate invite”; then “also handle retry telemetry.”
153
+
154
+ Likely issue: review is exposing missing behavior ownership, not isolated bugs.
155
+
156
+ Route:
157
+
158
+ - classify findings;
159
+ - respect the review cap;
160
+ - diagnose only when related findings suggest an unclear shared cause in discussion, source truth, the Spec or Plan, module shape, or reviewer context.
161
+
162
+ ### Pass-Through Wrapper
163
+
164
+ Signal: a module mostly renames another call.
165
+
166
+ Example:
167
+
168
+ ```ts
169
+ function sendTeamInviteEmail(email, subject, options) {
170
+ return sendEmail(email, subject, options);
171
+ }
172
+ ```
173
+
174
+ Likely issue: shallow wrapper.
175
+
176
+ Options:
177
+
178
+ - delete it if it hides nothing;
179
+ - deepen it by moving real policy behind it;
180
+ - keep it only when it expresses a stable domain or compatibility interface with a source-backed reason to exist.
181
+
182
+ ### Leaky Interface
183
+
184
+ Signal: callers know provider/database/cache internals.
185
+
186
+ Examples:
187
+
188
+ - callers catch Stripe-specific errors;
189
+ - UI code knows database enum transitions;
190
+ - API callers pass cache invalidation flags;
191
+ - tests assert internal queue names.
192
+
193
+ Likely issue: implementation detail leaked through interface.
194
+
195
+ Route to design if leakage blocks safe change or verification.
196
+
197
+ ### God Module
198
+
199
+ Signal: one file owns unrelated responsibilities.
200
+
201
+ Examples:
202
+
203
+ - route file validates input, applies policy, calls providers, logs metrics, and formats UI copy;
204
+ - workflow module owns routing, vaulting, parsing, rendering, and config mutation.
205
+
206
+ Likely issue: missing internal modules or seams.
207
+
208
+ Do not split by file type alone. Split around hidden decisions and interfaces.
209
+
210
+ ### Speculative Seam
211
+
212
+ Signal: interface/adapters/factory exist for only imagined future variation.
213
+
214
+ Examples:
215
+
216
+ - `PaymentProviderAdapterFactoryRegistry` when only Stripe exists and no migration is planned;
217
+ - strategies for every small formatting function;
218
+ - generic repository around a single simple query.
219
+
220
+ Likely issue: indirection without leverage.
221
+
222
+ Use the variation test: one adapter is hypothetical; two adapters or known upcoming variation justify a seam better.
223
+
224
+ ### Premature Artifact Detail
225
+
226
+ Signal: spec or plan chooses exact classes, factories, tables, or algorithms before evidence exists.
227
+
228
+ Likely issue: artifact is hiding uncertainty as implementation detail.
229
+
230
+ Better:
231
+
232
+ ```text
233
+ Tentative: likely need a policy-owning module if retry/fallback rules spread.
234
+ Open: whether provider variation is real in this scope.
235
+ Stop: revisit plan if slice requires touching every caller.
236
+ ```
237
+
238
+ ## Before / After Examples
239
+
240
+ ### Notification Retry
241
+
242
+ Bad direction:
243
+
244
+ ```text
245
+ Add retryCount to each route that sends notifications.
246
+ ```
247
+
248
+ Pressure:
249
+
250
+ - callers know retry policy;
251
+ - fallback and telemetry are duplicated;
252
+ - tests assert provider sequencing;
253
+ - adding another provider touches every caller.
254
+
255
+ Better direction:
256
+
257
+ ```text
258
+ Introduce a notification delivery module whose interface accepts the notification intent and owns retry, fallback, provider errors, and telemetry.
259
+ ```
260
+
261
+ Still ask owner decisions before changing user-visible delivery semantics.
262
+
263
+ ### Billing Grace Period
264
+
265
+ Bad direction:
266
+
267
+ ```text
268
+ Patch webhook to downgrade immediately, update email text, adjust dashboard copy.
269
+ ```
270
+
271
+ Pressure:
272
+
273
+ - billing policy spread across systems;
274
+ - likely source-truth conflict with docs/tests;
275
+ - user-owned billing behavior.
276
+
277
+ Better direction:
278
+
279
+ ```text
280
+ Stop at the decision gate. Decide billing policy first. Then localize policy behind a billing-state transition module if implementation spreads.
281
+ ```
282
+
283
+ ### Cache Freshness
284
+
285
+ Bad direction:
286
+
287
+ ```text
288
+ Thread forceRefresh through every caller.
289
+ ```
290
+
291
+ Pressure:
292
+
293
+ - callers know cache invalidation policy;
294
+ - tests must set timing flags;
295
+ - source truth may allow caching.
296
+
297
+ Better direction:
298
+
299
+ ```text
300
+ Discuss the expected freshness boundary. If source truth supports it, hide invalidation and freshness rules behind a cache-aware read interface.
301
+ ```
302
+
303
+ ## False Positives
304
+
305
+ Do not overreact when:
306
+
307
+ - a small repeated pattern is stable and local;
308
+ - a one-off script does not need long-term depth;
309
+ - a wrapper exists for public compatibility;
310
+ - broad edits are mechanical and source-backed;
311
+ - tests inspect internals only for an internal module whose interface is intentionally internal;
312
+ - deeper design would expand scope beyond the user's goal.
313
+
314
+ When in doubt, classify as deferred design pressure rather than silently refactoring.
@@ -0,0 +1,156 @@
1
+ # Interface Design Loop
2
+
3
+ Use this when structural pressure makes the current interface suspect. The goal is to choose an outcome-level module shape, not add detail to the first plausible design.
4
+
5
+ ## 1. Frame The Outcome
6
+
7
+ State:
8
+
9
+ - caller and complete outcome;
10
+ - source-backed behavior and non-goals;
11
+ - decisions the caller genuinely owns;
12
+ - dependencies and current constraints;
13
+ - why the current seam is under pressure.
14
+
15
+ Do not begin from existing flags, storage paths, or lifecycle states. Those may be symptoms of the current shape.
16
+
17
+ ## 2. Choose The Failure Unit
18
+
19
+ Name the atomic unit before designing retries or resume:
20
+
21
+ - operation;
22
+ - slice;
23
+ - comparison;
24
+ - session;
25
+ - published result;
26
+ - another outcome specific to the domain.
27
+
28
+ Define:
29
+
30
+ - terminal states;
31
+ - observers;
32
+ - state or evidence written;
33
+ - forbidden partial outcomes;
34
+ - safe restart unit;
35
+ - recovery proof;
36
+ - whether partial reuse is a requirement or only an optimization.
37
+
38
+ When authority, integrity, canonical persistence, or proof validity materially affects correctness, also define:
39
+
40
+ - trust anchor and which actors can replace it;
41
+ - mutable state and canonical versus diagnostic records;
42
+ - authority or capability binding and replay scope;
43
+ - commit and visibility point;
44
+ - behavior when cancellation, integrity failure, or reconciliation failure occurs after an awaited or committed boundary.
45
+
46
+ Retry, resume, caching, continuation, and partial reuse are separate capabilities. Durability does not automatically require them.
47
+
48
+ ## 3. Inventory Caller Knowledge
49
+
50
+ List every fact a caller, test, reviewer, or future agent must know to use the module correctly:
51
+
52
+ ```text
53
+ commands / methods
54
+ parameters and flags
55
+ ordering
56
+ states and transitions
57
+ paths and filenames
58
+ roles and ownership
59
+ retries and cleanup
60
+ configuration
61
+ errors and failure semantics
62
+ compatibility and migration
63
+ cost and performance expectations
64
+ recovery
65
+ ```
66
+
67
+ For each fact ask:
68
+
69
+ - Does the caller own this decision?
70
+ - Could the module own it instead?
71
+ - Is it stable enough to expose?
72
+ - Would changing it force surrounding edits?
73
+ - Did a recent fix or review add this knowledge?
74
+
75
+ A growing list is direct evidence of a shallow interface.
76
+
77
+ ## 4. Classify Maturity
78
+
79
+ Classify proposed capabilities:
80
+
81
+ - **Trust:** needed to know the outcome is valid.
82
+ - **Safety:** prevents damage, leakage, or runaway work.
83
+ - **Efficiency:** saves time, requests, or money.
84
+ - **Scale:** supports concurrency or volume.
85
+ - **Portability:** supports additional hosts, providers, or environments.
86
+
87
+ Required trust and safety cannot be deferred merely to simplify the design. Efficiency, scale, and portability need accepted requirements or observed pressure.
88
+
89
+ ## 5. Design It Twice
90
+
91
+ Produce two or three materially different interfaces. Change seam placement or ownership, not only names.
92
+
93
+ Useful design constraints:
94
+
95
+ - **Outcome-first:** caller asks for one complete result; module owns sequencing.
96
+ - **Minimal contract:** expose the fewest stable decisions possible.
97
+ - **Common-case:** make the primary caller path trivial while preserving failure honesty.
98
+ - **Real variation:** design around two concrete adapters or environments when variation actually exists.
99
+
100
+ For each design show:
101
+
102
+ 1. interface and usage;
103
+ 2. caller-owned decisions;
104
+ 3. hidden internal protocol;
105
+ 4. failure unit and behavior;
106
+ 5. dependency/adapters strategy;
107
+ 6. evidence needed to trust it;
108
+ 7. costs and limitations.
109
+
110
+ Do not force multiple designs when the change is local, reversible, and source-backed.
111
+
112
+ ## 6. Compare
113
+
114
+ Compare designs by:
115
+
116
+ - depth: behavior gained per interface fact;
117
+ - locality: where future changes land;
118
+ - correct-use ergonomics;
119
+ - misuse and hidden-decision risk;
120
+ - failure behavior and recoverability;
121
+ - contract stability when callers depend on observable details;
122
+ - test surface quality;
123
+ - reversibility;
124
+ - maturity fit;
125
+ - implementation and evidence cost.
126
+
127
+ Prefer the design that removes concepts and coordination, not the one that centralizes the same choreography behind more terminology.
128
+
129
+ ## 7. Learn Before Freezing
130
+
131
+ If evidence cannot distinguish the designs, define one bounded learning slice:
132
+
133
+ ```text
134
+ Question:
135
+ Competing designs:
136
+ Prototype boundary:
137
+ Evidence to capture:
138
+ Time / cost boundary:
139
+ Discard-or-promote rule:
140
+ Return condition:
141
+ ```
142
+
143
+ The experiment should answer the design question, not quietly implement the whole subsystem.
144
+
145
+ ## 8. Return To Workflow
146
+
147
+ Return the structural evidence, compared designs, recommendation, unresolved owner decisions, and one narrow route:
148
+
149
+ - continue with the selected interface;
150
+ - discuss or ask an owner decision;
151
+ - revise the owning Spec or Plan;
152
+ - run the bounded learning slice;
153
+ - propose a bounded deepening slice;
154
+ - defer or stop because no worthwhile safe design fits the current scope.
155
+
156
+ Do not edit merely because one design is recommended. Recommendation is direction; Workflow owns selection and approval boundaries.