fdeops 3.15.1 → 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.
Files changed (56) hide show
  1. package/AGENTS.md +1 -1
  2. package/README.md +132 -93
  3. package/adapters/AGENTS.md +2 -2
  4. package/adapters/GEMINI.md +2 -2
  5. package/adapters/LOCAL-LLM.md +3 -3
  6. package/adapters/README.md +1 -1
  7. package/adapters/copilot-instructions.md +2 -2
  8. package/adapters/cursor.fde.mdc +3 -3
  9. package/bin/check.js +66 -14
  10. package/bin/fde.js +16 -16
  11. package/bin/lib/memory.js +1 -1
  12. package/bin/lib/render.js +1 -1
  13. package/bin/lib/trust.js +1 -1
  14. package/mcp/README.md +3 -3
  15. package/mcp/fdeops-ingest/README.md +8 -8
  16. package/mcp/fdeops-ingest/package.json +1 -1
  17. package/mcp/fdeops-ingest/server.js +1 -1
  18. package/mcp/recipes/README.md +3 -3
  19. package/mcp/recipes/file.md +1 -1
  20. package/mcp/recipes/granola.md +5 -5
  21. package/mcp/recipes/notion.md +2 -2
  22. package/mcp/recipes/slack.md +5 -5
  23. package/package.json +1 -1
  24. package/plugin.json +1 -1
  25. package/skills/fde/SKILL.md +52 -39
  26. package/skills/fde/references/ai.md +9 -9
  27. package/skills/fde/references/{exec-narrative.md → board-memo.md} +1 -1
  28. package/skills/fde/references/business-case.md +5 -5
  29. package/skills/fde/references/close.md +5 -5
  30. package/skills/fde/references/{ingest-connect.md → connect.md} +7 -7
  31. package/skills/fde/references/debrief.md +2 -2
  32. package/skills/fde/references/discover.md +8 -8
  33. package/skills/fde/references/{trust-engineering.md → earn-trust.md} +2 -2
  34. package/skills/fde/references/{pattern-extract.md → encode-pattern.md} +1 -1
  35. package/skills/fde/references/eval-pack.md +6 -6
  36. package/skills/fde/references/{scope-defense.md → hold-scope.md} +4 -4
  37. package/skills/fde/references/ingest.md +16 -16
  38. package/skills/fde/references/land.md +10 -10
  39. package/skills/fde/references/{initiative-triage.md → pick-three.md} +7 -7
  40. package/skills/fde/references/plan.md +9 -9
  41. package/skills/fde/references/{sketch.md → poc.md} +4 -4
  42. package/skills/fde/references/{status.md → readout.md} +10 -10
  43. package/skills/fde/references/red-team.md +2 -2
  44. package/skills/fde/references/rescue.md +1 -1
  45. package/skills/fde/references/review.md +7 -7
  46. package/skills/fde/references/{rollback-drill.md → rollback.md} +1 -1
  47. package/skills/fde/references/{handoff-engineering.md → runbook.md} +5 -5
  48. package/skills/fde/references/{use-case-scoring.md → score-use-cases.md} +4 -4
  49. package/skills/fde/references/ship.md +16 -16
  50. package/skills/fde/references/{multi-customer-ops.md → switch-clients.md} +2 -2
  51. package/skills/fde/references/{assumption-audit.md → test-assumptions.md} +3 -3
  52. package/skills/fde/references/{incremental-build.md → thin-slices.md} +22 -13
  53. package/skills/fde/references/{options-analysis.md → three-options.md} +3 -3
  54. package/skills/fde/references/{blast-radius.md → what-breaks.md} +4 -4
  55. package/skills/fde/references/{stakeholder-radar.md → who-decides.md} +5 -5
  56. package/templates/.fde/assumptions.md +1 -1
@@ -1,4 +1,4 @@
1
- # assumption-audit - pressure-test the brief before building on it
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
 
@@ -76,11 +76,11 @@ Tell the FDE: how many assumptions extracted, how many critical, which ones were
76
76
 
77
77
  Acme's brief reads cleanly, which is the signal.
78
78
 
