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.
- package/LICENSE +21 -21
- package/README.md +170 -170
- package/bin/generate-manifest.mjs +463 -463
- package/bin/install.mjs +491 -491
- package/docs/HOOKS.md +243 -243
- package/docs/INBOX.md +233 -233
- package/ftm/SKILL.md +122 -122
- package/ftm-audit/SKILL.md +623 -541
- package/ftm-audit/references/protocols/PROJECT-PATTERNS.md +91 -91
- package/ftm-audit/references/protocols/RUNTIME-WIRING.md +66 -66
- package/ftm-audit/references/protocols/WIRING-CONTRACTS.md +135 -135
- package/ftm-audit/references/strategies/AUTO-FIX-STRATEGIES.md +69 -69
- package/ftm-audit/references/templates/REPORT-FORMAT.md +96 -96
- package/ftm-audit/scripts/run-knip.sh +23 -23
- package/ftm-audit.yml +2 -2
- package/ftm-brainstorm/SKILL.md +498 -498
- package/ftm-brainstorm/evals/evals.json +100 -100
- package/ftm-brainstorm/evals/promptfoo.yaml +109 -109
- package/ftm-brainstorm/references/agent-prompts.md +224 -224
- package/ftm-brainstorm/references/plan-template.md +121 -121
- package/ftm-brainstorm.yml +2 -2
- package/ftm-browse/SKILL.md +454 -454
- package/ftm-browse/daemon/browser-manager.ts +206 -206
- package/ftm-browse/daemon/bun.lock +30 -30
- package/ftm-browse/daemon/cli.ts +347 -347
- package/ftm-browse/daemon/commands.ts +410 -410
- package/ftm-browse/daemon/main.ts +357 -357
- package/ftm-browse/daemon/package.json +17 -17
- package/ftm-browse/daemon/server.ts +189 -189
- package/ftm-browse/daemon/snapshot.ts +519 -519
- package/ftm-browse/daemon/tsconfig.json +22 -22
- package/ftm-browse.yml +4 -4
- package/ftm-capture/SKILL.md +370 -370
- package/ftm-capture.yml +4 -4
- package/ftm-codex-gate/SKILL.md +361 -361
- package/ftm-codex-gate.yml +2 -2
- package/ftm-config/SKILL.md +345 -345
- package/ftm-config.default.yml +82 -80
- package/ftm-config.yml +2 -2
- package/ftm-council/SKILL.md +416 -416
- package/ftm-council/references/prompts/CLAUDE-INVESTIGATION.md +60 -60
- package/ftm-council/references/prompts/CODEX-INVESTIGATION.md +58 -58
- package/ftm-council/references/prompts/GEMINI-INVESTIGATION.md +58 -58
- package/ftm-council/references/prompts/REBUTTAL-TEMPLATE.md +57 -57
- package/ftm-council/references/protocols/PREREQUISITES.md +47 -47
- package/ftm-council/references/protocols/STEP-0-FRAMING.md +46 -46
- package/ftm-council.yml +2 -2
- package/ftm-dashboard/SKILL.md +163 -163
- package/ftm-dashboard.yml +4 -4
- package/ftm-debug/SKILL.md +1037 -1037
- package/ftm-debug/references/phases/PHASE-0-INTAKE.md +58 -58
- package/ftm-debug/references/phases/PHASE-1-TRIAGE.md +46 -46
- package/ftm-debug/references/phases/PHASE-2-WAR-ROOM-AGENTS.md +279 -279
- package/ftm-debug/references/phases/PHASE-3-TO-6-EXECUTION.md +436 -436
- package/ftm-debug/references/protocols/BLACKBOARD.md +86 -86
- package/ftm-debug/references/protocols/EDGE-CASES.md +103 -103
- package/ftm-debug.yml +2 -2
- package/ftm-diagram/SKILL.md +277 -277
- package/ftm-diagram.yml +2 -2
- package/ftm-executor/SKILL.md +777 -767
- package/ftm-executor/references/STYLE-TEMPLATE.md +73 -73
- package/ftm-executor/references/phases/PHASE-0-VERIFICATION.md +62 -62
- package/ftm-executor/references/phases/PHASE-2-AGENT-ASSEMBLY.md +34 -34
- package/ftm-executor/references/phases/PHASE-3-WORKTREES.md +38 -38
- package/ftm-executor/references/phases/PHASE-4-5-AUDIT.md +72 -72
- package/ftm-executor/references/phases/PHASE-4-DISPATCH.md +66 -66
- package/ftm-executor/references/phases/PHASE-5-5-CODEX-GATE.md +73 -73
- package/ftm-executor/references/protocols/DOCUMENTATION-BOOTSTRAP.md +36 -36
- package/ftm-executor/references/protocols/MODEL-PROFILE.md +59 -44
- package/ftm-executor/references/protocols/PROGRESS-TRACKING.md +66 -66
- package/ftm-executor/runtime/ftm-runtime.mjs +252 -252
- package/ftm-executor/runtime/package.json +8 -8
- package/ftm-executor.yml +2 -2
- package/ftm-git/SKILL.md +441 -441
- package/ftm-git/evals/evals.json +26 -26
- package/ftm-git/evals/promptfoo.yaml +75 -75
- package/ftm-git/hooks/post-commit-experience.sh +92 -92
- package/ftm-git/references/patterns/SECRET-PATTERNS.md +104 -104
- package/ftm-git/references/protocols/REMEDIATION.md +139 -139
- package/ftm-git/scripts/pre-commit-secrets.sh +110 -110
- package/ftm-git.yml +2 -2
- package/ftm-inbox/backend/adapters/_retry.py +64 -64
- package/ftm-inbox/backend/adapters/base.py +230 -230
- package/ftm-inbox/backend/adapters/freshservice.py +104 -104
- package/ftm-inbox/backend/adapters/gmail.py +125 -125
- package/ftm-inbox/backend/adapters/jira.py +136 -136
- package/ftm-inbox/backend/adapters/registry.py +192 -192
- package/ftm-inbox/backend/adapters/slack.py +110 -110
- package/ftm-inbox/backend/db/connection.py +54 -54
- package/ftm-inbox/backend/db/schema.py +78 -78
- package/ftm-inbox/backend/executor/__init__.py +7 -7
- package/ftm-inbox/backend/executor/engine.py +149 -149
- package/ftm-inbox/backend/executor/step_runner.py +98 -98
- package/ftm-inbox/backend/main.py +103 -103
- package/ftm-inbox/backend/models/__init__.py +1 -1
- package/ftm-inbox/backend/models/unified_task.py +36 -36
- package/ftm-inbox/backend/planner/__init__.py +6 -6
- package/ftm-inbox/backend/planner/generator.py +127 -127
- package/ftm-inbox/backend/planner/schema.py +34 -34
- package/ftm-inbox/backend/requirements.txt +5 -5
- package/ftm-inbox/backend/routes/execute.py +186 -186
- package/ftm-inbox/backend/routes/health.py +52 -52
- package/ftm-inbox/backend/routes/inbox.py +68 -68
- package/ftm-inbox/backend/routes/plan.py +271 -271
- package/ftm-inbox/bin/launchagent.mjs +91 -91
- package/ftm-inbox/bin/setup.mjs +188 -188
- package/ftm-inbox/bin/start.sh +10 -10
- package/ftm-inbox/bin/status.sh +17 -17
- package/ftm-inbox/bin/stop.sh +8 -8
- package/ftm-inbox/config.example.yml +55 -55
- package/ftm-inbox/package-lock.json +2898 -2898
- package/ftm-inbox/package.json +26 -26
- package/ftm-inbox/postcss.config.js +6 -6
- package/ftm-inbox/src/app.css +199 -199
- package/ftm-inbox/src/app.html +18 -18
- package/ftm-inbox/src/lib/api.ts +166 -166
- package/ftm-inbox/src/lib/components/ExecutionLog.svelte +81 -81
- package/ftm-inbox/src/lib/components/InboxFeed.svelte +143 -143
- package/ftm-inbox/src/lib/components/PlanStep.svelte +271 -271
- package/ftm-inbox/src/lib/components/PlanView.svelte +206 -206
- package/ftm-inbox/src/lib/components/StreamPanel.svelte +99 -99
- package/ftm-inbox/src/lib/components/TaskCard.svelte +190 -190
- package/ftm-inbox/src/lib/components/ui/EmptyState.svelte +63 -63
- package/ftm-inbox/src/lib/components/ui/KawaiiCard.svelte +86 -86
- package/ftm-inbox/src/lib/components/ui/PillButton.svelte +106 -106
- package/ftm-inbox/src/lib/components/ui/StatusBadge.svelte +67 -67
- package/ftm-inbox/src/lib/components/ui/StreamDrawer.svelte +149 -149
- package/ftm-inbox/src/lib/components/ui/ThemeToggle.svelte +80 -80
- package/ftm-inbox/src/lib/theme.ts +47 -47
- package/ftm-inbox/src/routes/+layout.svelte +76 -76
- package/ftm-inbox/src/routes/+page.svelte +401 -401
- package/ftm-inbox/svelte.config.js +12 -12
- package/ftm-inbox/tailwind.config.ts +63 -63
- package/ftm-inbox/tsconfig.json +13 -13
- package/ftm-inbox/vite.config.ts +6 -6
- package/ftm-intent/SKILL.md +241 -241
- package/ftm-intent.yml +2 -2
- package/ftm-manifest.json +3794 -3794
- package/ftm-map/SKILL.md +291 -291
- package/ftm-map/scripts/db.py +712 -712
- package/ftm-map/scripts/index.py +415 -415
- package/ftm-map/scripts/parser.py +224 -224
- package/ftm-map/scripts/queries/go-tags.scm +20 -20
- package/ftm-map/scripts/queries/javascript-tags.scm +35 -35
- package/ftm-map/scripts/queries/python-tags.scm +31 -31
- package/ftm-map/scripts/queries/ruby-tags.scm +19 -19
- package/ftm-map/scripts/queries/rust-tags.scm +37 -37
- package/ftm-map/scripts/queries/typescript-tags.scm +41 -41
- package/ftm-map/scripts/query.py +301 -301
- package/ftm-map/scripts/ranker.py +377 -377
- package/ftm-map/scripts/requirements.txt +5 -5
- package/ftm-map/scripts/setup-hooks.sh +27 -27
- package/ftm-map/scripts/setup.sh +56 -56
- package/ftm-map/scripts/test_db.py +364 -364
- package/ftm-map/scripts/test_parser.py +174 -174
- package/ftm-map/scripts/test_query.py +183 -183
- package/ftm-map/scripts/test_ranker.py +199 -199
- package/ftm-map/scripts/views.py +591 -591
- package/ftm-map.yml +2 -2
- package/ftm-mind/SKILL.md +1943 -1943
- package/ftm-mind/evals/promptfoo.yaml +142 -142
- package/ftm-mind/references/blackboard-schema.md +328 -328
- package/ftm-mind/references/complexity-guide.md +110 -110
- package/ftm-mind/references/event-registry.md +319 -319
- package/ftm-mind/references/mcp-inventory.md +296 -296
- package/ftm-mind/references/protocols/COMPLEXITY-SIZING.md +72 -72
- package/ftm-mind/references/protocols/MCP-HEURISTICS.md +32 -32
- package/ftm-mind/references/protocols/PLAN-APPROVAL.md +80 -80
- package/ftm-mind/references/reflexion-protocol.md +249 -249
- package/ftm-mind/references/routing/SCENARIOS.md +22 -22
- package/ftm-mind/references/routing-scenarios.md +35 -35
- package/ftm-mind.yml +2 -2
- package/ftm-pause/SKILL.md +395 -395
- package/ftm-pause/references/protocols/SKILL-RESTORE-PROTOCOLS.md +186 -186
- package/ftm-pause/references/protocols/VALIDATION.md +80 -80
- package/ftm-pause.yml +2 -2
- package/ftm-researcher/SKILL.md +275 -275
- package/ftm-researcher/evals/agent-diversity.yaml +17 -17
- package/ftm-researcher/evals/synthesis-quality.yaml +12 -12
- package/ftm-researcher/evals/trigger-accuracy.yaml +39 -39
- package/ftm-researcher/references/adaptive-search.md +116 -116
- package/ftm-researcher/references/agent-prompts.md +193 -193
- package/ftm-researcher/references/council-integration.md +193 -193
- package/ftm-researcher/references/output-format.md +203 -203
- package/ftm-researcher/references/synthesis-pipeline.md +165 -165
- package/ftm-researcher/scripts/score_credibility.py +234 -234
- package/ftm-researcher/scripts/validate_research.py +92 -92
- package/ftm-researcher.yml +2 -2
- package/ftm-resume/SKILL.md +518 -518
- package/ftm-resume/references/protocols/VALIDATION.md +172 -172
- package/ftm-resume.yml +2 -2
- package/ftm-retro/SKILL.md +380 -380
- package/ftm-retro/references/protocols/SCORING-RUBRICS.md +89 -89
- package/ftm-retro/references/templates/REPORT-FORMAT.md +109 -109
- package/ftm-retro.yml +2 -2
- package/ftm-routine/SKILL.md +170 -170
- package/ftm-routine.yml +4 -4
- package/ftm-state/blackboard/capabilities.json +5 -5
- package/ftm-state/blackboard/capabilities.schema.json +27 -27
- package/ftm-state/blackboard/context.json +23 -23
- package/ftm-state/blackboard/experiences/index.json +9 -9
- package/ftm-state/blackboard/patterns.json +6 -6
- package/ftm-state/schemas/context.schema.json +130 -130
- package/ftm-state/schemas/experience-index.schema.json +77 -77
- package/ftm-state/schemas/experience.schema.json +78 -78
- package/ftm-state/schemas/patterns.schema.json +44 -44
- package/ftm-upgrade/SKILL.md +194 -194
- package/ftm-upgrade/scripts/check-version.sh +76 -76
- package/ftm-upgrade/scripts/upgrade.sh +143 -143
- package/ftm-upgrade.yml +2 -2
- package/ftm-verify.yml +2 -2
- package/ftm.yml +2 -2
- package/hooks/ftm-blackboard-enforcer.sh +93 -93
- package/hooks/ftm-discovery-reminder.sh +90 -90
- package/hooks/ftm-drafts-gate.sh +61 -61
- package/hooks/ftm-event-logger.mjs +107 -107
- package/hooks/ftm-map-autodetect.sh +79 -79
- package/hooks/ftm-pending-sync-check.sh +22 -22
- package/hooks/ftm-plan-gate.sh +92 -92
- package/hooks/ftm-post-commit-trigger.sh +57 -57
- package/hooks/settings-template.json +81 -81
- package/install.sh +363 -363
- package/package.json +84 -84
- 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.
|