feed-the-machine 1.6.1 → 1.7.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (272) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +262 -170
  3. package/bin/__pycache__/tasks_db.cpython-314.pyc +0 -0
  4. package/bin/brain.py +1340 -0
  5. package/bin/convert_claude_skills_to_codex.py +490 -0
  6. package/bin/generate-manifest.mjs +463 -463
  7. package/bin/harden_codex_skills.py +141 -0
  8. package/bin/install.mjs +491 -491
  9. package/bin/migrate-eng-buddy-data.py +875 -0
  10. package/bin/playbook_engine/__init__.py +1 -0
  11. package/bin/playbook_engine/conftest.py +8 -0
  12. package/bin/playbook_engine/extractor.py +33 -0
  13. package/bin/playbook_engine/manager.py +102 -0
  14. package/bin/playbook_engine/models.py +84 -0
  15. package/bin/playbook_engine/registry.py +35 -0
  16. package/bin/playbook_engine/test_extractor.py +72 -0
  17. package/bin/playbook_engine/test_integration.py +129 -0
  18. package/bin/playbook_engine/test_manager.py +85 -0
  19. package/bin/playbook_engine/test_models.py +166 -0
  20. package/bin/playbook_engine/test_registry.py +67 -0
  21. package/bin/playbook_engine/test_tracer.py +86 -0
  22. package/bin/playbook_engine/tracer.py +93 -0
  23. package/bin/tasks_db.py +456 -0
  24. package/docs/HOOKS.md +243 -243
  25. package/docs/INBOX.md +233 -233
  26. package/ftm/SKILL.md +125 -122
  27. package/ftm-audit/SKILL.md +673 -623
  28. package/ftm-audit/references/protocols/PROJECT-PATTERNS.md +91 -91
  29. package/ftm-audit/references/protocols/RUNTIME-WIRING.md +66 -66
  30. package/ftm-audit/references/protocols/WIRING-CONTRACTS.md +135 -135
  31. package/ftm-audit/references/strategies/AUTO-FIX-STRATEGIES.md +69 -69
  32. package/ftm-audit/references/templates/REPORT-FORMAT.md +96 -96
  33. package/ftm-audit/scripts/run-knip.sh +23 -23
  34. package/ftm-audit.yml +2 -2
  35. package/ftm-brainstorm/SKILL.md +1003 -498
  36. package/ftm-brainstorm/evals/evals.json +180 -100
  37. package/ftm-brainstorm/evals/promptfoo.yaml +109 -109
  38. package/ftm-brainstorm/references/agent-prompts.md +552 -224
  39. package/ftm-brainstorm/references/plan-template.md +209 -121
  40. package/ftm-brainstorm.yml +2 -2
  41. package/ftm-browse/SKILL.md +454 -454
  42. package/ftm-browse/daemon/browser-manager.ts +206 -206
  43. package/ftm-browse/daemon/bun.lock +30 -30
  44. package/ftm-browse/daemon/cli.ts +347 -347
  45. package/ftm-browse/daemon/commands.ts +410 -410
  46. package/ftm-browse/daemon/main.ts +357 -357
  47. package/ftm-browse/daemon/package.json +17 -17
  48. package/ftm-browse/daemon/server.ts +189 -189
  49. package/ftm-browse/daemon/snapshot.ts +519 -519
  50. package/ftm-browse/daemon/tsconfig.json +22 -22
  51. package/ftm-browse.yml +4 -4
  52. package/ftm-capture/SKILL.md +370 -370
  53. package/ftm-capture.yml +4 -4
  54. package/ftm-codex-gate/SKILL.md +361 -361
  55. package/ftm-codex-gate.yml +2 -2
  56. package/ftm-config/SKILL.md +422 -345
  57. package/ftm-config.default.yml +125 -82
  58. package/ftm-config.yml +44 -2
  59. package/ftm-council/SKILL.md +416 -416
  60. package/ftm-council/references/prompts/CLAUDE-INVESTIGATION.md +60 -60
  61. package/ftm-council/references/prompts/CODEX-INVESTIGATION.md +58 -58
  62. package/ftm-council/references/prompts/GEMINI-INVESTIGATION.md +58 -58
  63. package/ftm-council/references/prompts/REBUTTAL-TEMPLATE.md +57 -57
  64. package/ftm-council/references/protocols/PREREQUISITES.md +47 -47
  65. package/ftm-council/references/protocols/STEP-0-FRAMING.md +46 -46
  66. package/ftm-council-chat.yml +2 -0
  67. package/ftm-council.yml +2 -2
  68. package/ftm-dashboard/SKILL.md +163 -163
  69. package/ftm-dashboard.yml +4 -4
  70. package/ftm-debug/SKILL.md +1037 -1037
  71. package/ftm-debug/references/phases/PHASE-0-INTAKE.md +58 -58
  72. package/ftm-debug/references/phases/PHASE-1-TRIAGE.md +46 -46
  73. package/ftm-debug/references/phases/PHASE-2-WAR-ROOM-AGENTS.md +279 -279
  74. package/ftm-debug/references/phases/PHASE-3-TO-6-EXECUTION.md +436 -436
  75. package/ftm-debug/references/protocols/BLACKBOARD.md +86 -86
  76. package/ftm-debug/references/protocols/EDGE-CASES.md +103 -103
  77. package/ftm-debug.yml +2 -2
  78. package/ftm-diagram/SKILL.md +277 -277
  79. package/ftm-diagram.yml +2 -2
  80. package/ftm-executor/SKILL.md +777 -777
  81. package/ftm-executor/references/STYLE-TEMPLATE.md +73 -73
  82. package/ftm-executor/references/phases/PHASE-0-VERIFICATION.md +62 -62
  83. package/ftm-executor/references/phases/PHASE-2-AGENT-ASSEMBLY.md +34 -34
  84. package/ftm-executor/references/phases/PHASE-3-WORKTREES.md +38 -38
  85. package/ftm-executor/references/phases/PHASE-4-5-AUDIT.md +81 -72
  86. package/ftm-executor/references/phases/PHASE-4-DISPATCH.md +66 -66
  87. package/ftm-executor/references/phases/PHASE-5-5-CODEX-GATE.md +73 -73
  88. package/ftm-executor/references/protocols/DOCUMENTATION-BOOTSTRAP.md +36 -36
  89. package/ftm-executor/references/protocols/MODEL-PROFILE.md +59 -59
  90. package/ftm-executor/references/protocols/PROGRESS-TRACKING.md +66 -66
  91. package/ftm-executor/runtime/ftm-runtime.mjs +252 -252
  92. package/ftm-executor/runtime/package.json +8 -8
  93. package/ftm-executor.yml +2 -2
  94. package/ftm-git/SKILL.md +441 -441
  95. package/ftm-git/evals/evals.json +26 -26
  96. package/ftm-git/evals/promptfoo.yaml +75 -75
  97. package/ftm-git/hooks/post-commit-experience.sh +92 -92
  98. package/ftm-git/references/patterns/SECRET-PATTERNS.md +104 -104
  99. package/ftm-git/references/protocols/REMEDIATION.md +139 -139
  100. package/ftm-git/scripts/pre-commit-secrets.sh +110 -110
  101. package/ftm-git.yml +2 -2
  102. package/ftm-inbox/backend/__pycache__/main.cpython-314.pyc +0 -0
  103. package/ftm-inbox/backend/adapters/_retry.py +64 -64
  104. package/ftm-inbox/backend/adapters/base.py +230 -230
  105. package/ftm-inbox/backend/adapters/freshservice.py +104 -104
  106. package/ftm-inbox/backend/adapters/gmail.py +125 -125
  107. package/ftm-inbox/backend/adapters/jira.py +136 -136
  108. package/ftm-inbox/backend/adapters/registry.py +192 -192
  109. package/ftm-inbox/backend/adapters/slack.py +110 -110
  110. package/ftm-inbox/backend/db/connection.py +54 -54
  111. package/ftm-inbox/backend/db/schema.py +78 -78
  112. package/ftm-inbox/backend/executor/__init__.py +7 -7
  113. package/ftm-inbox/backend/executor/engine.py +149 -149
  114. package/ftm-inbox/backend/executor/step_runner.py +98 -98
  115. package/ftm-inbox/backend/main.py +103 -103
  116. package/ftm-inbox/backend/models/__init__.py +1 -1
  117. package/ftm-inbox/backend/models/unified_task.py +36 -36
  118. package/ftm-inbox/backend/planner/__init__.py +6 -6
  119. package/ftm-inbox/backend/planner/__pycache__/__init__.cpython-314.pyc +0 -0
  120. package/ftm-inbox/backend/planner/__pycache__/generator.cpython-314.pyc +0 -0
  121. package/ftm-inbox/backend/planner/__pycache__/schema.cpython-314.pyc +0 -0
  122. package/ftm-inbox/backend/planner/generator.py +127 -127
  123. package/ftm-inbox/backend/planner/schema.py +34 -34
  124. package/ftm-inbox/backend/requirements.txt +5 -5
  125. package/ftm-inbox/backend/routes/__pycache__/plan.cpython-314.pyc +0 -0
  126. package/ftm-inbox/backend/routes/execute.py +186 -186
  127. package/ftm-inbox/backend/routes/health.py +52 -52
  128. package/ftm-inbox/backend/routes/inbox.py +68 -68
  129. package/ftm-inbox/backend/routes/plan.py +271 -271
  130. package/ftm-inbox/bin/launchagent.mjs +91 -91
  131. package/ftm-inbox/bin/setup.mjs +188 -188
  132. package/ftm-inbox/bin/start.sh +10 -10
  133. package/ftm-inbox/bin/status.sh +17 -17
  134. package/ftm-inbox/bin/stop.sh +8 -8
  135. package/ftm-inbox/config.example.yml +55 -55
  136. package/ftm-inbox/package-lock.json +2898 -2898
  137. package/ftm-inbox/package.json +26 -26
  138. package/ftm-inbox/postcss.config.js +6 -6
  139. package/ftm-inbox/src/app.css +199 -199
  140. package/ftm-inbox/src/app.html +18 -18
  141. package/ftm-inbox/src/lib/api.ts +166 -166
  142. package/ftm-inbox/src/lib/components/ExecutionLog.svelte +81 -81
  143. package/ftm-inbox/src/lib/components/InboxFeed.svelte +143 -143
  144. package/ftm-inbox/src/lib/components/PlanStep.svelte +271 -271
  145. package/ftm-inbox/src/lib/components/PlanView.svelte +206 -206
  146. package/ftm-inbox/src/lib/components/StreamPanel.svelte +99 -99
  147. package/ftm-inbox/src/lib/components/TaskCard.svelte +190 -190
  148. package/ftm-inbox/src/lib/components/ui/EmptyState.svelte +63 -63
  149. package/ftm-inbox/src/lib/components/ui/KawaiiCard.svelte +86 -86
  150. package/ftm-inbox/src/lib/components/ui/PillButton.svelte +106 -106
  151. package/ftm-inbox/src/lib/components/ui/StatusBadge.svelte +67 -67
  152. package/ftm-inbox/src/lib/components/ui/StreamDrawer.svelte +149 -149
  153. package/ftm-inbox/src/lib/components/ui/ThemeToggle.svelte +80 -80
  154. package/ftm-inbox/src/lib/theme.ts +47 -47
  155. package/ftm-inbox/src/routes/+layout.svelte +76 -76
  156. package/ftm-inbox/src/routes/+page.svelte +401 -401
  157. package/ftm-inbox/svelte.config.js +12 -12
  158. package/ftm-inbox/tailwind.config.ts +63 -63
  159. package/ftm-inbox/tsconfig.json +13 -13
  160. package/ftm-inbox/vite.config.ts +6 -6
  161. package/ftm-intent/SKILL.md +241 -241
  162. package/ftm-intent.yml +2 -2
  163. package/ftm-manifest.json +3794 -3794
  164. package/ftm-map/SKILL.md +291 -291
  165. package/ftm-map/scripts/db.py +712 -712
  166. package/ftm-map/scripts/index.py +415 -415
  167. package/ftm-map/scripts/parser.py +224 -224
  168. package/ftm-map/scripts/queries/go-tags.scm +20 -20
  169. package/ftm-map/scripts/queries/javascript-tags.scm +35 -35
  170. package/ftm-map/scripts/queries/python-tags.scm +31 -31
  171. package/ftm-map/scripts/queries/ruby-tags.scm +19 -19
  172. package/ftm-map/scripts/queries/rust-tags.scm +37 -37
  173. package/ftm-map/scripts/queries/typescript-tags.scm +41 -41
  174. package/ftm-map/scripts/query.py +301 -301
  175. package/ftm-map/scripts/ranker.py +377 -377
  176. package/ftm-map/scripts/requirements.txt +5 -5
  177. package/ftm-map/scripts/setup-hooks.sh +27 -27
  178. package/ftm-map/scripts/setup.sh +56 -56
  179. package/ftm-map/scripts/test_db.py +364 -364
  180. package/ftm-map/scripts/test_parser.py +174 -174
  181. package/ftm-map/scripts/test_query.py +183 -183
  182. package/ftm-map/scripts/test_ranker.py +199 -199
  183. package/ftm-map/scripts/views.py +591 -591
  184. package/ftm-map.yml +2 -2
  185. package/ftm-mind/SKILL.md +201 -1943
  186. package/ftm-mind/evals/promptfoo.yaml +142 -142
  187. package/ftm-mind/references/blackboard-protocol.md +110 -0
  188. package/ftm-mind/references/blackboard-schema.md +328 -328
  189. package/ftm-mind/references/complexity-guide.md +110 -110
  190. package/ftm-mind/references/complexity-sizing.md +138 -0
  191. package/ftm-mind/references/decide-act-protocol.md +172 -0
  192. package/ftm-mind/references/direct-execution.md +51 -0
  193. package/ftm-mind/references/environment-discovery.md +77 -0
  194. package/ftm-mind/references/event-registry.md +319 -319
  195. package/ftm-mind/references/mcp-inventory.md +300 -296
  196. package/ftm-mind/references/ops-routing.md +47 -0
  197. package/ftm-mind/references/orient-protocol.md +234 -0
  198. package/ftm-mind/references/personality.md +40 -0
  199. package/ftm-mind/references/protocols/COMPLEXITY-SIZING.md +72 -72
  200. package/ftm-mind/references/protocols/MCP-HEURISTICS.md +32 -32
  201. package/ftm-mind/references/protocols/PLAN-APPROVAL.md +80 -80
  202. package/ftm-mind/references/reflexion-protocol.md +249 -249
  203. package/ftm-mind/references/routing/SCENARIOS.md +22 -22
  204. package/ftm-mind/references/routing-scenarios.md +35 -35
  205. package/ftm-mind.yml +2 -2
  206. package/ftm-ops.yml +4 -0
  207. package/ftm-pause/SKILL.md +395 -395
  208. package/ftm-pause/references/protocols/SKILL-RESTORE-PROTOCOLS.md +186 -186
  209. package/ftm-pause/references/protocols/VALIDATION.md +80 -80
  210. package/ftm-pause.yml +2 -2
  211. package/ftm-researcher/SKILL.md +275 -275
  212. package/ftm-researcher/evals/agent-diversity.yaml +17 -17
  213. package/ftm-researcher/evals/synthesis-quality.yaml +12 -12
  214. package/ftm-researcher/evals/trigger-accuracy.yaml +39 -39
  215. package/ftm-researcher/references/adaptive-search.md +116 -116
  216. package/ftm-researcher/references/agent-prompts.md +193 -193
  217. package/ftm-researcher/references/council-integration.md +193 -193
  218. package/ftm-researcher/references/output-format.md +203 -203
  219. package/ftm-researcher/references/synthesis-pipeline.md +165 -165
  220. package/ftm-researcher/scripts/score_credibility.py +234 -234
  221. package/ftm-researcher/scripts/validate_research.py +92 -92
  222. package/ftm-researcher.yml +2 -2
  223. package/ftm-resume/SKILL.md +518 -518
  224. package/ftm-resume/references/protocols/VALIDATION.md +172 -172
  225. package/ftm-resume.yml +2 -2
  226. package/ftm-retro/SKILL.md +380 -380
  227. package/ftm-retro/references/protocols/SCORING-RUBRICS.md +89 -89
  228. package/ftm-retro/references/templates/REPORT-FORMAT.md +109 -109
  229. package/ftm-retro.yml +2 -2
  230. package/ftm-routine/SKILL.md +170 -170
  231. package/ftm-routine.yml +4 -4
  232. package/ftm-state/blackboard/capabilities.json +5 -5
  233. package/ftm-state/blackboard/capabilities.schema.json +27 -27
  234. package/ftm-state/blackboard/context.json +37 -23
  235. package/ftm-state/blackboard/experiences/doom-statusline-fix.json +26 -0
  236. package/ftm-state/blackboard/experiences/hackathon-pages-site.json +26 -0
  237. package/ftm-state/blackboard/experiences/hindsight-sso-kickoff.json +42 -0
  238. package/ftm-state/blackboard/experiences/index.json +58 -9
  239. package/ftm-state/blackboard/experiences/learning-ragnarok-api-access.json +23 -0
  240. package/ftm-state/blackboard/experiences/nordlayer-members-auto-assign.json +26 -0
  241. package/ftm-state/blackboard/experiences/saml2aws-stale-session-fix.json +41 -0
  242. package/ftm-state/blackboard/patterns.json +6 -6
  243. package/ftm-state/schemas/context.schema.json +130 -130
  244. package/ftm-state/schemas/experience-index.schema.json +77 -77
  245. package/ftm-state/schemas/experience.schema.json +78 -78
  246. package/ftm-state/schemas/patterns.schema.json +44 -44
  247. package/ftm-upgrade/SKILL.md +194 -194
  248. package/ftm-upgrade/scripts/check-version.sh +76 -76
  249. package/ftm-upgrade/scripts/upgrade.sh +143 -143
  250. package/ftm-upgrade.yml +2 -2
  251. package/ftm-verify.yml +2 -2
  252. package/ftm.yml +2 -2
  253. package/hooks/ftm-auto-log.sh +137 -0
  254. package/hooks/ftm-blackboard-enforcer.sh +93 -93
  255. package/hooks/ftm-discovery-reminder.sh +90 -90
  256. package/hooks/ftm-drafts-gate.sh +61 -61
  257. package/hooks/ftm-event-logger.mjs +107 -107
  258. package/hooks/ftm-install-hooks.sh +240 -0
  259. package/hooks/ftm-learning-capture.sh +117 -0
  260. package/hooks/ftm-map-autodetect.sh +79 -79
  261. package/hooks/ftm-pending-sync-check.sh +22 -22
  262. package/hooks/ftm-plan-gate.sh +92 -92
  263. package/hooks/ftm-post-commit-trigger.sh +57 -57
  264. package/hooks/ftm-post-compaction.sh +138 -0
  265. package/hooks/ftm-pre-compaction.sh +147 -0
  266. package/hooks/ftm-session-end.sh +52 -0
  267. package/hooks/ftm-session-snapshot.sh +213 -0
  268. package/hooks/ftm-task-loader.sh +100 -0
  269. package/hooks/settings-template.json +91 -81
  270. package/install.sh +363 -363
  271. package/package.json +84 -84
  272. 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.