feed-the-machine 1.6.0 → 1.7.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 (269) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +170 -170
  3. package/bin/brain.py +1340 -0
  4. package/bin/convert_claude_skills_to_codex.py +490 -0
  5. package/bin/generate-manifest.mjs +463 -463
  6. package/bin/harden_codex_skills.py +141 -0
  7. package/bin/install.mjs +491 -491
  8. package/bin/migrate-eng-buddy-data.py +875 -0
  9. package/bin/playbook_engine/__init__.py +1 -0
  10. package/bin/playbook_engine/conftest.py +8 -0
  11. package/bin/playbook_engine/extractor.py +33 -0
  12. package/bin/playbook_engine/manager.py +102 -0
  13. package/bin/playbook_engine/models.py +84 -0
  14. package/bin/playbook_engine/registry.py +35 -0
  15. package/bin/playbook_engine/test_extractor.py +72 -0
  16. package/bin/playbook_engine/test_integration.py +129 -0
  17. package/bin/playbook_engine/test_manager.py +85 -0
  18. package/bin/playbook_engine/test_models.py +166 -0
  19. package/bin/playbook_engine/test_registry.py +67 -0
  20. package/bin/playbook_engine/test_tracer.py +86 -0
  21. package/bin/playbook_engine/tracer.py +93 -0
  22. package/bin/tasks_db.py +456 -0
  23. package/docs/HOOKS.md +243 -243
  24. package/docs/INBOX.md +233 -233
  25. package/ftm/SKILL.md +125 -122
  26. package/ftm-audit/SKILL.md +623 -623
  27. package/ftm-audit/references/protocols/PROJECT-PATTERNS.md +91 -91
  28. package/ftm-audit/references/protocols/RUNTIME-WIRING.md +66 -66
  29. package/ftm-audit/references/protocols/WIRING-CONTRACTS.md +135 -135
  30. package/ftm-audit/references/strategies/AUTO-FIX-STRATEGIES.md +69 -69
  31. package/ftm-audit/references/templates/REPORT-FORMAT.md +96 -96
  32. package/ftm-audit/scripts/run-knip.sh +23 -23
  33. package/ftm-audit.yml +2 -2
  34. package/ftm-brainstorm/SKILL.md +1003 -498
  35. package/ftm-brainstorm/evals/evals.json +180 -100
  36. package/ftm-brainstorm/evals/promptfoo.yaml +109 -109
  37. package/ftm-brainstorm/references/agent-prompts.md +552 -224
  38. package/ftm-brainstorm/references/plan-template.md +209 -121
  39. package/ftm-brainstorm.yml +2 -2
  40. package/ftm-browse/SKILL.md +454 -454
  41. package/ftm-browse/daemon/browser-manager.ts +206 -206
  42. package/ftm-browse/daemon/bun.lock +30 -30
  43. package/ftm-browse/daemon/cli.ts +347 -347
  44. package/ftm-browse/daemon/commands.ts +410 -410
  45. package/ftm-browse/daemon/main.ts +357 -357
  46. package/ftm-browse/daemon/package.json +17 -17
  47. package/ftm-browse/daemon/server.ts +189 -189
  48. package/ftm-browse/daemon/snapshot.ts +519 -519
  49. package/ftm-browse/daemon/tsconfig.json +22 -22
  50. package/ftm-browse.yml +4 -4
  51. package/ftm-capture/SKILL.md +370 -370
  52. package/ftm-capture.yml +4 -4
  53. package/ftm-codex-gate/SKILL.md +361 -361
  54. package/ftm-codex-gate.yml +2 -2
  55. package/ftm-config/SKILL.md +422 -345
  56. package/ftm-config.default.yml +125 -82
  57. package/ftm-config.yml +44 -2
  58. package/ftm-council/SKILL.md +416 -416
  59. package/ftm-council/references/prompts/CLAUDE-INVESTIGATION.md +60 -60
  60. package/ftm-council/references/prompts/CODEX-INVESTIGATION.md +58 -58
  61. package/ftm-council/references/prompts/GEMINI-INVESTIGATION.md +58 -58
  62. package/ftm-council/references/prompts/REBUTTAL-TEMPLATE.md +57 -57
  63. package/ftm-council/references/protocols/PREREQUISITES.md +47 -47
  64. package/ftm-council/references/protocols/STEP-0-FRAMING.md +46 -46
  65. package/ftm-council.yml +2 -2
  66. package/ftm-dashboard/SKILL.md +163 -163
  67. package/ftm-dashboard.yml +4 -4
  68. package/ftm-debug/SKILL.md +1037 -1037
  69. package/ftm-debug/references/phases/PHASE-0-INTAKE.md +58 -58
  70. package/ftm-debug/references/phases/PHASE-1-TRIAGE.md +46 -46
  71. package/ftm-debug/references/phases/PHASE-2-WAR-ROOM-AGENTS.md +279 -279
  72. package/ftm-debug/references/phases/PHASE-3-TO-6-EXECUTION.md +436 -436
  73. package/ftm-debug/references/protocols/BLACKBOARD.md +86 -86
  74. package/ftm-debug/references/protocols/EDGE-CASES.md +103 -103
  75. package/ftm-debug.yml +2 -2
  76. package/ftm-diagram/SKILL.md +277 -277
  77. package/ftm-diagram.yml +2 -2
  78. package/ftm-executor/SKILL.md +777 -777
  79. package/ftm-executor/references/STYLE-TEMPLATE.md +73 -73
  80. package/ftm-executor/references/phases/PHASE-0-VERIFICATION.md +62 -62
  81. package/ftm-executor/references/phases/PHASE-2-AGENT-ASSEMBLY.md +34 -34
  82. package/ftm-executor/references/phases/PHASE-3-WORKTREES.md +38 -38
  83. package/ftm-executor/references/phases/PHASE-4-5-AUDIT.md +72 -72
  84. package/ftm-executor/references/phases/PHASE-4-DISPATCH.md +66 -66
  85. package/ftm-executor/references/phases/PHASE-5-5-CODEX-GATE.md +73 -73
  86. package/ftm-executor/references/protocols/DOCUMENTATION-BOOTSTRAP.md +36 -36
  87. package/ftm-executor/references/protocols/MODEL-PROFILE.md +59 -59
  88. package/ftm-executor/references/protocols/PROGRESS-TRACKING.md +66 -66
  89. package/ftm-executor/runtime/ftm-runtime.mjs +252 -252
  90. package/ftm-executor/runtime/package.json +8 -8
  91. package/ftm-executor.yml +2 -2
  92. package/ftm-git/SKILL.md +441 -441
  93. package/ftm-git/evals/evals.json +26 -26
  94. package/ftm-git/evals/promptfoo.yaml +75 -75
  95. package/ftm-git/hooks/post-commit-experience.sh +92 -92
  96. package/ftm-git/references/patterns/SECRET-PATTERNS.md +104 -104
  97. package/ftm-git/references/protocols/REMEDIATION.md +139 -139
  98. package/ftm-git/scripts/pre-commit-secrets.sh +110 -110
  99. package/ftm-git.yml +2 -2
  100. package/ftm-inbox/backend/__pycache__/main.cpython-314.pyc +0 -0
  101. package/ftm-inbox/backend/adapters/_retry.py +64 -64
  102. package/ftm-inbox/backend/adapters/base.py +230 -230
  103. package/ftm-inbox/backend/adapters/freshservice.py +104 -104
  104. package/ftm-inbox/backend/adapters/gmail.py +125 -125
  105. package/ftm-inbox/backend/adapters/jira.py +136 -136
  106. package/ftm-inbox/backend/adapters/registry.py +192 -192
  107. package/ftm-inbox/backend/adapters/slack.py +110 -110
  108. package/ftm-inbox/backend/db/connection.py +54 -54
  109. package/ftm-inbox/backend/db/schema.py +78 -78
  110. package/ftm-inbox/backend/executor/__init__.py +7 -7
  111. package/ftm-inbox/backend/executor/engine.py +149 -149
  112. package/ftm-inbox/backend/executor/step_runner.py +98 -98
  113. package/ftm-inbox/backend/main.py +103 -103
  114. package/ftm-inbox/backend/models/__init__.py +1 -1
  115. package/ftm-inbox/backend/models/unified_task.py +36 -36
  116. package/ftm-inbox/backend/planner/__init__.py +6 -6
  117. package/ftm-inbox/backend/planner/__pycache__/__init__.cpython-314.pyc +0 -0
  118. package/ftm-inbox/backend/planner/__pycache__/generator.cpython-314.pyc +0 -0
  119. package/ftm-inbox/backend/planner/__pycache__/schema.cpython-314.pyc +0 -0
  120. package/ftm-inbox/backend/planner/generator.py +127 -127
  121. package/ftm-inbox/backend/planner/schema.py +34 -34
  122. package/ftm-inbox/backend/requirements.txt +5 -5
  123. package/ftm-inbox/backend/routes/__pycache__/plan.cpython-314.pyc +0 -0
  124. package/ftm-inbox/backend/routes/execute.py +186 -186
  125. package/ftm-inbox/backend/routes/health.py +52 -52
  126. package/ftm-inbox/backend/routes/inbox.py +68 -68
  127. package/ftm-inbox/backend/routes/plan.py +271 -271
  128. package/ftm-inbox/bin/launchagent.mjs +91 -91
  129. package/ftm-inbox/bin/setup.mjs +188 -188
  130. package/ftm-inbox/bin/start.sh +10 -10
  131. package/ftm-inbox/bin/status.sh +17 -17
  132. package/ftm-inbox/bin/stop.sh +8 -8
  133. package/ftm-inbox/config.example.yml +55 -55
  134. package/ftm-inbox/package-lock.json +2898 -2898
  135. package/ftm-inbox/package.json +26 -26
  136. package/ftm-inbox/postcss.config.js +6 -6
  137. package/ftm-inbox/src/app.css +199 -199
  138. package/ftm-inbox/src/app.html +18 -18
  139. package/ftm-inbox/src/lib/api.ts +166 -166
  140. package/ftm-inbox/src/lib/components/ExecutionLog.svelte +81 -81
  141. package/ftm-inbox/src/lib/components/InboxFeed.svelte +143 -143
  142. package/ftm-inbox/src/lib/components/PlanStep.svelte +271 -271
  143. package/ftm-inbox/src/lib/components/PlanView.svelte +206 -206
  144. package/ftm-inbox/src/lib/components/StreamPanel.svelte +99 -99
  145. package/ftm-inbox/src/lib/components/TaskCard.svelte +190 -190
  146. package/ftm-inbox/src/lib/components/ui/EmptyState.svelte +63 -63
  147. package/ftm-inbox/src/lib/components/ui/KawaiiCard.svelte +86 -86
  148. package/ftm-inbox/src/lib/components/ui/PillButton.svelte +106 -106
  149. package/ftm-inbox/src/lib/components/ui/StatusBadge.svelte +67 -67
  150. package/ftm-inbox/src/lib/components/ui/StreamDrawer.svelte +149 -149
  151. package/ftm-inbox/src/lib/components/ui/ThemeToggle.svelte +80 -80
  152. package/ftm-inbox/src/lib/theme.ts +47 -47
  153. package/ftm-inbox/src/routes/+layout.svelte +76 -76
  154. package/ftm-inbox/src/routes/+page.svelte +401 -401
  155. package/ftm-inbox/svelte.config.js +12 -12
  156. package/ftm-inbox/tailwind.config.ts +63 -63
  157. package/ftm-inbox/tsconfig.json +13 -13
  158. package/ftm-inbox/vite.config.ts +6 -6
  159. package/ftm-intent/SKILL.md +241 -241
  160. package/ftm-intent.yml +2 -2
  161. package/ftm-manifest.json +3794 -3794
  162. package/ftm-map/SKILL.md +291 -291
  163. package/ftm-map/scripts/db.py +712 -712
  164. package/ftm-map/scripts/index.py +415 -415
  165. package/ftm-map/scripts/parser.py +224 -224
  166. package/ftm-map/scripts/queries/go-tags.scm +20 -20
  167. package/ftm-map/scripts/queries/javascript-tags.scm +35 -35
  168. package/ftm-map/scripts/queries/python-tags.scm +31 -31
  169. package/ftm-map/scripts/queries/ruby-tags.scm +19 -19
  170. package/ftm-map/scripts/queries/rust-tags.scm +37 -37
  171. package/ftm-map/scripts/queries/typescript-tags.scm +41 -41
  172. package/ftm-map/scripts/query.py +301 -301
  173. package/ftm-map/scripts/ranker.py +377 -377
  174. package/ftm-map/scripts/requirements.txt +5 -5
  175. package/ftm-map/scripts/setup-hooks.sh +27 -27
  176. package/ftm-map/scripts/setup.sh +56 -56
  177. package/ftm-map/scripts/test_db.py +364 -364
  178. package/ftm-map/scripts/test_parser.py +174 -174
  179. package/ftm-map/scripts/test_query.py +183 -183
  180. package/ftm-map/scripts/test_ranker.py +199 -199
  181. package/ftm-map/scripts/views.py +591 -591
  182. package/ftm-map.yml +2 -2
  183. package/ftm-mind/SKILL.md +201 -1943
  184. package/ftm-mind/evals/promptfoo.yaml +142 -142
  185. package/ftm-mind/references/blackboard-protocol.md +110 -0
  186. package/ftm-mind/references/blackboard-schema.md +328 -328
  187. package/ftm-mind/references/complexity-guide.md +110 -110
  188. package/ftm-mind/references/complexity-sizing.md +138 -0
  189. package/ftm-mind/references/decide-act-protocol.md +172 -0
  190. package/ftm-mind/references/direct-execution.md +51 -0
  191. package/ftm-mind/references/environment-discovery.md +77 -0
  192. package/ftm-mind/references/event-registry.md +319 -319
  193. package/ftm-mind/references/mcp-inventory.md +300 -296
  194. package/ftm-mind/references/ops-routing.md +47 -0
  195. package/ftm-mind/references/orient-protocol.md +234 -0
  196. package/ftm-mind/references/personality.md +40 -0
  197. package/ftm-mind/references/protocols/COMPLEXITY-SIZING.md +72 -72
  198. package/ftm-mind/references/protocols/MCP-HEURISTICS.md +32 -32
  199. package/ftm-mind/references/protocols/PLAN-APPROVAL.md +80 -80
  200. package/ftm-mind/references/reflexion-protocol.md +249 -249
  201. package/ftm-mind/references/routing/SCENARIOS.md +22 -22
  202. package/ftm-mind/references/routing-scenarios.md +35 -35
  203. package/ftm-mind.yml +2 -2
  204. package/ftm-ops.yml +4 -0
  205. package/ftm-pause/SKILL.md +395 -395
  206. package/ftm-pause/references/protocols/SKILL-RESTORE-PROTOCOLS.md +186 -186
  207. package/ftm-pause/references/protocols/VALIDATION.md +80 -80
  208. package/ftm-pause.yml +2 -2
  209. package/ftm-researcher/SKILL.md +275 -275
  210. package/ftm-researcher/evals/agent-diversity.yaml +17 -17
  211. package/ftm-researcher/evals/synthesis-quality.yaml +12 -12
  212. package/ftm-researcher/evals/trigger-accuracy.yaml +39 -39
  213. package/ftm-researcher/references/adaptive-search.md +116 -116
  214. package/ftm-researcher/references/agent-prompts.md +193 -193
  215. package/ftm-researcher/references/council-integration.md +193 -193
  216. package/ftm-researcher/references/output-format.md +203 -203
  217. package/ftm-researcher/references/synthesis-pipeline.md +165 -165
  218. package/ftm-researcher/scripts/score_credibility.py +234 -234
  219. package/ftm-researcher/scripts/validate_research.py +92 -92
  220. package/ftm-researcher.yml +2 -2
  221. package/ftm-resume/SKILL.md +518 -518
  222. package/ftm-resume/references/protocols/VALIDATION.md +172 -172
  223. package/ftm-resume.yml +2 -2
  224. package/ftm-retro/SKILL.md +380 -380
  225. package/ftm-retro/references/protocols/SCORING-RUBRICS.md +89 -89
  226. package/ftm-retro/references/templates/REPORT-FORMAT.md +109 -109
  227. package/ftm-retro.yml +2 -2
  228. package/ftm-routine/SKILL.md +170 -170
  229. package/ftm-routine.yml +4 -4
  230. package/ftm-state/blackboard/capabilities.json +5 -5
  231. package/ftm-state/blackboard/capabilities.schema.json +27 -27
  232. package/ftm-state/blackboard/context.json +37 -23
  233. package/ftm-state/blackboard/experiences/doom-statusline-fix.json +26 -0
  234. package/ftm-state/blackboard/experiences/hackathon-pages-site.json +26 -0
  235. package/ftm-state/blackboard/experiences/hindsight-sso-kickoff.json +42 -0
  236. package/ftm-state/blackboard/experiences/index.json +58 -9
  237. package/ftm-state/blackboard/experiences/learning-ragnarok-api-access.json +23 -0
  238. package/ftm-state/blackboard/experiences/nordlayer-members-auto-assign.json +26 -0
  239. package/ftm-state/blackboard/experiences/saml2aws-stale-session-fix.json +41 -0
  240. package/ftm-state/blackboard/patterns.json +6 -6
  241. package/ftm-state/schemas/context.schema.json +130 -130
  242. package/ftm-state/schemas/experience-index.schema.json +77 -77
  243. package/ftm-state/schemas/experience.schema.json +78 -78
  244. package/ftm-state/schemas/patterns.schema.json +44 -44
  245. package/ftm-upgrade/SKILL.md +194 -194
  246. package/ftm-upgrade/scripts/check-version.sh +76 -76
  247. package/ftm-upgrade/scripts/upgrade.sh +143 -143
  248. package/ftm-upgrade.yml +2 -2
  249. package/ftm-verify.yml +2 -2
  250. package/ftm.yml +2 -2
  251. package/hooks/ftm-auto-log.sh +137 -0
  252. package/hooks/ftm-blackboard-enforcer.sh +93 -93
  253. package/hooks/ftm-discovery-reminder.sh +90 -90
  254. package/hooks/ftm-drafts-gate.sh +61 -61
  255. package/hooks/ftm-event-logger.mjs +107 -107
  256. package/hooks/ftm-install-hooks.sh +240 -0
  257. package/hooks/ftm-learning-capture.sh +117 -0
  258. package/hooks/ftm-map-autodetect.sh +79 -79
  259. package/hooks/ftm-pending-sync-check.sh +22 -22
  260. package/hooks/ftm-plan-gate.sh +92 -92
  261. package/hooks/ftm-post-commit-trigger.sh +57 -57
  262. package/hooks/ftm-post-compaction.sh +138 -0
  263. package/hooks/ftm-pre-compaction.sh +147 -0
  264. package/hooks/ftm-session-end.sh +52 -0
  265. package/hooks/ftm-session-snapshot.sh +213 -0
  266. package/hooks/settings-template.json +81 -81
  267. package/install.sh +363 -363
  268. package/package.json +84 -84
  269. package/uninstall.sh +25 -25
