fdeops 3.13.0 → 3.15.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/AGENTS.md +1 -1
- package/README.md +178 -115
- package/adapters/README.md +1 -1
- package/bin/check.js +44 -22
- package/bin/fde.js +20 -11
- package/bin/lib/trust.js +3 -2
- package/mcp/fdeops-ingest/package.json +1 -1
- package/package.json +2 -2
- package/plugin.json +3 -3
- package/skills/fde/SKILL.md +78 -158
- package/skills/fde/references/pattern-extract.md +9 -9
- package/skills/fde/archive/sdlc/README.md +0 -7
- package/skills/fde/archive/sdlc/build.md +0 -154
- package/skills/fde/archive/sdlc/debug.md +0 -55
- package/skills/fde/archive/sdlc/observability.md +0 -103
- package/skills/fde/archive/sdlc/qa-live.md +0 -113
- package/skills/fde/archive/sdlc/security-audit.md +0 -105
- package/skills/fde/archive/sdlc/test-on-legacy.md +0 -108
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fdeops",
|
|
3
|
-
"version": "3.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "3.15.0",
|
|
4
|
+
"description": "Forward deployed engineering skills for AI coding agents. Your agent forgets the client every morning - the sponsor, the promise, who signed off. FDEOps keeps that as dated markdown on your laptop: one @fde skill, a deterministic local CLI, and hooks that make it automatic. Claude Code plugin and any agent that loads skills.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"fdeops": "bin/install.js",
|
|
7
7
|
"fde": "bin/fde.js"
|
package/plugin.json
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
3
3
|
"name": "fdeops",
|
|
4
|
-
"version": "3.
|
|
5
|
-
"description": "
|
|
4
|
+
"version": "3.15.0",
|
|
5
|
+
"description": "Forward deployed engineering skills for AI coding agents: per-client memory in local .fde/ files, one @fde skill. Local-only, no network.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Subash Natarajan",
|
|
8
8
|
"url": "https://github.com/suboss87"
|
|
9
9
|
},
|
|
10
|
-
"homepage": "https://
|
|
10
|
+
"homepage": "https://github.com/suboss87/fdeops",
|
|
11
11
|
"repository": "https://github.com/suboss87/FDEOps",
|
|
12
12
|
"license": "MIT",
|
|
13
13
|
"keywords": [
|
package/skills/fde/SKILL.md
CHANGED
|
@@ -7,148 +7,103 @@ description: Keeps engagement memory for client work - sponsor, promise, what sh
|
|
|
7
7
|
|
|
8
8
|
## Purpose
|
|
9
9
|
|
|
10
|
-
|
|
10
|
+
The **engagement record** for one client. One skill; six stages (land → close). You pick the method; they never pick a skill. Confirm, then write `.fde/`. The host agent writes the TypeScript; you log what they got. The artifact is the memory.
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
## When to use
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
- They named a client, pasted notes, or asked what was agreed
|
|
15
|
+
- The brief feels wrong, a sponsor went quiet, or Friday needs the ledger
|
|
16
|
+
- Unbound — ask the name once, then **you** run `fde resume --init`
|
|
15
17
|
|
|
16
|
-
|
|
18
|
+
## When NOT to use
|
|
17
19
|
|
|
18
|
-
|
|
20
|
+
TypeScript errors, unit tests, refactors, git commits, generic debug: **host agent**. Agreed slice + code: implement in the host, then `fde log delivery`.
|
|
19
21
|
|
|
20
|
-
|
|
22
|
+
## Use these first
|
|
21
23
|
|
|
22
|
-
|
|
|
24
|
+
| What's happening | Sentence to say | You run | Then read |
|
|
23
25
|
|---------|-----------------|---------|-----------|
|
|
24
|
-
| **The brief is wrong** | "If this works, who in their company would have to agree that it worked?" | `fde resume` then
|
|
25
|
-
| **They went quiet** | "Is this a process gap, or a trust problem?" | `fde log contact "…" --signal amber\|red\|green` | `references/rescue.md`
|
|
26
|
+
| **The brief is wrong** | "If this works, who in their company would have to agree that it worked?" | `fde resume` then discover | `references/discover.md` |
|
|
27
|
+
| **They went quiet** | "Is this a process gap, or a trust problem?" | `fde log contact "…" --signal amber\|red\|green` | `references/rescue.md` |
|
|
26
28
|
| **When did we agree?** | Don't argue from memory. Search the record. | `fde receipts <term>` | — |
|
|
27
|
-
| **What did they get?** |
|
|
28
|
-
|
|
29
|
-
After a meeting, still: `fde debrief --smart` → confirm → `--apply`. Before a walk-in: `fde prep`. Friday: `fde status` (promised → measured → accepted). Notes: dated, sourced, one customer.
|
|
29
|
+
| **What did they get?** | A number nobody signed is claimed, not delivered. | `fde status` | `references/status.md` |
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
After a meeting: `fde debrief --smart` → confirm → `--apply`. Walk-in: `fde prep`. Friday: `fde status`.
|
|
32
32
|
|
|
33
|
-
|
|
34
|
-
- **You (the model)** = the **AI coding agent** running this skill - not a human colleague, not the client's staff.
|
|
33
|
+
## Human surface vs agent plumbing
|
|
35
34
|
|
|
36
|
-
|
|
35
|
+
**FDE (human):** `@fde` + English, or `/brief` `/discover` `/plan` `/ship` `/got` `/close` `/debrief` `/prep` `/quiet` `/agreed` `/status`. Never a skill catalog.
|
|
37
36
|
|
|
38
|
-
|
|
37
|
+
**You (agent):** run the CLI. **Never tell the FDE to type** `fde …`. If unbound, you run `fde resume --init` after one question. Never ask them to run the CLI.
|
|
39
38
|
|
|
40
|
-
|
|
41
|
-
|-----|-----------|
|
|
42
|
-
| **FDE (human)** | `@fde` + natural language. Examples: "debrief these notes", "prep me for tomorrow's sponsor meeting", "when did we agree to drop that?", "draft the sponsor update". |
|
|
43
|
-
| **You (agent)** | Run the local `fde` CLI for deterministic memory work. Never tell the FDE to type `fde …` (except if setup is missing - then **you** run `fde resume --init <name>` after one clarifying question). |
|
|
44
|
-
|
|
45
|
-
If you catch yourself saying "run `fde debrief --smart notes.txt`" to the human - **stop**. Run it yourself (or write a temp notes file and run it), then show the human the result in plain language for confirm/reject.
|
|
39
|
+
Fallbacks: `node ~/.claude/fdeops/fde.js …`, then `npx --yes fdeops …`. Skill-only install is not "unavailable."
|
|
46
40
|
|
|
47
41
|
## Entry (every session)
|
|
48
42
|
|
|
49
|
-
1.
|
|
50
|
-
2.
|
|
51
|
-
3. Playback 2–3 lines
|
|
52
|
-
4. Route
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
|
59
|
-
|
|
60
|
-
|
|
|
61
|
-
|
|
|
62
|
-
|
|
|
63
|
-
|
|
|
64
|
-
|
|
|
65
|
-
|
|
|
66
|
-
|
|
|
67
|
-
|
|
|
68
|
-
|
|
|
69
|
-
|
|
|
70
|
-
|
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
## Anti-invention gates (field anti-slop)
|
|
81
|
-
|
|
82
|
-
These stop confident fiction. They are not optional soft tips.
|
|
83
|
-
|
|
84
|
-
| Temptation | Gate |
|
|
85
|
-
|------------|------|
|
|
86
|
-
| Tell the FDE to run `fde debrief` / `fde prep` / `fde receipts` themselves | **Stop.** You run the CLI; they confirm results in plain language. |
|
|
87
|
-
| Invent a stakeholder, meeting, or quote to make the narrative rich | **Stop.** Write `unknown - ask: <question>`. One fake name poisons every real citation. |
|
|
88
|
-
| Route to a phase because it "feels senior" while the signal is muddy | **Stop.** Playback + one natural question, or name the ambiguity ("discover or rescue — leaning X because…"). |
|
|
89
|
-
| Fill `success.md` / `terrain.md` with plausible defaults when the brief is thin | **Stop.** Run **brief interrogation** in land/discover (one Q + GUESS + confidence) until you can write without guessing, or leave gaps explicit. |
|
|
90
|
-
| Ship / go-live / irreversible change with "probably fine" | **Stop.** Run **intent vs diff** (KEEP/JUSTIFY/SPLIT/DROP) then **pre-blast challenge** in ship (or red-team) — CLAIM → CHALLENGE → VERDICT — and log both. |
|
|
91
|
-
| Grill the FDE with a checklist when they're mid-flow | **Stop.** Playback rule wins. Probe only when a missing fact changes the next move. |
|
|
92
|
-
| Sync chat transcripts / agent brain folders into the product git repo for "team share" | **Stop.** Run **session digest** into `.fde/` (judgment only). Transcripts stay local. |
|
|
93
|
-
|
|
94
|
-
When NOT to interrogate or challenge: unambiguous one-liners, mechanical ops, FDE explicitly asked for speed, answer already in `.fde/`.
|
|
95
|
-
|
|
96
|
-
## The memory contract (non-negotiable)
|
|
97
|
-
|
|
98
|
-
This is what makes fdeops a second brain instead of a chat window.
|
|
99
|
-
|
|
100
|
-
1. **On entry:** resolve the engagement path and read `context.md` via `fde resume` (a bounded view - current state + recent activity). Nothing else until the routed phase needs it; pull other `.fde/` files only when the phase calls for them.
|
|
101
|
-
2. **Deliverable = memory.** The output of every phase IS a `.fde/` file. You never ask the FDE to "update their notes" - producing the work and writing the memory are one action. The phase reference tells you which file.
|
|
102
|
-
3. **Evidence rule.** Every claim in an artifact carries its source: `(validated with: ops lead, Day 5)`, `(churn: 47 commits/90d)`, `(stated, unverified)`. The FDE defends these files in front of skeptical clients - traceable beats plausible.
|
|
103
|
-
4. **No invented facts - ever.** People, names, quotes, meetings, and numbers exist only if the FDE said them or the repo shows them. Never invent a stakeholder, a conversation, or a source to make the narrative richer - one fabricated name poisons every real citation around it. A missing fact is written as `unknown - ask: <the question>`, nothing else.
|
|
104
|
-
5. **On exit (session digest):** before the session ends — and again before opening a PR — capture the *thinking*, not the chat. Propose this digest in plain language; on FDE confirm, write into existing `.fde/` files (never a transcript dump, never a product-repo history folder):
|
|
43
|
+
1. `fde resume` (bounded `context.md`). `--full` only if you need the whole log.
|
|
44
|
+
2. **NO ENGAGEMENT:** ask "What should we call this client?" then **you** init. Pasted notes → debrief after bind.
|
|
45
|
+
3. Playback 2–3 lines. `hygiene:` → offer `fde doctor`; **never auto-rewrite**.
|
|
46
|
+
4. Route. Read **one** `references/*.md`. Confirm, then write.
|
|
47
|
+
|
|
48
|
+
Writes need a bind (`FDEOPS_ENGAGEMENT` or registry). Never install fdeops on infrastructure they do not control.
|
|
49
|
+
|
|
50
|
+
| They say | You run |
|
|
51
|
+
|----------|---------|
|
|
52
|
+
| where are we | `fde resume` |
|
|
53
|
+
| day-1 look at the repo | `fde scan` |
|
|
54
|
+
| debrief / pasted notes | `fde debrief --smart` → you rewrite prefixes → confirm → `--apply`. `--smart` is a gate, not a brain. `references/debrief.md` |
|
|
55
|
+
| prep me for … | `fde prep "<label>"` |
|
|
56
|
+
| when did we agree | `fde receipts <term>` |
|
|
57
|
+
| sponsor update / what they got | `fde status` |
|
|
58
|
+
| they went quiet | `fde log contact "…" --signal amber\|green\|red` |
|
|
59
|
+
| fieldbook page | `fde dashboard` |
|
|
60
|
+
| clean up the fieldbook | `fde doctor` — never auto-rewrite |
|
|
61
|
+
| scrub a secret | `fde redact <term>` then `--apply` after confirm |
|
|
62
|
+
| pull Granola/Slack/transcript | capability check → `fde ingest stage` → confirm → apply. Never auto-apply. `references/ingest.md` |
|
|
63
|
+
| connect an MCP | `references/ingest-connect.md` |
|
|
64
|
+
| Obsidian / one window | `fde vault` (`--redacted` for a shared screen) |
|
|
65
|
+
|
|
66
|
+
## The memory contract
|
|
67
|
+
|
|
68
|
+
1. **On entry:** `fde resume` only. Pull other `.fde/` files when the method needs them.
|
|
69
|
+
2. **Deliverable = memory.** The work *is* the `.fde/` file. The reference names which one.
|
|
70
|
+
3. **Evidence.** Every claim has a source. Traceable beats plausible.
|
|
71
|
+
4. **No invented facts.** People, quotes, meetings, numbers: they said it or the repo shows it. Else `unknown - ask: <question>`.
|
|
72
|
+
5. **Session digest** (end of session and before a PR) — thinking, not the chat. Confirm, then write. Never a transcript dump.
|
|
105
73
|
|
|
106
74
|
| Digest beat | Lands in |
|
|
107
75
|
|-------------|----------|
|
|
108
|
-
| **TL;DR**
|
|
109
|
-
| **Key decisions & why**
|
|
110
|
-
| **Pivot / aha**
|
|
111
|
-
| **Scope + verification**
|
|
112
|
-
| **Gotchas
|
|
113
|
-
| **Next action** | existing `## Next action` — **replace
|
|
114
|
-
|
|
115
|
-
The `session-stop` hook backstops a thin snapshot; **you** write the meaningful digest. Raw agent transcripts stay on the machine — judgment is what ships in the fieldbook.
|
|
116
|
-
6. **One customer, one folder.** Never merge two engagements into one `.fde/`. Confirm which engagement applies when multiple exist.
|
|
117
|
-
7. **Never delete a code-read section when rewriting an artifact.** `stakeholders.md`'s `## Signal history` holds dated `[signal:...]` tokens that `fde status`/`fde receipts`/the dashboard read verbatim; `risks.md`'s `## Retired` is read the same way. Rewriting either file as an artifact (land, audit, stakeholder-radar) is fine - dropping one of these sections is not. Carry existing entries forward untouched.
|
|
76
|
+
| **TL;DR** | `context.md` |
|
|
77
|
+
| **Key decisions & why** | `decisions.md` — skip if none |
|
|
78
|
+
| **Pivot / aha** | `context.md` or `decisions.md` |
|
|
79
|
+
| **Scope + verification** | `delivery.md` if code/PR; else skip |
|
|
80
|
+
| **Gotchas** | `context.md` |
|
|
81
|
+
| **Next action** | existing `## Next action` — **replace**; never append a second heading |
|
|
118
82
|
|
|
119
|
-
|
|
83
|
+
Judgment ships in the fieldbook. Raw transcripts stay on the machine. The `session-stop` hook is a thin backstop; **you** write the digest.
|
|
120
84
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
- **Before reading or generating against customer code, the AI policy must be known.** New engagement, policy unknown → ask it (land phase: "policy on AI-generated code? data that must never touch AI?") *before* loading their code into context. Default to "not permitted" until the FDE confirms.
|
|
124
|
-
- Data tagged `<private>` (sacred data, PHI, cardholder, classified) is **redacted from CLI, dashboard, and hook-injected context**. Do **not** open raw `<private>` blocks with file tools (that bypasses redaction) or paste them into prompts/subagents - work around them, never with them.
|
|
125
|
-
- Locked-down engagement (no AI on their code)? Use the CLI + the fieldbook only. The memory layer is the FDE's own notes, not customer code.
|
|
85
|
+
6. **One customer, one folder.**
|
|
86
|
+
7. Never drop `## Signal history` or `## Retired` when rewriting those files.
|
|
126
87
|
|
|
127
|
-
|
|
88
|
+
**Don't invent.** Don't tell them to run the CLI. Don't fill `success.md` / `terrain.md` with guesses. Don't ship on "probably fine" — intent vs diff, then pre-blast. Don't grill mid-flow. Don't sync transcripts into git.
|
|
128
89
|
|
|
129
|
-
|
|
90
|
+
## Data boundary
|
|
130
91
|
|
|
131
|
-
|
|
92
|
+
CLI is local (`git` + files, no network). You see their code only when they point you at it. AI policy unknown → ask before loading code. `<private>` is redacted from CLI/dashboard/hooks — do not open raw private blocks with file tools.
|
|
132
93
|
|
|
133
|
-
|
|
94
|
+
## Voice
|
|
134
95
|
|
|
135
|
-
|
|
136
|
-
|-------------|-----|
|
|
137
|
-
| touch their code the first time | "Is there a safe place to break things, or am I in production?" — plus AI-code policy if unknown |
|
|
138
|
-
| deploy or go live | "Who needs to know this is shipping, and what's the rollback if it turns?" |
|
|
139
|
-
| hand an artifact to a sponsor or exec | "Does this go to them as-is, or do you want to gut-check it first?" |
|
|
140
|
-
| act on a pivot (budget cut, new CTO, reprioritisation) | "Is the old plan dead, or just paused?" |
|
|
141
|
-
| respond to a quiet stakeholder / slipping trust | "Is this a process gap, or a trust problem?" |
|
|
96
|
+
Direct. Their words. No "Certainly." Playback 2–4 lines, then act. One question only when a missing fact changes the next move.
|
|
142
97
|
|
|
143
|
-
|
|
98
|
+
New embed: sprint / standard / programme changes depth, not which methods exist. Before first code: safe place to break things, plus AI-code policy. Before go-live: who needs to know, what's the rollback. Before a sponsor artifact: as-is or gut-check first.
|
|
144
99
|
|
|
145
|
-
|
|
100
|
+
Muddy signal: name it ("discover or rescue — leaning X"). Never a phase-picker interview. Default: land if new, audit if takeover.
|
|
146
101
|
|
|
147
|
-
|
|
102
|
+
## Routing - 6 stages
|
|
148
103
|
|
|
149
|
-
|
|
104
|
+
Read **one** reference and follow it. Do not improvise from memory.
|
|
150
105
|
|
|
151
|
-
|
|
106
|
+
### Land
|
|
152
107
|
|
|
153
108
|
| You hear | Skill | Reference |
|
|
154
109
|
|----------|-------|-----------|
|
|
@@ -158,9 +113,7 @@ The first days. Getting access, building credibility, understanding the real sco
|
|
|
158
113
|
| Need to earn access, navigate AI policy, build credibility | trust-engineering | `references/trust-engineering.md` |
|
|
159
114
|
| "Also can you…", scope expanding, timeline unchanged | scope-defense | `references/scope-defense.md` |
|
|
160
115
|
|
|
161
|
-
###
|
|
162
|
-
|
|
163
|
-
Finding the real problem. Testing what the brief claims.
|
|
116
|
+
### Discover
|
|
164
117
|
|
|
165
118
|
| You hear | Skill | Reference |
|
|
166
119
|
|----------|-------|-----------|
|
|
@@ -169,9 +122,7 @@ Finding the real problem. Testing what the brief claims.
|
|
|
169
122
|
| Multiple use cases competing, "we want to do everything" | use-case-scoring | `references/use-case-scoring.md` |
|
|
170
123
|
| Need to validate a direction, prototype, demo to de-risk | sketch | `references/sketch.md` |
|
|
171
124
|
|
|
172
|
-
###
|
|
173
|
-
|
|
174
|
-
Sequencing work and getting alignment from sponsors.
|
|
125
|
+
### Plan
|
|
175
126
|
|
|
176
127
|
| You hear | Skill | Reference |
|
|
177
128
|
|----------|-------|-----------|
|
|
@@ -180,31 +131,20 @@ Sequencing work and getting alignment from sponsors.
|
|
|
180
131
|
| Significant decision, multiple approaches, "what should we do?" | options-analysis | `references/options-analysis.md` |
|
|
181
132
|
| 20 things are "urgent," need to pick the 3 that matter | initiative-triage | `references/initiative-triage.md` |
|
|
182
133
|
|
|
183
|
-
###
|
|
184
|
-
|
|
185
|
-
Safe implementation on someone else's codebase.
|
|
134
|
+
### Ship
|
|
186
135
|
|
|
187
136
|
| You hear | Skill | Reference |
|
|
188
137
|
|----------|-------|-----------|
|
|
189
138
|
| Large feature, need visible progress every 2–3 days | incremental-build | `references/incremental-build.md` |
|
|
190
139
|
| What could go wrong, touching shared infrastructure, need to assess impact | blast-radius | `references/blast-radius.md` |
|
|
191
140
|
| Production down, urgent - OR stakeholder gone quiet, trust slipping | rescue | `references/rescue.md` |
|
|
192
|
-
|
|
193
|
-
### Domain 5 - Ship & Verify
|
|
194
|
-
|
|
195
|
-
Getting to production without surprises.
|
|
196
|
-
|
|
197
|
-
| You hear | Skill | Reference |
|
|
198
|
-
|----------|-------|-----------|
|
|
199
141
|
| Ready to deploy, going live, pre-flight check | ship | `references/ship.md` |
|
|
200
142
|
| Review this change, is it safe, does it match what we agreed | review | `references/review.md` |
|
|
201
143
|
| Diff grew / scope creep in the PR / "did we only build what we said" / KEEP JUSTIFY SPLIT DROP | review (+ ship if going live) | `references/review.md` Stage 1 · `references/ship.md` Intent vs diff |
|
|
202
144
|
| Wrap the session / share the thinking / catch teammates up / before I open the PR | (memory contract — session digest) | SKILL.md **On exit** — write TL;DR + decisions/why into `.fde/`; no transcript sync |
|
|
203
145
|
| "We can always revert" - need to actually test the escape route | rollback-drill | `references/rollback-drill.md` |
|
|
204
146
|
|
|
205
|
-
###
|
|
206
|
-
|
|
207
|
-
Running the engagement and ending it well.
|
|
147
|
+
### Prove
|
|
208
148
|
|
|
209
149
|
| You hear | Skill | Reference |
|
|
210
150
|
|----------|-------|-----------|
|
|
@@ -216,6 +156,11 @@ Running the engagement and ending it well.
|
|
|
216
156
|
| Prep me for a meeting / walk-in brief / "what should I know before I talk to…" | - | run `fde prep "<label>"`, present in plain language |
|
|
217
157
|
| Sponsor's boss needs a summary, board update, justify continued investment | exec-narrative | `references/exec-narrative.md` |
|
|
218
158
|
| Status across all my customers | dashboard | `references/dashboard.md` |
|
|
159
|
+
|
|
160
|
+
### Close
|
|
161
|
+
|
|
162
|
+
| You hear | Skill | Reference |
|
|
163
|
+
|----------|-------|-----------|
|
|
219
164
|
| Juggling 2+ customers, losing track, context-switching | multi-customer-ops | `references/multi-customer-ops.md` |
|
|
220
165
|
| Wrapping up, handoff, making yourself replaceable | close | `references/close.md` |
|
|
221
166
|
| Engagement ending, team needs to operate without you | handoff-engineering | `references/handoff-engineering.md` |
|
|
@@ -234,38 +179,13 @@ Running the engagement and ending it well.
|
|
|
234
179
|
| Payments, cardholder data, PCI-DSS, anything that moves money | `references/fintech.md` |
|
|
235
180
|
| Government agency, FedRAMP, ATO, CUI, classified | `references/gov.md` |
|
|
236
181
|
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
Do not interview them as an intake form. Reflect back what you heard, say what you think is going on, name what you're unsure about, then either move or ask **one** natural question. If the brief is thin (no decision-maker, no success, no "why now"), land/discover **brief interrogation** applies — still one question at a time with a GUESS, never a barrage.
|
|
240
|
-
|
|
241
|
-
Bad: "Are you in phase land, discover, build, or rescue?"
|
|
242
|
-
Good: "Feels like you're past the first meeting but the brief still doesn't match what ops told you - I'd dig into that before more code. Unless production's actually on fire?"
|
|
243
|
-
|
|
244
|
-
If the situation maps to multiple skills or none clearly: say so. "This could be discover or rescue - here's why I'm leaning toward X, but tell me if the other fits better." Named uncertainty beats a confident wrong answer. Never silently guess when the signal is ambiguous. See **Anti-invention gates**.
|
|
245
|
-
|
|
246
|
-
If still muddy after one exchange: default to land for new work, audit for takeovers. Ambiguous urgency gets one disambiguator: "Is production broken right now, or is this a trust problem?"
|
|
247
|
-
|
|
248
|
-
## Health check
|
|
249
|
-
|
|
250
|
-
If the FDE says "how are we doing" / "are we on track": load `reality.md`, `risks.md`, `delivery.md`, `stakeholders.md` (not `trust-profile.md` - sensitive data isn't needed for a status read). Four lines, red/amber/green:
|
|
251
|
-
|
|
252
|
-
- Real problem still matches `reality.md`, or has scope crept?
|
|
253
|
-
- Any stakeholder signal going amber or red?
|
|
254
|
-
- Any risk overdue for action?
|
|
255
|
-
- Value delivered and logged in `delivery.md`?
|
|
256
|
-
|
|
257
|
-
## Operational edge cases
|
|
258
|
-
|
|
259
|
-
- **`.fde/` exists but `context.md` is empty:** treat as new session - ask what's happening.
|
|
260
|
-
- **"Ready to build" but no `terrain.md` or plan in `decisions.md`:** route to discover or plan first. Never start code blind. Agreed slice + code work: **you implement in the host agent**; log delivery with `fde log delivery`. Do not load archived SDLC sermons (`archive/sdlc/`).
|
|
261
|
-
- **Taking over mid-flight without `audit.md`:** audit before build.
|
|
262
|
-
- **Multiple customers in one message:** confirm which engagement; never cross-contaminate folders.
|
|
182
|
+
Ready to build with no `terrain.md` / plan: discover or plan first. Takeover without `audit.md`: audit first. Two customers in one message: confirm which folder.
|
|
263
183
|
|
|
264
184
|
## Principles
|
|
265
185
|
|
|
266
186
|
- Never ask the FDE to pick a phase. That's your job.
|
|
267
|
-
- Read `context.md` before speaking. One sharp question
|
|
268
|
-
- Never invent people, meetings, or numbers — `unknown - ask:` beats a polished lie
|
|
187
|
+
- Read `context.md` before speaking. One sharp question — never a barrage.
|
|
188
|
+
- Never invent people, meetings, or numbers — `unknown - ask:` beats a polished lie.
|
|
269
189
|
- Every phase ends with its artifact written. No artifact, no "done."
|
|
270
190
|
- Evidence on every claim. The FDE will be challenged on these files.
|
|
271
191
|
- Overlays activate on signal, not on request.
|
|
@@ -48,16 +48,16 @@ The difference between a 5-year FDE and a 15-year FDE is not talent - it's encod
|
|
|
48
48
|
| **Repeatable?** | Applies to a class of situations, not just this one | Only worked because of a unique circumstance |
|
|
49
49
|
| **Falsifiable?** | You can tell when the pattern is working or not | No way to measure whether applying it helped |
|
|
50
50
|
|
|
51
|
-
**4. Classify by
|
|
51
|
+
**4. Classify by stage.** Patterns sort into the same stages as the methods:
|
|
52
52
|
|
|
53
|
-
|
|
|
53
|
+
| Stage | Pattern type | Example |
|
|
54
54
|
|--------|-------------|---------|
|
|
55
|
-
| **
|
|
56
|
-
| **Discover
|
|
57
|
-
| **Plan
|
|
58
|
-
| **
|
|
59
|
-
| **
|
|
60
|
-
| **
|
|
55
|
+
| **Land** | Political / relational | "The passed-over team warm-up protocol" |
|
|
56
|
+
| **Discover** | Investigative / analytical | "The cron-job discovery checklist for legacy systems" |
|
|
57
|
+
| **Plan** | Structural / strategic | "The three-option presentation for nervous sponsors" |
|
|
58
|
+
| **Ship** | Technical / safety | "The Strangler Fig on financial transaction code" |
|
|
59
|
+
| **Prove** | Operational / process | "The regulated-environment change-approval timeline buffer" |
|
|
60
|
+
| **Close** | Knowledge / handoff | "The 2am document format that actually gets used" |
|
|
61
61
|
|
|
62
62
|
**5. Version and evolve.** Patterns are living documents:
|
|
63
63
|
|
|
@@ -76,7 +76,7 @@ A pattern learned twice is a process failure. Encoding it prevents the third tim
|
|
|
76
76
|
|
|
77
77
|
## Artifact
|
|
78
78
|
|
|
79
|
-
**`patterns.md`** - the pattern library, growing across engagements. Each pattern in the format above. Indexed by
|
|
79
|
+
**`patterns.md`** - the pattern library, growing across engagements. Each pattern in the format above. Indexed by stage and situation trigger.
|
|
80
80
|
|
|
81
81
|
**`retrospectives/YYYY-MM-DD-<engagement>.md`** - reference to which patterns were extracted from this engagement.
|
|
82
82
|
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
# Archived SDLC methods (not routed)
|
|
2
|
-
|
|
3
|
-
These files used to sit in `references/` and compete with ordinary coding-agent skills (TDD, review, debug). They are **not** in the `@fde` router.
|
|
4
|
-
|
|
5
|
-
Keep them here for history. Do not load them for a TypeScript error, a unit test, or a deploy checklist — that work stays in the host agent.
|
|
6
|
-
|
|
7
|
-
Routed FDE work is in `../references/` and the four days in `SKILL.md`.
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
# build - safe implementation on someone else's codebase
|
|
2
|
-
|
|
3
|
-
**Enter when:** an agreed slice is ready to implement - feature, fix, integration, legacy change. Includes the review gate before merge.
|
|
4
|
-
|
|
5
|
-
**Read first:** `context.md`, `terrain.md`, `decisions.md`. Load `trust-profile.md` when touching regulated areas. No map or no plan → route to discover/plan first; say it plainly: "We're not ready to touch code until we know what's connected to this module."
|
|
6
|
-
|
|
7
|
-
## Validation gate (confirm understanding, clarify where it elevates)
|
|
8
|
-
|
|
9
|
-
Before starting, state what you're working with in 2-4 lines - a brief playback that invites correction, not a question:
|
|
10
|
-
|
|
11
|
-
> "Building: [task name]. Blast radius: [files/systems]. Terrain is [X days] fresh. [Any risk or concern worth naming, or 'clear to proceed']."
|
|
12
|
-
|
|
13
|
-
Then check - probe ONLY if it prevents a mistake:
|
|
14
|
-
|
|
15
|
-
1. **Acceptance criteria are falsifiable.** If the criteria are vague ("should work well", "handle errors gracefully") → rephrase them specifically: "I'm reading 'works well' as: responds in <500ms, retries 3x, alerts on failure. That right?"
|
|
16
|
-
2. **Terrain is current.** If terrain.md is significantly older than the plan → one line: "Terrain is from Day 3, plan from Day 8 - assuming nothing shifted in between."
|
|
17
|
-
3. **No open CRITICAL risk on the module.** If found → name it: "There's an open risk on this module (rate limiting). Building around it unless you say otherwise."
|
|
18
|
-
|
|
19
|
-
Don't interrogate. State your read, let the FDE correct if needed, then move.
|
|
20
|
-
|
|
21
|
-
## Spec generation (AI generates, human approves)
|
|
22
|
-
|
|
23
|
-
Before writing code, generate the implementation spec for this task and present it to the FDE:
|
|
24
|
-
|
|
25
|
-
```
|
|
26
|
-
Spec: [task name from decisions.md]
|
|
27
|
-
Inputs: [what triggers this - event, request, user action, data shape]
|
|
28
|
-
Outputs: [what the user/system sees when it works]
|
|
29
|
-
Accepts:
|
|
30
|
-
- [scenario 1: specific testable outcome]
|
|
31
|
-
- [scenario 2: specific testable outcome]
|
|
32
|
-
Edge cases:
|
|
33
|
-
- [boundary condition]: [what happens]
|
|
34
|
-
- [error scenario]: [what happens]
|
|
35
|
-
Constraints: [performance, security, compliance bounds from trust-profile.md]
|
|
36
|
-
```
|
|
37
|
-
|
|
38
|
-
Present this to the FDE: "Here's what I'm about to build. Any open questions or changes before I start?"
|
|
39
|
-
|
|
40
|
-
- FDE says "yes" / "go" / "approved" → build against the spec exactly
|
|
41
|
-
- FDE modifies → update spec, confirm, then build
|
|
42
|
-
- Fast-track: if the task is under 30 minutes and the FDE has established trust (week 2+), state the spec inline and proceed unless they object
|
|
43
|
-
|
|
44
|
-
The spec becomes the test list - every line is something to verify after build.
|
|
45
|
-
|
|
46
|
-
## The loop (you do this work, in this order)
|
|
47
|
-
|
|
48
|
-
1. **Confirm scope in writing.** The task exists in `decisions.md` with acceptance criteria. Not there → plan first or name the scope creep.
|
|
49
|
-
2. **Declare blast radius.** Read the full dependency chain of what you're about to change. State: which files, which users, which systems. The change that breaks something always looked small.
|
|
50
|
-
3. **Confirm the rollback path exists** before writing a line. "We can always revert" is not a rollback path.
|
|
51
|
-
4. **Legacy code: characterisation tests first.** Tests for what the code *actually does right now* - including the parts that seem wrong; those behaviours are the contract the system depends on. Then wrap with Strangler Fig: new interface around old code, deprecate gradually, never rewrite in place.
|
|
52
|
-
5. **Search before creating.** Read the existing code in the area; don't add parallel helpers where a service exists. Integrating an SDK/vendor API → read real source (local `reference/repos/...` or official repo) before guessing names; record the files used in `decisions.md`. If an API looks invented, stop and search source.
|
|
53
|
-
6. **Build the minimal working path.** Thin vertical slice the customer can see. No opportunistic refactors. Every changed line traces to the task.
|
|
54
|
-
7. **Verify with evidence.** Run tests/typechecks/smallest proving script. State what ran and what didn't. "Seems right" is never evidence.
|
|
55
|
-
8. **Convergence check (spec vs. reality).** Walk through every acceptance scenario and edge case from the spec. State each one explicitly with its result:
|
|
56
|
-
- `[PASS]` scenario verified with evidence
|
|
57
|
-
- `[FAIL]` scenario not met - fix before proceeding
|
|
58
|
-
- `[DEFERRED]` intentionally left for a later task (state which one)
|
|
59
|
-
Surface the results to the FDE. If any scenario fails, fix it before cleanup. This is not optional - the spec is the contract.
|
|
60
|
-
9. **Cleanup pass after it works.** Dedupe repeated mechanics into the smallest service module; behavior unchanged; re-run the same tests. If you wrote 200 lines and 50 would do, rewrite before review.
|
|
61
|
-
10. **Review gate (before merge):** three beats, in order - (a) **session digest**: TL;DR + decisions/why + scope/verification into `.fde/` so the PR carries thinking, not just code (memory contract On exit; see `review.md`); (b) **intent vs diff**: every path KEEP / JUSTIFY / SPLIT / DROP against the stated slice in `decisions.md` (see `review.md` Stage 1); (c) **safety**: blast radius honest, tests meaningful, rollback real, secrets absent. Fix real findings, re-verify, repeat until clean or blocked on a human decision.
|
|
62
|
-
11. **Log and deliver.** Update the artifacts (below). Visible progress beats invisible perfection - every 2–3 tasks something shown to a stakeholder.
|
|
63
|
-
|
|
64
|
-
**Touching existing code - classify before changing:**
|
|
65
|
-
- **Fix now:** actively failing or blocking.
|
|
66
|
-
- **Fix when touched:** will bite when surrounding code changes - fix as part of this change.
|
|
67
|
-
- **Document and leave:** ugly but uninvolved. The hardest discipline. Opportunistic refactors create diffs nobody asked for and regressions nobody expected.
|
|
68
|
-
|
|
69
|
-
**AI components:** build the fallback path *before* the AI path (model slow? garbage? down?). Add observability before deploy: log inputs, outputs, confidence - hallucinations don't throw exceptions. Confirm the data processing agreement covers customer data before it goes to an external model; in regulated environments this is a blocker, not a detail.
|
|
70
|
-
|
|
71
|
-
**Regulated environments:** check the AI code policy in `trust-profile.md` first. Some modules require human review of AI-generated code or prohibit it. Find out before building, not after showing the code.
|
|
72
|
-
|
|
73
|
-
## Mid-build scope requests
|
|
74
|
-
|
|
75
|
-
"Also can you add…" → "That's worth looking at - let me place it." Current phase, future phase, or separate engagement? If it's outside `success.md`, name it: "Outside what we agreed; future phase or rescope conversation." Absorbed scope sets the precedent that the boundary doesn't exist - and in commercial engagements it silently moves billing and liability. Surface it to whoever owns the commercials.
|
|
76
|
-
|
|
77
|
-
## Method - integration design (connecting systems)
|
|
78
|
-
|
|
79
|
-
FDEs spend 40%+ of build time on integrations. Connecting system A to system B is where projects die quietly - wrong assumptions about APIs, missing auth, schema mismatches, rate limits.
|
|
80
|
-
|
|
81
|
-
**The integration checklist (before writing code):**
|
|
82
|
-
|
|
83
|
-
1. **Contract first.** Define what crosses the boundary: request shape, response shape, error shape. Write it down before calling anything. An undocumented contract changes without warning.
|
|
84
|
-
2. **Auth model.** OAuth2, API key, mTLS, SAML? Who provisions the credential? Who rotates it? What's the expiry? One expired token at 2am = production down.
|
|
85
|
-
3. **Rate limits and quotas.** Every external API has them, most aren't documented. Test with a burst early - don't discover the 429 on launch day.
|
|
86
|
-
4. **Error taxonomy.** Retryable (timeout, 503) vs. fatal (401, 422). Build retry with exponential backoff for the first, circuit-breaker for the second.
|
|
87
|
-
5. **Data transformation.** Their schema ≠ your schema. Map fields explicitly. Null handling rules. Timezone assumptions. Currency/locale. One unmapped field = silent data corruption.
|
|
88
|
-
6. **Idempotency.** Can you safely retry? If not, you need deduplication. Double-charges, double-posts, double-notifications - all integration bugs.
|
|
89
|
-
7. **Observability at the boundary.** Log every outbound call: request (redacted), response code, latency. The integration is the first thing to blame and the last thing instrumented.
|
|
90
|
-
|
|
91
|
-
**The integration contract template (write to `decisions.md`):**
|
|
92
|
-
```
|
|
93
|
-
Integration: [System A] → [System B]
|
|
94
|
-
Direction: push / pull / bidirectional
|
|
95
|
-
Auth: [method] - provisioned by [who] - expires [when]
|
|
96
|
-
Rate limit: [n] req/[period]
|
|
97
|
-
Retry: [strategy]
|
|
98
|
-
Data mapping: [field map or link to schema]
|
|
99
|
-
Failure mode: [what happens when B is down]
|
|
100
|
-
Owner: [who gets paged]
|
|
101
|
-
```
|
|
102
|
-
|
|
103
|
-
## Method - team amplification (making their engineers better)
|
|
104
|
-
|
|
105
|
-
The FDE's job is to make themselves replaceable. Not at handoff - every day. A client team that can only ship when the FDE is present is a dependency, not a success.
|
|
106
|
-
|
|
107
|
-
**Daily practices:**
|
|
108
|
-
- **Pair, don't take over.** When a client engineer is stuck, pair for 30 minutes rather than solving it alone in 10. The 10-minute fix creates dependency; the 30-minute pair creates capability.
|
|
109
|
-
- **Review their PRs with teaching intent.** Not "fix this" - "here's why this approach creates risk, and here's the pattern I'd use instead." Link to their own codebase for examples, not external docs.
|
|
110
|
-
- **Make decisions visible.** When you make an architecture choice, write a 3-line rationale in `decisions.md`. The team sees your reasoning, not just your output.
|
|
111
|
-
- **Name patterns, not just fixes.** "This is a circuit breaker pattern - here's when to use it again" converts one fix into a reusable skill.
|
|
112
|
-
|
|
113
|
-
**Weekly practices:**
|
|
114
|
-
- **One 30-min knowledge session per week.** Not a lecture - pick the hardest thing you built this week, walk through the thinking with the team. Answer: "why this approach and not the obvious one?"
|
|
115
|
-
- **Track the team's solo wins.** When a client engineer ships without FDE help, note it. This is the metric that proves the engagement is working.
|
|
116
|
-
|
|
117
|
-
**The independence signal:** When the team stops asking "how should we do X?" and starts asking "we're thinking X because Y - does that sound right?" - the engagement is succeeding.
|
|
118
|
-
|
|
119
|
-
## Stop signals - reassess immediately
|
|
120
|
-
|
|
121
|
-
- "I'll add tests after this works" - the regression is already in.
|
|
122
|
-
- "Small change, no need to declare blast radius" - famous last words.
|
|
123
|
-
- "I'll refactor this while I'm here" - unasked-for risk in an unrelated change.
|
|
124
|
-
- **Three fixes in and still broken - the diagnosis is wrong.** No fourth fix: state your current model of the problem, name the evidence that would disprove it, test that first (see `debug.md`).
|
|
125
|
-
|
|
126
|
-
## Artifact (logged as you go, not after)
|
|
127
|
-
|
|
128
|
-
- **`decisions.md`** - each significant choice: what, alternatives considered, why this one. For non-trivial architecture decisions, present three options to the FDE (safe / pragmatic / aggressive) with costs and a recommendation - three options is a real decision; one option is a request for trust. Integration contracts go here too.
|
|
129
|
-
- **`risks.md`** - new risks discovered while building.
|
|
130
|
-
- **`delivery.md`** - append a **value ledger** row for every ship: Date | Slice | Bucket | Promised | Measured | Accepted by | Evidence | Rollback. Bucket is `cost-save` / `risk-mitigation` / `revenue-uplift`. "Measured" may be `pending` until the pulse exists - never skip the promised column. Narrative under Shipped is optional color; the ledger is the record status and close read.
|
|
131
|
-
|
|
132
|
-
**Measured is not the same as accepted.** A number the FDE calculated is `claimed` until a named customer-side owner agrees it is real - their finance lead, their ops manager, the person whose budget it moves. Write the name and the date in **Accepted by**; leave it empty and the row reads `claimed`, never "delivered". This is the difference between a benefit that survives the renewal conversation and one the sponsor's CFO deletes in the review.
|
|
133
|
-
|
|
134
|
-
## Checkpoint
|
|
135
|
-
|
|
136
|
-
Before merge: the two-stage review (scope, then safety) has run clean, verification evidence is stated, and the slice is demonstrable. If `trust-profile.md` requires human sign-off on AI-generated code, that sign-off exists.
|
|
137
|
-
|
|
138
|
-
## Worked example
|
|
139
|
-
|
|
140
|
-
Acme task 1: route reconciliation failures to a named on-call.
|
|
141
|
-
|
|
142
|
-
Characterisation first — a test that captures what the job does *today* when it exits non-zero (silently succeeds from the caller's perspective). That test fails after the fix, which is the point: it documents the behaviour being changed rather than trusting the diff.
|
|
143
|
-
|
|
144
|
-
Mid-build, Tom asks to "just also fix the retry logic while you're in there." That is a scope decision, not a request: logged in `decisions.md` with the blast radius (retry touches the settlement path — not in this slice's declared radius) and routed to the plan's Next lane.
|
|
145
|
-
|
|
146
|
-
Ledger row on ship: `Jun 18 | failure routing | risk-mitigation | 4h → 15min detection | pending | — | staging kill test, PR #212 | disable alert route`. **Accepted by** stays empty until Marco confirms from a real incident — until then the number is claimed, and the status update says so.
|
|
147
|
-
|
|
148
|
-
## Principles
|
|
149
|
-
|
|
150
|
-
- Characterisation tests before modification. Every time.
|
|
151
|
-
- Blast radius declared before every change; rollback confirmed before every deploy.
|
|
152
|
-
- Scope creep is a decision, not a request. Name it.
|
|
153
|
-
- Build the fallback before the AI feature.
|
|
154
|
-
- Small diffs, objective verification, no thousand-line hope PRs.
|