feed-the-machine 1.5.0 → 1.5.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.
- package/ftm-audit/SKILL.md +89 -7
- package/ftm-executor/SKILL.md +9 -1
- package/package.json +1 -1
package/ftm-audit/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ftm-audit
|
|
3
|
-
description:
|
|
3
|
+
description: Triple-layer wiring audit that verifies all code is actually connected to the running application and documented in INTENT.md. Combines static analysis (knip), documentation coverage checking (INTENT.md entries for every changed function), and adversarial LLM audit — auto-fixes anything it finds. Use when user says "audit", "wiring check", "verify wiring", "dead code", "check imports", "unused code", "find dead code", "audit wiring", "check docs", or "documentation coverage". Also auto-invoked by ftm-executor after each task.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
## Events
|
|
@@ -121,6 +121,79 @@ Layer 1 findings:
|
|
|
121
121
|
|
|
122
122
|
**Helper script:** `scripts/run-knip.sh` handles execution and returns structured JSON output.
|
|
123
123
|
|
|
124
|
+
## Layer 1.5: Documentation Coverage Check
|
|
125
|
+
|
|
126
|
+
**Purpose:** Verify that every new or changed function has a corresponding INTENT.md entry. This catches the most common documentation skip — agents write code and tests but forget to update INTENT.md, leaving the documentation layer stale.
|
|
127
|
+
|
|
128
|
+
**When to run:** After Layer 1, before Layer 2. Only runs if the project has an INTENT.md documentation layer (root INTENT.md exists). If no INTENT.md exists anywhere in the project, skip this layer silently — it's not a documentation-first project.
|
|
129
|
+
|
|
130
|
+
**Scope:** Analyze the current git diff to find new or changed functions/classes/methods.
|
|
131
|
+
|
|
132
|
+
**Check protocol:**
|
|
133
|
+
|
|
134
|
+
1. **Find changed files:** `git diff HEAD~1 --name-only -- '*.py' '*.ts' '*.tsx' '*.js' '*.jsx'` (or equivalent for the project's language)
|
|
135
|
+
2. **For each changed source file:**
|
|
136
|
+
- Identify the module directory (e.g., `src/risk/` for `src/risk/position_sizer.py`)
|
|
137
|
+
- Check if `[module_dir]/INTENT.md` exists
|
|
138
|
+
- If it exists, read it and extract all documented function signatures
|
|
139
|
+
- Parse the changed file for public function/class/method definitions
|
|
140
|
+
- Compare: flag any public function that exists in code but has NO entry in INTENT.md
|
|
141
|
+
3. **For new module directories** (directories created in this diff):
|
|
142
|
+
- Check if `[new_module_dir]/INTENT.md` was created
|
|
143
|
+
- Check if root INTENT.md module map has a row for the new module
|
|
144
|
+
- Flag if either is missing
|
|
145
|
+
|
|
146
|
+
**Finding types:**
|
|
147
|
+
|
|
148
|
+
| Finding | Severity | Auto-fixable? |
|
|
149
|
+
|---------|----------|---------------|
|
|
150
|
+
| `MISSING_INTENT_ENTRY` — function exists in code but no INTENT.md entry | HARD FAIL | Yes — generate entry from code |
|
|
151
|
+
| `STALE_INTENT_ENTRY` — INTENT.md entry for a function that no longer exists | WARN | Yes — remove entry |
|
|
152
|
+
| `MISSING_MODULE_INTENT` — new module directory has no INTENT.md file | HARD FAIL | Yes — create from template |
|
|
153
|
+
| `MISSING_MODULE_MAP_ROW` — new module not in root INTENT.md module map | HARD FAIL | Yes — add row |
|
|
154
|
+
|
|
155
|
+
**Output format:**
|
|
156
|
+
```
|
|
157
|
+
Layer 1.5 findings:
|
|
158
|
+
- [MISSING_INTENT_ENTRY] src/risk/position_sizer.py:45 — `calculate_dynamic_size()` has no entry in src/risk/INTENT.md
|
|
159
|
+
- [STALE_INTENT_ENTRY] src/risk/INTENT.md — entry for `old_function()` but function no longer exists in code
|
|
160
|
+
- [MISSING_MODULE_INTENT] src/newmodule/ — directory created but no INTENT.md file
|
|
161
|
+
- [MISSING_MODULE_MAP_ROW] src/newmodule/ — not listed in root INTENT.md module map
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
**Auto-fix strategy for `MISSING_INTENT_ENTRY`:**
|
|
165
|
+
|
|
166
|
+
Generate the entry from the function's code. Read the function body and produce:
|
|
167
|
+
```markdown
|
|
168
|
+
### function_name(param1: Type, param2: Type) -> ReturnType
|
|
169
|
+
- **Does**: [infer from function body — one sentence]
|
|
170
|
+
- **Why**: [infer from context and callers — one sentence, or "Why unknown — inferred from usage: [inference]"]
|
|
171
|
+
- **Relationships**: [grep for callers/callees — one sentence]
|
|
172
|
+
- **Decisions**: [note any non-obvious choices, or "None"]
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
Append the entry to the module's INTENT.md under the `## Functions` section.
|
|
176
|
+
|
|
177
|
+
**Auto-fix strategy for `MISSING_MODULE_INTENT`:**
|
|
178
|
+
|
|
179
|
+
Create `[module_dir]/INTENT.md` with:
|
|
180
|
+
```markdown
|
|
181
|
+
# [Module Name] — Intent
|
|
182
|
+
|
|
183
|
+
## Functions
|
|
184
|
+
|
|
185
|
+
[generate entries for all public functions in the module]
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
**Auto-fix strategy for `MISSING_MODULE_MAP_ROW`:**
|
|
189
|
+
|
|
190
|
+
Append a row to the root INTENT.md module map table:
|
|
191
|
+
```markdown
|
|
192
|
+
| [module_path] | [infer purpose from code] | [infer relationships from imports] |
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
---
|
|
196
|
+
|
|
124
197
|
## Layer 2: LLM Adversarial Audit
|
|
125
198
|
|
|
126
199
|
**Mindset:** You are an adversary trying to PROVE code is dead. Not "confirm it works" — PROVE it's dead. Every new/modified export is guilty until proven innocent. You must find a complete chain from app entry point to the code in question, or it's flagged.
|
|
@@ -192,6 +265,10 @@ Layer 2 findings:
|
|
|
192
265
|
| `UNCALLED_API` | If a hook or component should call this (check wiring contract), add the invocation. If truly unused, remove the function. | Flag — API integration decision needed |
|
|
193
266
|
| `UNUSED_DEP` | Remove from package.json `dependencies` or `devDependencies`. | Flag if it might be used in scripts, config files, or CLI |
|
|
194
267
|
| `UNLISTED_DEP` | Run `npm install <package>` (or appropriate package manager command). | Flag if the import might be wrong |
|
|
268
|
+
| `MISSING_INTENT_ENTRY` | Generate INTENT.md entry from function code (Does/Why/Relationships/Decisions). Append to module's INTENT.md. | Flag if function purpose is ambiguous |
|
|
269
|
+
| `STALE_INTENT_ENTRY` | Remove the entry from INTENT.md. | Flag if unsure whether function was renamed vs deleted |
|
|
270
|
+
| `MISSING_MODULE_INTENT` | Create module INTENT.md with entries for all public functions. | Flag if module has no clear public API |
|
|
271
|
+
| `MISSING_MODULE_MAP_ROW` | Add row to root INTENT.md module map table. | Flag if module purpose is unclear |
|
|
195
272
|
|
|
196
273
|
**Fix Protocol (for each finding):**
|
|
197
274
|
|
|
@@ -430,12 +507,13 @@ When invoked (manually via `/ftm-audit` or automatically post-task):
|
|
|
430
507
|
|
|
431
508
|
1. Run Phase 0 (detect project patterns — framework, router, state, API layer)
|
|
432
509
|
2. Run Layer 1 (knip static analysis)
|
|
433
|
-
3. Run Layer
|
|
434
|
-
4.
|
|
435
|
-
5.
|
|
436
|
-
6.
|
|
437
|
-
7.
|
|
438
|
-
8.
|
|
510
|
+
3. Run Layer 1.5 (documentation coverage check — INTENT.md entries for changed functions)
|
|
511
|
+
4. Run Layer 2 (LLM adversarial audit, calibrated to detected patterns)
|
|
512
|
+
5. Combine findings, deduplicate
|
|
513
|
+
6. Run Layer 3 (auto-fix) for each finding (including missing INTENT.md entries)
|
|
514
|
+
7. Re-verify (re-run Layers 1+1.5+2)
|
|
515
|
+
8. Run Phase 3 (runtime wiring via ftm-browse, if prerequisites met)
|
|
516
|
+
9. Produce final changelog report
|
|
439
517
|
|
|
440
518
|
## Blackboard Write
|
|
441
519
|
|
|
@@ -458,6 +536,10 @@ After completing, update the blackboard:
|
|
|
458
536
|
- Findings: [N]
|
|
459
537
|
- [list each finding with file:line]
|
|
460
538
|
|
|
539
|
+
### Layer 1.5: Documentation Coverage
|
|
540
|
+
- Findings: [N]
|
|
541
|
+
- [list each finding — missing entries, stale entries, missing module docs]
|
|
542
|
+
|
|
461
543
|
### Layer 2: Adversarial Audit
|
|
462
544
|
- Findings: [N]
|
|
463
545
|
- [list each finding with file:line and evidence]
|
package/ftm-executor/SKILL.md
CHANGED
|
@@ -128,7 +128,7 @@ For FAIL findings, suggest specific fixes.
|
|
|
128
128
|
```
|
|
129
129
|
|
|
130
130
|
**Interpret the result:**
|
|
131
|
-
- **PASS**: Proceed to Phase 1
|
|
131
|
+
- **PASS**: Proceed to Phase 0.7 → Phase 1 → Phase 1.5 (documentation bootstrap) → Phase 2
|
|
132
132
|
- **WARN**: Show warnings to user, proceed unless they object
|
|
133
133
|
- **FAIL**: Present blockers and suggested fixes. Ask user: fix the plan and re-run, or override and execute anyway?
|
|
134
134
|
|
|
@@ -174,6 +174,10 @@ Parallel waves:
|
|
|
174
174
|
Final: Task [N] (integration/cleanup)
|
|
175
175
|
```
|
|
176
176
|
|
|
177
|
+
**After outputting the summary, proceed IMMEDIATELY to Phase 1.5.** Do NOT skip to Phase 2. The documentation bootstrap must run before any agents are dispatched.
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
177
181
|
### Phase 1.5: Documentation Layer Bootstrap (MANDATORY)
|
|
178
182
|
|
|
179
183
|
**This phase is non-skippable.** The documentation layer is required for ftm-verify to assess plan completion, for ftm-codex-gate to detect intent conflicts, and for agents to update docs as they work. Without it, every downstream verification step is degraded.
|
|
@@ -204,6 +208,10 @@ Cannot proceed without documentation layer. Fix manually or re-run.
|
|
|
204
208
|
```
|
|
205
209
|
Do NOT proceed to Phase 2 with missing documentation files.
|
|
206
210
|
|
|
211
|
+
**Phase 1.5 complete.** All documentation files verified. Proceed to Phase 2.
|
|
212
|
+
|
|
213
|
+
**CRITICAL FLOW REMINDER: The execution sequence is Phase 0 → 0.5 → 0.7 → 1 → 1.5 → 2 → 3 → 3.5 → 4. Phase 1.5 MUST execute between Phase 1 and Phase 2. If you are reading this and have not yet created/verified the documentation layer, STOP and do it now before dispatching any agents.**
|
|
214
|
+
|
|
207
215
|
---
|
|
208
216
|
|
|
209
217
|
### Phase 2: Assemble the Agent Team
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "feed-the-machine",
|
|
3
|
-
"version": "1.5.
|
|
3
|
+
"version": "1.5.1",
|
|
4
4
|
"description": "A unified intelligence layer for Claude Code — 22 skills with OODA-based reasoning, persistent memory, multi-model deliberation, and optional operator cockpit inbox",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "kkudumu",
|