fdeops 3.15.2 → 3.16.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/README.md +42 -41
- package/adapters/LOCAL-LLM.md +3 -3
- package/bin/check.js +10 -10
- package/mcp/README.md +1 -1
- package/mcp/fdeops-ingest/package.json +1 -1
- package/mcp/recipes/README.md +1 -1
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/skills/fde/SKILL.md +22 -22
- package/skills/fde/references/ai.md +1 -1
- package/skills/fde/references/{exec-narrative.md → board-memo.md} +1 -1
- package/skills/fde/references/business-case.md +2 -2
- package/skills/fde/references/{ingest-connect.md → connect.md} +1 -1
- package/skills/fde/references/discover.md +1 -1
- package/skills/fde/references/{trust-engineering.md → earn-trust.md} +1 -1
- package/skills/fde/references/{pattern-extract.md → encode-pattern.md} +1 -1
- package/skills/fde/references/eval-pack.md +1 -1
- package/skills/fde/references/{scope-defense.md → hold-scope.md} +2 -2
- package/skills/fde/references/ingest.md +3 -3
- package/skills/fde/references/land.md +2 -2
- package/skills/fde/references/{initiative-triage.md → pick-three.md} +1 -1
- package/skills/fde/references/plan.md +3 -3
- package/skills/fde/references/{sketch.md → poc.md} +1 -1
- package/skills/fde/references/{status.md → readout.md} +2 -2
- package/skills/fde/references/rescue.md +1 -1
- package/skills/fde/references/review.md +1 -1
- package/skills/fde/references/{rollback-drill.md → rollback.md} +1 -1
- package/skills/fde/references/{handoff-engineering.md → runbook.md} +3 -3
- package/skills/fde/references/{use-case-scoring.md → score-use-cases.md} +3 -3
- package/skills/fde/references/ship.md +1 -1
- package/skills/fde/references/{multi-customer-ops.md → switch-clients.md} +1 -1
- package/skills/fde/references/{assumption-audit.md → test-assumptions.md} +1 -1
- package/skills/fde/references/{incremental-build.md → thin-slices.md} +2 -2
- package/skills/fde/references/{options-analysis.md → three-options.md} +1 -1
- package/skills/fde/references/{blast-radius.md → what-breaks.md} +3 -3
- package/skills/fde/references/{stakeholder-radar.md → who-decides.md} +1 -1
- package/templates/.fde/assumptions.md +1 -1
package/README.md
CHANGED
|
@@ -28,14 +28,15 @@ Each command loads the same `@fde` skill. You never pick from 31 names.
|
|
|
28
28
|
| Prove the outcome | `/outcome` | Promised, measured, accepted |
|
|
29
29
|
| Close the embed | `/close` | They run it without you |
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
Also:
|
|
32
32
|
|
|
33
33
|
| What you're doing | Command | Key principle |
|
|
34
34
|
|-------------------|---------|-----------|
|
|
35
|
-
| Sponsor went silent | `/
|
|
36
|
-
| Scope dispute | `/
|
|
35
|
+
| Sponsor went silent | `/trust` | Process or trust |
|
|
36
|
+
| Scope dispute | `/receipts` | Dated, or a gap |
|
|
37
37
|
| After a meeting | `/debrief` | Notes into the record |
|
|
38
|
-
| Walk-in
|
|
38
|
+
| Walk-in | `/prep` | One page from the record |
|
|
39
|
+
| Friday readout | `/readout` | Promised, measured, accepted |
|
|
39
40
|
|
|
40
41
|
Skills also activate on English: naming a client, running a POC, slicing a feature, asking what was agreed. A throwaway one-liner in an unbound repo can skip `@fde`. A client slice cannot.
|
|
41
42
|
|
|
@@ -109,18 +110,18 @@ The commands above are the entry points. Under the hood, `@fde` activates these
|
|
|
109
110
|
|--------|--------------|----------|
|
|
110
111
|
| [land](skills/fde/references/land.md) | Interrogate the brief, map stakeholders, define success | New client, first meeting, just got the brief |
|
|
111
112
|
| [audit](skills/fde/references/audit.md) | Verify claims, find the load-bearing wall | Taking over, previous consultant left |
|
|
112
|
-
| [
|
|
113
|
-
| [trust
|
|
114
|
-
| [scope
|
|
113
|
+
| [who-decides](skills/fde/references/who-decides.md) | Who decides, who blocks, who escalates | Need to know who matters |
|
|
114
|
+
| [earn-trust](skills/fde/references/earn-trust.md) | Observer → trusted; navigate AI policy | Need access or credibility |
|
|
115
|
+
| [hold-scope](skills/fde/references/hold-scope.md) | Scope receipts; the accumulation conversation | "Also can you…", timeline unchanged |
|
|
115
116
|
|
|
116
117
|
### Discover - Find the real problem
|
|
117
118
|
|
|
118
119
|
| Skill | What It Does | Use When |
|
|
119
120
|
|--------|--------------|----------|
|
|
120
121
|
| [discover](skills/fde/references/discover.md) | Repo + workaround + the real problem | Brief feels wrong, shadow processes |
|
|
121
|
-
| [
|
|
122
|
-
| [use-
|
|
123
|
-
| [
|
|
122
|
+
| [test-assumptions](skills/fde/references/test-assumptions.md) | Untested assumptions by blast radius | Brief feels too neat |
|
|
123
|
+
| [score-use-cases](skills/fde/references/score-use-cases.md) | Value × urgency × alignment / complexity | Everything is P0 |
|
|
124
|
+
| [poc](skills/fde/references/poc.md) | Kill the killer assumption in a day | POC, spike, need to de-risk |
|
|
124
125
|
|
|
125
126
|
### Plan - Sequence the work
|
|
126
127
|
|
|
@@ -128,40 +129,40 @@ The commands above are the entry points. Under the hood, `@fde` activates these
|
|
|
128
129
|
|--------|--------------|----------|
|
|
129
130
|
| [plan](skills/fde/references/plan.md) | Backwards from done, PR-sized | What order, what is done |
|
|
130
131
|
| [business-case](skills/fde/references/business-case.md) | Cost of nothing → investment → return | Defend budget or timeline |
|
|
131
|
-
| [options
|
|
132
|
-
| [
|
|
132
|
+
| [three-options](skills/fde/references/three-options.md) | Three genuine options | "What should we do?" |
|
|
133
|
+
| [pick-three](skills/fde/references/pick-three.md) | Pick three from twenty urgents | Everything is urgent |
|
|
133
134
|
|
|
134
135
|
### Ship - Go live
|
|
135
136
|
|
|
136
137
|
| Skill | What It Does | Use When |
|
|
137
138
|
|--------|--------------|----------|
|
|
138
|
-
| [
|
|
139
|
-
| [
|
|
139
|
+
| [thin-slices](skills/fde/references/thin-slices.md) | Vertical slices, on-site proof | Building on their codebase |
|
|
140
|
+
| [what-breaks](skills/fde/references/what-breaks.md) | Impact from contained → irreversible | Touching shared infrastructure |
|
|
140
141
|
| [rescue](skills/fde/references/rescue.md) | Production fire or trust fire | Down, or they went quiet |
|
|
141
142
|
| [ship](skills/fde/references/ship.md) | Intent vs diff, pre-flight, rollback | Going live |
|
|
142
143
|
| [review](skills/fde/references/review.md) | Did we only build what we agreed | Before merge, scope creep |
|
|
143
|
-
| [rollback
|
|
144
|
+
| [rollback](skills/fde/references/rollback.md) | Test the escape route before 2am | "We can always revert" |
|
|
144
145
|
|
|
145
146
|
### Prove - Outcome
|
|
146
147
|
|
|
147
148
|
| Skill | What It Does | Use When |
|
|
148
149
|
|--------|--------------|----------|
|
|
149
|
-
| [
|
|
150
|
+
| [readout](skills/fde/references/readout.md) | Promised → measured → accepted | Friday, sponsor update |
|
|
150
151
|
| [demo-prep](skills/fde/references/demo-prep.md) | One number, five hard questions | Demo or exec walkthrough |
|
|
151
152
|
| [debrief](skills/fde/references/debrief.md) | Meeting notes into the record | Just left a meeting |
|
|
152
|
-
| [
|
|
153
|
+
| [board-memo](skills/fde/references/board-memo.md) | Board / sponsor's boss | Justify continued investment |
|
|
153
154
|
| [dashboard](skills/fde/references/dashboard.md) | Portfolio, trust-ordered | All my customers |
|
|
154
155
|
| [ingest](skills/fde/references/ingest.md) | Pull text you confirm | Transcript, Notion, Slack |
|
|
155
|
-
| [
|
|
156
|
+
| [connect](skills/fde/references/connect.md) | Wire a source MCP | Connect Granola |
|
|
156
157
|
|
|
157
158
|
### Close - They run it
|
|
158
159
|
|
|
159
160
|
| Skill | What It Does | Use When |
|
|
160
161
|
|--------|--------------|----------|
|
|
161
162
|
| [close](skills/fde/references/close.md) | Handoff that survives you | Wrapping up |
|
|
162
|
-
| [
|
|
163
|
-
| [
|
|
164
|
-
| [pattern
|
|
163
|
+
| [runbook](skills/fde/references/runbook.md) | Runbook, confidence scoring | They must operate without you |
|
|
164
|
+
| [switch-clients](skills/fde/references/switch-clients.md) | Switch without bleed | 2+ clients |
|
|
165
|
+
| [encode-pattern](skills/fde/references/encode-pattern.md) | If you did it twice, encode it | It will apply again |
|
|
165
166
|
| [red-team](skills/fde/references/red-team.md) | Stress-test before they do | "Poke holes in this" |
|
|
166
167
|
|
|
167
168
|
Overlays (on signal, not on request): [ai](skills/fde/references/ai.md) · [artifacts](skills/fde/references/artifacts.md) · [fintech](skills/fde/references/fintech.md) · [healthcare](skills/fde/references/healthcare.md) · [gov](skills/fde/references/gov.md) · [eval-pack](skills/fde/references/eval-pack.md)
|
|
@@ -209,34 +210,34 @@ fdeops/
|
|
|
209
210
|
│ └── references/ # 31 skills + overlays (you never pick)
|
|
210
211
|
│ ├── land.md # Land
|
|
211
212
|
│ ├── audit.md
|
|
212
|
-
│ ├──
|
|
213
|
-
│ ├── trust
|
|
214
|
-
│ ├── scope
|
|
213
|
+
│ ├── who-decides.md
|
|
214
|
+
│ ├── earn-trust.md
|
|
215
|
+
│ ├── hold-scope.md
|
|
215
216
|
│ ├── discover.md # Discover
|
|
216
|
-
│ ├──
|
|
217
|
-
│ ├── use-
|
|
218
|
-
│ ├──
|
|
217
|
+
│ ├── test-assumptions.md
|
|
218
|
+
│ ├── score-use-cases.md
|
|
219
|
+
│ ├── poc.md
|
|
219
220
|
│ ├── plan.md # Plan
|
|
220
221
|
│ ├── business-case.md
|
|
221
|
-
│ ├── options
|
|
222
|
-
│ ├──
|
|
223
|
-
│ ├──
|
|
224
|
-
│ ├──
|
|
222
|
+
│ ├── three-options.md
|
|
223
|
+
│ ├── pick-three.md
|
|
224
|
+
│ ├── thin-slices.md # Ship
|
|
225
|
+
│ ├── what-breaks.md
|
|
225
226
|
│ ├── rescue.md
|
|
226
227
|
│ ├── ship.md
|
|
227
228
|
│ ├── review.md
|
|
228
|
-
│ ├── rollback
|
|
229
|
-
│ ├──
|
|
229
|
+
│ ├── rollback.md
|
|
230
|
+
│ ├── readout.md # Prove
|
|
230
231
|
│ ├── demo-prep.md
|
|
231
232
|
│ ├── debrief.md
|
|
232
|
-
│ ├──
|
|
233
|
+
│ ├── board-memo.md
|
|
233
234
|
│ ├── dashboard.md
|
|
234
235
|
│ ├── ingest.md
|
|
235
|
-
│ ├──
|
|
236
|
+
│ ├── connect.md
|
|
236
237
|
│ ├── close.md # Close
|
|
237
|
-
│ ├──
|
|
238
|
-
│ ├──
|
|
239
|
-
│ ├── pattern
|
|
238
|
+
│ ├── runbook.md
|
|
239
|
+
│ ├── switch-clients.md
|
|
240
|
+
│ ├── encode-pattern.md
|
|
240
241
|
│ ├── red-team.md
|
|
241
242
|
│ ├── ai.md # overlays (on signal)
|
|
242
243
|
│ ├── artifacts.md
|
|
@@ -251,11 +252,11 @@ fdeops/
|
|
|
251
252
|
│ ├── ship.md
|
|
252
253
|
│ ├── outcome.md
|
|
253
254
|
│ ├── close.md
|
|
254
|
-
│ ├──
|
|
255
|
-
│ ├──
|
|
255
|
+
│ ├── trust.md
|
|
256
|
+
│ ├── receipts.md
|
|
256
257
|
│ ├── debrief.md
|
|
257
258
|
│ ├── prep.md
|
|
258
|
-
│ └──
|
|
259
|
+
│ └── readout.md
|
|
259
260
|
├── .claude-plugin/ # Claude Code marketplace
|
|
260
261
|
├── bin/ # local CLI: git + files, no network
|
|
261
262
|
├── hooks/ # session-start / session-stop / pre-compact
|
package/adapters/LOCAL-LLM.md
CHANGED
|
@@ -66,9 +66,9 @@ The methodology is detailed (31 skills, routing logic, evidence format, memory c
|
|
|
66
66
|
|
|
67
67
|
| Model class | Experience |
|
|
68
68
|
|-------------|-----------|
|
|
69
|
-
| **7-8B** (Llama 3.1 8B, Mistral 7B, Qwen 2.5 7B) | Handles individual skills (
|
|
69
|
+
| **7-8B** (Llama 3.1 8B, Mistral 7B, Qwen 2.5 7B) | Handles individual skills (readout, log, land). May struggle with complex routing or multi-skill sessions. Good for the CLI-heavy workflow where you invoke skills explicitly. |
|
|
70
70
|
| **13-34B** (Llama 3.1 13B, Mixtral 8x7B, Qwen 2.5 32B, DeepSeek-R1 32B) | Good across all domains. Routes correctly, follows memory contract, writes structured artifacts. Recommended minimum for full methodology use. |
|
|
71
|
-
| **70B+** (Llama 3.1 405B, DeepSeek V3, Qwen 2.5 72B) | Full capability. Handles regulated overlays,
|
|
71
|
+
| **70B+** (Llama 3.1 405B, DeepSeek V3, Qwen 2.5 72B) | Full capability. Handles regulated overlays, switch-clients, board-memo pyramid, runbook handoff. |
|
|
72
72
|
|
|
73
73
|
## The CLI works without ANY model
|
|
74
74
|
|
|
@@ -107,4 +107,4 @@ ollama run my-fde-model --system "$(cat skills/fde/SKILL.md)"
|
|
|
107
107
|
- **Context window matters.** SKILL.md + references can be large. Use a model with at least 8K context; 32K+ is ideal for loading skill references on demand.
|
|
108
108
|
- **Temperature 0.2-0.4 works best.** The methodology is structured - lower temperature keeps routing accurate and artifacts consistent.
|
|
109
109
|
- **Use the CLI for mechanics.** Don't ask the model to do what the CLI already does deterministically. Use `fde scan` for repo recon, `fde log` for memory writes, `fde receipts` for searching. Let the model handle judgment, routing, and artifact drafting.
|
|
110
|
-
- **Explicit skill invocation.** If a smaller model struggles with routing, you can invoke skills directly: "@fde run the discover phase" or "@fde use scope
|
|
110
|
+
- **Explicit skill invocation.** If a smaller model struggles with routing, you can invoke skills directly: "@fde run the discover phase" or "@fde use hold-scope." The model skips routing and goes straight to the method.
|
package/bin/check.js
CHANGED
|
@@ -63,8 +63,8 @@ if (fs.existsSync(path.join(root, 'skills', 'fde', 'archive'))) {
|
|
|
63
63
|
// v3: one skill + phase references (progressive disclosure)
|
|
64
64
|
const requiredReferences = [
|
|
65
65
|
'land.md', 'discover.md', 'audit.md', 'plan.md', 'review.md',
|
|
66
|
-
'rescue.md', 'ship.md', '
|
|
67
|
-
'debrief.md', '
|
|
66
|
+
'rescue.md', 'ship.md', 'poc.md', 'close.md', 'dashboard.md',
|
|
67
|
+
'debrief.md', 'readout.md', 'demo-prep.md',
|
|
68
68
|
'healthcare.md', 'fintech.md', 'gov.md',
|
|
69
69
|
'ai.md', 'eval-pack.md',
|
|
70
70
|
]
|
|
@@ -84,8 +84,8 @@ ok('phase references')
|
|
|
84
84
|
// file the work lands in. Prose-only guidance drifts into advice nobody can apply.
|
|
85
85
|
const exampleReferences = [
|
|
86
86
|
'land.md', 'discover.md', 'plan.md', 'ship.md', 'close.md',
|
|
87
|
-
'
|
|
88
|
-
'
|
|
87
|
+
'readout.md', 'who-decides.md', 'three-options.md', 'business-case.md',
|
|
88
|
+
'test-assumptions.md', 'hold-scope.md',
|
|
89
89
|
]
|
|
90
90
|
for (const f of exampleReferences) {
|
|
91
91
|
const p = path.join(root, 'skills', 'fde', 'references', f)
|
|
@@ -115,7 +115,7 @@ for (const refFile of mentioned) {
|
|
|
115
115
|
ok(`router dispatch (${mentioned.length} reference targets verified) + memory contract`)
|
|
116
116
|
|
|
117
117
|
// Public claims must match the router. The docs advertise a method count and a
|
|
118
|
-
// per-domain list; both drifted from SKILL.md once (ingest /
|
|
118
|
+
// per-domain list; both drifted from SKILL.md once (ingest / connect
|
|
119
119
|
// routed but undocumented), and a number nobody can verify is worse than none.
|
|
120
120
|
{
|
|
121
121
|
// Every routing row must parse. A row this misses is a method that could go
|
|
@@ -186,7 +186,7 @@ ok(`router dispatch (${mentioned.length} reference targets verified) + memory co
|
|
|
186
186
|
}
|
|
187
187
|
for (const rel of ['docs/skills.md', 'docs/skills-reference.md']) {
|
|
188
188
|
const body = read(rel)
|
|
189
|
-
// `-` is a word boundary, so \
|
|
189
|
+
// `-` is a word boundary, so \bscore\b matches inside `score-use-cases`:
|
|
190
190
|
// a method could disappear from the docs behind a hyphenated sibling.
|
|
191
191
|
const absent = [...documented].filter(name => !new RegExp(`(?<![\\w-])${name}(?![\\w-])`).test(body))
|
|
192
192
|
if (absent.length) fail(`${rel} does not list skill(s): ${absent.join(', ')}`)
|
|
@@ -262,7 +262,7 @@ if (!readme.includes('AI coding agent')) {
|
|
|
262
262
|
}
|
|
263
263
|
ok('README clarity sections')
|
|
264
264
|
|
|
265
|
-
for (const cmd of ['/brief', '/discover', '/plan', '/ship', '/outcome', '/close', '/debrief', '/prep', '/
|
|
265
|
+
for (const cmd of ['/brief', '/discover', '/plan', '/ship', '/outcome', '/close', '/debrief', '/prep', '/trust', '/receipts', '/readout']) {
|
|
266
266
|
if (!readme.includes(cmd)) fail(`README must document slash command ${cmd}`)
|
|
267
267
|
}
|
|
268
268
|
if (/(^|[^\w/])\/got\b/.test(readme)) fail('README must use /outcome, not /got')
|
|
@@ -536,7 +536,7 @@ if (pkg.version !== plugin.version) {
|
|
|
536
536
|
if (plugin.commands !== './.claude/commands' || plugin.skills !== './skills') {
|
|
537
537
|
fail('.claude-plugin/plugin.json must declare skills and commands')
|
|
538
538
|
} else {
|
|
539
|
-
for (const cmd of ['brief', 'discover', 'plan', 'ship', 'outcome', 'close', 'debrief', 'prep', '
|
|
539
|
+
for (const cmd of ['brief', 'discover', 'plan', 'ship', 'outcome', 'close', 'debrief', 'prep', 'trust', 'receipts', 'readout']) {
|
|
540
540
|
const rel = `.claude/commands/${cmd}.md`
|
|
541
541
|
if (!fs.existsSync(path.join(root, rel))) fail(`${rel} missing`)
|
|
542
542
|
else if (!read(rel).includes('@fde')) fail(`${rel} must load @fde`)
|
|
@@ -550,8 +550,8 @@ if (!fs.existsSync(path.join(root, 'mcp', 'fdeops-ingest', 'server.js'))) {
|
|
|
550
550
|
fail('ingest MCP must expose ingest_stage')
|
|
551
551
|
} else if (!read('skills/fde/references/ingest.md').includes('stage')) {
|
|
552
552
|
fail('skills/fde/references/ingest.md missing stage contract')
|
|
553
|
-
} else if (!fs.existsSync(path.join(root, 'skills', 'fde', 'references', '
|
|
554
|
-
fail('skills/fde/references/
|
|
553
|
+
} else if (!fs.existsSync(path.join(root, 'skills', 'fde', 'references', 'connect.md'))) {
|
|
554
|
+
fail('skills/fde/references/connect.md missing')
|
|
555
555
|
} else {
|
|
556
556
|
for (const recipe of ['file.md', 'granola.md', 'slack.md', 'notion.md']) {
|
|
557
557
|
if (!fs.existsSync(path.join(root, 'mcp', 'recipes', recipe))) fail(`mcp/recipes/${recipe} missing`)
|
package/mcp/README.md
CHANGED
|
@@ -38,7 +38,7 @@ Source MCP(s) fdeops-ingest MCP fde CLI
|
|
|
38
38
|
|
|
39
39
|
## Recipes (copy-paste connect)
|
|
40
40
|
|
|
41
|
-
See [`recipes/`](./recipes/) for file, Granola-shaped, and Notion-shaped setup. In chat: `@fde I want to connect Granola` → skill `
|
|
41
|
+
See [`recipes/`](./recipes/) for file, Granola-shaped, and Notion-shaped setup. In chat: `@fde I want to connect Granola` → skill `connect` walks the FDE through config + reload + verify.
|
|
42
42
|
|
|
43
43
|
## Adding a source MCP
|
|
44
44
|
|
package/mcp/recipes/README.md
CHANGED
|
@@ -13,4 +13,4 @@ FDEOps does **not** bundle Granola / Slack / Notion OAuth and does **not** push
|
|
|
13
13
|
| [slack.md](./slack.md) | Pull a thread/channel as text - never post |
|
|
14
14
|
| [notion.md](./notion.md) | Read a Notion page (or export markdown) |
|
|
15
15
|
|
|
16
|
-
**Natural language:** `@fde I want to connect Granola` (or Slack / Notion) → `skills/fde/references/
|
|
16
|
+
**Natural language:** `@fde I want to connect Granola` (or Slack / Notion) → `skills/fde/references/connect.md`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fdeops",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.16.0",
|
|
4
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",
|
package/plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
3
3
|
"name": "fdeops",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.16.0",
|
|
5
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",
|
package/skills/fde/SKILL.md
CHANGED
|
@@ -26,7 +26,7 @@ A one-line typo or compile error in a file that will not ship. On a bound client
|
|
|
26
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
27
|
| **They went quiet** | "Is this a process gap, or a trust problem?" | `fde log contact "…" --signal amber\|red\|green` | `references/rescue.md` |
|
|
28
28
|
| **When did we agree?** | Don't argue from memory. Search the record. | `fde receipts <term>` | - |
|
|
29
|
-
| **What's the outcome?** | A number nobody signed is claimed, not delivered. | `fde status` | `references/
|
|
29
|
+
| **What's the outcome?** | A number nobody signed is claimed, not delivered. | `fde status` | `references/readout.md` |
|
|
30
30
|
|
|
31
31
|
After a meeting: `fde debrief --smart` → confirm → `--apply`. Walk-in: `fde prep`. Friday: `fde status`.
|
|
32
32
|
|
|
@@ -34,8 +34,8 @@ After a meeting: `fde debrief --smart` → confirm → `--apply`. Walk-in: `fde
|
|
|
34
34
|
|
|
35
35
|
On someone else's site the work is not "write code, remember later." Every slice stays on `@fde`:
|
|
36
36
|
|
|
37
|
-
1. **Name it** in `decisions.md` (plan) or kill it in a day (
|
|
38
|
-
2. **Characterise their code** before you change it (
|
|
37
|
+
1. **Name it** in `decisions.md` (plan) or kill it in a day (poc).
|
|
38
|
+
2. **Characterise their code** before you change it (thin-slices). Their tests, their runner.
|
|
39
39
|
3. **Prove it where they live.** Staging they operate, a screen the signer in `success.md` can reject.
|
|
40
40
|
4. **If a model judges:** `evals.md` Verdict SHIP before the slice is done (eval-pack).
|
|
41
41
|
5. **Log delivery.** Outcome is promised → measured → accepted, not a green CI.
|
|
@@ -44,7 +44,7 @@ A throwaway file can skip the loop. A client slice cannot.
|
|
|
44
44
|
|
|
45
45
|
## Human surface vs agent plumbing
|
|
46
46
|
|
|
47
|
-
**FDE (human):** `@fde` + English, or `/brief` `/discover` `/plan` `/ship` `/outcome` `/close` `/debrief` `/prep` `/
|
|
47
|
+
**FDE (human):** `@fde` + English, or `/brief` `/discover` `/plan` `/ship` `/outcome` `/close` `/debrief` `/prep` `/trust` `/receipts` `/readout`. Never a skill catalog.
|
|
48
48
|
|
|
49
49
|
**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.
|
|
50
50
|
|
|
@@ -72,7 +72,7 @@ Writes need a bind (`FDEOPS_ENGAGEMENT` or registry). Never install fdeops on in
|
|
|
72
72
|
| clean up the fieldbook | `fde doctor` - never auto-rewrite |
|
|
73
73
|
| scrub a secret | `fde redact <term>` then `--apply` after confirm |
|
|
74
74
|
| pull Granola/Slack/transcript | capability check → `fde ingest stage` → confirm → apply. Never auto-apply. `references/ingest.md` |
|
|
75
|
-
| connect an MCP | `references/
|
|
75
|
+
| connect an MCP | `references/connect.md` |
|
|
76
76
|
| Obsidian / one window | `fde vault` (`--redacted` for a shared screen) |
|
|
77
77
|
|
|
78
78
|
## The memory contract
|
|
@@ -121,18 +121,18 @@ Read **one** reference and follow it. Do not improvise from memory.
|
|
|
121
121
|
|----------|-------|-----------|
|
|
122
122
|
| Starting fresh, new customer, first meeting, just got the brief | land | `references/land.md` |
|
|
123
123
|
| Taking over, previous consultant left, joining mid-project | audit | `references/audit.md` |
|
|
124
|
-
| Need to understand who matters, who decides, who blocks quietly |
|
|
125
|
-
| Need to earn access, navigate AI policy, build credibility | trust
|
|
126
|
-
| "Also can you…", scope expanding, timeline unchanged | scope
|
|
124
|
+
| Need to understand who matters, who decides, who blocks quietly | who-decides | `references/who-decides.md` |
|
|
125
|
+
| Need to earn access, navigate AI policy, build credibility | earn-trust | `references/earn-trust.md` |
|
|
126
|
+
| "Also can you…", scope expanding, timeline unchanged | hold-scope | `references/hold-scope.md` |
|
|
127
127
|
|
|
128
128
|
### Discover
|
|
129
129
|
|
|
130
130
|
| You hear | Skill | Reference |
|
|
131
131
|
|----------|-------|-----------|
|
|
132
132
|
| Don't know the real problem, brief feels wrong, shadow processes | discover | `references/discover.md` |
|
|
133
|
-
| The brief feels too neat, assumptions untested, "we just need…" |
|
|
134
|
-
| Multiple use cases competing, "we want to do everything" | use-
|
|
135
|
-
| Need to validate a direction, prototype, demo to de-risk, **POC**, spike, killer assumption |
|
|
133
|
+
| The brief feels too neat, assumptions untested, "we just need…" | test-assumptions | `references/test-assumptions.md` |
|
|
134
|
+
| Multiple use cases competing, "we want to do everything" | score-use-cases | `references/score-use-cases.md` |
|
|
135
|
+
| Need to validate a direction, prototype, demo to de-risk, **POC**, spike, killer assumption | poc | `references/poc.md` |
|
|
136
136
|
|
|
137
137
|
### Plan
|
|
138
138
|
|
|
@@ -140,43 +140,43 @@ Read **one** reference and follow it. Do not improvise from memory.
|
|
|
140
140
|
|----------|-------|-----------|
|
|
141
141
|
| Break this down, what order, sequence the build | plan | `references/plan.md` |
|
|
142
142
|
| Sponsor needs justification, need to defend budget or timeline | business-case | `references/business-case.md` |
|
|
143
|
-
| Significant decision, multiple approaches, "what should we do?" | options
|
|
144
|
-
| 20 things are "urgent," need to pick the 3 that matter |
|
|
143
|
+
| Significant decision, multiple approaches, "what should we do?" | three-options | `references/three-options.md` |
|
|
144
|
+
| 20 things are "urgent," need to pick the 3 that matter | pick-three | `references/pick-three.md` |
|
|
145
145
|
|
|
146
146
|
### Ship
|
|
147
147
|
|
|
148
148
|
| You hear | Skill | Reference |
|
|
149
149
|
|----------|-------|-----------|
|
|
150
|
-
| Large feature, need visible progress every 2-3 days, slice it, characterise their tests, POC follow-through |
|
|
151
|
-
| What could go wrong, touching shared infrastructure, need to assess impact |
|
|
150
|
+
| Large feature, need visible progress every 2-3 days, slice it, characterise their tests, POC follow-through | thin-slices | `references/thin-slices.md` |
|
|
151
|
+
| What could go wrong, touching shared infrastructure, need to assess impact | what-breaks | `references/what-breaks.md` |
|
|
152
152
|
| Production down, urgent - OR stakeholder gone quiet, trust slipping | rescue | `references/rescue.md` |
|
|
153
153
|
| Ready to deploy, going live, pre-flight check | ship | `references/ship.md` |
|
|
154
154
|
| Review this change, is it safe, does it match what we agreed | review | `references/review.md` |
|
|
155
155
|
| 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 |
|
|
156
156
|
| 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 |
|
|
157
|
-
| "We can always revert" - need to actually test the escape route | rollback
|
|
157
|
+
| "We can always revert" - need to actually test the escape route | rollback | `references/rollback.md` |
|
|
158
158
|
|
|
159
159
|
### Prove
|
|
160
160
|
|
|
161
161
|
| You hear | Skill | Reference |
|
|
162
162
|
|----------|-------|-----------|
|
|
163
|
-
| Weekly update due, "need to send the sponsor something" |
|
|
163
|
+
| Weekly update due, "need to send the sponsor something" | readout | `references/readout.md` |
|
|
164
164
|
| Demo coming up, show-and-tell, exec walkthrough | demo-prep | `references/demo-prep.md` |
|
|
165
165
|
| Just out of a meeting, raw notes, "they said…", "debrief" | debrief | the debrief verb (above) + `references/debrief.md` |
|
|
166
166
|
| Make sure we're up to date, pull what's relevant, fetch from Granola/Slack/Gmail/transcript | ingest | `references/ingest.md` (capability check → stage → propose → confirm → apply) |
|
|
167
|
-
| Connect a new MCP / connect Granola Slack or Notion / what can you pull |
|
|
167
|
+
| Connect a new MCP / connect Granola Slack or Notion / what can you pull | connect | `references/connect.md` (+ `mcp/recipes/`) |
|
|
168
168
|
| Prep me for a meeting / walk-in brief / "what should I know before I talk to…" | - | run `fde prep "<label>"`, present in plain language |
|
|
169
|
-
| Sponsor's boss needs a summary, board update, justify continued investment |
|
|
169
|
+
| Sponsor's boss needs a summary, board update, justify continued investment | board-memo | `references/board-memo.md` |
|
|
170
170
|
| Status across all my customers | dashboard | `references/dashboard.md` |
|
|
171
171
|
|
|
172
172
|
### Close
|
|
173
173
|
|
|
174
174
|
| You hear | Skill | Reference |
|
|
175
175
|
|----------|-------|-----------|
|
|
176
|
-
| Juggling 2+ customers, losing track, context-switching |
|
|
176
|
+
| Juggling 2+ customers, losing track, context-switching | switch-clients | `references/switch-clients.md` |
|
|
177
177
|
| Wrapping up, handoff, making yourself replaceable | close | `references/close.md` |
|
|
178
|
-
| Engagement ending, team needs to operate without you |
|
|
179
|
-
| Something worked well and will apply to future engagements | pattern
|
|
178
|
+
| Engagement ending, team needs to operate without you | runbook | `references/runbook.md` |
|
|
179
|
+
| Something worked well and will apply to future engagements | encode-pattern | `references/encode-pattern.md` |
|
|
180
180
|
| "Red-team this," "stress-test my plan," poke holes, what am I missing | red-team | `references/red-team.md` |
|
|
181
181
|
| "What did we agree about X?", scope dispute, receipts | - | run `fde receipts <term>`, answer with dates |
|
|
182
182
|
|
|
@@ -47,7 +47,7 @@ When any slice touches a model, embeddings, RAG, or an agent: create or update `
|
|
|
47
47
|
4. **Pass/fail** - dated run; Verdict **SHIP** or **NO-SHIP**; critical fails must be 0.
|
|
48
48
|
5. **HITL gate** - which decisions need human review before action (align with `trust-profile.md`). Empty when policy requires review → NO-SHIP.
|
|
49
49
|
|
|
50
|
-
**When to write:** plan seeds the pack;
|
|
50
|
+
**When to write:** plan seeds the pack; poc/build grows goldens; ship requires Verdict SHIP and a receipt in `delivery.md` → `## Ship receipts`. Non-AI work skips this file entirely.
|
|
51
51
|
|
|
52
52
|
## RAG architecture (retrieval-augmented generation)
|
|
53
53
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# board-memo - the story that gets the next phase funded
|
|
2
2
|
|
|
3
3
|
**Enter when:** the sponsor's boss needs a summary, a board update mentions the engagement, the FDE needs to justify continued investment, or a quarterly review is approaching.
|
|
4
4
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# business-case - the economics that get the sponsor to say yes
|
|
2
2
|
|
|
3
|
-
**Enter when:** the sponsor needs justification for the next phase, the FDE needs to defend budget or timeline, a feature decision needs cost/benefit evidence, or
|
|
3
|
+
**Enter when:** the sponsor needs justification for the next phase, the FDE needs to defend budget or timeline, a feature decision needs cost/benefit evidence, or poc produced a direction that needs funding.
|
|
4
4
|
|
|
5
|
-
**Read first:** `reality.md`, `success.md`, `delivery.md`, `context.md`. Load `business-case.md` from
|
|
5
|
+
**Read first:** `reality.md`, `success.md`, `delivery.md`, `context.md`. Load `business-case.md` from poc if it exists - extend it, don't restart.
|
|
6
6
|
|
|
7
7
|
Technical FDEs lose engagements by shipping good code without business justification. The sponsor's boss doesn't ask "is the code clean?" - they ask "what did we get for the money?" A business case translates technical work into the language that keeps the engagement alive.
|
|
8
8
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# connect - wire a source MCP in plain language
|
|
2
2
|
|
|
3
3
|
**Enter when:** the FDE says "I want to connect a new MCP", "connect Granola / Slack / Notion", "how do I pull from …", or a pull request fails because no source tools exist.
|
|
4
4
|
|
|
@@ -143,7 +143,7 @@ Score every candidate use case before anything gets prototyped:
|
|
|
143
143
|
| Complexity | How hard to build safely? (5 = hardest) | |
|
|
144
144
|
| Data readiness | Available, clean, sufficient volume today? | |
|
|
145
145
|
|
|
146
|
-
**Score = (Value × Data readiness) / Complexity.** Highest score gets prototyped first (hand to `
|
|
146
|
+
**Score = (Value × Data readiness) / Complexity.** Highest score gets prototyped first (hand to `poc`). A 5-value/1-complexity/5-readiness case scores 25; a 5-value/5-complexity/2-readiness case scores 2 - they look identical on a whiteboard. Never let a technically interesting use case override the score.
|
|
147
147
|
|
|
148
148
|
## Artifact (this IS the memory - write it as you work)
|
|
149
149
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# trust
|
|
1
|
+
# earn-trust - earning commit access one move at a time
|
|
2
2
|
|
|
3
3
|
**Enter when:** new engagement where you don't have full access yet, trust is thin, the customer said "let's start small," or you need to navigate "we don't trust AI-generated code."
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# pattern
|
|
1
|
+
# encode-pattern - if you did it twice, encode it
|
|
2
2
|
|
|
3
3
|
**Enter when:** the engagement is closing and reusable patterns exist, a technique worked well and will apply to future clients, the FDE notices themselves doing the same thing on a second engagement, or close identified a pattern worth preserving.
|
|
4
4
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# eval-pack - prove the system before it acts
|
|
2
2
|
|
|
3
|
-
**Enter when:** the work touches AI/LLM/agents/RAG, or they need to POC a model, or ship/close is blocked because there is no evidence the non-deterministic path is safe. Activate alongside `ai.md`, `
|
|
3
|
+
**Enter when:** the work touches AI/LLM/agents/RAG, or they need to POC a model, or ship/close is blocked because there is no evidence the non-deterministic path is safe. Activate alongside `ai.md`, `poc`, `thin-slices`, or `ship` - not instead of them.
|
|
4
4
|
|
|
5
5
|
**Read first:** `trust-profile.md` (AI policy + HITL), `terrain.md` (operating map), `delivery.md`. Create or extend `evals.md`.
|
|
6
6
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# scope
|
|
1
|
+
# hold-scope - holding the line without losing the relationship
|
|
2
2
|
|
|
3
3
|
**Enter when:** "also can you…" mid-build, a stakeholder adds requirements without adjusting timeline, the FDE feels scope creeping but can't name it, or `success.md` no longer matches what's being asked.
|
|
4
4
|
|
|
@@ -67,7 +67,7 @@ Acme, week 5. Nothing has been formally added, and the slice is a week late.
|
|
|
67
67
|
|
|
68
68
|
The pattern shows in three receipts, not one argument: a "quick" finance CSV export (Jun 20, half a day, from Denise directly), retry-logic cleanup asked for mid-build (Jun 24, one day, Tom), and a dashboard tile "while you're in there" (Jun 27, half a day). Each was individually reasonable; together they are the slip.
|
|
69
69
|
|
|
70
|
-
Three-bucket response, applied at the moment of the third ask rather than in a retrospective: the CSV export goes to Next with an accepted trade (it displaces the runbook polish), the retry cleanup goes to the kill list in `decisions.md` with the
|
|
70
|
+
Three-bucket response, applied at the moment of the third ask rather than in a retrospective: the CSV export goes to Next with an accepted trade (it displaces the runbook polish), the retry cleanup goes to the kill list in `decisions.md` with the what-breaks reason, and the tile is absorbed because it is genuinely twenty minutes - logged anyway, since an unlogged absorption is the one that gets forgotten in the accumulation conversation.
|
|
71
71
|
|
|
72
72
|
That conversation happens with Priya at three receipts, with the dates on screen: "these are the four asks, here is the two days, here is what moved." Not a complaint - a decision she gets to make, with evidence, before the deadline makes it for her.
|
|
73
73
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**Enter when:** the FDE wants to catch the engagement up from external sources - "make sure Acme is up to date," "pull what's relevant," "grab today's Granola and Denise's last email." Raw transcripts and long emails that are too big to paste usefully.
|
|
4
4
|
|
|
5
|
-
**Connect / capability (different entry):** "connect a new MCP", "connect Granola/Slack/Notion", "what can you pull?" → `references/
|
|
5
|
+
**Connect / capability (different entry):** "connect a new MCP", "connect Granola/Slack/Notion", "what can you pull?" → `references/connect.md` first. Recipes: `mcp/recipes/` (file, granola, slack, notion).
|
|
6
6
|
|
|
7
7
|
**Read first:** `context.md` (what's already logged, what's stale). Bind the engagement before staging anything.
|
|
8
8
|
|
|
@@ -22,7 +22,7 @@ List what you can actually call **this session**:
|
|
|
22
22
|
|
|
23
23
|
1. **Sink** - `ingest_stage` / `fde ingest` available?
|
|
24
24
|
2. **Sources** - which fetch tools exist (Granola-shaped, Slack, Notion, Drive, file-only)?
|
|
25
|
-
3. Tell the FDE in one line: *I can pull from X; Y is not connected.* If they asked to pull Y and it is missing → switch to `
|
|
25
|
+
3. Tell the FDE in one line: *I can pull from X; Y is not connected.* If they asked to pull Y and it is missing → switch to `connect.md`. Never pretend a source exists.
|
|
26
26
|
|
|
27
27
|
## Ground loop (you do this work)
|
|
28
28
|
|
|
@@ -60,7 +60,7 @@ When a staged fact came from a named source, carry `via:<source>` on the applied
|
|
|
60
60
|
|
|
61
61
|
## MCP sink + recipes
|
|
62
62
|
|
|
63
|
-
Optional `mcp/fdeops-ingest` wraps the same verbs over stdio. Source MCPs remain separate - the FDE adds whichever fetch tools they trust. Setup coach: `
|
|
63
|
+
Optional `mcp/fdeops-ingest` wraps the same verbs over stdio. Source MCPs remain separate - the FDE adds whichever fetch tools they trust. Setup coach: `connect.md`. Copy-paste recipes: `mcp/recipes/`.
|
|
64
64
|
|
|
65
65
|
## Checkpoint
|
|
66
66
|
|
|
@@ -99,7 +99,7 @@ If `stakeholders.md` already has a `## Signal history` section (it does from the
|
|
|
99
99
|
|
|
100
100
|
**`trust-profile.md`** - sacred data (`<private>` tagged), fears heard, AI policy, approval chain. Sensitive: skip for status reads; use CLI/redacted surfaces; never paste raw `<private>` into prompts or subagents.
|
|
101
101
|
|
|
102
|
-
**`assumptions.md`** - seed every unverified claim from the brief (and the day-1 hypothesis) as rows with blast radius CRITICAL / LOAD-BEARING / CONVENIENCE and status `OPEN`. Do not wait for
|
|
102
|
+
**`assumptions.md`** - seed every unverified claim from the brief (and the day-1 hypothesis) as rows with blast radius CRITICAL / LOAD-BEARING / CONVENIENCE and status `OPEN`. Do not wait for test-assumptions - land makes the register exist. Example:
|
|
103
103
|
|
|
104
104
|
```markdown
|
|
105
105
|
| # | Assumption | Blast radius | How we test | Status | Evidence |
|
|
@@ -107,7 +107,7 @@ If `stakeholders.md` already has a `## Signal history` section (it does from the
|
|
|
107
107
|
| 1 | <claim from brief> | CRITICAL | <cheapest falsifying test> | OPEN | (stated, unverified) |
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
-
One falsifiable hypothesis about the real problem also goes at the bottom of `brief.md` - discover /
|
|
110
|
+
One falsifiable hypothesis about the real problem also goes at the bottom of `brief.md` - discover / test-assumptions will test it.
|
|
111
111
|
|
|
112
112
|
## Checkpoint
|
|
113
113
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# pick-three - when 20 things are "urgent," pick the 3 that matter
|
|
2
2
|
|
|
3
3
|
**Enter when:** a transformation engagement with a long list of initiatives, the customer's roadmap has more items than weeks, competing teams want different things, or the FDE needs to recommend what to do *first* across a complex programme.
|
|
4
4
|
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**Enter when:** scope is understood and the work needs breaking down - a slice, a phase, or the whole delivery.
|
|
4
4
|
|
|
5
|
-
**Read first:** `reality.md`, `success.md`, `terrain.md`, `stakeholders.md`. Load `business-case.md` if
|
|
5
|
+
**Read first:** `reality.md`, `success.md`, `terrain.md`, `stakeholders.md`. Load `business-case.md` if poc produced one. Not the full folder.
|
|
6
6
|
|
|
7
7
|
## Validation gate (confirm understanding, clarify where it elevates)
|
|
8
8
|
|
|
@@ -22,7 +22,7 @@ An FDE plan is not a sprint backlog. The technical sequence is the easy part. Th
|
|
|
22
22
|
|
|
23
23
|
## Method (you do this work)
|
|
24
24
|
|
|
25
|
-
**0. Lock scope first.** Read `success.md` and `assumptions.md`. If out-of-scope is undefined, define it now with the FDE - a plan on undefined scope accumulates silent commitments. If any CRITICAL assumption is still `OPEN`, stop and run
|
|
25
|
+
**0. Lock scope first.** Read `success.md` and `assumptions.md`. If out-of-scope is undefined, define it now with the FDE - a plan on undefined scope accumulates silent commitments. If any CRITICAL assumption is still `OPEN`, stop and run test-assumptions / discover before sequencing work.
|
|
26
26
|
|
|
27
27
|
**1. Work backwards from success.** What's the last thing that must be true before done? And before that? That's the dependency chain - not a wish list.
|
|
28
28
|
|
|
@@ -36,7 +36,7 @@ An FDE plan is not a sprint backlog. The technical sequence is the easy part. Th
|
|
|
36
36
|
|
|
37
37
|
**6. Stakeholder touchpoints every 2-3 tasks.** "Show progress to <name from stakeholders.md>." Not ceremony: a customer who sees small wins stays bought in; silence gets filled with doubt.
|
|
38
38
|
|
|
39
|
-
**7. End with a kill list.** Every plan names what you will **not** do this phase. If everything is "later," you have no plan - you have a wish list. Cap **Now** at 3 slices (same discipline as
|
|
39
|
+
**7. End with a kill list.** Every plan names what you will **not** do this phase. If everything is "later," you have no plan - you have a wish list. Cap **Now** at 3 slices (same discipline as pick-three).
|
|
40
40
|
|
|
41
41
|
**Acceptance criteria gate:** no task moves to build without written happy-path AND unhappy-path criteria. Can't write them = the task isn't understood; the open question goes to the customer **before** the task starts. Vague criteria surface later as scope creep and rework.
|
|
42
42
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# poc - kill or confirm a direction in a day
|
|
2
2
|
|
|
3
3
|
**Enter when:** a direction needs validating before committing real build time - POC, spike, show something, de-risk, pick between use cases. The output is something a sponsor can reject in a room this week, not a polished product.
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# readout - the sponsor update that keeps the engagement alive
|
|
2
2
|
|
|
3
3
|
**Enter when:** the weekly update is due, an exec asks "where are we," or the FDE says "I need to send Dana something." This artifact decides renewals; engineers underinvest in it.
|
|
4
4
|
|
|
@@ -24,7 +24,7 @@ Then add, still on the same page:
|
|
|
24
24
|
|
|
25
25
|
Exec voice: no jargon, no hedging, every claim traceable (`(shipped Tue, delivery.md)`). Draft in the **FDE's voice, for the FDE to send** - never send anything yourself.
|
|
26
26
|
|
|
27
|
-
For board / renewal / sponsor's boss (longer pyramid): use `
|
|
27
|
+
For board / renewal / sponsor's boss (longer pyramid): use `board-memo.md`. Do not invent a second weekly format.
|
|
28
28
|
|
|
29
29
|
## Artifact
|
|
30
30
|
|
|
@@ -46,7 +46,7 @@ Customers remember who told them the truth before it cost them money.
|
|
|
46
46
|
|
|
47
47
|
## D. Pivot - the whole direction changed
|
|
48
48
|
|
|
49
|
-
Not scope
|
|
49
|
+
Not hold-scope (that's someone adding). This is: budget cut, new CTO arrives, strategic priority shift, acquisition changes everything, "we've decided to go a different direction." The engagement's foundation moved.
|
|
50
50
|
|
|
51
51
|
**Signals:** new leadership asks "why are we doing this?", the sponsor's boss questions ROI, a competing initiative gets the resources, the quarterly priorities deck doesn't mention your project, the team you're embedded in gets reorganized.
|
|
52
52
|
|
|
@@ -34,7 +34,7 @@ Also check:
|
|
|
34
34
|
|
|
35
35
|
**Stage 1 fails → stop** if any SPLIT/DROP remains, or JUSTIFY lacks a written sentence. Quality review on out-of-scope code is wasted work. Record the mismatch (and the KEEP/JUSTIFY/SPLIT/DROP tally) in `decisions.md`.
|
|
36
36
|
|
|
37
|
-
Stakeholder "also can you…" mid-build is `scope
|
|
37
|
+
Stakeholder "also can you…" mid-build is `hold-scope` - different axis. This stage is **code vs claim**.
|
|
38
38
|
|
|
39
39
|
## Stage 2 - is it safe to live with?
|
|
40
40
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# rollback
|
|
1
|
+
# rollback - test the escape route before you need it
|
|
2
2
|
|
|
3
3
|
**Enter when:** a deploy is planned for the next 48 hours, the FDE says "we can always revert," a previous rollback failed or took too long, or the engagement involves regulated/critical systems.
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# runbook - making yourself replaceable is the goal
|
|
2
2
|
|
|
3
3
|
**Enter when:** the engagement is entering its final phase, the customer team needs to operate without the FDE, a new FDE is taking over, or the sponsor asks "what happens when you leave?"
|
|
4
4
|
|
|
@@ -103,9 +103,9 @@ Rollback: <exact command and expected time>
|
|
|
103
103
|
- [ ] All access returned or transferred (repos, environments, admin panels)
|
|
104
104
|
- [ ] No personal credentials left in the system (API keys, tokens, SSH keys)
|
|
105
105
|
- [ ] `.fde/` folder handed to the successor or archived with the team
|
|
106
|
-
- [ ] Final status sent to sponsor (see `
|
|
106
|
+
- [ ] Final status sent to sponsor (see `readout.md`)
|
|
107
107
|
- [ ] Retrospective completed (see `close.md`)
|
|
108
|
-
- [ ] Patterns extracted (see `pattern
|
|
108
|
+
- [ ] Patterns extracted (see `encode-pattern.md`)
|
|
109
109
|
|
|
110
110
|
## Artifact
|
|
111
111
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# use-
|
|
1
|
+
# score-use-cases - pick the right battle, not the interesting one
|
|
2
2
|
|
|
3
3
|
**Enter when:** multiple potential use cases compete for attention, the customer says "we want to do everything," a transformation engagement needs a starting point, or the FDE needs to recommend which problem to solve first.
|
|
4
4
|
|
|
5
|
-
**Read first:** `reality.md`, `brief.md`, `terrain.md`, `context.md`. If `business-case.md` or `prototype-log.md` exist from
|
|
5
|
+
**Read first:** `reality.md`, `brief.md`, `terrain.md`, `context.md`. If `business-case.md` or `prototype-log.md` exist from poc, load those - they carry forward.
|
|
6
6
|
|
|
7
7
|
The most dangerous moment in a multi-use-case engagement is when the technically interesting problem wins over the high-value problem. Scoring replaces opinion with arithmetic. The arithmetic is wrong - all models are - but it's *visibly* wrong, which means it can be debated and corrected. Opinion can't.
|
|
8
8
|
|
|
@@ -59,7 +59,7 @@ Why this formula:
|
|
|
59
59
|
|
|
60
60
|
## Checkpoint
|
|
61
61
|
|
|
62
|
-
Walk the FDE through the top 3 scores and the recommendation. One question: "Does the sponsor have a strong preference that overrides the scoring?" If yes, log it. If no, proceed with the highest score to
|
|
62
|
+
Walk the FDE through the top 3 scores and the recommendation. One question: "Does the sponsor have a strong preference that overrides the scoring?" If yes, log it. If no, proceed with the highest score to poc or plan.
|
|
63
63
|
|
|
64
64
|
## Principles
|
|
65
65
|
|
|
@@ -83,7 +83,7 @@ Score every touched path (or logical hunk):
|
|
|
83
83
|
|
|
84
84
|
**Any SPLIT or DROP still in the tree = fix-first.** JUSTIFY without a written sentence = treat as SPLIT. Log a one-line receipt in `delivery.md`: `intent vs diff: KEEP n · JUSTIFY n · SPLIT n · DROP n - <intent>`.
|
|
85
85
|
|
|
86
|
-
This is **code drift**, not stakeholder "also can you…" (that is `scope
|
|
86
|
+
This is **code drift**, not stakeholder "also can you…" (that is `hold-scope`). Same family as review Stage 1 - ship refuses green when the diff outgrew the claim.
|
|
87
87
|
|
|
88
88
|
## Pre-blast challenge (before the deploy button)
|
|
89
89
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# switch-clients - juggling engagements without dropping any
|
|
2
2
|
|
|
3
3
|
**Enter when:** the FDE is running 2+ engagements simultaneously, context-switching is causing mistakes or delays, a new customer is being onboarded while existing engagements are active, or the FDE says "I'm losing track."
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# test-assumptions - pressure-test the brief before building on it
|
|
2
2
|
|
|
3
3
|
**Enter when:** the brief feels too neat, the customer is very confident about the solution (not the problem), someone says "we just need…" about a complex system, or discover surfaced contradictions between what was said and what the codebase shows.
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# thin-slices - thin slices on someone else's codebase
|
|
2
2
|
|
|
3
3
|
**Enter when:** the build task is larger than a single PR, multiple files or systems are involved, or the FDE needs to show visible progress to a stakeholder every 2-3 days.
|
|
4
4
|
|
|
@@ -78,7 +78,7 @@ Technical progress invisible to stakeholders is trust decay. `delivery.md` gets
|
|
|
78
78
|
**6. The scope trap.** Mid-slice discoveries - "this module also needs updating," "I should refactor this while I'm here":
|
|
79
79
|
|
|
80
80
|
- If it's in `decisions.md`: do it as a separate slice.
|
|
81
|
-
- If it's NOT in `decisions.md`: log it as a scope receipt (see `scope
|
|
81
|
+
- If it's NOT in `decisions.md`: log it as a scope receipt (see `hold-scope.md`), don't touch it.
|
|
82
82
|
- The hardest discipline: leaving ugly code alone when it's not in your slice.
|
|
83
83
|
|
|
84
84
|
## Artifact
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# options
|
|
1
|
+
# three-options - three paths, not one recommendation
|
|
2
2
|
|
|
3
3
|
**Enter when:** a significant technical or strategic decision needs to be made, the FDE is asked "what should we do?", the team is stuck between approaches, or a fork in the engagement requires the sponsor's input.
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# what-breaks - know what breaks before you touch it
|
|
2
2
|
|
|
3
3
|
**Enter when:** about to make a change on a system you don't fully understand, touching a high-churn module from `terrain.md`, modifying shared infrastructure (auth, database, messaging), or the FDE asks "what could go wrong?"
|
|
4
4
|
|
|
@@ -38,7 +38,7 @@ IRREVERSIBLE → Cannot be rolled back without data loss or manual intervention
|
|
|
38
38
|
Example: data migration, dropping a column, changing encryption keys
|
|
39
39
|
```
|
|
40
40
|
|
|
41
|
-
**3. The
|
|
41
|
+
**3. The what-breaks declaration.** Before writing any code, state it explicitly in `decisions.md`:
|
|
42
42
|
|
|
43
43
|
```markdown
|
|
44
44
|
## Blast radius: <change name>
|
|
@@ -72,7 +72,7 @@ Time to detect: <5 minutes via error rate alert
|
|
|
72
72
|
|
|
73
73
|
## Artifact
|
|
74
74
|
|
|
75
|
-
**`decisions.md`** - the
|
|
75
|
+
**`decisions.md`** - the what-breaks declaration, filed before the change starts. Updated if the blast radius grew during implementation.
|
|
76
76
|
|
|
77
77
|
**`risks.md`** - new risks discovered during the trace (the invisible integrations, the midnight cron job).
|
|
78
78
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# who-decides - reading the room before it reads you
|
|
2
2
|
|
|
3
3
|
**Enter when:** new stakeholders appear, signals shift mid-engagement, a meeting felt off but you can't say why, or it's been two weeks and the map hasn't been updated.
|
|
4
4
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Assumptions
|
|
2
2
|
|
|
3
|
-
<!-- Brief claims that are not yet evidence. Land seeds;
|
|
3
|
+
<!-- Brief claims that are not yet evidence. Land seeds; test-assumptions / discover update. -->
|
|
4
4
|
|
|
5
5
|
| # | Assumption | Blast radius | How we test | Status | Evidence |
|
|
6
6
|
|---|------------|--------------|-------------|--------|----------|
|