79
- Extracted assumptions include one nobody said aloud: *finance would act on an alert*. The whole plan rests on it, and the evidence behind it is a sentence in a kickoff. Blast radius CRITICAL if false, alerting changes nothing and the engagement delivers a page nobody answers.
79
+ Extracted assumptions include one nobody said aloud: *finance would act on an alert*. The whole plan rests on it, and the evidence behind it is a sentence in a kickoff. Blast radius CRITICAL - if false, alerting changes nothing and the engagement delivers a page nobody answers.
80
80
 
81
81
  Validation is a test, not a discussion, and it is cheap: send one real failure notification to the finance channel and watch what happens. It goes first because highest blast radius × cheapest test is the killer test.
82
82
 
83
- Result: acked in 40 minutes, by Marco, not finance. Assumption DISPROVED, and the plan changes before six weeks are spent on it the alert needs a rota with an owner, which is a different piece of work than the one that was funded. `assumptions.md` records the status, the evidence, and the date; the finding is presented to the FDE as a fact base, not as "the brief was wrong".
83
+ Result: acked in 40 minutes, by Marco, not finance. Assumption DISPROVED, and the plan changes before six weeks are spent on it - the alert needs a rota with an owner, which is a different piece of work than the one that was funded. `assumptions.md` records the status, the evidence, and the date; the finding is presented to the FDE as a fact base, not as "the brief was wrong".
84
84
 
85
85
  ## Principles
86
86
 
@@ -1,6 +1,6 @@
1
- # incremental-build - thin slices on someone else's codebase
1
+ # thin-slices - thin slices on someone else's codebase
2
2
 
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 23 days.
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
 
5
5
  **Read first:** `decisions.md` (the plan), `terrain.md` (the danger zones), `context.md`. This skill works *inside* the build phase - it's the execution discipline that makes large features safe on codebases you don't own.
6
6
 
@@ -37,27 +37,36 @@ Each vertical slice delivers working functionality the customer can see. Each sl
37
37
 
38
38
  ```
39
39
  Read existing code in the area (search before creating)
40
- Write characterisation tests for what's there (if legacy)
40
+ Characterise what is already there (their tests, their runner)
41
41
  → Implement the minimal working path
42
- Verify with evidence (tests + typecheck + smallest proving run)
42
+ On-site proof (below)
43
43
  → Cleanup pass (dedupe, simplify - behaviour unchanged)
44
44
  → Self-review against acceptance criteria
45
- → Commit with descriptive message
45
+ → Commit with a message the client's team can read
46
46
  → Update decisions.md + delivery.md
47
47
  ```
48
48
 
49
+ **On-site proof.** A green check on your laptop is not delivery. Before the slice is done:
50
+
51
+ - Run **their** test command, typecheck, or smallest proving path. Write the command and the result in `delivery.md`.
52
+ - If the signer in `success.md` cannot reject this slice on a screen they already use, it is not proven.
53
+ - Staging they operate beats a local demo. If you have no staging: `unknown - ask:` who owns an environment, then stop pretending it shipped.
54
+ - Model in the path: `eval-pack` until `evals.md` says SHIP. Do not skip because "it looked right in chat."
55
+
56
+ Do not prove it with a textbook ritual. The proof is whatever this client already believes, plus one new receipt they can replay.
57
+
49
58
  **4. Size discipline.** Each slice targets:
50
59
 
51
60
  | Metric | Target | Why |
52
61
  |--------|--------|-----|
53
- | Lines changed | 100300 | Reviewable in one sitting |
54
- | Time to implement | 3090 minutes | Testable before context decays |
55
- | Files touched | 15 | Blast radius stays containable |
62
+ | Lines changed | 100-300 | Reviewable in one sitting |
63
+ | Time to implement | 30-90 minutes | Testable before context decays |
64
+ | Files touched | 1-5 | Blast radius stays containable |
56
65
  | Tests added | ≥1 per new behaviour | Proves the slice works; guards against regression |
57
66
 
58
67
  A slice larger than 300 lines → split before implementing. "It's all connected" means the design needs work, not the slice limit.
59
68
 
