fdeops 3.17.0 → 3.21.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.
Files changed (50) hide show
  1. package/AGENTS.md +1 -1
  2. package/README.md +160 -149
  3. package/adapters/AGENTS.md +1 -1
  4. package/adapters/GEMINI.md +1 -1
  5. package/adapters/LOCAL-LLM.md +5 -5
  6. package/adapters/README.md +1 -1
  7. package/adapters/copilot-instructions.md +1 -1
  8. package/adapters/cursor.fde.mdc +1 -1
  9. package/bin/check.js +29 -10
  10. package/bin/fde.js +7 -7
  11. package/bin/lib/trust.js +4 -2
  12. package/mcp/fdeops-ingest/package.json +1 -1
  13. package/package.json +2 -2
  14. package/plugin.json +2 -2
  15. package/skills/fde/SKILL.md +34 -32
  16. package/skills/fde/references/ai.md +2 -2
  17. package/skills/fde/references/audit.md +2 -2
  18. package/skills/fde/references/board-memo.md +1 -1
  19. package/skills/fde/references/business-case.md +1 -1
  20. package/skills/fde/references/close.md +1 -1
  21. package/skills/fde/references/connect.md +1 -1
  22. package/skills/fde/references/dashboard.md +2 -2
  23. package/skills/fde/references/debrief.md +1 -1
  24. package/skills/fde/references/demo-prep.md +1 -1
  25. package/skills/fde/references/discover.md +23 -9
  26. package/skills/fde/references/earn-trust.md +1 -1
  27. package/skills/fde/references/encode-pattern.md +4 -3
  28. package/skills/fde/references/eval-pack.md +4 -4
  29. package/skills/fde/references/hold-scope.md +1 -1
  30. package/skills/fde/references/ingest.md +1 -1
  31. package/skills/fde/references/land.md +5 -5
  32. package/skills/fde/references/pick-three.md +1 -1
  33. package/skills/fde/references/plan.md +1 -1
  34. package/skills/fde/references/poc.md +8 -3
  35. package/skills/fde/references/readout.md +5 -4
  36. package/skills/fde/references/red-team.md +1 -1
  37. package/skills/fde/references/rescue.md +3 -2
  38. package/skills/fde/references/review.md +3 -3
  39. package/skills/fde/references/rollback.md +1 -1
  40. package/skills/fde/references/runbook.md +5 -3
  41. package/skills/fde/references/score-use-cases.md +1 -1
  42. package/skills/fde/references/ship.md +11 -3
  43. package/skills/fde/references/switch-clients.md +1 -1
  44. package/skills/fde/references/test-assumptions.md +19 -8
  45. package/skills/fde/references/three-options.md +18 -11
  46. package/skills/fde/references/what-breaks.md +1 -1
  47. package/skills/fde/references/who-decides.md +1 -1
  48. package/templates/.fde/README.md +1 -1
  49. package/templates/.fde/assumptions.md +3 -2
  50. package/templates/.fde/terrain.md +1 -1
@@ -1,4 +1,4 @@
1
- # rescue - production fire, trust fire, or wrong-brief mid-build
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,6 +1,6 @@
1
- # review - two stages, always in order
1
+ # review - Review the change
2
2
 
3
- **Enter when:** a change needs review before merge - "is this safe," "does it match what we agreed."
3
+ **Enter when:** a change needs review before merge - "is this safe," "does it match what we agreed." Their team commented on the PR: same skill. Comments are to check, not to obey.
4
4
 
5
5
  **Read first:** `context.md`, `decisions.md`, `trust-profile.md`, `terrain.md`. Not `reality.md`/`stakeholders.md` - irrelevant to reviewing code against agreed scope.
6
6
 
