fdeops 3.15.1 → 3.15.2
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 +116 -78
- package/adapters/AGENTS.md +2 -2
- package/adapters/GEMINI.md +2 -2
- package/adapters/README.md +1 -1
- package/adapters/copilot-instructions.md +2 -2
- package/adapters/cursor.fde.mdc +3 -3
- package/bin/check.js +58 -6
- 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 +2 -2
- 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 +2 -2
- 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 +36 -23
- package/skills/fde/references/ai.md +8 -8
- package/skills/fde/references/assumption-audit.md +2 -2
- package/skills/fde/references/blast-radius.md +1 -1
- package/skills/fde/references/business-case.md +3 -3
- package/skills/fde/references/close.md +5 -5
- package/skills/fde/references/debrief.md +2 -2
- package/skills/fde/references/discover.md +7 -7
- package/skills/fde/references/eval-pack.md +6 -6
- package/skills/fde/references/handoff-engineering.md +2 -2
- package/skills/fde/references/incremental-build.md +20 -11
- package/skills/fde/references/ingest-connect.md +6 -6
- package/skills/fde/references/ingest.md +14 -14
- package/skills/fde/references/initiative-triage.md +6 -6
- package/skills/fde/references/land.md +8 -8
- package/skills/fde/references/multi-customer-ops.md +1 -1
- package/skills/fde/references/options-analysis.md +2 -2
- package/skills/fde/references/plan.md +6 -6
- package/skills/fde/references/red-team.md +2 -2
- package/skills/fde/references/review.md +7 -7
- package/skills/fde/references/scope-defense.md +3 -3
- package/skills/fde/references/ship.md +16 -16
- package/skills/fde/references/sketch.md +3 -3
- package/skills/fde/references/stakeholder-radar.md +4 -4
- package/skills/fde/references/status.md +8 -8
- package/skills/fde/references/trust-engineering.md +1 -1
- package/skills/fde/references/use-case-scoring.md +1 -1
|
@@ -47,7 +47,7 @@ Score each dimension green/amber/red. This is the gate, not a suggestion:
|
|
|
47
47
|
| Dimension | Green | Amber | Red |
|
|
48
48
|
|-----------|-------|-------|-----|
|
|
49
49
|
| **Value bucket** | `success.md` names primary bucket (`cost-save` \| `risk-mitigation` \| `revenue-uplift`) and a baseline→target metric; this slice’s value-ledger row has **Bucket** + **Promised** | Bucket named; **Measured** still `pending` with a pulse date | No bucket, or Promised empty / ticket-theater only |
|
|
50
|
-
| **Audit receipt** | Dated line in `delivery.md` (`## Ship receipts` or ledger Evidence) proving exceptions/operating path were walked
|
|
50
|
+
| **Audit receipt** | Dated line in `delivery.md` (`## Ship receipts` or ledger Evidence) proving exceptions/operating path were walked - cite `terrain.md` / `reality.md` / `audit.md` | Path described, not verified this ship | No audit receipt for this slice |
|
|
51
51
|
| **Eval receipt** | **n/a** (no AI on this slice) **or** `evals.md` Verdict SHIP with dated golden run + HITL gate named | Eval pack exists; known fails open with owner + date | AI in scope and no eval receipt |
|
|
52
52
|
| **AI eval pack** | `.fde/evals.md` Verdict SHIP; goldens run this change; critical fails 0; HITL filled if policy requires | Pack exists; run stale vs change log | AI-touching deploy and pack missing / NO-SHIP / HITL required but empty |
|
|
53
53
|
|
|
@@ -59,13 +59,13 @@ Score each dimension green/amber/red. This is the gate, not a suggestion:
|
|
|
59
59
|
2. If Verdict is not **SHIP**, or Last run is older than the latest change-log row → **RED.**
|
|
60
60
|
3. If `trust-profile.md` requires human-in-the-loop and the HITL gate has no reviewer → **RED.**
|
|
61
61
|
4. Log in `delivery.md` → `## Ship receipts` before deploy: audit cite + eval receipt.
|
|
62
|
-
5. Non-AI deploys: Eval = **n/a**
|
|
62
|
+
5. Non-AI deploys: Eval = **n/a** - do not invent an empty pack.
|
|
63
63
|
|
|
64
64
|
Write the readiness score (including value + receipts) to `delivery.md` before deploying. The score is the evidence if anything goes wrong.
|
|
65
65
|
|
|
66
66
|
## Intent vs diff (before pre-blast)
|
|
67
67
|
|
|
68
|
-
Ship the change you intended
|
|
68
|
+
Ship the change you intended - not the drift that snuck in. Run this on the deploy branch against the **one-line intent** from `decisions.md` / `success.md` (the slice you said you were building).
|
|
69
69
|
|
|
70
70
|
```bash
|
|
71
71
|
git diff <base>...HEAD --stat
|
|
@@ -77,22 +77,22 @@ Score every touched path (or logical hunk):
|
|
|
77
77
|
| Path / change | Verdict | Rule |
|
|
78
78
|
|---------------|---------|------|
|
|
79
79
|
| | **KEEP** | Directly required for the stated intent |
|
|
80
|
-
| | **JUSTIFY** | Adjacent but load-bearing
|
|
81
|
-
| | **SPLIT** | Real work, wrong PR
|
|
82
|
-
| | **DROP** | Noise (format-only, drive-by rename, unrelated tidy)
|
|
80
|
+
| | **JUSTIFY** | Adjacent but load-bearing - one sentence why it must ship *now*, or split |
|
|
81
|
+
| | **SPLIT** | Real work, wrong PR - park in `decisions.md` kill/Next; do not deploy with this slice |
|
|
82
|
+
| | **DROP** | Noise (format-only, drive-by rename, unrelated tidy) - revert before ship |
|
|
83
83
|
|
|
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
|
|
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-defense`). Same family as review Stage 1
|
|
86
|
+
This is **code drift**, not stakeholder "also can you…" (that is `scope-defense`). 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
|
|
|
90
|
-
For any non-trivial go-live (shared infra, regulated data, irreversible migration, or first prod touch), run this once before canary
|
|
90
|
+
For any non-trivial go-live (shared infra, regulated data, irreversible migration, or first prod touch), run this once before canary - not as theater, as a stop-the-line check:
|
|
91
91
|
|
|
92
92
|
```
|
|
93
93
|
CLAIM: <what you are about to ship, in one sentence>
|
|
94
94
|
WHY IT MATTERS: <blast radius / who feels pain if wrong>
|
|
95
|
-
CHALLENGE: <the strongest argument this is not ready
|
|
95
|
+
CHALLENGE: <the strongest argument this is not ready - grounded in delivery.md / risks.md / trust-profile.md>
|
|
96
96
|
VERDICT: proceed | fix-first | sponsor conversation
|
|
97
97
|
```
|
|
98
98
|
|
|
@@ -116,11 +116,11 @@ grep -rnE "(api[_-]?key|secret|password|token)\s*[:=]\s*['\"][^'\"]{8,}" \
|
|
|
116
116
|
|
|
117
117
|
## Method - the deploy
|
|
118
118
|
|
|
119
|
-
**Canary:** 1
|
|
119
|
+
**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.
|
|
120
120
|
|
|
121
121
|
**Programme-scale rollout (transformations)** - different problem from one service:
|
|
122
122
|
1. **Pilot** - one team, one use case; success metrics defined *before* it starts (after = fitting metrics to results).
|
|
123
|
-
2. **Limited release** - 3
|
|
123
|
+
2. **Limited release** - 3-5 teams, real load; this is where the failure modes the pilot hid show up.
|
|
124
124
|
3. **Broad release** - self-serve onboarding; if teams still need the FDE to start, onboarding isn't finished.
|
|
125
125
|
4. **Enterprise standard** - the FDE is no longer needed for this use case. That's the end state.
|
|
126
126
|
Straight from pilot to standard = a high-profile failure at scale.
|
|
@@ -156,7 +156,7 @@ AI components: also define what *normal output* looks like and check a weekly sa
|
|
|
156
156
|
|
|
157
157
|
**The scale sequence:**
|
|
158
158
|
1. **Pilot** (1 team, controlled) → prove value, find failure modes
|
|
159
|
-
2. **Limited** (3
|
|
159
|
+
2. **Limited** (3-5 teams, real load) → prove operability, find scale bugs
|
|
160
160
|
3. **Broad** (self-serve onboarding) → prove the team doesn't need the FDE
|
|
161
161
|
4. **Standard** (enterprise default) → the FDE exits this workstream
|
|
162
162
|
|
|
@@ -172,7 +172,7 @@ Adoption isn't a handoff-stage problem - it starts during build. Software that l
|
|
|
172
172
|
- **Resistance signals.** Watch for: workaround creation (they built a spreadsheet instead of using the tool), drop-off after day 3 (onboarding fails), vocal detractors (one influential skeptic can kill adoption). Address these DURING build, not after launch.
|
|
173
173
|
|
|
174
174
|
**At launch:**
|
|
175
|
-
- **Champion network.** Identify 2
|
|
175
|
+
- **Champion network.** Identify 2-3 power users per team who adopt early. Support them intensely - they become your multiplier.
|
|
176
176
|
- **30-60-90 adoption targets.** Week 1: 20% of target users try it. Week 4: 50% use it weekly. Week 12: 80% can't imagine working without it. If week 1 misses → the onboarding is broken. If week 4 misses → the value proposition is wrong.
|
|
177
177
|
- **The "switching cost" test.** If users can still do it the old way, they will. Adoption requires either: the old way is removed, the new way is dramatically better, or management mandates the switch. Know which lever applies.
|
|
178
178
|
|
|
@@ -190,9 +190,9 @@ Before 100%: canary clean, business metric verified, pulse written into `deliver
|
|
|
190
190
|
|
|
191
191
|
Acme, shipping the failure-routing slice into a payments environment on a Thursday.
|
|
192
192
|
|
|
193
|
-
Readiness scoring catches two things the diff does not. The audit receipt is missing: the operating map says Marco's manual re-run is the fallback, and nobody has checked whether the new page fires *before* his morning run or after
|
|
193
|
+
Readiness scoring catches two things the diff does not. The audit receipt is missing: the operating map says Marco's manual re-run is the fallback, and nobody has checked whether the new page fires *before* his morning run or after - if after, the alert changes nothing. That gets walked and cited before deploy. Second, the intent-vs-diff read shows the PR also touches the settlement retry that was deferred in build; it comes out.
|
|
194
194
|
|
|
195
|
-
Pre-blast challenge: "what does this break if it fires at 3am and nobody acks?" Answer: nothing breaks, but the rota is not yet agreed
|
|
195
|
+
Pre-blast challenge: "what does this break if it fires at 3am and nobody acks?" Answer: nothing breaks, but the rota is not yet agreed - so the deploy waits on a name, not on code. That is a one-day slip that prevents a fake green.
|
|
196
196
|
|
|
197
197
|
After deploy: `delivery.md` ship receipt with the audit cite, the kill test evidence, and the rollback line. Eval receipt: n/a, no AI in this path.
|
|
198
198
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# sketch - prototype to kill or confirm a direction
|
|
2
2
|
|
|
3
|
-
**Enter when:** a direction needs validating before committing real build time - show something, de-risk, pick between use cases.
|
|
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
5
|
**Read first:** `context.md`, `reality.md`. Load `terrain.md` only if the prototype touches the existing codebase.
|
|
6
6
|
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
**1. Pick by score when several use cases compete.** Use the scoring model from `discover.md` - (Value × Data readiness) / Complexity. If discover already scored, reuse; never re-score independently.
|
|
12
12
|
|
|
13
|
-
**2. Build the minimum that tests the assumption.** No error handling, no
|
|
13
|
+
**2. Build the minimum that tests the assumption.** No error handling, no polish. Same-day demo if possible. Rough is honest. The POC is done when the person who can say no has seen it and reacted, not when the code looks finished.
|
|
14
14
|
|
|
15
15
|
**3. AI directions - test these before anything else:**
|
|
16
16
|
- Data: available, clean, sufficient volume? Synthetic-data prototypes say nothing about production behaviour.
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
|
|
21
21
|
**4. Kill it immediately if:** the assumption is disproven · the customer ignores it (indifference is a signal, not neutrality) · 3 iterations and feedback isn't converging · it works but the customer can't explain or trust the output (unexplainable AI in a high-stakes context is not a solution). When killed: write down what was *learned*, not what was built. The learning is the asset.
|
|
22
22
|
|
|
23
|
-
**5. Translate to business language** once validated: problem solved, cost of inaction, success in numbers, 2
|
|
23
|
+
**5. Translate to business language** once validated: problem solved, cost of inaction, success in numbers, 2-3 trade-offs. Three sentences max for the stakeholder - can't say it in three, don't understand it yet.
|
|
24
24
|
|
|
25
25
|
## Artifact
|
|
26
26
|
|
|
@@ -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
|
|
|
@@ -6,16 +6,16 @@
|
|
|
6
6
|
|
|
7
7
|
## Method (you do this work)
|
|
8
8
|
|
|
9
|
-
**First:** run `fde status`. It prints the value ledger before trust
|
|
9
|
+
**First:** run `fde status`. It prints the value ledger before trust - promised → measured → accepted by, or `claimed, not yet accepted`. Those lines are the Situation. Do not invent a number the CLI did not print.
|
|
10
10
|
|
|
11
11
|
**Always draft in SCQA.** One page maximum. No other shape.
|
|
12
12
|
|
|
13
13
|
| Block | What to write | Source |
|
|
14
14
|
|-------|---------------|--------|
|
|
15
|
-
| **S
|
|
16
|
-
| **C
|
|
17
|
-
| **Q
|
|
18
|
-
| **A
|
|
15
|
+
| **S - Situation** | Where we are against `success.md`, in their words | success.md, delivery value ledger |
|
|
16
|
+
| **C - Complication** | What changed, what is at risk, or what we learned (bad news first) | risks.md, assumptions DISPROVED/OPEN, stakeholders signal |
|
|
17
|
+
| **Q - Question / Ask** | The one decision or help you need from them | decisions.md, access/sign-off needs |
|
|
18
|
+
| **A - Answer** | What you recommend / what happens next week (≤3 bullets) | plan Now lane, delivery promised→measured |
|
|
19
19
|
|
|
20
20
|
Then add, still on the same page:
|
|
21
21
|
1. **Value this week** - from the value ledger: promised → measured (or "pending") → **accepted by whom**, with evidence citation. A measured number nobody on the customer side has agreed to is written as `claimed`, and the Ask never rests on it - if the whole case for the next phase is a claimed number, the real ask this week is "who signs off that this is real?".
|
|
@@ -36,7 +36,7 @@ Append the draft to `delivery.md` under `## Status - <date>` using the SCQA head
|
|
|
36
36
|
**C:** ...
|
|
37
37
|
**Q:** ...
|
|
38
38
|
**A:** ...
|
|
39
|
-
**Value ledger:** promised … / measured … / accepted by … (evidence)
|
|
39
|
+
**Value ledger:** promised … / measured … / accepted by … (evidence) - or `claimed, unaccepted`
|
|
40
40
|
**Kill list reminder:** …
|
|
41
41
|
**Hostile Qs:** 1) … 2) … 3) …
|
|
42
42
|
```
|
|
@@ -49,9 +49,9 @@ Walk the FDE through the Complication and the Ask - confirm the framing matches
|
|
|
49
49
|
|
|
50
50
|
Acme, week 3, Priya's Friday update.
|
|
51
51
|
|
|
52
|
-
**S:** failure routing is live; detection is 12 min against the 4h baseline in `success.md`. **C** leads with the bad news, not the win: the second incident was acked 40 minutes late because the rota has one name on it, and that name was on leave. **Q:** one ask
|
|
52
|
+
**S:** failure routing is live; detection is 12 min against the 4h baseline in `success.md`. **C** leads with the bad news, not the win: the second incident was acked 40 minutes late because the rota has one name on it, and that name was on leave. **Q:** one ask - a second name on the rota by Wednesday. **A:** three bullets, top of the Now lane.
|
|
53
53
|
|
|
54
|
-
Value ledger line: `promised 4h → 15min / measured 12min over 2 incidents / accepted by
|
|
54
|
+
Value ledger line: `promised 4h → 15min / measured 12min over 2 incidents / accepted by - (Marco confirmed operationally, finance not yet)` → written as `claimed, unaccepted`, which is what makes the Ask honest rather than a victory lap.
|
|
55
55
|
|
|
56
56
|
Hostile Q prep, from memory not imagination: "why did we pay for alerting we already had?" → the receipt from `decisions.md` and the disabled-alerting finding in `reality.md`. Kill list reminder: the service rewrite is still deferred, accepted by Priya on Jun 12.
|
|
57
57
|
|
|
@@ -66,7 +66,7 @@ Mistakes happen. What matters is speed and honesty:
|
|
|
66
66
|
**`trust-profile.md`** - updated sections:
|
|
67
67
|
```markdown
|
|
68
68
|
## Trust level
|
|
69
|
-
Current: <level 0
|
|
69
|
+
Current: <level 0-5> as of <date>
|
|
70
70
|
Evidence: <what earned this level>
|
|
71
71
|
Next target: <level> - requires: <specific action>
|
|
72
72
|
|
|
@@ -10,7 +10,7 @@ The most dangerous moment in a multi-use-case engagement is when the technically
|
|
|
10
10
|
|
|
11
11
|
**1. List every candidate.** From the brief, from discovery conversations, from the FDE's own observations. Include the ones the customer hasn't said aloud but the codebase implies - a high-churn module with no tests is a candidate even if nobody named it.
|
|
12
12
|
|
|
13
|
-
**2. Score on five dimensions.** Each 1
|
|
13
|
+
**2. Score on five dimensions.** Each 1-5, with the scoring rubric below:
|
|
14
14
|
|
|
15
15
|
| Dimension | 1 | 3 | 5 |
|
|
16
16
|
|-----------|---|---|---|
|