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.
- package/AGENTS.md +1 -1
- package/README.md +132 -93
- package/adapters/AGENTS.md +2 -2
- package/adapters/GEMINI.md +2 -2
- package/adapters/LOCAL-LLM.md +3 -3
- package/adapters/README.md +1 -1
- package/adapters/copilot-instructions.md +2 -2
- package/adapters/cursor.fde.mdc +3 -3
- package/bin/check.js +66 -14
- package/bin/fde.js +16 -16
- package/bin/lib/memory.js +1 -1
- package/bin/lib/render.js +1 -1
- package/bin/lib/trust.js +1 -1
- package/mcp/README.md +3 -3
- package/mcp/fdeops-ingest/README.md +8 -8
- package/mcp/fdeops-ingest/package.json +1 -1
- package/mcp/fdeops-ingest/server.js +1 -1
- package/mcp/recipes/README.md +3 -3
- package/mcp/recipes/file.md +1 -1
- package/mcp/recipes/granola.md +5 -5
- package/mcp/recipes/notion.md +2 -2
- package/mcp/recipes/slack.md +5 -5
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/skills/fde/SKILL.md +52 -39
- package/skills/fde/references/ai.md +9 -9
- package/skills/fde/references/{exec-narrative.md → board-memo.md} +1 -1
- package/skills/fde/references/business-case.md +5 -5
- package/skills/fde/references/close.md +5 -5
- package/skills/fde/references/{ingest-connect.md → connect.md} +7 -7
- package/skills/fde/references/debrief.md +2 -2
- package/skills/fde/references/discover.md +8 -8
- package/skills/fde/references/{trust-engineering.md → earn-trust.md} +2 -2
- package/skills/fde/references/{pattern-extract.md → encode-pattern.md} +1 -1
- package/skills/fde/references/eval-pack.md +6 -6
- package/skills/fde/references/{scope-defense.md → hold-scope.md} +4 -4
- package/skills/fde/references/ingest.md +16 -16
- package/skills/fde/references/land.md +10 -10
- package/skills/fde/references/{initiative-triage.md → pick-three.md} +7 -7
- package/skills/fde/references/plan.md +9 -9
- package/skills/fde/references/{sketch.md → poc.md} +4 -4
- package/skills/fde/references/{status.md → readout.md} +10 -10
- package/skills/fde/references/red-team.md +2 -2
- package/skills/fde/references/rescue.md +1 -1
- package/skills/fde/references/review.md +7 -7
- package/skills/fde/references/{rollback-drill.md → rollback.md} +1 -1
- package/skills/fde/references/{handoff-engineering.md → runbook.md} +5 -5
- package/skills/fde/references/{use-case-scoring.md → score-use-cases.md} +4 -4
- package/skills/fde/references/ship.md +16 -16
- package/skills/fde/references/{multi-customer-ops.md → switch-clients.md} +2 -2
- package/skills/fde/references/{assumption-audit.md → test-assumptions.md} +3 -3
- package/skills/fde/references/{incremental-build.md → thin-slices.md} +22 -13
- package/skills/fde/references/{options-analysis.md → three-options.md} +3 -3
- package/skills/fde/references/{blast-radius.md → what-breaks.md} +4 -4
- package/skills/fde/references/{stakeholder-radar.md → who-decides.md} +5 -5
- package/templates/.fde/assumptions.md +1 -1
|
@@ -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
|
|
|
@@ -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
|
|
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
|
|
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
|
-
#
|
|
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 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 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
|
-
→
|
|
40
|
+
→ Characterise what is already there (their tests, their runner)
|
|
41
41
|
→ Implement the minimal working path
|
|
42
|
-
→
|
|
42
|
+
→ On-site proof (below)
|
|
43
43
|
→ Cleanup pass (dedupe, simplify - behaviour unchanged)
|
|
44
44
|
→ Self-review against acceptance criteria
|
|
45
|
-
→ Commit with
|
|
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 | 100
|
|
54
|
-
| Time to implement | 30
|
|
55
|
-
| Files touched | 1
|
|
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 2
|
|
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
|
|
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 2
|
|
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
|
-
- 100
|
|
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 2
|
|
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
|
|
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
|
|
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
|
|
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
|
-
#
|
|
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 → 2
|
|
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
|
|
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
|
|
|
@@ -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
|
|
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
|
|
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
|
|
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'"*
|
|
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;
|
|
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
|
|---|------------|--------------|-------------|--------|----------|
|