feed-the-machine 1.5.0 → 1.6.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 (224) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +170 -170
  3. package/bin/generate-manifest.mjs +463 -463
  4. package/bin/install.mjs +491 -491
  5. package/docs/HOOKS.md +243 -243
  6. package/docs/INBOX.md +233 -233
  7. package/ftm/SKILL.md +122 -122
  8. package/ftm-audit/SKILL.md +623 -541
  9. package/ftm-audit/references/protocols/PROJECT-PATTERNS.md +91 -91
  10. package/ftm-audit/references/protocols/RUNTIME-WIRING.md +66 -66
  11. package/ftm-audit/references/protocols/WIRING-CONTRACTS.md +135 -135
  12. package/ftm-audit/references/strategies/AUTO-FIX-STRATEGIES.md +69 -69
  13. package/ftm-audit/references/templates/REPORT-FORMAT.md +96 -96
  14. package/ftm-audit/scripts/run-knip.sh +23 -23
  15. package/ftm-audit.yml +2 -2
  16. package/ftm-brainstorm/SKILL.md +498 -498
  17. package/ftm-brainstorm/evals/evals.json +100 -100
  18. package/ftm-brainstorm/evals/promptfoo.yaml +109 -109
  19. package/ftm-brainstorm/references/agent-prompts.md +224 -224
  20. package/ftm-brainstorm/references/plan-template.md +121 -121
  21. package/ftm-brainstorm.yml +2 -2
  22. package/ftm-browse/SKILL.md +454 -454
  23. package/ftm-browse/daemon/browser-manager.ts +206 -206
  24. package/ftm-browse/daemon/bun.lock +30 -30
  25. package/ftm-browse/daemon/cli.ts +347 -347
  26. package/ftm-browse/daemon/commands.ts +410 -410
  27. package/ftm-browse/daemon/main.ts +357 -357
  28. package/ftm-browse/daemon/package.json +17 -17
  29. package/ftm-browse/daemon/server.ts +189 -189
  30. package/ftm-browse/daemon/snapshot.ts +519 -519
  31. package/ftm-browse/daemon/tsconfig.json +22 -22
  32. package/ftm-browse.yml +4 -4
  33. package/ftm-capture/SKILL.md +370 -370
  34. package/ftm-capture.yml +4 -4
  35. package/ftm-codex-gate/SKILL.md +361 -361
  36. package/ftm-codex-gate.yml +2 -2
  37. package/ftm-config/SKILL.md +345 -345
  38. package/ftm-config.default.yml +82 -80
  39. package/ftm-config.yml +2 -2
  40. package/ftm-council/SKILL.md +416 -416
  41. package/ftm-council/references/prompts/CLAUDE-INVESTIGATION.md +60 -60
  42. package/ftm-council/references/prompts/CODEX-INVESTIGATION.md +58 -58
  43. package/ftm-council/references/prompts/GEMINI-INVESTIGATION.md +58 -58
  44. package/ftm-council/references/prompts/REBUTTAL-TEMPLATE.md +57 -57
  45. package/ftm-council/references/protocols/PREREQUISITES.md +47 -47
  46. package/ftm-council/references/protocols/STEP-0-FRAMING.md +46 -46
  47. package/ftm-council.yml +2 -2
  48. package/ftm-dashboard/SKILL.md +163 -163
  49. package/ftm-dashboard.yml +4 -4
  50. package/ftm-debug/SKILL.md +1037 -1037
  51. package/ftm-debug/references/phases/PHASE-0-INTAKE.md +58 -58
  52. package/ftm-debug/references/phases/PHASE-1-TRIAGE.md +46 -46
  53. package/ftm-debug/references/phases/PHASE-2-WAR-ROOM-AGENTS.md +279 -279
  54. package/ftm-debug/references/phases/PHASE-3-TO-6-EXECUTION.md +436 -436
  55. package/ftm-debug/references/protocols/BLACKBOARD.md +86 -86
  56. package/ftm-debug/references/protocols/EDGE-CASES.md +103 -103
  57. package/ftm-debug.yml +2 -2
  58. package/ftm-diagram/SKILL.md +277 -277
  59. package/ftm-diagram.yml +2 -2
  60. package/ftm-executor/SKILL.md +777 -767
  61. package/ftm-executor/references/STYLE-TEMPLATE.md +73 -73
  62. package/ftm-executor/references/phases/PHASE-0-VERIFICATION.md +62 -62
  63. package/ftm-executor/references/phases/PHASE-2-AGENT-ASSEMBLY.md +34 -34
  64. package/ftm-executor/references/phases/PHASE-3-WORKTREES.md +38 -38
  65. package/ftm-executor/references/phases/PHASE-4-5-AUDIT.md +72 -72
  66. package/ftm-executor/references/phases/PHASE-4-DISPATCH.md +66 -66
  67. package/ftm-executor/references/phases/PHASE-5-5-CODEX-GATE.md +73 -73
  68. package/ftm-executor/references/protocols/DOCUMENTATION-BOOTSTRAP.md +36 -36
  69. package/ftm-executor/references/protocols/MODEL-PROFILE.md +59 -44
  70. package/ftm-executor/references/protocols/PROGRESS-TRACKING.md +66 -66
  71. package/ftm-executor/runtime/ftm-runtime.mjs +252 -252
  72. package/ftm-executor/runtime/package.json +8 -8
  73. package/ftm-executor.yml +2 -2
  74. package/ftm-git/SKILL.md +441 -441
  75. package/ftm-git/evals/evals.json +26 -26
  76. package/ftm-git/evals/promptfoo.yaml +75 -75
  77. package/ftm-git/hooks/post-commit-experience.sh +92 -92
  78. package/ftm-git/references/patterns/SECRET-PATTERNS.md +104 -104
  79. package/ftm-git/references/protocols/REMEDIATION.md +139 -139
  80. package/ftm-git/scripts/pre-commit-secrets.sh +110 -110
  81. package/ftm-git.yml +2 -2
  82. package/ftm-inbox/backend/adapters/_retry.py +64 -64
  83. package/ftm-inbox/backend/adapters/base.py +230 -230
  84. package/ftm-inbox/backend/adapters/freshservice.py +104 -104
  85. package/ftm-inbox/backend/adapters/gmail.py +125 -125
  86. package/ftm-inbox/backend/adapters/jira.py +136 -136
  87. package/ftm-inbox/backend/adapters/registry.py +192 -192
  88. package/ftm-inbox/backend/adapters/slack.py +110 -110
  89. package/ftm-inbox/backend/db/connection.py +54 -54
  90. package/ftm-inbox/backend/db/schema.py +78 -78
  91. package/ftm-inbox/backend/executor/__init__.py +7 -7
  92. package/ftm-inbox/backend/executor/engine.py +149 -149
  93. package/ftm-inbox/backend/executor/step_runner.py +98 -98
  94. package/ftm-inbox/backend/main.py +103 -103
  95. package/ftm-inbox/backend/models/__init__.py +1 -1
  96. package/ftm-inbox/backend/models/unified_task.py +36 -36
  97. package/ftm-inbox/backend/planner/__init__.py +6 -6
  98. package/ftm-inbox/backend/planner/generator.py +127 -127
  99. package/ftm-inbox/backend/planner/schema.py +34 -34
  100. package/ftm-inbox/backend/requirements.txt +5 -5
  101. package/ftm-inbox/backend/routes/execute.py +186 -186
  102. package/ftm-inbox/backend/routes/health.py +52 -52
  103. package/ftm-inbox/backend/routes/inbox.py +68 -68
  104. package/ftm-inbox/backend/routes/plan.py +271 -271
  105. package/ftm-inbox/bin/launchagent.mjs +91 -91
  106. package/ftm-inbox/bin/setup.mjs +188 -188
  107. package/ftm-inbox/bin/start.sh +10 -10
  108. package/ftm-inbox/bin/status.sh +17 -17
  109. package/ftm-inbox/bin/stop.sh +8 -8
  110. package/ftm-inbox/config.example.yml +55 -55
  111. package/ftm-inbox/package-lock.json +2898 -2898
  112. package/ftm-inbox/package.json +26 -26
  113. package/ftm-inbox/postcss.config.js +6 -6
  114. package/ftm-inbox/src/app.css +199 -199
  115. package/ftm-inbox/src/app.html +18 -18
  116. package/ftm-inbox/src/lib/api.ts +166 -166
  117. package/ftm-inbox/src/lib/components/ExecutionLog.svelte +81 -81
  118. package/ftm-inbox/src/lib/components/InboxFeed.svelte +143 -143
  119. package/ftm-inbox/src/lib/components/PlanStep.svelte +271 -271
  120. package/ftm-inbox/src/lib/components/PlanView.svelte +206 -206
  121. package/ftm-inbox/src/lib/components/StreamPanel.svelte +99 -99
  122. package/ftm-inbox/src/lib/components/TaskCard.svelte +190 -190
  123. package/ftm-inbox/src/lib/components/ui/EmptyState.svelte +63 -63
  124. package/ftm-inbox/src/lib/components/ui/KawaiiCard.svelte +86 -86
  125. package/ftm-inbox/src/lib/components/ui/PillButton.svelte +106 -106
  126. package/ftm-inbox/src/lib/components/ui/StatusBadge.svelte +67 -67
  127. package/ftm-inbox/src/lib/components/ui/StreamDrawer.svelte +149 -149
  128. package/ftm-inbox/src/lib/components/ui/ThemeToggle.svelte +80 -80
  129. package/ftm-inbox/src/lib/theme.ts +47 -47
  130. package/ftm-inbox/src/routes/+layout.svelte +76 -76
  131. package/ftm-inbox/src/routes/+page.svelte +401 -401
  132. package/ftm-inbox/svelte.config.js +12 -12
  133. package/ftm-inbox/tailwind.config.ts +63 -63
  134. package/ftm-inbox/tsconfig.json +13 -13
  135. package/ftm-inbox/vite.config.ts +6 -6
  136. package/ftm-intent/SKILL.md +241 -241
  137. package/ftm-intent.yml +2 -2
  138. package/ftm-manifest.json +3794 -3794
  139. package/ftm-map/SKILL.md +291 -291
  140. package/ftm-map/scripts/db.py +712 -712
  141. package/ftm-map/scripts/index.py +415 -415
  142. package/ftm-map/scripts/parser.py +224 -224
  143. package/ftm-map/scripts/queries/go-tags.scm +20 -20
  144. package/ftm-map/scripts/queries/javascript-tags.scm +35 -35
  145. package/ftm-map/scripts/queries/python-tags.scm +31 -31
  146. package/ftm-map/scripts/queries/ruby-tags.scm +19 -19
  147. package/ftm-map/scripts/queries/rust-tags.scm +37 -37
  148. package/ftm-map/scripts/queries/typescript-tags.scm +41 -41
  149. package/ftm-map/scripts/query.py +301 -301
  150. package/ftm-map/scripts/ranker.py +377 -377
  151. package/ftm-map/scripts/requirements.txt +5 -5
  152. package/ftm-map/scripts/setup-hooks.sh +27 -27
  153. package/ftm-map/scripts/setup.sh +56 -56
  154. package/ftm-map/scripts/test_db.py +364 -364
  155. package/ftm-map/scripts/test_parser.py +174 -174
  156. package/ftm-map/scripts/test_query.py +183 -183
  157. package/ftm-map/scripts/test_ranker.py +199 -199
  158. package/ftm-map/scripts/views.py +591 -591
  159. package/ftm-map.yml +2 -2
  160. package/ftm-mind/SKILL.md +1943 -1943
  161. package/ftm-mind/evals/promptfoo.yaml +142 -142
  162. package/ftm-mind/references/blackboard-schema.md +328 -328
  163. package/ftm-mind/references/complexity-guide.md +110 -110
  164. package/ftm-mind/references/event-registry.md +319 -319
  165. package/ftm-mind/references/mcp-inventory.md +296 -296
  166. package/ftm-mind/references/protocols/COMPLEXITY-SIZING.md +72 -72
  167. package/ftm-mind/references/protocols/MCP-HEURISTICS.md +32 -32
  168. package/ftm-mind/references/protocols/PLAN-APPROVAL.md +80 -80
  169. package/ftm-mind/references/reflexion-protocol.md +249 -249
  170. package/ftm-mind/references/routing/SCENARIOS.md +22 -22
  171. package/ftm-mind/references/routing-scenarios.md +35 -35
  172. package/ftm-mind.yml +2 -2
  173. package/ftm-pause/SKILL.md +395 -395
  174. package/ftm-pause/references/protocols/SKILL-RESTORE-PROTOCOLS.md +186 -186
  175. package/ftm-pause/references/protocols/VALIDATION.md +80 -80
  176. package/ftm-pause.yml +2 -2
  177. package/ftm-researcher/SKILL.md +275 -275
  178. package/ftm-researcher/evals/agent-diversity.yaml +17 -17
  179. package/ftm-researcher/evals/synthesis-quality.yaml +12 -12
  180. package/ftm-researcher/evals/trigger-accuracy.yaml +39 -39
  181. package/ftm-researcher/references/adaptive-search.md +116 -116
  182. package/ftm-researcher/references/agent-prompts.md +193 -193
  183. package/ftm-researcher/references/council-integration.md +193 -193
  184. package/ftm-researcher/references/output-format.md +203 -203
  185. package/ftm-researcher/references/synthesis-pipeline.md +165 -165
  186. package/ftm-researcher/scripts/score_credibility.py +234 -234
  187. package/ftm-researcher/scripts/validate_research.py +92 -92
  188. package/ftm-researcher.yml +2 -2
  189. package/ftm-resume/SKILL.md +518 -518
  190. package/ftm-resume/references/protocols/VALIDATION.md +172 -172
  191. package/ftm-resume.yml +2 -2
  192. package/ftm-retro/SKILL.md +380 -380
  193. package/ftm-retro/references/protocols/SCORING-RUBRICS.md +89 -89
  194. package/ftm-retro/references/templates/REPORT-FORMAT.md +109 -109
  195. package/ftm-retro.yml +2 -2
  196. package/ftm-routine/SKILL.md +170 -170
  197. package/ftm-routine.yml +4 -4
  198. package/ftm-state/blackboard/capabilities.json +5 -5
  199. package/ftm-state/blackboard/capabilities.schema.json +27 -27
  200. package/ftm-state/blackboard/context.json +23 -23
  201. package/ftm-state/blackboard/experiences/index.json +9 -9
  202. package/ftm-state/blackboard/patterns.json +6 -6
  203. package/ftm-state/schemas/context.schema.json +130 -130
  204. package/ftm-state/schemas/experience-index.schema.json +77 -77
  205. package/ftm-state/schemas/experience.schema.json +78 -78
  206. package/ftm-state/schemas/patterns.schema.json +44 -44
  207. package/ftm-upgrade/SKILL.md +194 -194
  208. package/ftm-upgrade/scripts/check-version.sh +76 -76
  209. package/ftm-upgrade/scripts/upgrade.sh +143 -143
  210. package/ftm-upgrade.yml +2 -2
  211. package/ftm-verify.yml +2 -2
  212. package/ftm.yml +2 -2
  213. package/hooks/ftm-blackboard-enforcer.sh +93 -93
  214. package/hooks/ftm-discovery-reminder.sh +90 -90
  215. package/hooks/ftm-drafts-gate.sh +61 -61
  216. package/hooks/ftm-event-logger.mjs +107 -107
  217. package/hooks/ftm-map-autodetect.sh +79 -79
  218. package/hooks/ftm-pending-sync-check.sh +22 -22
  219. package/hooks/ftm-plan-gate.sh +92 -92
  220. package/hooks/ftm-post-commit-trigger.sh +57 -57
  221. package/hooks/settings-template.json +81 -81
  222. package/install.sh +363 -363
  223. package/package.json +84 -84
  224. 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.