@@ -52,7 +52,7 @@ Five dimensions, line-specific ("line 47 fails under concurrent writes - no lock
52
52
 
53
53
  1. Read the full diff before commenting.
54
54
  2. Verdicts: **Stage 1: Pass / Blocked (reason)** · **Stage 2: Pass / Concerns (line-specific)**.
55
- 3. Fix only **real** findings tied to this change - no drive-by refactors. Reject false positives with one sentence why.
55
+ 3. Fix only **real** findings tied to this change - no drive-by refactors. Reject false positives with one sentence why. Their comments are to check, not to obey. Restate each against the one-line intent and `trust-profile.md`. One item unclear → ask before changing any of them. If it breaks a signed constraint, a sacred system, or nothing calls it: one-sentence pushback, then wait.
56
56
  4. Add or update a test per bug found where possible.
57
57
  5. Re-run tests/typechecks - state what ran.
58
58
  6. Re-review. Repeat until Pass/Pass or a human must decide scope/product.
@@ -1,4 +1,4 @@
1
- # rollback - test the escape route before you need it
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 - making yourself replaceable is the goal
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
 
@@ -60,6 +60,7 @@ Rollback: <exact command and expected time>
60
60
  |---------|-------|-----------|----------|--------|
61
61
  | **Architecture walkthrough** | Why, not what. The decisions, the trade-offs, the things that almost went wrong. | Full team | 60-90 min | Recording + Q&A log |
62
62
  | **Operational drill** | Deploy, rollback, incident response. They do it, you watch. | On-call team | 60 min | Drill report with confidence level |
63
+ | **Floor drill** | They run the real job (the exception on the operating map) while you watch, hands off. Then they teach the next person. If they cannot, the runbook is a PDF. | Named operator on the floor | 45-60 min | They used the 2am doc during the drill, or the embed is not closed |
63
64
  | **Edge-case handover** | The things that aren't in any document. The workarounds, the fragile spots, the "ask Sarah because she's the only one who knows." | Team lead + 1 | 30 min | Additions to `handoff.md` |
64
65
 
65
66
  **4. The confidence check.** After the knowledge transfer, score the team's readiness:
@@ -68,11 +69,12 @@ Rollback: <exact command and expected time>
68
69
  |------|------------------|----------|
69
70
  | Daily operations | | Can they deploy and rollback without help? |
70
71
  | Incident response | | Did they complete the drill within acceptable time? |
72
+ | Floor job | | Did the named operator complete Tuesday's real exception without you at the keyboard? |
71
73
  | Architecture decisions | | Can they explain why the system is built this way? |
72
74
  | AI components (if any) | | Do they know how to monitor, retrain, and disable? |
73
75
  | Stakeholder management | | Do they know who to update and how? |
74
76
 
75
- **Average below 3.5 → the handoff is not complete.** Extend if possible; if not, document the gaps and name the risk.
77
+ **Average below 3.5 → the handoff is not complete.** Extend, or tell the sponsor the embed is not closed. Do not document the gap and leave.
76
78
 
77
79
  **5. The successor brief.** If a new FDE is taking over, write a brief that gets them operational in one hour:
78
80
 
@@ -132,7 +134,7 @@ If you see 2+: accelerate the handoff immediately. The longer you stay past usef
132
134
 
133
135
  - The goal of every engagement is to make yourself replaceable.
134
136
  - The 2am document is the real handoff - everything else supports it.
135
- - Knowledge transfer is three sessions, not a doc dump.
137
+ - Knowledge transfer is four sessions, not a doc dump. The floor drill is the named operator completing Tuesday's real job from the 2am doc, hands off. If they cannot, do not close.
136
138
  - A confidence score below 3.5 means the handoff isn't done.
137
139
  - The successor brief gets the next FDE operational in one hour or it's too long.
138
140
  - Clean exit: no personal credentials left behind, ever.
@@ -1,4 +1,4 @@
1
- # score-use-cases - pick the right battle, not the interesting one
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
 
@@ -1,4 +1,4 @@
1
- # ship - on their site, then live
1
+ # ship - Deliver the increment
2
2
 
3
3
  **Enter when:** you are writing or updating on their codebase, they need to see something real, or you are going live.
4
4
 
@@ -12,7 +12,7 @@ Do not ask them to pick a mode. Name where you are, then start at the matching s
12
12
 
13
13
  If going live, opening question: **has anyone actually *run* the rollback, or is it still a slide?** If only planned, that's today's work - say so plainly.
14
14
 
15
- A same-day throwaway that kills an assumption is `poc`. This method is the real change on a repo they will own, then production.
15
+ A same-day throwaway that kills an assumption is `poc`. This skill is the real change on a repo they will own, then production.
16
16
 
17
17
  ## Field (name it once, then the same loop)
18
18
 
@@ -25,6 +25,10 @@ A same-day throwaway that kills an assumption is `poc`. This method is the real
25
25
 
26
26
  Skip POC only when the killer assumption already lives in the repo (typical brownfield). If the bet is unproven, `poc` first.
27
27
 
28
+ **Done means:** the signer in `success.md` can reject this on staging they operate. A green check on your laptop is not delivery. Do not start the next change until this one is rejectable.
29
+
30
+ If `terrain.md` **Data estate** lists a **Blocker** this change depends on (source or pipe): stop. That is discover, not ship. Do not build a path they cannot feed.
31
+
28
32
  ## Method - one change they can see
29
33
 
30
34
  One change = one thing a user can do, with a test, that you can revert on its own. Not "all the APIs, then all the UI." Not a 2,000-line dump. A PR is how this often lands. It is not the job. The job is the change they can see.
@@ -68,10 +72,12 @@ Read existing code in the area (search before creating)
68
72
 
69
73
  **Prove it on their staging.** A green check on your laptop is not delivery.
70
74
 
71
- - Run **their** test command, typecheck, or smallest proving path. Write the command and the result in `delivery.md`.
75
+ - Run **their** test command, on **their** CI, with **their** fixtures. Write the command and the result in `delivery.md`. You do not add a runner they will not keep. If you have not run their command in this turn, you cannot write that it passed. Last session's green, "should pass," and "looks correct" are not a receipt.
72
76
  - If the signer in `success.md` cannot reject this on a screen they already use, it is not proven.
73
77
  - Staging they operate beats a local demo. If you have no staging: `unknown - ask:` who owns an environment, then stop pretending it shipped.
78
+ - **Monday-shaped data.** Staging that is empty, synthetic, or last quarter is not next Tuesday. Before go-live, write what staging is missing (volume, PII, the batch that only runs in prod, the account that only exists in the warehouse) and what that means for the kill test. If the signer cannot reject it on a screen they already operate, with data that looks like next Tuesday, it is not proven.
74
79
  - Model in the path: `eval-pack` until `evals.md` says SHIP. Do not skip because "it looked right in chat."
80
+ - A model drafts. A named human on their side ships. No unsupervised loop on their production. If the brief demands lights-out write-access, that is `who-decides` / `hold-scope`, not ship.
75
81
 
76
82
  The proof is whatever this client already believes, plus one new receipt they can replay.
77
83
 
@@ -210,6 +216,8 @@ grep -rnE "(api[_-]?key|secret|password|token)\s*[:=]\s*['\"][^'\"]{8,}" \
210
216
 
211
217
  **Canary:** 1-5% of traffic, ≥10 minutes. Watch error rate, latency, and **the business metric this change affects**. Anything looks wrong → roll back immediately; investigate safely; redeploy when confident. Never investigate during the canary. Then stage up: 5% → 25% → 100%, each confirmed stable.
212
218
 
219
+ **Canary receipt** (write it, or the canary did not happen): what was watched, on whose dashboard, for how long, and that the next change did not start in the window. If prod is a CAB console, vendor button, or their pipeline, write the owner and the click path - the host agent does not get to pretend it shipped.
220
+
213
221
  **Programme-scale rollout (transformations)** - different problem from one service:
214
222
  1. **Pilot** - one team, one use case; success metrics defined *before* it starts (after = fitting metrics to results).
215
223
  2. **Limited release** - 3-5 teams, real load; this is where the failure modes the pilot hid show up.
@@ -1,4 +1,4 @@
1
- # switch-clients - juggling engagements without dropping any
1
+ # switch-clients - Switch engagements
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
- # test-assumptions - pressure-test the brief before building on it
1
+ # test-assumptions - Test assumptions
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
 
@@ -8,7 +8,7 @@ Every engagement is built on assumptions. Most are invisible until they're wrong
8
8
 
9
9
  ## Method (you do this work)
10
10
 
11
- **1. Extract the assumptions.** Read `brief.md` and `reality.md` line by line. Every statement that isn't backed by evidence is an assumption. Common hiding places:
11
+ **1. Extract the assumptions.** Read `brief.md`, `reality.md`, and `terrain.md` `## Parts` line by line. Every statement that isn't backed by evidence is an assumption. Treat every "obvious" block as a convention until a receipt proves it. Common hiding places:
12
12
 
13
13
  | Where assumptions hide | Example | The real question |
14
14
  |----------------------|---------|-------------------|
@@ -19,7 +19,17 @@ Every engagement is built on assumptions. Most are invisible until they're wrong
19
19
  | **The data claim** | "We have good data for this" | Defined how? Validated when? By whom? Sample checked? |
20
20
  | **The "just"** | "We just need to add a feature" | On what system? With what dependencies? What breaks? |
21
21
 
22
- **2. Classify each assumption by blast radius:**
22
+ **2. Kind first, then blast radius.** For each row, classify:
23
+
24
+ | Kind | Meaning |
25
+ |------|---------|
26
+ | **FACT** | A dated receipt, a measurement, or the repo. You can point at it. |
27
+ | **CONVENTION** | How they have always done it. The playbook. "We just…" |
28
+ | **UNKNOWN** | No evidence either way. |
29
+
30
+ Order the list load-bearing first. For each CONVENTION or UNKNOWN, one line: what breaks if it is wrong, and what opens if you **invert** it (stop obeying it). A FACT with no receipt is UNKNOWN - do not promote it to protect the brief.
31
+
32
+ Then classify blast radius:
23
33
 
24
34
  ```
25
35
  CRITICAL - if wrong, the engagement fails or the approach changes fundamentally
@@ -55,11 +65,11 @@ Evidence first, then the question. Let them reach the conclusion.
55
65
  **`assumptions.md`** - this IS the register (create if land did not). Keep one live table; do not only bury results in `reality.md`:
56
66
 
57
67
  ```markdown
58
- | # | Assumption | Blast radius | How we test | Status | Evidence |
59
- |---|------------|--------------|-------------|--------|----------|
60
- | 1 | API is the bottleneck | CRITICAL | p95 instrumentation 24h | DISPROVED | 80% wait in DB layer (Day N) |
61
- | 2 | Team will adopt new tool | LOAD-BEARING | 3 individual interviews | CONFIRMED | 2/3 describe a use case unprompted |
62
- | 3 | Data clean enough for ML | CRITICAL | 200-record sample | PARTIAL → OPEN follow-up | 12% nulls on key field; cleaning task added |
68
+ | # | Assumption | Kind | Blast radius | How we test | Status | Evidence |
69
+ |---|------------|------|--------------|-------------|--------|----------|
70
+ | 1 | API is the bottleneck | CONVENTION | CRITICAL | p95 instrumentation 24h | DISPROVED | 80% wait in DB layer (Day N) |
71
+ | 2 | Team will adopt new tool | UNKNOWN | LOAD-BEARING | 3 individual interviews | CONFIRMED | 2/3 describe a use case unprompted |
72
+ | 3 | Data clean enough for ML | UNKNOWN | CRITICAL | 200-record sample | PARTIAL → OPEN follow-up | 12% nulls on key field; cleaning task added |
63
73
  ```
64
74
 
65
75
  Status values: `OPEN` · `TESTING` · `CONFIRMED` · `DISPROVED` · `PARKED`. A CRITICAL row still `OPEN` blocks plan.
@@ -85,6 +95,7 @@ Result: acked in 40 minutes, by Marco, not finance. Assumption DISPROVED, and th
85
95
  ## Principles
86
96
 
87
97
  - Every "just" is an assumption. Every "should" is an assumption.
98
+ - Kind before blast radius. A FACT with no receipt is UNKNOWN.
88
99
  - Kill the riskiest, cheapest-to-test assumption first.
89
100
  - Evidence first, then the question. Let the customer reach the conclusion.
90
101
  - A brief with zero disproved assumptions wasn't audited - it was accepted.
@@ -1,8 +1,8 @@
1
- # three-options - three paths, not one recommendation
1
+ # three-options - Generate options
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
 
5
- **Read first:** `reality.md`, `terrain.md`, `success.md`, `context.md`. Load `business-case.md` if the decision has cost implications.
5
+ **Read first:** `reality.md`, `terrain.md`, `assumptions.md`, `success.md`, `context.md`. Load `business-case.md` if the decision has cost implications.
6
6
 
7
7
  One option is a request for trust. Two options is a false choice. Three options is a conversation between professionals. The FDE who presents three genuine options earns the decision-maker's respect - and their protection when things get hard.
8
8
 
@@ -12,24 +12,30 @@ One option is a request for trust. Two options is a false choice. Three options
12
12
 
13
13
  > "Decision: approach for the payment migration. Decided by: CTO. Needed by: Friday. Deferral cost: blocks the next sprint and delays the pilot by two weeks."
14
14
 
15
- **2. Generate three genuine options.** Not "good / medium / bad" - three approaches with real trade-offs:
15
+ **2. Generate three genuine options from what survived.** Read `assumptions.md` (CONFIRMED / DISPROVED) and `terrain.md` `## Parts`. The playbook is unavailable. Assemble from those blocks only.
16
16
 
17
- | Option archetype | Description | When it fits |
18
- |-----------------|-------------|-------------|
19
- | **Conservative** | Lowest risk, smallest change, longest timeline | When trust is thin or the system is fragile |
20
- | **Pragmatic** | Balanced risk/reward, proven patterns, moderate timeline | When the team is competent and the deadline is real |
21
- | **Ambitious** | Highest reward, most change, highest risk | When the sponsor has appetite and the team has capacity |
17
+ Not "good / medium / bad." Not three speeds of the same plan (Conservative / Pragmatic / Ambitious of one architecture). Three approaches that differ in **structure** - rearrange the same surviving parts.
22
18
 
23
- Each option must be one the FDE would genuinely recommend under different circumstances. If you can't defend an option, replace it - padding is visible.
19
+ Each option must be one the FDE would genuinely recommend under different circumstances. If you cannot defend an option, replace it - padding is visible.
20
+
21
+ For each option, name:
22
+ - which surviving blocks it is built from
23
+ - which CONVENTION it refuses to obey
24
+ - its single biggest point of failure
25
+ - any new building block, labelled as a new assumption (`UNKNOWN` in `assumptions.md`) - do not smuggle one in as a fact
26
+
27
+ If all three are the same system at different risk levels, you wrote the playbook. Start over.
24
28
 
25
29
  **3. Structure each option identically.** Same dimensions, same format - so comparison is instant:
26
30
 
27
31
  ```markdown
28
- ### Option A: <name> (Conservative)
32
+ ### Option A: <name>
33
+ - **Blocks:** <which surviving assumptions / parts it is built from>
34
+ - **Convention refused:** <the "we just…" it will not obey>
29
35
  - **What:** <the approach in one paragraph>
30
36
  - **Timeline:** <estimate with basis>
31
37
  - **Cost:** <effort, infrastructure, external>
32
- - **Risk:** <what could go wrong and the mitigation>
38
+ - **Biggest failure:** <the single point that kills this option>
33
39
  - **Trade-off:** <what you give up by choosing this>
34
40
  - **Best when:** <the condition that makes this the right choice>
35
41
  ```
@@ -85,6 +91,7 @@ Recommendation: pragmatic, conditional - *if* Raj is on the design, otherwise sa
85
91
  ## Principles
86
92
 
87
93
  - Three options, never one. One option is a request for trust; three is a real decision.
94
+ - Assemble from surviving blocks. Three speeds of the same plan is the playbook - start over.
88
95
  - Each option must be genuinely defensible - no straw men.
89
96
  - Same structure for each option. Comparison should take 30 seconds.
90
97
  - Recommend one. State why. Accept the override gracefully.
@@ -1,4 +1,4 @@
1
- # what-breaks - know what breaks before you touch it
1
+ # what-breaks - Assess impact
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
 
@@ -1,4 +1,4 @@
1
- # who-decides - reading the room before it reads you
1
+ # who-decides - Map decision rights
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
 
@@ -5,7 +5,7 @@
5
5
  Create with:
6
6
 
7
7
  ```bash
8
- node bin/install.js init <engagement-name> # from fdeops repo; or npx fdeops@latest init when npm ≥ 3.0.0
8
+ fde resume --init <engagement-name> # or: npx fdeops resume --init <engagement-name>
9
9
  ```
10
10
 
11
11
  Stays on **your machine** - not in shared git by default.
@@ -2,9 +2,10 @@
2
2
 
3
3
  <!-- Brief claims that are not yet evidence. Land seeds; test-assumptions / discover update. -->
4
4
 
5
- | # | Assumption | Blast radius | How we test | Status | Evidence |
6
- |---|------------|--------------|-------------|--------|----------|
5
+ | # | Assumption | Kind | Blast radius | How we test | Status | Evidence |
6
+ |---|------------|------|--------------|-------------|--------|----------|
7
7
 
8
+ **Kind:** `FACT` · `CONVENTION` · `UNKNOWN`
8
9
  **Blast radius:** `CRITICAL` · `LOAD-BEARING` · `CONVENIENCE`
9
10
  **Status:** `OPEN` · `TESTING` · `CONFIRMED` · `DISPROVED` · `PARKED`
10
11
 
@@ -9,7 +9,7 @@
9
9
  ## Operating map (exception-led)
10
10
 
11
11
  <!-- How work actually runs when the happy path fails. Fill in discover; leave blank until heard/seen.
12
- fde doctor requires ≥1 real exception row before plan/build/ship/close. -->
12
+ fde doctor requires ≥1 real exception row before plan/ship/outcome/close. -->
13
13
 
14
14
  | Exception / break | Who notices first | What they do today (workaround) | System of record then | Blast if wrong | Evidence |
15
15
  |-------------------|-------------------|---------------------------------|-----------------------|----------------|----------|