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,319 +1,319 @@
|
|
|
1
|
-
# FTM Event Registry
|
|
2
|
-
|
|
3
|
-
This document defines the full event vocabulary for the ftm skill system. The mind reads this during its Decide phase to determine which skills to trigger after any action completes.
|
|
4
|
-
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## How to Read This Document
|
|
8
|
-
|
|
9
|
-
Each event entry uses the following format:
|
|
10
|
-
|
|
11
|
-
```markdown
|
|
12
|
-
### event_name
|
|
13
|
-
- **Description**: What this event means
|
|
14
|
-
- **Emitted by**: [list of skills]
|
|
15
|
-
- **Listened to by**: [list of skills]
|
|
16
|
-
- **Fast-path**: yes/no (fast-path events bypass mind mediation and always trigger their listeners)
|
|
17
|
-
- **Payload**: {key fields the event carries}
|
|
18
|
-
```
|
|
19
|
-
|
|
20
|
-
**Fast-path events** are always triggered immediately — the mind does not evaluate whether to route them. Use fast-path for events where the downstream response is unconditional and latency matters (documentation sync, micro-reflections).
|
|
21
|
-
|
|
22
|
-
**Mediated events** pass through the mind's Decide phase. The mind evaluates context and decides whether to trigger listeners, which listener to prefer, and whether to combine multiple events before acting.
|
|
23
|
-
|
|
24
|
-
---
|
|
25
|
-
|
|
26
|
-
## How to Add an Event Declaration to a Skill
|
|
27
|
-
|
|
28
|
-
When adding event declarations to a skill's SKILL.md, insert an `## Events` section AFTER the YAML frontmatter block and BEFORE the first major heading of existing content. Do NOT modify any other content.
|
|
29
|
-
|
|
30
|
-
Use this exact format:
|
|
31
|
-
|
|
32
|
-
```markdown
|
|
33
|
-
## Events
|
|
34
|
-
|
|
35
|
-
### Emits
|
|
36
|
-
- `event_name` — when [the condition that causes this skill to emit the event]
|
|
37
|
-
|
|
38
|
-
### Listens To
|
|
39
|
-
- `event_name` — [what this skill does in response when this event fires]
|
|
40
|
-
```
|
|
41
|
-
|
|
42
|
-
Guidelines for writing clear declarations:
|
|
43
|
-
- Emit conditions should describe the specific moment the event fires, not the entire skill workflow. Example: "when a git commit is made" not "during execution".
|
|
44
|
-
- Listen-to descriptions should describe the triggered action, not the full response workflow. Example: "auto-investigate the failure" not "launch Phase 1 agents".
|
|
45
|
-
- Use backtick-quoted event names consistently.
|
|
46
|
-
- One bullet per event. If a skill emits the same event under multiple conditions, combine them into one bullet with "or" — e.g., "when the test suite passes, or when a post-fix verification succeeds".
|
|
47
|
-
|
|
48
|
-
---
|
|
49
|
-
|
|
50
|
-
## Full Event Vocabulary
|
|
51
|
-
|
|
52
|
-
### task_received
|
|
53
|
-
- **Description**: A new task has entered the system and is acknowledged by the executor
|
|
54
|
-
- **Emitted by**: ftm-executor
|
|
55
|
-
- **Listened to by**: ftm-mind (log task arrival, initialize tracking context), ftm-brainstorm (begin ideation work when mind routes an incoming task for exploration)
|
|
56
|
-
- **Fast-path**: no
|
|
57
|
-
- **Payload**: `{ task_description, plan_path, wave_number, task_number }`
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
### plan_generated
|
|
62
|
-
- **Description**: A plan document was created and is ready for review or execution
|
|
63
|
-
- **Emitted by**: ftm-executor, ftm-brainstorm
|
|
64
|
-
- **Listened to by**: ftm-mind (surface plan to user, optionally trigger ftm-audit pre-flight)
|
|
65
|
-
- **Fast-path**: no
|
|
66
|
-
- **Payload**: `{ plan_path, plan_title, task_count, wave_count }`
|
|
67
|
-
|
|
68
|
-
---
|
|
69
|
-
|
|
70
|
-
### research_complete
|
|
71
|
-
- **Description**: ftm-researcher finished its synthesis pipeline and structured output is ready for consumption
|
|
72
|
-
- **Emitted by**: ftm-researcher
|
|
73
|
-
- **Listened to by**: ftm-brainstorm (consume findings for current research sprint), ftm-mind (log research session on blackboard, optionally surface to user)
|
|
74
|
-
- **Fast-path**: no
|
|
75
|
-
- **Payload**: `{ query, mode, findings_count, consensus_count, contested_count, unique_count, sources_count, council_used, duration_ms }`
|
|
76
|
-
|
|
77
|
-
---
|
|
78
|
-
|
|
79
|
-
### plan_approved
|
|
80
|
-
- **Description**: The user has approved a plan for execution
|
|
81
|
-
- **Emitted by**: ftm-executor (after user confirmation)
|
|
82
|
-
- **Listened to by**: ftm-executor (begin Phase 3 worktree setup and agent dispatch)
|
|
83
|
-
- **Fast-path**: no
|
|
84
|
-
- **Payload**: `{ plan_path, plan_title, approved_by, timestamp }`
|
|
85
|
-
|
|
86
|
-
---
|
|
87
|
-
|
|
88
|
-
### code_changed
|
|
89
|
-
- **Description**: One or more files were modified — pre-commit state, changes not yet persisted to git history
|
|
90
|
-
- **Emitted by**: ftm-executor
|
|
91
|
-
- **Listened to by**: ftm-mind (record in blackboard, may trigger pre-commit checks)
|
|
92
|
-
- **Fast-path**: no
|
|
93
|
-
- **Payload**: `{ files_changed: [path], task_number, agent_name, worktree_path }`
|
|
94
|
-
|
|
95
|
-
---
|
|
96
|
-
|
|
97
|
-
### code_committed
|
|
98
|
-
- **Description**: A git commit was successfully made — changes are persisted to the repository
|
|
99
|
-
- **Emitted by**: ftm-executor
|
|
100
|
-
- **Listened to by**: ftm-intent (update INTENT.md entries for changed functions), ftm-diagram (update DIAGRAM.mmd nodes and edges for changed modules), ftm-codex-gate (run adversarial validation at wave boundaries after commits land)
|
|
101
|
-
- **Fast-path**: yes — documentation must always stay in sync with commits, no mind mediation needed
|
|
102
|
-
- **Payload**: `{ commit_hash, commit_message, files_changed: [path], worktree_path, task_number }`
|
|
103
|
-
|
|
104
|
-
---
|
|
105
|
-
|
|
106
|
-
### map_updated
|
|
107
|
-
- **Description**: The code knowledge graph has been updated — either from a full bootstrap scan or an incremental re-index of changed files
|
|
108
|
-
- **Emitted by**: ftm-map
|
|
109
|
-
- **Listened to by**: ftm-mind (log on blackboard, update session context with latest graph stats), ftm-intent (trigger INTENT.md regeneration from graph), ftm-diagram (trigger DIAGRAM.mmd regeneration from graph)
|
|
110
|
-
- **Fast-path**: yes — downstream view generation should happen immediately without mind mediation
|
|
111
|
-
- **Payload**: `{ project_path, symbols_count, edges_count, files_parsed, duration_ms, mode: "bootstrap" | "incremental" }`
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
### test_passed
|
|
116
|
-
- **Description**: The test suite (or a targeted subset) ran and all tests passed
|
|
117
|
-
- **Emitted by**: ftm-executor, ftm-debug
|
|
118
|
-
- **Listened to by**: ftm-mind (update task status, potentially unblock next wave)
|
|
119
|
-
- **Fast-path**: no
|
|
120
|
-
- **Payload**: `{ test_runner, test_count, duration_ms, scope: "full_suite" | "task_scope", task_number }`
|
|
121
|
-
|
|
122
|
-
---
|
|
123
|
-
|
|
124
|
-
### test_failed
|
|
125
|
-
- **Description**: The test suite ran and one or more tests failed
|
|
126
|
-
- **Emitted by**: ftm-executor, ftm-debug
|
|
127
|
-
- **Listened to by**: ftm-debug (auto-investigate the failure), ftm-mind (block wave advancement, update task status)
|
|
128
|
-
- **Fast-path**: no
|
|
129
|
-
- **Payload**: `{ test_runner, failed_tests: [{ name, file, error }], total_count, failed_count, task_number }`
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
### bug_fixed
|
|
134
|
-
- **Description**: A specific bug was identified, a fix was applied, and the Reviewer agent approved the fix
|
|
135
|
-
- **Emitted by**: ftm-debug
|
|
136
|
-
- **Listened to by**: ftm-retro (record the fix as a success experience), ftm-mind (update task status, unblock dependents)
|
|
137
|
-
- **Fast-path**: no
|
|
138
|
-
- **Payload**: `{ bug_description, root_cause, files_changed: [path], fix_commits: [hash], reviewer_verdict }`
|
|
139
|
-
|
|
140
|
-
---
|
|
141
|
-
|
|
142
|
-
### audit_complete
|
|
143
|
-
- **Description**: ftm-audit finished its full analysis (all three layers) for a given scope
|
|
144
|
-
- **Emitted by**: ftm-audit
|
|
145
|
-
- **Listened to by**: ftm-executor (interpret results: mark task complete, queue auto-fix, or hold for manual review), ftm-mind (update audit record on blackboard)
|
|
146
|
-
- **Fast-path**: no
|
|
147
|
-
- **Payload**: `{ scope: [path], findings_count, auto_fixed_count, manual_required_count, final_status: "PASS" | "FAIL", changelog_path }`
|
|
148
|
-
|
|
149
|
-
---
|
|
150
|
-
|
|
151
|
-
### issue_found
|
|
152
|
-
- **Description**: A problem was discovered — by ftm-audit static analysis, by adversarial audit, or by ftm-debug investigation
|
|
153
|
-
- **Emitted by**: ftm-audit, ftm-debug, ftm-codex-gate
|
|
154
|
-
- **Listened to by**: ftm-mind (log the issue, decide whether to surface to user or auto-route to fix)
|
|
155
|
-
- **Fast-path**: no
|
|
156
|
-
- **Payload**: `{ issue_type, file_path, line_hint, description, severity: "error" | "warning", source: "knip" | "adversarial" | "debug", auto_fixable: boolean }`
|
|
157
|
-
|
|
158
|
-
---
|
|
159
|
-
|
|
160
|
-
### documentation_updated
|
|
161
|
-
- **Description**: INTENT.md or a DIAGRAM.mmd file was updated to reflect new or changed code
|
|
162
|
-
- **Emitted by**: ftm-intent, ftm-diagram
|
|
163
|
-
- **Listened to by**: ftm-mind (record documentation sync on blackboard, reset the "docs behind" flag for the affected module)
|
|
164
|
-
- **Fast-path**: no
|
|
165
|
-
- **Payload**: `{ file_path, module_name, update_type: "intent" | "diagram", changed_entries: [string] }`
|
|
166
|
-
|
|
167
|
-
---
|
|
168
|
-
|
|
169
|
-
### review_complete
|
|
170
|
-
- **Description**: A code review or audit review finished and produced a verdict
|
|
171
|
-
- **Emitted by**: ftm-audit (after adversarial layer), ftm-debug (after Reviewer agent), ftm-council (after majority verdict or 5-round synthesis), ftm-codex-gate (after Codex analysis completes)
|
|
172
|
-
- **Listened to by**: ftm-audit (validate review findings match static analysis), ftm-mind (update review status on blackboard)
|
|
173
|
-
- **Fast-path**: no
|
|
174
|
-
- **Payload**: `{ verdict: "APPROVED" | "APPROVED_WITH_CHANGES" | "NEEDS_REWORK", reviewer, findings: [string], task_number }`
|
|
175
|
-
|
|
176
|
-
---
|
|
177
|
-
|
|
178
|
-
### task_completed
|
|
179
|
-
- **Description**: A task finished — including passing all verification gates (tests, audit, Codex gate)
|
|
180
|
-
- **Emitted by**: ftm-executor, ftm-debug, ftm-audit, ftm-retro, ftm-brainstorm, ftm-council, ftm-codex-gate, ftm-intent, ftm-diagram, ftm-browse, ftm-pause, ftm-resume, ftm-upgrade, ftm-config, ftm-researcher
|
|
181
|
-
- **Listened to by**: ftm-retro (micro-reflection trigger — record the task outcome as an experience), ftm-mind (advance wave state, check if all tasks in wave are done)
|
|
182
|
-
- **Fast-path**: yes — micro-reflection runs on every task completion unconditionally; no mind mediation needed
|
|
183
|
-
- **Payload**: `{ task_number, task_title, plan_path, wave_number, duration_ms, audit_result, agent_name }`
|
|
184
|
-
|
|
185
|
-
---
|
|
186
|
-
|
|
187
|
-
### error_encountered
|
|
188
|
-
- **Description**: An unexpected error occurred during execution that was not part of a normal test failure
|
|
189
|
-
- **Emitted by**: ftm-executor, ftm-debug
|
|
190
|
-
- **Listened to by**: ftm-debug (diagnose the error), ftm-retro (record as a failure experience for pattern learning), ftm-mind (halt or reroute depending on severity)
|
|
191
|
-
- **Fast-path**: no
|
|
192
|
-
- **Payload**: `{ error_message, stack_trace, phase, task_number, skill: "ftm-executor" | "ftm-debug", recoverable: boolean }`
|
|
193
|
-
|
|
194
|
-
---
|
|
195
|
-
|
|
196
|
-
### session_paused
|
|
197
|
-
- **Description**: The session state was serialized and saved — the user is ending the session but wants to resume later
|
|
198
|
-
- **Emitted by**: ftm-pause (dedicated pause skill)
|
|
199
|
-
- **Listened to by**: ftm-mind (write final blackboard snapshot, record open tasks and current wave state)
|
|
200
|
-
- **Fast-path**: no
|
|
201
|
-
- **Payload**: `{ session_id, plan_path, current_wave, open_tasks: [number], blackboard_snapshot_path, timestamp }`
|
|
202
|
-
|
|
203
|
-
---
|
|
204
|
-
|
|
205
|
-
### session_resumed
|
|
206
|
-
- **Description**: A previously paused session state was restored and execution is continuing
|
|
207
|
-
- **Emitted by**: ftm-resume (dedicated resume skill)
|
|
208
|
-
- **Listened to by**: ftm-executor (restore wave state and re-dispatch open tasks), ftm-mind (reload blackboard snapshot)
|
|
209
|
-
- **Fast-path**: no
|
|
210
|
-
- **Payload**: `{ session_id, plan_path, restored_wave, open_tasks: [number], blackboard_snapshot_path, timestamp }`
|
|
211
|
-
|
|
212
|
-
---
|
|
213
|
-
|
|
214
|
-
### experience_recorded
|
|
215
|
-
- **Description**: A new experience entry (task outcome, fix attempt, blocker) was written to the blackboard's experience log
|
|
216
|
-
- **Emitted by**: ftm-retro
|
|
217
|
-
- **Listened to by**: ftm-mind (evaluate whether the experience reveals a new pattern to promote)
|
|
218
|
-
- **Fast-path**: no
|
|
219
|
-
- **Payload**: `{ experience_type: "success" | "failure" | "fix" | "blocker", description, task_number, plan_slug, timestamp }`
|
|
220
|
-
|
|
221
|
-
---
|
|
222
|
-
|
|
223
|
-
### pattern_discovered
|
|
224
|
-
- **Description**: A recurring pattern was identified from accumulated experiences and promoted to the patterns.json library
|
|
225
|
-
- **Emitted by**: ftm-retro
|
|
226
|
-
- **Listened to by**: ftm-mind (index the new pattern so it can inform future Decide-phase routing), ftm-executor (optionally: adjust agent prompts if pattern is execution-relevant)
|
|
227
|
-
- **Fast-path**: no
|
|
228
|
-
- **Payload**: `{ pattern_name, pattern_description, first_seen_retro, occurrence_count, suggested_action, patterns_file_path }`
|
|
229
|
-
|
|
230
|
-
---
|
|
231
|
-
|
|
232
|
-
### secrets_found
|
|
233
|
-
- **Description**: ftm-git scan detected hardcoded credentials in staged files or the working tree — commit/push is blocked until remediation completes
|
|
234
|
-
- **Emitted by**: ftm-git
|
|
235
|
-
- **Listened to by**: ftm-executor (pause commit/push, await remediation), ftm-mind (record security finding on blackboard)
|
|
236
|
-
- **Fast-path**: no
|
|
237
|
-
- **Payload**: `{ findings: [{ file_path, line_number, secret_type, severity }], scan_scope: "staged" | "working_tree" | "history", task_number }`
|
|
238
|
-
|
|
239
|
-
---
|
|
240
|
-
|
|
241
|
-
### secrets_clear
|
|
242
|
-
- **Description**: ftm-git scan completed with no findings — the commit or push is safe to proceed
|
|
243
|
-
- **Emitted by**: ftm-git
|
|
244
|
-
- **Listened to by**: ftm-executor (unblock pending commit/push operation), ftm-mind (record clean scan on blackboard)
|
|
245
|
-
- **Fast-path**: no
|
|
246
|
-
- **Payload**: `{ files_scanned: number, scan_scope: "staged" | "working_tree" | "history", task_number }`
|
|
247
|
-
|
|
248
|
-
---
|
|
249
|
-
|
|
250
|
-
### secrets_remediated
|
|
251
|
-
- **Description**: ftm-git auto-fix successfully extracted secrets to .env and refactored source files — a re-scan confirmed no remaining findings
|
|
252
|
-
- **Emitted by**: ftm-git
|
|
253
|
-
- **Listened to by**: ftm-executor (unblock commit/push now that secrets are extracted), ftm-mind (record remediation action on blackboard)
|
|
254
|
-
- **Fast-path**: no
|
|
255
|
-
- **Payload**: `{ secrets_extracted: number, files_refactored: [path], env_vars_added: [string], task_number }`
|
|
256
|
-
|
|
257
|
-
---
|
|
258
|
-
|
|
259
|
-
### capture_complete
|
|
260
|
-
- **Description**: ftm-capture finished processing and persisting a captured item (snippet, link, thought, or known issue)
|
|
261
|
-
- **Emitted by**: ftm-capture
|
|
262
|
-
- **Listened to by**: ftm-mind (log capture on blackboard, optionally surface to user)
|
|
263
|
-
- **Fast-path**: no
|
|
264
|
-
- **Payload**: `{ capture_type, title, file_path, timestamp }`
|
|
265
|
-
|
|
266
|
-
---
|
|
267
|
-
|
|
268
|
-
### known_issue_recorded
|
|
269
|
-
- **Description**: A known issue was captured and recorded for future reference, avoiding repeated investigation of the same problem
|
|
270
|
-
- **Emitted by**: ftm-capture
|
|
271
|
-
- **Listened to by**: ftm-mind (index known issue on blackboard for dedup during future debug sessions)
|
|
272
|
-
- **Fast-path**: no
|
|
273
|
-
- **Payload**: `{ issue_title, issue_description, file_path, tags: [string], timestamp }`
|
|
274
|
-
|
|
275
|
-
---
|
|
276
|
-
|
|
277
|
-
## Fast-Path Summary
|
|
278
|
-
|
|
279
|
-
| Event | Always triggers |
|
|
280
|
-
|---|---|
|
|
281
|
-
| `code_committed` | ftm-intent (INTENT.md sync), ftm-diagram (DIAGRAM.mmd sync) |
|
|
282
|
-
| `task_completed` | ftm-retro (micro-reflection / experience recording) |
|
|
283
|
-
| `map_updated` | ftm-intent (INTENT.md regeneration), ftm-diagram (DIAGRAM.mmd regeneration) |
|
|
284
|
-
|
|
285
|
-
All other events are mediated by the mind's Decide phase.
|
|
286
|
-
|
|
287
|
-
---
|
|
288
|
-
|
|
289
|
-
## Event Routing Reference
|
|
290
|
-
|
|
291
|
-
Use this table to quickly look up which skills are involved when an event fires:
|
|
292
|
-
|
|
293
|
-
| Event | Emitters | Listeners |
|
|
294
|
-
|---|---|---|
|
|
295
|
-
| task_received | executor | mind, brainstorm |
|
|
296
|
-
| plan_generated | executor, brainstorm | mind |
|
|
297
|
-
| research_complete | researcher | brainstorm, mind |
|
|
298
|
-
| plan_approved | executor | executor |
|
|
299
|
-
| code_changed | executor | mind |
|
|
300
|
-
| code_committed | executor | intent, diagram, codex-gate |
|
|
301
|
-
| test_passed | executor, debug | mind |
|
|
302
|
-
| test_failed | executor, debug | debug, mind |
|
|
303
|
-
| bug_fixed | debug | retro, mind |
|
|
304
|
-
| audit_complete | audit | executor, mind |
|
|
305
|
-
| issue_found | audit, debug, codex-gate | mind |
|
|
306
|
-
| documentation_updated | intent, diagram | mind |
|
|
307
|
-
| review_complete | audit, debug, council, codex-gate | audit, mind |
|
|
308
|
-
| task_completed | executor, debug, audit, retro, brainstorm, council, codex-gate, intent, diagram, browse, pause, resume, upgrade, config, researcher | retro, mind |
|
|
309
|
-
| error_encountered | executor, debug | debug, retro, mind |
|
|
310
|
-
| session_paused | pause | mind |
|
|
311
|
-
| session_resumed | resume | executor, mind |
|
|
312
|
-
| experience_recorded | retro | mind |
|
|
313
|
-
| pattern_discovered | retro | mind, executor |
|
|
314
|
-
| secrets_found | git | executor, mind |
|
|
315
|
-
| secrets_clear | git | executor, mind |
|
|
316
|
-
| secrets_remediated | git | executor, mind |
|
|
317
|
-
| capture_complete | capture | mind |
|
|
318
|
-
| known_issue_recorded | capture | mind |
|
|
319
|
-
| map_updated | map | mind, intent, diagram |
|
|
1
|
+
# FTM Event Registry
|
|
2
|
+
|
|
3
|
+
This document defines the full event vocabulary for the ftm skill system. The mind reads this during its Decide phase to determine which skills to trigger after any action completes.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## How to Read This Document
|
|
8
|
+
|
|
9
|
+
Each event entry uses the following format:
|
|
10
|
+
|
|
11
|
+
```markdown
|
|
12
|
+
### event_name
|
|
13
|
+
- **Description**: What this event means
|
|
14
|
+
- **Emitted by**: [list of skills]
|
|
15
|
+
- **Listened to by**: [list of skills]
|
|
16
|
+
- **Fast-path**: yes/no (fast-path events bypass mind mediation and always trigger their listeners)
|
|
17
|
+
- **Payload**: {key fields the event carries}
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Fast-path events** are always triggered immediately — the mind does not evaluate whether to route them. Use fast-path for events where the downstream response is unconditional and latency matters (documentation sync, micro-reflections).
|
|
21
|
+
|
|
22
|
+
**Mediated events** pass through the mind's Decide phase. The mind evaluates context and decides whether to trigger listeners, which listener to prefer, and whether to combine multiple events before acting.
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## How to Add an Event Declaration to a Skill
|
|
27
|
+
|
|
28
|
+
When adding event declarations to a skill's SKILL.md, insert an `## Events` section AFTER the YAML frontmatter block and BEFORE the first major heading of existing content. Do NOT modify any other content.
|
|
29
|
+
|
|
30
|
+
Use this exact format:
|
|
31
|
+
|
|
32
|
+
```markdown
|
|
33
|
+
## Events
|
|
34
|
+
|
|
35
|
+
### Emits
|
|
36
|
+
- `event_name` — when [the condition that causes this skill to emit the event]
|
|
37
|
+
|
|
38
|
+
### Listens To
|
|
39
|
+
- `event_name` — [what this skill does in response when this event fires]
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
Guidelines for writing clear declarations:
|
|
43
|
+
- Emit conditions should describe the specific moment the event fires, not the entire skill workflow. Example: "when a git commit is made" not "during execution".
|
|
44
|
+
- Listen-to descriptions should describe the triggered action, not the full response workflow. Example: "auto-investigate the failure" not "launch Phase 1 agents".
|
|
45
|
+
- Use backtick-quoted event names consistently.
|
|
46
|
+
- One bullet per event. If a skill emits the same event under multiple conditions, combine them into one bullet with "or" — e.g., "when the test suite passes, or when a post-fix verification succeeds".
|
|
47
|
+
|
|
48
|
+
---
|
|
49
|
+
|
|
50
|
+
## Full Event Vocabulary
|
|
51
|
+
|
|
52
|
+
### task_received
|
|
53
|
+
- **Description**: A new task has entered the system and is acknowledged by the executor
|
|
54
|
+
- **Emitted by**: ftm-executor
|
|
55
|
+
- **Listened to by**: ftm-mind (log task arrival, initialize tracking context), ftm-brainstorm (begin ideation work when mind routes an incoming task for exploration)
|
|
56
|
+
- **Fast-path**: no
|
|
57
|
+
- **Payload**: `{ task_description, plan_path, wave_number, task_number }`
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
### plan_generated
|
|
62
|
+
- **Description**: A plan document was created and is ready for review or execution
|
|
63
|
+
- **Emitted by**: ftm-executor, ftm-brainstorm
|
|
64
|
+
- **Listened to by**: ftm-mind (surface plan to user, optionally trigger ftm-audit pre-flight)
|
|
65
|
+
- **Fast-path**: no
|
|
66
|
+
- **Payload**: `{ plan_path, plan_title, task_count, wave_count }`
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
### research_complete
|
|
71
|
+
- **Description**: ftm-researcher finished its synthesis pipeline and structured output is ready for consumption
|
|
72
|
+
- **Emitted by**: ftm-researcher
|
|
73
|
+
- **Listened to by**: ftm-brainstorm (consume findings for current research sprint), ftm-mind (log research session on blackboard, optionally surface to user)
|
|
74
|
+
- **Fast-path**: no
|
|
75
|
+
- **Payload**: `{ query, mode, findings_count, consensus_count, contested_count, unique_count, sources_count, council_used, duration_ms }`
|
|
76
|
+
|
|
77
|
+
---
|
|
78
|
+
|
|
79
|
+
### plan_approved
|
|
80
|
+
- **Description**: The user has approved a plan for execution
|
|
81
|
+
- **Emitted by**: ftm-executor (after user confirmation)
|
|
82
|
+
- **Listened to by**: ftm-executor (begin Phase 3 worktree setup and agent dispatch)
|
|
83
|
+
- **Fast-path**: no
|
|
84
|
+
- **Payload**: `{ plan_path, plan_title, approved_by, timestamp }`
|
|
85
|
+
|
|
86
|
+
---
|
|
87
|
+
|
|
88
|
+
### code_changed
|
|
89
|
+
- **Description**: One or more files were modified — pre-commit state, changes not yet persisted to git history
|
|
90
|
+
- **Emitted by**: ftm-executor
|
|
91
|
+
- **Listened to by**: ftm-mind (record in blackboard, may trigger pre-commit checks)
|
|
92
|
+
- **Fast-path**: no
|
|
93
|
+
- **Payload**: `{ files_changed: [path], task_number, agent_name, worktree_path }`
|
|
94
|
+
|
|
95
|
+
---
|
|
96
|
+
|
|
97
|
+
### code_committed
|
|
98
|
+
- **Description**: A git commit was successfully made — changes are persisted to the repository
|
|
99
|
+
- **Emitted by**: ftm-executor
|
|
100
|
+
- **Listened to by**: ftm-intent (update INTENT.md entries for changed functions), ftm-diagram (update DIAGRAM.mmd nodes and edges for changed modules), ftm-codex-gate (run adversarial validation at wave boundaries after commits land)
|
|
101
|
+
- **Fast-path**: yes — documentation must always stay in sync with commits, no mind mediation needed
|
|
102
|
+
- **Payload**: `{ commit_hash, commit_message, files_changed: [path], worktree_path, task_number }`
|
|
103
|
+
|
|
104
|
+
---
|
|
105
|
+
|
|
106
|
+
### map_updated
|
|
107
|
+
- **Description**: The code knowledge graph has been updated — either from a full bootstrap scan or an incremental re-index of changed files
|
|
108
|
+
- **Emitted by**: ftm-map
|
|
109
|
+
- **Listened to by**: ftm-mind (log on blackboard, update session context with latest graph stats), ftm-intent (trigger INTENT.md regeneration from graph), ftm-diagram (trigger DIAGRAM.mmd regeneration from graph)
|
|
110
|
+
- **Fast-path**: yes — downstream view generation should happen immediately without mind mediation
|
|
111
|
+
- **Payload**: `{ project_path, symbols_count, edges_count, files_parsed, duration_ms, mode: "bootstrap" | "incremental" }`
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
### test_passed
|
|
116
|
+
- **Description**: The test suite (or a targeted subset) ran and all tests passed
|
|
117
|
+
- **Emitted by**: ftm-executor, ftm-debug
|
|
118
|
+
- **Listened to by**: ftm-mind (update task status, potentially unblock next wave)
|
|
119
|
+
- **Fast-path**: no
|
|
120
|
+
- **Payload**: `{ test_runner, test_count, duration_ms, scope: "full_suite" | "task_scope", task_number }`
|
|
121
|
+
|
|
122
|
+
---
|
|
123
|
+
|
|
124
|
+
### test_failed
|
|
125
|
+
- **Description**: The test suite ran and one or more tests failed
|
|
126
|
+
- **Emitted by**: ftm-executor, ftm-debug
|
|
127
|
+
- **Listened to by**: ftm-debug (auto-investigate the failure), ftm-mind (block wave advancement, update task status)
|
|
128
|
+
- **Fast-path**: no
|
|
129
|
+
- **Payload**: `{ test_runner, failed_tests: [{ name, file, error }], total_count, failed_count, task_number }`
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
### bug_fixed
|
|
134
|
+
- **Description**: A specific bug was identified, a fix was applied, and the Reviewer agent approved the fix
|
|
135
|
+
- **Emitted by**: ftm-debug
|
|
136
|
+
- **Listened to by**: ftm-retro (record the fix as a success experience), ftm-mind (update task status, unblock dependents)
|
|
137
|
+
- **Fast-path**: no
|
|
138
|
+
- **Payload**: `{ bug_description, root_cause, files_changed: [path], fix_commits: [hash], reviewer_verdict }`
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
### audit_complete
|
|
143
|
+
- **Description**: ftm-audit finished its full analysis (all three layers) for a given scope
|
|
144
|
+
- **Emitted by**: ftm-audit
|
|
145
|
+
- **Listened to by**: ftm-executor (interpret results: mark task complete, queue auto-fix, or hold for manual review), ftm-mind (update audit record on blackboard)
|
|
146
|
+
- **Fast-path**: no
|
|
147
|
+
- **Payload**: `{ scope: [path], findings_count, auto_fixed_count, manual_required_count, final_status: "PASS" | "FAIL", changelog_path }`
|
|
148
|
+
|
|
149
|
+
---
|
|
150
|
+
|
|
151
|
+
### issue_found
|
|
152
|
+
- **Description**: A problem was discovered — by ftm-audit static analysis, by adversarial audit, or by ftm-debug investigation
|
|
153
|
+
- **Emitted by**: ftm-audit, ftm-debug, ftm-codex-gate
|
|
154
|
+
- **Listened to by**: ftm-mind (log the issue, decide whether to surface to user or auto-route to fix)
|
|
155
|
+
- **Fast-path**: no
|
|
156
|
+
- **Payload**: `{ issue_type, file_path, line_hint, description, severity: "error" | "warning", source: "knip" | "adversarial" | "debug", auto_fixable: boolean }`
|
|
157
|
+
|
|
158
|
+
---
|
|
159
|
+
|
|
160
|
+
### documentation_updated
|
|
161
|
+
- **Description**: INTENT.md or a DIAGRAM.mmd file was updated to reflect new or changed code
|
|
162
|
+
- **Emitted by**: ftm-intent, ftm-diagram
|
|
163
|
+
- **Listened to by**: ftm-mind (record documentation sync on blackboard, reset the "docs behind" flag for the affected module)
|
|
164
|
+
- **Fast-path**: no
|
|
165
|
+
- **Payload**: `{ file_path, module_name, update_type: "intent" | "diagram", changed_entries: [string] }`
|
|
166
|
+
|
|
167
|
+
---
|
|
168
|
+
|
|
169
|
+
### review_complete
|
|
170
|
+
- **Description**: A code review or audit review finished and produced a verdict
|
|
171
|
+
- **Emitted by**: ftm-audit (after adversarial layer), ftm-debug (after Reviewer agent), ftm-council (after majority verdict or 5-round synthesis), ftm-codex-gate (after Codex analysis completes)
|
|
172
|
+
- **Listened to by**: ftm-audit (validate review findings match static analysis), ftm-mind (update review status on blackboard)
|
|
173
|
+
- **Fast-path**: no
|
|
174
|
+
- **Payload**: `{ verdict: "APPROVED" | "APPROVED_WITH_CHANGES" | "NEEDS_REWORK", reviewer, findings: [string], task_number }`
|
|
175
|
+
|
|
176
|
+
---
|
|
177
|
+
|
|
178
|
+
### task_completed
|
|
179
|
+
- **Description**: A task finished — including passing all verification gates (tests, audit, Codex gate)
|
|
180
|
+
- **Emitted by**: ftm-executor, ftm-debug, ftm-audit, ftm-retro, ftm-brainstorm, ftm-council, ftm-codex-gate, ftm-intent, ftm-diagram, ftm-browse, ftm-pause, ftm-resume, ftm-upgrade, ftm-config, ftm-researcher
|
|
181
|
+
- **Listened to by**: ftm-retro (micro-reflection trigger — record the task outcome as an experience), ftm-mind (advance wave state, check if all tasks in wave are done)
|
|
182
|
+
- **Fast-path**: yes — micro-reflection runs on every task completion unconditionally; no mind mediation needed
|
|
183
|
+
- **Payload**: `{ task_number, task_title, plan_path, wave_number, duration_ms, audit_result, agent_name }`
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
### error_encountered
|
|
188
|
+
- **Description**: An unexpected error occurred during execution that was not part of a normal test failure
|
|
189
|
+
- **Emitted by**: ftm-executor, ftm-debug
|
|
190
|
+
- **Listened to by**: ftm-debug (diagnose the error), ftm-retro (record as a failure experience for pattern learning), ftm-mind (halt or reroute depending on severity)
|
|
191
|
+
- **Fast-path**: no
|
|
192
|
+
- **Payload**: `{ error_message, stack_trace, phase, task_number, skill: "ftm-executor" | "ftm-debug", recoverable: boolean }`
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
### session_paused
|
|
197
|
+
- **Description**: The session state was serialized and saved — the user is ending the session but wants to resume later
|
|
198
|
+
- **Emitted by**: ftm-pause (dedicated pause skill)
|
|
199
|
+
- **Listened to by**: ftm-mind (write final blackboard snapshot, record open tasks and current wave state)
|
|
200
|
+
- **Fast-path**: no
|
|
201
|
+
- **Payload**: `{ session_id, plan_path, current_wave, open_tasks: [number], blackboard_snapshot_path, timestamp }`
|
|
202
|
+
|
|
203
|
+
---
|
|
204
|
+
|
|
205
|
+
### session_resumed
|
|
206
|
+
- **Description**: A previously paused session state was restored and execution is continuing
|
|
207
|
+
- **Emitted by**: ftm-resume (dedicated resume skill)
|
|
208
|
+
- **Listened to by**: ftm-executor (restore wave state and re-dispatch open tasks), ftm-mind (reload blackboard snapshot)
|
|
209
|
+
- **Fast-path**: no
|
|
210
|
+
- **Payload**: `{ session_id, plan_path, restored_wave, open_tasks: [number], blackboard_snapshot_path, timestamp }`
|
|
211
|
+
|
|
212
|
+
---
|
|
213
|
+
|
|
214
|
+
### experience_recorded
|
|
215
|
+
- **Description**: A new experience entry (task outcome, fix attempt, blocker) was written to the blackboard's experience log
|
|
216
|
+
- **Emitted by**: ftm-retro
|
|
217
|
+
- **Listened to by**: ftm-mind (evaluate whether the experience reveals a new pattern to promote)
|
|
218
|
+
- **Fast-path**: no
|
|
219
|
+
- **Payload**: `{ experience_type: "success" | "failure" | "fix" | "blocker", description, task_number, plan_slug, timestamp }`
|
|
220
|
+
|
|
221
|
+
---
|
|
222
|
+
|
|
223
|
+
### pattern_discovered
|
|
224
|
+
- **Description**: A recurring pattern was identified from accumulated experiences and promoted to the patterns.json library
|
|
225
|
+
- **Emitted by**: ftm-retro
|
|
226
|
+
- **Listened to by**: ftm-mind (index the new pattern so it can inform future Decide-phase routing), ftm-executor (optionally: adjust agent prompts if pattern is execution-relevant)
|
|
227
|
+
- **Fast-path**: no
|
|
228
|
+
- **Payload**: `{ pattern_name, pattern_description, first_seen_retro, occurrence_count, suggested_action, patterns_file_path }`
|
|
229
|
+
|
|
230
|
+
---
|
|
231
|
+
|
|
232
|
+
### secrets_found
|
|
233
|
+
- **Description**: ftm-git scan detected hardcoded credentials in staged files or the working tree — commit/push is blocked until remediation completes
|
|
234
|
+
- **Emitted by**: ftm-git
|
|
235
|
+
- **Listened to by**: ftm-executor (pause commit/push, await remediation), ftm-mind (record security finding on blackboard)
|
|
236
|
+
- **Fast-path**: no
|
|
237
|
+
- **Payload**: `{ findings: [{ file_path, line_number, secret_type, severity }], scan_scope: "staged" | "working_tree" | "history", task_number }`
|
|
238
|
+
|
|
239
|
+
---
|
|
240
|
+
|
|
241
|
+
### secrets_clear
|
|
242
|
+
- **Description**: ftm-git scan completed with no findings — the commit or push is safe to proceed
|
|
243
|
+
- **Emitted by**: ftm-git
|
|
244
|
+
- **Listened to by**: ftm-executor (unblock pending commit/push operation), ftm-mind (record clean scan on blackboard)
|
|
245
|
+
- **Fast-path**: no
|
|
246
|
+
- **Payload**: `{ files_scanned: number, scan_scope: "staged" | "working_tree" | "history", task_number }`
|
|
247
|
+
|
|
248
|
+
---
|
|
249
|
+
|
|
250
|
+
### secrets_remediated
|
|
251
|
+
- **Description**: ftm-git auto-fix successfully extracted secrets to .env and refactored source files — a re-scan confirmed no remaining findings
|
|
252
|
+
- **Emitted by**: ftm-git
|
|
253
|
+
- **Listened to by**: ftm-executor (unblock commit/push now that secrets are extracted), ftm-mind (record remediation action on blackboard)
|
|
254
|
+
- **Fast-path**: no
|
|
255
|
+
- **Payload**: `{ secrets_extracted: number, files_refactored: [path], env_vars_added: [string], task_number }`
|
|
256
|
+
|
|
257
|
+
---
|
|
258
|
+
|
|
259
|
+
### capture_complete
|
|
260
|
+
- **Description**: ftm-capture finished processing and persisting a captured item (snippet, link, thought, or known issue)
|
|
261
|
+
- **Emitted by**: ftm-capture
|
|
262
|
+
- **Listened to by**: ftm-mind (log capture on blackboard, optionally surface to user)
|
|
263
|
+
- **Fast-path**: no
|
|
264
|
+
- **Payload**: `{ capture_type, title, file_path, timestamp }`
|
|
265
|
+
|
|
266
|
+
---
|
|
267
|
+
|
|
268
|
+
### known_issue_recorded
|
|
269
|
+
- **Description**: A known issue was captured and recorded for future reference, avoiding repeated investigation of the same problem
|
|
270
|
+
- **Emitted by**: ftm-capture
|
|
271
|
+
- **Listened to by**: ftm-mind (index known issue on blackboard for dedup during future debug sessions)
|
|
272
|
+
- **Fast-path**: no
|
|
273
|
+
- **Payload**: `{ issue_title, issue_description, file_path, tags: [string], timestamp }`
|
|
274
|
+
|
|
275
|
+
---
|
|
276
|
+
|
|
277
|
+
## Fast-Path Summary
|
|
278
|
+
|
|
279
|
+
| Event | Always triggers |
|
|
280
|
+
|---|---|
|
|
281
|
+
| `code_committed` | ftm-intent (INTENT.md sync), ftm-diagram (DIAGRAM.mmd sync) |
|
|
282
|
+
| `task_completed` | ftm-retro (micro-reflection / experience recording) |
|
|
283
|
+
| `map_updated` | ftm-intent (INTENT.md regeneration), ftm-diagram (DIAGRAM.mmd regeneration) |
|
|
284
|
+
|
|
285
|
+
All other events are mediated by the mind's Decide phase.
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
289
|
+
## Event Routing Reference
|
|
290
|
+
|
|
291
|
+
Use this table to quickly look up which skills are involved when an event fires:
|
|
292
|
+
|
|
293
|
+
| Event | Emitters | Listeners |
|
|
294
|
+
|---|---|---|
|
|
295
|
+
| task_received | executor | mind, brainstorm |
|
|
296
|
+
| plan_generated | executor, brainstorm | mind |
|
|
297
|
+
| research_complete | researcher | brainstorm, mind |
|
|
298
|
+
| plan_approved | executor | executor |
|
|
299
|
+
| code_changed | executor | mind |
|
|
300
|
+
| code_committed | executor | intent, diagram, codex-gate |
|
|
301
|
+
| test_passed | executor, debug | mind |
|
|
302
|
+
| test_failed | executor, debug | debug, mind |
|
|
303
|
+
| bug_fixed | debug | retro, mind |
|
|
304
|
+
| audit_complete | audit | executor, mind |
|
|
305
|
+
| issue_found | audit, debug, codex-gate | mind |
|
|
306
|
+
| documentation_updated | intent, diagram | mind |
|
|
307
|
+
| review_complete | audit, debug, council, codex-gate | audit, mind |
|
|
308
|
+
| task_completed | executor, debug, audit, retro, brainstorm, council, codex-gate, intent, diagram, browse, pause, resume, upgrade, config, researcher | retro, mind |
|
|
309
|
+
| error_encountered | executor, debug | debug, retro, mind |
|
|
310
|
+
| session_paused | pause | mind |
|
|
311
|
+
| session_resumed | resume | executor, mind |
|
|
312
|
+
| experience_recorded | retro | mind |
|
|
313
|
+
| pattern_discovered | retro | mind, executor |
|
|
314
|
+
| secrets_found | git | executor, mind |
|
|
315
|
+
| secrets_clear | git | executor, mind |
|
|
316
|
+
| secrets_remediated | git | executor, mind |
|
|
317
|
+
| capture_complete | capture | mind |
|
|
318
|
+
| known_issue_recorded | capture | mind |
|
|
319
|
+
| map_updated | map | mind, intent, diagram |
|