fdeops 3.16.0 → 3.20.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 +82 -84
- package/adapters/AGENTS.md +1 -1
- package/adapters/GEMINI.md +1 -1
- package/adapters/LOCAL-LLM.md +5 -5
- package/adapters/README.md +2 -2
- package/adapters/copilot-instructions.md +1 -1
- package/adapters/cursor.fde.mdc +1 -1
- package/bin/check.js +42 -11
- package/bin/fde.js +157 -20
- package/bin/lib/render.js +2 -2
- package/bin/lib/trust.js +42 -5
- package/mcp/fdeops-ingest/package.json +1 -1
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/skills/fde/SKILL.md +43 -42
- package/skills/fde/references/ai.md +2 -2
- package/skills/fde/references/audit.md +2 -2
- package/skills/fde/references/board-memo.md +1 -1
- package/skills/fde/references/business-case.md +1 -1
- package/skills/fde/references/close.md +1 -1
- package/skills/fde/references/connect.md +1 -1
- package/skills/fde/references/dashboard.md +2 -2
- package/skills/fde/references/debrief.md +1 -1
- package/skills/fde/references/demo-prep.md +1 -1
- package/skills/fde/references/discover.md +34 -15
- package/skills/fde/references/earn-trust.md +1 -1
- package/skills/fde/references/encode-pattern.md +3 -3
- package/skills/fde/references/eval-pack.md +2 -2
- package/skills/fde/references/hold-scope.md +1 -1
- package/skills/fde/references/ingest.md +1 -1
- package/skills/fde/references/land.md +1 -1
- package/skills/fde/references/pick-three.md +1 -1
- package/skills/fde/references/plan.md +10 -7
- package/skills/fde/references/poc.md +4 -2
- package/skills/fde/references/readout.md +1 -1
- package/skills/fde/references/red-team.md +1 -1
- package/skills/fde/references/rescue.md +3 -2
- package/skills/fde/references/review.md +1 -1
- package/skills/fde/references/rollback.md +1 -1
- package/skills/fde/references/runbook.md +1 -1
- package/skills/fde/references/score-use-cases.md +1 -1
- package/skills/fde/references/ship.md +124 -17
- package/skills/fde/references/switch-clients.md +1 -1
- package/skills/fde/references/test-assumptions.md +2 -2
- package/skills/fde/references/three-options.md +1 -1
- package/skills/fde/references/what-breaks.md +1 -1
- package/skills/fde/references/who-decides.md +1 -1
- package/templates/.fde/assumptions.md +1 -1
- package/templates/.fde/reality.md +6 -1
- package/templates/.fde/terrain.md +1 -1
- package/skills/fde/references/thin-slices.md +0 -100
|
@@ -38,7 +38,7 @@ Write model selection rationale to `decisions.md`. Include: models tested, test
|
|
|
38
38
|
|
|
39
39
|
## Engagement eval pack (before AI ships)
|
|
40
40
|
|
|
41
|
-
When any slice touches a model, embeddings, RAG, or an agent: create or update `.fde/evals.md` **before** ship. Full
|
|
41
|
+
When any slice touches a model, embeddings, RAG, or an agent: create or update `.fde/evals.md` **before** ship. Full skill: `references/eval-pack.md`. This is the engagement-local test set - not unit tests.
|
|
42
42
|
|
|
43
43
|
**Minimum pack (do not grow until the minimum exists):**
|
|
44
44
|
1. **Component + quality bar** - one sentence each; kill switch / fallback named.
|
|
@@ -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; poc/
|
|
50
|
+
**When to write:** plan seeds the pack; poc/ship 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
|
-
# audit -
|
|
1
|
+
# audit - Verify inherited claims
|
|
2
2
|
|
|
3
3
|
**Enter when:** picking up someone else's work - previous consultant left, joining mid-project, half-done system.
|
|
4
4
|
|
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
Before forming any opinion:
|
|
10
10
|
|
|
11
11
|
1. **Inherit the paper.** Any previous `.fde/`, docs, README claims, ADRs, ticket history the FDE can export. Read it all - the previous FDE's decisions are evidence, not verdicts.
|
|
12
|
-
2. **Run the discover scans** (see `discover.md`
|
|
12
|
+
2. **Run the discover scans** (see `discover.md` part 1: churn, test gaps, "temporary" grep, AI components). On a takeover, add:
|
|
13
13
|
```bash
|
|
14
14
|
git log --format="%an" | sort | uniq -c | sort -rn | head # who actually built this
|
|
15
15
|
git log --since="60 days ago" --format="%ad %s" --date=short | head -20 # what was happening when they left
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# board-memo -
|
|
1
|
+
# board-memo - Brief the board
|
|
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,4 +1,4 @@
|
|
|
1
|
-
# business-case -
|
|
1
|
+
# business-case - Build the business case
|
|
2
2
|
|
|
3
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
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# dashboard - the portfolio
|
|
1
|
+
# dashboard - View the portfolio
|
|
2
2
|
|
|
3
3
|
**Enter when:** the FDE runs several customers and asks "where am I across everything?"
|
|
4
4
|
|
|
@@ -8,7 +8,7 @@ The visual artifact is rendered by code, not by you. `fde dashboard` reads every
|
|
|
8
8
|
|
|
9
9
|
## Method (you do this work)
|
|
10
10
|
|
|
11
|
-
0. **First move: `fde status`** - instant heuristic triage (trust-first ordering) across every engagement. Use it as the index; then deep-read only the folders that are red/amber or that the FDE asks about, and apply the full card
|
|
11
|
+
0. **First move: `fde status`** - instant heuristic triage (trust-first ordering) across every engagement. Use it as the index; then deep-read only the folders that are red/amber or that the FDE asks about, and apply the full card below.
|
|
12
12
|
1. **Find the engagements:** `~/fde-engagements/*/.fde/` (primary) · workspace `./.fde/` if present · paths the FDE names. Read each folder **separately** - never merge two customers.
|
|
13
13
|
2. **Per engagement, read the card the way a human would:**
|
|
14
14
|
- Name, phase, week
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# discover -
|
|
1
|
+
# discover - Frame the problem
|
|
2
2
|
|
|
3
3
|
**Enter when:** the brief feels wrong, the real problem is unclear, shadow processes are suspected, or any phase found that the map is missing.
|
|
4
4
|
|
|
@@ -31,15 +31,28 @@ Q: <one question that changes where you dig>
|
|
|
31
31
|
GUESS: <your answer, so they can correct it>
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
Stop when you can write the
|
|
34
|
+
Stop when you can write the four lines under **Frame the decision first**. If a name, quote, or metric is still missing, write `unknown - ask:` - never invent ops folklore to make the map look complete.
|
|
35
35
|
|
|
36
36
|
## Frame the decision first
|
|
37
37
|
|
|
38
|
-
|
|
38
|
+
Same SCQA spine as readout (`S → C → Q → A`), aimed at the floor, not a deck. Write it **before** any scan. Confirm with the FDE, then dig.
|
|
39
39
|
|
|
40
|
-
|
|
40
|
+
| Line | What it is | Fail if |
|
|
41
|
+
|------|------------|---------|
|
|
42
|
+
| **Situation** | What they already treat as true - the workaround, the sheet, the owner who left | It could be copied from the RFP |
|
|
43
|
+
| **Complication** | What broke, so they cannot stay here | No tension, or three problems joined by "and" |
|
|
44
|
+
| **Question** | One decision the named signer must make | It smuggles the solution ("how do we add alerting") |
|
|
45
|
+
| **Answer-space** | Shape of a satisfying answer: confirm brief / descope / rescope / pause | A novel, or "insights" |
|
|
41
46
|
|
|
42
|
-
|
|
47
|
+
Tests on **Question** - rewrite until all five hold:
|
|
48
|
+
|
|
49
|
+
1. **Decision-shaped** - answering it changes what someone does.
|
|
50
|
+
2. **Single** - one thing, not three.
|
|
51
|
+
3. **Scoped** - who, where, by when.
|
|
52
|
+
4. **Answerable** - evidence could settle it in this engagement.
|
|
53
|
+
5. **Neutral** - does not assume the fix.
|
|
54
|
+
|
|
55
|
+
Cannot write the Question → keep interrogating. Do not `fde scan`. Every later output of this phase aims at that Question. Sub-questions go to the operating map or `assumptions.md`, not into the Question.
|
|
43
56
|
|
|
44
57
|
## Method - part 1: the codebase (you do this work)
|
|
45
58
|
|
|
@@ -92,7 +105,7 @@ The real spec is what people **do** when the system fails - not what the slide d
|
|
|
92
105
|
- **The hesitation.** When someone says "well, there's also this other thing we do…" - stop them, ask them to finish. The main story is what they're comfortable explaining; the hesitation is the real problem.
|
|
93
106
|
- **"Which part of the codebase do you least want to touch?"** The answer is unanimous and it's the load-bearing wall. Check it against your churn scan - when the human answer and the churn data agree, that's your first map landmark.
|
|
94
107
|
- **Shadow AI.** Someone pasting data into ChatGPT to cope = a real unmet need + an uncontrolled data risk. Note both.
|
|
95
|
-
- **Exception-led operating map.** For each real break (not the slide-deck process): what fails, who notices first, what they do today, and which artifact is trusted in that moment. Prefer exceptions over happy-path swimlanes - the workaround is the operating system. Write rows under `terrain.md` → `## Operating map (exception-led)`. If the section is missing on an older engagement, add it; never regenerate the rest of terrain. When AI is in play, also fill `## Intelligence placement` (deterministic vs LLM judgement vs human approve). **`fde doctor` requires at least one filled exception row before plan/
|
|
108
|
+
- **Exception-led operating map.** For each real break (not the slide-deck process): what fails, who notices first, what they do today, and which artifact is trusted in that moment. Prefer exceptions over happy-path swimlanes - the workaround is the operating system. Write rows under `terrain.md` → `## Operating map (exception-led)`. If the section is missing on an older engagement, add it; never regenerate the rest of terrain. When AI is in play, also fill `## Intelligence placement` (deterministic vs LLM judgement vs human approve). **`fde doctor` requires at least one filled exception row before plan/ship/outcome/close** - empty map after discover is a hygiene fail, not optional polish.
|
|
96
109
|
|
|
97
110
|
## Method - part 3: workshop facilitation
|
|
98
111
|
|
|
@@ -147,13 +160,18 @@ Score every candidate use case before anything gets prototyped:
|
|
|
147
160
|
|
|
148
161
|
## Artifact (this IS the memory - write it as you work)
|
|
149
162
|
|
|
150
|
-
**`reality.md`** - the readout the FDE takes into the sponsor meeting:
|
|
163
|
+
**`reality.md`** - the readout the FDE takes into the sponsor meeting. Keep the three schema lines the dashboard reads (`Working theory` / `Evidence` / `Differs from brief how`). Then the decision frame:
|
|
164
|
+
|
|
151
165
|
```markdown
|
|
152
166
|
# Reality (actual problem)
|
|
153
|
-
**
|
|
154
|
-
**
|
|
155
|
-
**
|
|
156
|
-
**
|
|
167
|
+
**Working theory:** <the real problem, one sentence>
|
|
168
|
+
**Evidence:** <workaround/data/quote, source, day>
|
|
169
|
+
**Differs from brief how:** <delta, with evidence>
|
|
170
|
+
**Situation:** <what the floor already treats as true>
|
|
171
|
+
**Complication:** <what forces a decision now>
|
|
172
|
+
**Question:** <one decision-shaped sentence>
|
|
173
|
+
**Answer-space:** confirm brief / descope / rescope / pause - and what a yes looks like
|
|
174
|
+
**Implication for build:** <first change they can see>
|
|
157
175
|
**Validated with:** <who, when>
|
|
158
176
|
```
|
|
159
177
|
|
|
@@ -180,11 +198,11 @@ Every line carries its evidence. `(churn: 47/90d)` `(ops lead, Day 5)` `(stated,
|
|
|
180
198
|
## Checkpoint (before any build)
|
|
181
199
|
|
|
182
200
|
Present to the FDE, five things, one paragraph each - no padding:
|
|
183
|
-
1. The real problem, with the two strongest pieces of evidence.
|
|
201
|
+
1. The Question, then the real problem, with the two strongest pieces of evidence.
|
|
184
202
|
2. The top 3 risk areas of the codebase, one line of why each.
|
|
185
203
|
3. What must not be touched without characterisation tests.
|
|
186
204
|
4. The exception-led operating map: the two breaks that matter most, who owns the workaround, and where shadow systems live.
|
|
187
|
-
5. The
|
|
205
|
+
5. The Answer-space: confirm brief / descope / rescope - and the decision it puts in front of the sponsor.
|
|
188
206
|
|
|
189
207
|
If discovery revealed the problem is 3× the brief: the FDE tells the customer **before** telling themselves it's manageable. Lead with evidence, offer three paths (descope / rescope / pause-and-plan), confirm any reset in writing - update `success.md` and `brief.md` before continuing.
|
|
190
208
|
|
|
@@ -198,13 +216,14 @@ Acme's brief blamed missing monitoring. Discovery goes to the workaround first.
|
|
|
198
216
|
|
|
199
217
|
`git log` shows the reconciliation module at 47 commits/90d with no tests, all from one author who left in February. Marco (ops lead) turns out to keep a spreadsheet: every morning he re-runs the job manually and eyeballs the totals - a habit nobody mentioned because to him it is just the job. That spreadsheet is the system of record when the job fails, which is the actual finding.
|
|
200
218
|
|
|
201
|
-
`reality.md
|
|
219
|
+
`reality.md` keeps the schema, then the frame. **Working theory:** the job has no owner, and the manual re-run masks failures for a day. **Evidence:** Marco's sheet, Day 5; two silent failures since March, finance escalation Mar 14. **Differs from brief how:** alerting existed last year and was disabled - adding it again without an owner reproduces the same outcome. **Situation:** Marco re-runs the job every morning and the spreadsheet is truth when it fails. **Complication:** two silent failures since March already hit finance, and the author of the module left in February. **Question:** should Priya fund a named owner on the failure path, or fund alerting and accept the same miss in six months? **Answer-space:** fund ownership / fund alerting-as-theatre / pause until she names who acks. `terrain.md` gets the hotspot row and an operating-map row: `job fails silently → Marco notices next morning → re-runs by hand → spreadsheet is truth → LOAD-BEARING (Marco, Day 5)`.
|
|
202
220
|
|
|
203
|
-
Checkpoint to the FDE
|
|
221
|
+
Checkpoint to the FDE leads with that Question, not a tour of the repo.
|
|
204
222
|
|
|
205
223
|
## Principles
|
|
206
224
|
|
|
207
225
|
- The brief is a hypothesis until evidence confirms it.
|
|
226
|
+
- No scan until the Question is one decision the signer must make.
|
|
208
227
|
- The workaround is more honest than the requirements document.
|
|
209
228
|
- Churn data + the human's "don't touch that" pointing at the same module = the map is true.
|
|
210
229
|
- Never modify code before the terrain map exists.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# earn-trust -
|
|
1
|
+
# earn-trust - Earn access
|
|
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
|
-
# encode-pattern -
|
|
1
|
+
# encode-pattern - Encode the pattern
|
|
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
|
|
|
@@ -48,7 +48,7 @@ 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 stage.** Patterns sort into the same stages as the
|
|
51
|
+
**4. Classify by stage.** Patterns sort into the same stages as the skills:
|
|
52
52
|
|
|
53
53
|
| Stage | Pattern type | Example |
|
|
54
54
|
|--------|-------------|---------|
|
|
@@ -56,7 +56,7 @@ The difference between a 5-year FDE and a 15-year FDE is not talent - it's encod
|
|
|
56
56
|
| **Discover** | Investigative / analytical | "The cron-job discovery checklist for legacy systems" |
|
|
57
57
|
| **Plan** | Structural / strategic | "The three-option presentation for nervous sponsors" |
|
|
58
58
|
| **Ship** | Technical / safety | "The Strangler Fig on financial transaction code" |
|
|
59
|
-
| **
|
|
59
|
+
| **Outcome** | Operational / process | "The regulated-environment change-approval timeline buffer" |
|
|
60
60
|
| **Close** | Knowledge / handoff | "The 2am document format that actually gets used" |
|
|
61
61
|
|
|
62
62
|
**5. Version and evolve.** Patterns are living documents:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# eval-pack -
|
|
1
|
+
# eval-pack - Gate the model 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`, `poc`,
|
|
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`, 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
|
-
# hold-scope -
|
|
1
|
+
# hold-scope - Hold scope
|
|
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
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# ingest -
|
|
1
|
+
# ingest - Ingest sources
|
|
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
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# pick-three -
|
|
1
|
+
# pick-three - Prioritize three
|
|
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
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# plan -
|
|
1
|
+
# plan - Sequence the work
|
|
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
|
|
|
@@ -22,13 +22,13 @@ 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 `
|
|
25
|
+
**0. Lock scope first.** Read `success.md`, `assumptions.md`, and the **Question** on `reality.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. If `reality.md` has no Question, stop and finish discover - you are sequencing trivia.
|
|
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
|
|
|
29
29
|
**2. Front-load the fragile.** Check `terrain.md` hotspots. Risky modules go early - fail fast, not in week three.
|
|
30
30
|
|
|
31
|
-
**3.
|
|
31
|
+
**3. One user action per change.** Each task delivers something visible and testable ("user submits form, sees it saved"), never a layer ("build the database layer"). See `ship`.
|
|
32
32
|
|
|
33
33
|
**4. Size to 30-90 minutes, PR-sized.** Longer = two tasks. Each task implementable, testable, reviewable without a thousand-line diff.
|
|
34
34
|
|
|
@@ -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
|
|
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 PRs (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
|
|
|
@@ -54,6 +54,7 @@ Delivers: <what someone can see/test>
|
|
|
54
54
|
Accepts: <happy path> / <unhappy path>
|
|
55
55
|
Touches: <files/systems - blast radius declared upfront>
|
|
56
56
|
Risk: <what could go wrong + fallback>
|
|
57
|
+
Kill if: <the observation that voids this slice - copy from assumptions.md How we test, or the check that means stop>
|
|
57
58
|
Verify: <specific check>
|
|
58
59
|
Value promised: <business unit change this slice claims>
|
|
59
60
|
|
|
@@ -72,7 +73,7 @@ Value promised: <business unit change this slice claims>
|
|
|
72
73
|
No kill list → not a finished plan. Reopen with the FDE until the deferrals are written.
|
|
73
74
|
## Checkpoint
|
|
74
75
|
|
|
75
|
-
Walk the FDE through: sequence + why this order, where the fragile work sits, where the touchpoints land, the acceptance gate on task 1, and the kill list. One question: "Which stakeholder sees the first visible slice, and when?" Second: "Who accepted what we are not doing?"
|
|
76
|
+
Walk the FDE through: sequence + why this order, where the fragile work sits, where the touchpoints land, the acceptance gate and **Kill if** on task 1, and the kill list. One question: "Which stakeholder sees the first visible slice, and when?" Second: "Who accepted what we are not doing?" Third: "What observation stops task 1 this week?"
|
|
76
77
|
|
|
77
78
|
## Method - estimation (when the sponsor asks "how long, how much?")
|
|
78
79
|
|
|
@@ -96,6 +97,7 @@ Every FDE gets asked this in week one. The honest answer is a range, not a numbe
|
|
|
96
97
|
- Add 30% buffer for integration work (it always takes longer).
|
|
97
98
|
- Add 50% buffer for AI/ML work (eval cycles are unpredictable).
|
|
98
99
|
- Name assumptions explicitly: "assumes API docs are accurate", "assumes staging environment exists."
|
|
100
|
+
- Each named assumption needs a **kill observation**: the result that voids the estimate. Copy it from `assumptions.md` → How we test. No kill observation = it is not an assumption, it is hope.
|
|
99
101
|
- Revisit estimates every 2 weeks. An estimate that never updates is fiction.
|
|
100
102
|
|
|
101
103
|
Write estimates to `decisions.md` under `## Sizing`. Include the assumptions - when they break, the estimate changes and the FDE has evidence for the conversation.
|
|
@@ -135,7 +137,7 @@ Never quietly update tasks. Name the reset: update `reality.md` and `success.md`
|
|
|
135
137
|
|
|
136
138
|
Acme, after discover: the reconciliation job is unowned, Marco's spreadsheet is the real fallback.
|
|
137
139
|
|
|
138
|
-
**Now** is three tasks, not eight. Task 1 is *failures reach a named human* - delivers a page to a rota, accepts "kill the job mid-run → the on-call is paged within 15 min", touches the job wrapper and the alert config, rollback is re-disable the route, verify by killing it in staging. Value promised: `risk-mitigation - a silent failure becomes a 15-minute one`.
|
|
140
|
+
**Now** is three tasks, not eight. Task 1 is *failures reach a named human* - delivers a page to a rota, accepts "kill the job mid-run → the on-call is paged within 15 min", touches the job wrapper and the alert config, rollback is re-disable the route, **Kill if:** a real failure page is acked by nobody on the rota (the *finance would act* assumption, DISPROVED if Marco is the only name that answers), verify by killing it in staging. Value promised: `risk-mitigation - a silent failure becomes a 15-minute one`.
|
|
139
141
|
|
|
140
142
|
The kill list in `decisions.md` is where the plan earns its keep: the rewrite of the reconciliation service that Tom keeps proposing goes there - *deferred, the failure mode is ownership not architecture (Priya accepted, Jun 12)* - along with the finance dashboard finance asked for directly. Both stay visible so the same argument is not re-litigated in week 4 without a receipt.
|
|
141
143
|
|
|
@@ -148,5 +150,6 @@ First visible slice goes to Marco, not Priya: he is the one whose morning change
|
|
|
148
150
|
- Every 2-3 tasks, a stakeholder touchpoint. Trust decays without visibility.
|
|
149
151
|
- No written acceptance criteria, no build.
|
|
150
152
|
- No kill list, no finished plan.
|
|
151
|
-
-
|
|
153
|
+
- No **Kill if** on a Now PR, that PR is hope.
|
|
154
|
+
- Estimates are ranges, not promises. Name the assumptions and the observation that voids them.
|
|
152
155
|
- Migrations: leaf nodes first, core last. Rollback before cutover.
|
|
@@ -1,8 +1,10 @@
|
|
|
1
|
-
# poc -
|
|
1
|
+
# poc - Validate the solution
|
|
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
|
|
|
5
|
-
**Read first:** `context.md`, `reality.md`. Load `terrain.md` only if the prototype touches the existing codebase.
|
|
5
|
+
**Read first:** `context.md`, `reality.md`. Load `terrain.md` only if the prototype touches the existing codebase. If `terrain.md` **Data estate** has a Blocker source this prototype needs, stop - that is discover, not a day's demo.
|
|
6
|
+
|
|
7
|
+
A green check on synthetic data is not a validated solution. The person who can say no has to see it on evidence they already believe.
|
|
6
8
|
|
|
7
9
|
## Method (you do this work)
|
|
8
10
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# readout -
|
|
1
|
+
# readout - Report the outcome
|
|
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
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# red-team -
|
|
1
|
+
# red-team - Challenge the plan
|
|
2
2
|
|
|
3
3
|
**Enter when:** the FDE says "red-team this," "stress-test my thinking," "poke holes in this," "what am I missing," "challenge my plan" - or anytime they are about to walk into a high-stakes conversation (sponsor meeting, accumulation conversation, handoff, go-live) and want their blind spots exposed first.
|
|
4
4
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# rescue -
|
|
1
|
+
# rescue - Resolve the incident
|
|
2
2
|
|
|
3
3
|
**Enter when:** production is down, something's bleeding - OR a stakeholder went quiet, confidence is slipping, or three weeks into the build the brief turned out to be wrong. Trust fires get the same urgency as outages.
|
|
4
4
|
|
|
@@ -13,7 +13,8 @@ Open by narrowing time, like a human: "Walk me through the last couple hours - d
|
|
|
13
13
|
git log --since="6 hours ago" --format="%ad %an %s" --date=relative
|
|
14
14
|
```
|
|
15
15
|
|
|
16
|
-
**The sequence:**
|
|
16
|
+
**The sequence:** no fix until the cause is named. A symptom patch is the second incident.
|
|
17
|
+
|
|
17
18
|
1. **Stabilise first.** Roll back? Disable the broken path? Route around it? Buy time before diagnosing. The instinct to fix fast causes the second incident.
|
|
18
19
|
2. **Name the unknowns.** "We don't know if the queue is corrupted / if this hits all users / if the cache is stale." Written down. Named unknowns are safer than assumed knowns.
|
|
19
20
|
3. **Assume maximum blast radius.** The unrecognised integration in the stack trace is load-bearing until proven otherwise.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# rollback -
|
|
1
|
+
# rollback - Rehearse rollback
|
|
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
|
-
# runbook -
|
|
1
|
+
# runbook - Write the runbook
|
|
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
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# score-use-cases -
|
|
1
|
+
# score-use-cases - Score use cases
|
|
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
|
|