60
- **5. Stakeholder visibility rhythm.** Every 23 slices, something the customer can see:
69
+ **5. Stakeholder visibility rhythm.** Every 2-3 slices, something the customer can see:
61
70
 
62
71
  - A working endpoint they can hit
63
72
  - A UI change they can click
@@ -69,7 +78,7 @@ Technical progress invisible to stakeholders is trust decay. `delivery.md` gets
69
78
  **6. The scope trap.** Mid-slice discoveries - "this module also needs updating," "I should refactor this while I'm here":
70
79
 
71
80
  - If it's in `decisions.md`: do it as a separate slice.
72
- - If it's NOT in `decisions.md`: log it as a scope receipt (see `scope-defense.md`), don't touch it.
81
+ - If it's NOT in `decisions.md`: log it as a scope receipt (see `hold-scope.md`), don't touch it.
73
82
  - The hardest discipline: leaving ugly code alone when it's not in your slice.
74
83
 
75
84
  ## Artifact
@@ -80,12 +89,12 @@ Technical progress invisible to stakeholders is trust decay. `delivery.md` gets
80
89
 
81
90
  ## Checkpoint
82
91
 
83
- After each slice: tests pass (state the command and result), acceptance criteria met, blast radius as declared. After every 23 slices: stakeholder visibility confirmed - what did they see, and what's their signal?
92
+ After each slice: tests pass (state the command and result), acceptance criteria met, blast radius as declared. After every 2-3 slices: stakeholder visibility confirmed - what did they see, and what's their signal?
84
93
 
85
94
  ## Principles
86
95
 
87
96
  - Vertical slices, always. Horizontal layers are untestable until assembled.
88
- - 100300 lines per slice. Larger means split first.
97
+ - 100-300 lines per slice. Larger means split first.
89
98
  - Every slice is independently revertible. If it isn't, the design is coupled.
90
- - Visible progress every 23 slices. Technical progress alone is trust decay.
99
+ - Visible progress every 2-3 slices. Technical progress alone is trust decay.
91
100
  - The ugly code outside your slice stays ugly. That's discipline, not laziness.
@@ -1,4 +1,4 @@
1
- # options-analysis - three paths, not one recommendation
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
 
@@ -76,11 +76,11 @@ Present the three options and the recommendation. One question to the FDE: "Whic
76
76
 
77
77
  Acme: the reconciliation job needs to survive the FDE leaving. Priya asks "so what should we do?"
78
78
 
79
- Three real paths, not a strawman set. **Safe:** keep the job, add the rota and runbook two weeks, no new failure modes, does nothing about the 47-commits/90d hotspot. **Pragmatic:** extract the settlement-matching step behind a tested interface six weeks, retires the untested hotspot, needs Raj's time and he currently opposes it. **Aggressive:** rewrite the service a quarter, fixes everything, and the same team already abandoned this once.
79
+ Three real paths, not a strawman set. **Safe:** keep the job, add the rota and runbook - two weeks, no new failure modes, does nothing about the 47-commits/90d hotspot. **Pragmatic:** extract the settlement-matching step behind a tested interface - six weeks, retires the untested hotspot, needs Raj's time and he currently opposes it. **Aggressive:** rewrite the service - a quarter, fixes everything, and the same team already abandoned this once.
80
80
 
81
81
  Same dimensions on each, so comparison is instant, and every cost carries a source: the six-week figure is churn-based, not felt.
82
82
 
83
- Recommendation: pragmatic, conditional *if* Raj is on the design, otherwise safe, because the aggressive path failed here before for exactly the reason it would fail again. `decisions.md` records the decision, who chose it, and the condition, so week 10's "why aren't we rewriting it" has an answer with a date on it.
83
+ Recommendation: pragmatic, conditional - *if* Raj is on the design, otherwise safe, because the aggressive path failed here before for exactly the reason it would fail again. `decisions.md` records the decision, who chose it, and the condition, so week 10's "why aren't we rewriting it" has an answer with a date on it.
84
84
 
85
85
  ## Principles
86
86
 
@@ -1,4 +1,4 @@
1
- # blast-radius - know what breaks before you touch it
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
 
@@ -26,7 +26,7 @@ CONTAINED → Only the module you're changing is affected
26
26
  Rollback: revert the PR
