feed-the-machine 1.6.1 → 1.7.1

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