@@ -1,86 +1,86 @@
1
- # Shared Blackboard Protocol
2
-
3
- The blackboard is a persistent shared state that allows skills to coordinate across sessions and learn from past debugging sessions.
4
-
5
- ---
6
-
7
- ## Blackboard Read (on session start)
8
-
9
- Before starting, load context from the blackboard:
10
-
11
- 1. Read `~/.claude/ftm-state/blackboard/context.json` — check current_task, recent_decisions, active_constraints
12
- 2. Read `~/.claude/ftm-state/blackboard/experiences/index.json` — filter entries by task_type="bug" and tags matching the current error domain
13
- 3. Load top 3-5 matching experience files for known fixes and failed approaches
14
- 4. Read `~/.claude/ftm-state/blackboard/patterns.json` — check recurring_issues for matching symptoms and codebase_insights for relevant file patterns
15
-
16
- If index.json is empty or no matches found, proceed normally without experience-informed shortcuts.
17
-
18
- ---
19
-
20
- ## Blackboard Write (on session complete)
21
-
22
- After the debug session concludes, update the blackboard:
23
-
24
- ### 1. Update context.json
25
-
26
- Path: `~/.claude/ftm-state/blackboard/context.json`
27
-
28
- - Set `current_task.status` to `"complete"`
29
- - Append a decision summary to `recent_decisions` (keep array capped at 10 entries)
30
- - Update `session_metadata.skills_invoked` to include `"ftm-debug"`
31
- - Update `session_metadata.last_updated` to current timestamp
32
-
33
- ### 2. Write Experience File
34
-
35
- Path: `~/.claude/ftm-state/blackboard/experiences/YYYY-MM-DD_task-slug.json`
36
-
37
- Capture the following in the experience file:
38
-
39
- ```json
40
- {
41
- "date": "YYYY-MM-DD",
42
- "task_slug": "short-description-of-bug",
43
- "task_type": "bug",
44
- "symptom": "One-sentence description of what the user reported",
45
- "root_cause": "One-sentence description of what was actually wrong",
46
- "hypotheses_tested": [
47
- { "hypothesis": "...", "outcome": "confirmed | rejected" }
48
- ],
49
- "fix_approach": "Brief description of the fix strategy used",
50
- "fix_files": ["path/to/file1.js", "path/to/file2.ts"],
51
- "verification_method": "test | visual | runtime | combined",
52
- "tags": ["race-condition", "react", "async", "etc."],
53
- "check_first_next_time": "The thing that was most predictive of the root cause"
54
- }
55
- ```
56
-
57
- ### 3. Update experiences/index.json
58
-
59
- Path: `~/.claude/ftm-state/blackboard/experiences/index.json`
60
-
61
- Append a new entry to the index:
62
-
63
- ```json
64
- {
65
- "file": "YYYY-MM-DD_task-slug.json",
66
- "task_type": "bug",
67
- "tags": ["same-tags-as-experience-file"],
68
- "summary": "One-line description for quick matching"
69
- }
70
- ```
71
-
72
- ### 4. Emit Event
73
-
74
- Emit `task_completed` event to signal the session is done.
75
-
76
- ---
77
-
78
- ## Experience File Matching Logic
79
-
80
- When loading experiences at session start, match by:
81
-
82
- 1. **task_type** must equal `"bug"`
83
- 2. **tags** overlap with current error domain (e.g., framework name, error category, file path patterns)
84
- 3. **symptom** similarity (loose match on keywords from the current problem statement)
85
-
86
- Prioritize experiences where `check_first_next_time` is populated — these are the highest-value shortcuts.
1
+ # Shared Blackboard Protocol
2
+
3
+ The blackboard is a persistent shared state that allows skills to coordinate across sessions and learn from past debugging sessions.
4
+
5
+ ---
6
+
7
+ ## Blackboard Read (on session start)
8
+
9
+ Before starting, load context from the blackboard:
10
+
11
+ 1. Read `~/.claude/ftm-state/blackboard/context.json` — check current_task, recent_decisions, active_constraints
12
+ 2. Read `~/.claude/ftm-state/blackboard/experiences/index.json` — filter entries by task_type="bug" and tags matching the current error domain
13
+ 3. Load top 3-5 matching experience files for known fixes and failed approaches
14
+ 4. Read `~/.claude/ftm-state/blackboard/patterns.json` — check recurring_issues for matching symptoms and codebase_insights for relevant file patterns
15
+
16
+ If index.json is empty or no matches found, proceed normally without experience-informed shortcuts.
17
+
18
+ ---
19
+
20
+ ## Blackboard Write (on session complete)
21
+
22
+ After the debug session concludes, update the blackboard:
23
+
24
+ ### 1. Update context.json
25
+
26
+ Path: `~/.claude/ftm-state/blackboard/context.json`
27
+
28
+ - Set `current_task.status` to `"complete"`
29
+ - Append a decision summary to `recent_decisions` (keep array capped at 10 entries)
30
+ - Update `session_metadata.skills_invoked` to include `"ftm-debug"`
31
+ - Update `session_metadata.last_updated` to current timestamp
32
+
33
+ ### 2. Write Experience File
34
+
35
+ Path: `~/.claude/ftm-state/blackboard/experiences/YYYY-MM-DD_task-slug.json`
36
+
37
+ Capture the following in the experience file:
38
+
39
+ ```json
40
+ {
41
+ "date": "YYYY-MM-DD",
42
+ "task_slug": "short-description-of-bug",
43
+ "task_type": "bug",
44
+ "symptom": "One-sentence description of what the user reported",
45
+ "root_cause": "One-sentence description of what was actually wrong",
46
+ "hypotheses_tested": [
47
+ { "hypothesis": "...", "outcome": "confirmed | rejected" }
48
+ ],
49
+ "fix_approach": "Brief description of the fix strategy used",
50
+ "fix_files": ["path/to/file1.js", "path/to/file2.ts"],
51
+ "verification_method": "test | visual | runtime | combined",
52
+ "tags": ["race-condition", "react", "async", "etc."],
53
+ "check_first_next_time": "The thing that was most predictive of the root cause"
54
+ }
55
+ ```
56
+
57
+ ### 3. Update experiences/index.json
58
+
59
+ Path: `~/.claude/ftm-state/blackboard/experiences/index.json`
60
+
61
+ Append a new entry to the index:
62
+
63
+ ```json
64
+ {
65
+ "file": "YYYY-MM-DD_task-slug.json",
66
+ "task_type": "bug",
67
+ "tags": ["same-tags-as-experience-file"],
68
+ "summary": "One-line description for quick matching"
69
+ }
70
+ ```
71
+
72
+ ### 4. Emit Event
73
+
74
+ Emit `task_completed` event to signal the session is done.
75
+
76
+ ---
77
+
78
+ ## Experience File Matching Logic
79
+
80
+ When loading experiences at session start, match by:
81
+
82
+ 1. **task_type** must equal `"bug"`
83
+ 2. **tags** overlap with current error domain (e.g., framework name, error category, file path patterns)
84
+ 3. **symptom** similarity (loose match on keywords from the current problem statement)
85
+
86
+ Prioritize experiences where `check_first_next_time` is populated — these are the highest-value shortcuts.
@@ -1,103 +1,103 @@
1
- # Edge Cases, Anti-Patterns & Fallback Handling
2
-
3
- ---
4
-
5
- ## Anti-Pattern: Asking the User to Do Agent Work
6
-
7
- This is the single most important rule of the war room: **never ask the user to perform a verification step that an agent could perform**.
8
-
9
- Examples of violations:
10
- - "Restart the application and check if the doom head appears" — an agent can launch the app, capture a screenshot, read the output, verify the rendering
11
- - "Run `tail -f /tmp/debug.log` and look for entries" — an agent can read that file
12
- - "Open a browser and check the UI" — an agent can use Playwright/Puppeteer to screenshot and inspect the DOM
13
- - "Try running this command and let me know what happens" — an agent can run the command
14
- - "All 103 tests pass!" without verifying the actual feature works — tests are a proxy, not proof. The agent must also verify runtime behavior matches expectations
15
-
16
- Examples of legitimate user asks:
17
- - "Does this visual design match what you wanted?" — subjective human judgment
18
- - "Is this the business logic you intended?" — domain knowledge only the user has
19
- - "Should we merge this to main?" — permission/authority decision
20
-
21
- When in doubt: if it can be executed by running a command, reading a file, or checking output, an agent does it. The user reviews the evidence the agent collected, not the raw behavior.
22
-
23
- ---
24
-
25
- ## Anti-Pattern: Collapsing Solver and Reviewer Into One
26
-
27
- A common failure mode: the session reads this skill, does good investigation work, writes a fix, then presents results directly to the user — skipping the Reviewer agent entirely. The Solver says "Restart X to see the change" and declares victory.
28
-
29
- This defeats the entire verification system. The Solver is biased toward their own fix. They wrote the code and believe it works. The Reviewer exists as an independent check.
30
-
31
- **The rule**: After the Solver commits their fix, you MUST spawn a separate Reviewer agent. The Reviewer reads FIX-SUMMARY.md, runs the verification gate, and either approves or sends it back. Only after the Reviewer approves do you present results to the user.
32
-
33
- If you find yourself writing "Root Cause / What Changed / How to Verify" without having spawned a Reviewer — stop. You're doing the anti-pattern. Spawn the Reviewer.
34
-
35
- ---
36
-
37
- ## Anti-Pattern: Structural Verification Masquerading as Live Verification
38
-
39
- Another common failure: the session verifies the fix by grepping the patched file for expected strings, checking that function references exist, or confirming config values are set. This is structural verification — it proves the code was written, not that it works.
40
-
41
- Example of structural verification pretending to be live:
42
- ```
43
- ✓ grep -c "doom_status patch start" cli.js → 1
44
- ✓ grep -c "doomStatuslineBackend" cli.js → 6
45
- ✓ node -e "require('cli.js')" → parses
46
- ```
47
-
48
- This proves the patch was applied and the file isn't syntactically broken. It does NOT prove the doom head renders visually. The grep checks are necessary but they are Phase 4 Step 3 (regression checks), not Phase 4 Step 4 (live verification).
49
-
50
- Live verification for this bug would be: launch Claude Code, wait for the statusline to render, capture a screenshot, confirm the doom head is visible. That's what the Reviewer must do for visual bugs.
51
-
52
- ---
53
-
54
- ## Fallback: Reviewer Cannot Restart the Process
55
-
56
- If the Reviewer literally cannot restart because it's running inside the process being fixed (e.g., debugging Claude Code from within Claude Code), try these alternatives before flagging BLOCKED:
57
-
58
- 1. **Launch a SEPARATE instance** via osascript/terminal:
59
- ```bash
60
- osascript -e 'tell application "Terminal" to do script "cd /path && claude --print \"hello\""'
61
- sleep 5
62
- screencapture -x /tmp/verification.png
63
- ```
64
- Then READ the screenshot to verify.
65
-
66
- 2. **Launch via background process** and capture output:
67
- ```bash
68
- nohup claude --print "test" > /tmp/claude-output.txt 2>&1 &
69
- sleep 5
70
- cat /tmp/claude-output.txt
71
- ```
72
-
73
- 3. **Use Playwright MCP** if available to screenshot a running instance.
74
-
75
- Only if ALL of these are impossible: flag as BLOCKED, tell the user exactly what to look for, why you couldn't verify it yourself, and what the expected visual result should be (with specifics, not "check if it works").
76
-
77
- ---
78
-
79
- ## Fallback: ftm-browse Not Installed
80
-
81
- When visual verification is needed for a web UI bug:
82
-
83
- ```bash
84
- PB="$HOME/.claude/skills/ftm-browse/bin/ftm-browse"
85
- ```
86
-
87
- If the binary does NOT exist at that path:
88
- - Fall back to Playwright MCP, Puppeteer, or screencapture
89
- - Do NOT fail the review
90
- - Record in REVIEW-VERDICT.md Verification Gate section: "Visual verification skipped — ftm-browse not installed."
91
- - Use whatever alternative is available
92
-
93
- ---
94
-
95
- ## Fallback: Exhausted All Hypotheses Without a Fix
96
-
97
- If the Solver exhausts all hypotheses and no fix is approved after 3 Solver-Reviewer iterations:
98
-
99
- 1. Do NOT invent new hypotheses without evidence
100
- 2. Present everything to the user: all hypotheses tested, all fix attempts, all review feedback
101
- 3. Ask for direction — the user may have domain context not available to the agents
102
- 4. If the user provides new information, restart from Phase 1 with the updated context
103
- 5. If the user wants to pair, switch to interactive debugging with all instrumentation and research as context
1
+ # Edge Cases, Anti-Patterns & Fallback Handling
2
+
3
+ ---
4
+
5
+ ## Anti-Pattern: Asking the User to Do Agent Work
6
+
7
+ This is the single most important rule of the war room: **never ask the user to perform a verification step that an agent could perform**.
8
+
9
+ Examples of violations:
10
+ - "Restart the application and check if the doom head appears" — an agent can launch the app, capture a screenshot, read the output, verify the rendering
11
+ - "Run `tail -f /tmp/debug.log` and look for entries" — an agent can read that file
12
+ - "Open a browser and check the UI" — an agent can use Playwright/Puppeteer to screenshot and inspect the DOM
13
+ - "Try running this command and let me know what happens" — an agent can run the command
14
+ - "All 103 tests pass!" without verifying the actual feature works — tests are a proxy, not proof. The agent must also verify runtime behavior matches expectations
15
+
16
+ Examples of legitimate user asks:
17
+ - "Does this visual design match what you wanted?" — subjective human judgment
18
+ - "Is this the business logic you intended?" — domain knowledge only the user has
19
+ - "Should we merge this to main?" — permission/authority decision
20
+
21
+ When in doubt: if it can be executed by running a command, reading a file, or checking output, an agent does it. The user reviews the evidence the agent collected, not the raw behavior.
22
+
23
+ ---
24
+
25
+ ## Anti-Pattern: Collapsing Solver and Reviewer Into One
26
+
27
+ A common failure mode: the session reads this skill, does good investigation work, writes a fix, then presents results directly to the user — skipping the Reviewer agent entirely. The Solver says "Restart X to see the change" and declares victory.
28
+
29
+ This defeats the entire verification system. The Solver is biased toward their own fix. They wrote the code and believe it works. The Reviewer exists as an independent check.
30
+
31
+ **The rule**: After the Solver commits their fix, you MUST spawn a separate Reviewer agent. The Reviewer reads FIX-SUMMARY.md, runs the verification gate, and either approves or sends it back. Only after the Reviewer approves do you present results to the user.
32
+
33
+ If you find yourself writing "Root Cause / What Changed / How to Verify" without having spawned a Reviewer — stop. You're doing the anti-pattern. Spawn the Reviewer.
34
+
35
+ ---
36
+
37
+ ## Anti-Pattern: Structural Verification Masquerading as Live Verification
38
+
39
+ Another common failure: the session verifies the fix by grepping the patched file for expected strings, checking that function references exist, or confirming config values are set. This is structural verification — it proves the code was written, not that it works.
40
+
41
+ Example of structural verification pretending to be live:
42
+ ```
43
+ ✓ grep -c "doom_status patch start" cli.js → 1
44
+ ✓ grep -c "doomStatuslineBackend" cli.js → 6
45
+ ✓ node -e "require('cli.js')" → parses
46
+ ```
47
+
48
+ This proves the patch was applied and the file isn't syntactically broken. It does NOT prove the doom head renders visually. The grep checks are necessary but they are Phase 4 Step 3 (regression checks), not Phase 4 Step 4 (live verification).
49
+
50
+ Live verification for this bug would be: launch Claude Code, wait for the statusline to render, capture a screenshot, confirm the doom head is visible. That's what the Reviewer must do for visual bugs.
51
+
52
+ ---
53
+
54
+ ## Fallback: Reviewer Cannot Restart the Process
55
+
56
+ If the Reviewer literally cannot restart because it's running inside the process being fixed (e.g., debugging Claude Code from within Claude Code), try these alternatives before flagging BLOCKED:
57
+
58
+ 1. **Launch a SEPARATE instance** via osascript/terminal:
59
+ ```bash
60
+ osascript -e 'tell application "Terminal" to do script "cd /path && claude --print \"hello\""'
61
+ sleep 5
62
+ screencapture -x /tmp/verification.png
63
+ ```
64
+ Then READ the screenshot to verify.
65
+
66
+ 2. **Launch via background process** and capture output:
67
+ ```bash
68
+ nohup claude --print "test" > /tmp/claude-output.txt 2>&1 &
69
+ sleep 5
70
+ cat /tmp/claude-output.txt
71
+ ```
72
+
73
+ 3. **Use Playwright MCP** if available to screenshot a running instance.
74
+
75
+ Only if ALL of these are impossible: flag as BLOCKED, tell the user exactly what to look for, why you couldn't verify it yourself, and what the expected visual result should be (with specifics, not "check if it works").
76
+
77
+ ---
78
+
79
+ ## Fallback: ftm-browse Not Installed
80
+
81
+ When visual verification is needed for a web UI bug:
82
+
83
+ ```bash
84
+ PB="$HOME/.claude/skills/ftm-browse/bin/ftm-browse"
85
+ ```
86
+
87
+ If the binary does NOT exist at that path:
88
+ - Fall back to Playwright MCP, Puppeteer, or screencapture
89
+ - Do NOT fail the review
90
+ - Record in REVIEW-VERDICT.md Verification Gate section: "Visual verification skipped — ftm-browse not installed."
91
+ - Use whatever alternative is available
92
+
93
+ ---
94
+
95
+ ## Fallback: Exhausted All Hypotheses Without a Fix
96
+
97
+ If the Solver exhausts all hypotheses and no fix is approved after 3 Solver-Reviewer iterations:
98
+
99
+ 1. Do NOT invent new hypotheses without evidence
100
+ 2. Present everything to the user: all hypotheses tested, all fix attempts, all review feedback
101
+ 3. Ask for direction — the user may have domain context not available to the agents
102
+ 4. If the user provides new information, restart from Phase 1 with the updated context
103
+ 5. If the user wants to pair, switch to interactive debugging with all instrumentation and research as context
package/ftm-debug.yml CHANGED
@@ -1,2 +1,2 @@
1
- name: ftm-debug
2
- description: Deep multi-vector debugging war room that launches parallel agent teams to instrument, research, reproduce, hypothesize, solve, and verify tricky bugs. Use when a bug is stubborn, multi-turn debugging hasn't worked, the user says "debug this deeply", "war room this", "I can't figure out why", "this is driving me crazy", "launch the debug team", or any situation where standard debugging is insufficient. Also triggers on "/ftm-debug". Covers any codebase — frontend, backend, CLI tools, native apps, build systems, anything. Do NOT use for simple one-step fixes — this is the heavy artillery for problems that resist normal debugging.
1
+ name: ftm-debug
2
+ description: Deep multi-vector debugging war room that launches parallel agent teams to instrument, research, reproduce, hypothesize, solve, and verify tricky bugs. Use when a bug is stubborn, multi-turn debugging hasn't worked, the user says "debug this deeply", "war room this", "I can't figure out why", "this is driving me crazy", "launch the debug team", or any situation where standard debugging is insufficient. Also triggers on "/ftm-debug". Covers any codebase — frontend, backend, CLI tools, native apps, build systems, anything. Do NOT use for simple one-step fixes — this is the heavy artillery for problems that resist normal debugging.