27
27
  Example: changing a utility function with no external callers
28
28
 
29
- ADJACENT → 25 callers or one downstream system affected
29
+ ADJACENT → 2-5 callers or one downstream system affected
30
30
  Rollback: revert the PR + verify downstream
31
31
  Example: changing an API response format used by the frontend
32
32
 
@@ -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 blast-radius declaration.** Before writing any code, state it explicitly in `decisions.md`:
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 blast-radius declaration, filed before the change starts. Updated if the blast radius grew during implementation.
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
- # stakeholder-radar - reading the room before it reads you
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
 
@@ -28,7 +28,7 @@ The org chart tells you who reports to whom. The stakeholder radar tells you who
28
28
 
29
29
  **3. The 48-hour rule.** A stakeholder who goes amber has roughly 48 hours before they go red. A stakeholder who goes red is already escalating above you. Respond same-day to amber signals - not with more delivery, with a conversation.
30
30
 
31
- **3b. One name per person.** If the table says "Denise Chen" and Signal history says "Denise" or "D. Chen", trust keys fork and prep lies. Consolidate to one spelling. `fde doctor` flags these identity clusters treat that as a fix, not a nit.
31
+ **3b. One name per person.** If the table says "Denise Chen" and Signal history says "Denise" or "D. Chen", trust keys fork and prep lies. Consolidate to one spelling. `fde doctor` flags these identity clusters - treat that as a fix, not a nit.
32
32
 
33
33
  **4. Detect the invisible escalation.** Three markers:
34
34
  - Questions shift from "what are you building" to "when will it be done" - someone above is asking.
@@ -76,11 +76,11 @@ One line per stakeholder who changed signal this week. If nobody changed: "Map s
76
76
 
77
77
  Acme, week 6. Priya's replies have gone from same-day to two days, and a phase-2 go/no-go is scheduled for Thursday.
78
78
 
79
- Two signals, not one feeling: response time doubled *and* a finance analyst nobody introduced started asking when the work completes. That combination is an invisible escalation someone above Priya is asking, and the meeting is already happening without the FDE.
79
+ Two signals, not one feeling: response time doubled *and* a finance analyst nobody introduced started asking when the work completes. That combination is an invisible escalation - someone above Priya is asking, and the meeting is already happening without the FDE.
80
80
 
81
- Positions: Priya is a supporter under pressure. Marco is a supporter who does not vote. Denise (finance) is the swing, and what she is protecting is not the budget line she cites it is that her team's escalation started this and she has nothing to show her own director. Raj is a firm opponent on the rewrite question, and no amount of the same argument moves him.
81
+ Positions: Priya is a supporter under pressure. Marco is a supporter who does not vote. Denise (finance) is the swing, and what she is protecting is not the budget line she cites - it is that her team's escalation started this and she has nothing to show her own director. Raj is a firm opponent on the rewrite question, and no amount of the same argument moves him.
82
82
 
83
- Sequence: Denise one-on-one Tuesday with the incident numbers in her units, then Priya Wednesday, so Priya walks in already knowing finance is not going to object. Pre-mortem sentence: *"Denise says 'we still don't know if this actually caught anything'"* which is precisely why Tuesday exists. `stakeholders.md` records `Priya | sponsor | green→amber | reply latency 1d → 2d, unintroduced analyst (Jul 3)`; `context.md` carries the sequence.
83
+ Sequence: Denise one-on-one Tuesday with the incident numbers in her units, then Priya Wednesday, so Priya walks in already knowing finance is not going to object. Pre-mortem sentence: *"Denise says 'we still don't know if this actually caught anything'"* - which is precisely why Tuesday exists. `stakeholders.md` records `Priya | sponsor | green→amber | reply latency 1d → 2d, unintroduced analyst (Jul 3)`; `context.md` carries the sequence.
84
84
 
85
85
  ## Principles
86
86
 
@@ -1,6 +1,6 @@
1
1
  # Assumptions
2
2
 
3
- <!-- Brief claims that are not yet evidence. Land seeds; assumption-audit / discover update. -->
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
  |---|------------|--------------|-------------|--------|----------|