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,8 +1,8 @@
|
|
|
1
1
|
# ingest - pull large artifacts into the fieldbook loop
|
|
2
2
|
|
|
3
|
-
**Enter when:** the FDE wants to catch the engagement up from external sources
|
|
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
|
|
|
5
|
-
**Connect / capability (different entry):** "connect a new MCP", "connect Granola/Slack/Notion", "what can you pull?" → `references/
|
|
5
|
+
**Connect / capability (different entry):** "connect a new MCP", "connect Granola/Slack/Notion", "what can you pull?" → `references/connect.md` first. Recipes: `mcp/recipes/` (file, granola, slack, notion).
|
|
6
6
|
|
|
7
7
|
**Read first:** `context.md` (what's already logged, what's stale). Bind the engagement before staging anything.
|
|
8
8
|
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
## Honest contract (read once)
|
|
12
12
|
|
|
13
13
|
- FDEOps owns the **sink only**: stage raw pulls → propose → confirm → apply. Nothing writes `.fde/` unreviewed.
|
|
14
|
-
- **Source MCPs are the FDE's.** Granola, Slack, Notion, Gmail, custom
|
|
14
|
+
- **Source MCPs are the FDE's.** Granola, Slack, Notion, Gmail, custom - whatever they configured in Cursor/Claude. fdeops does not bundle OAuth, connectors, or ambient sync, and **does not push** to those tools.
|
|
15
15
|
- Prefer **`fde ingest` in this bound workspace.** Optional `fdeops-ingest` MCP: pass `engagement` (path to `.fde/` from `fde resume --bind`) because MCP cwd often is not the client workspace.
|
|
16
16
|
- The core `fde` CLI stays local (git + file reads). Source credentials live with that MCP; fdeops never stores them.
|
|
17
17
|
- After apply, raw stays in `.inbox/`; the system of record (`.fde/`) stays thin dated facts.
|
|
@@ -20,20 +20,20 @@
|
|
|
20
20
|
|
|
21
21
|
List what you can actually call **this session**:
|
|
22
22
|
|
|
23
|
-
1. **Sink**
|
|
24
|
-
2. **Sources**
|
|
25
|
-
3. Tell the FDE in one line: *I can pull from X; Y is not connected.* If they asked to pull Y and it is missing → switch to `
|
|
23
|
+
1. **Sink** - `ingest_stage` / `fde ingest` available?
|
|
24
|
+
2. **Sources** - which fetch tools exist (Granola-shaped, Slack, Notion, Drive, file-only)?
|
|
25
|
+
3. Tell the FDE in one line: *I can pull from X; Y is not connected.* If they asked to pull Y and it is missing → switch to `connect.md`. Never pretend a source exists.
|
|
26
26
|
|
|
27
27
|
## Ground loop (you do this work)
|
|
28
28
|
|
|
29
|
-
1. **Bind** the engagement (`fde resume` / registry). If multiple meetings or threads could apply, ask **one** clarifying question
|
|
29
|
+
1. **Bind** the engagement (`fde resume` / registry). If multiple meetings or threads could apply, ask **one** clarifying question - which meeting, which thread, which date range.
|
|
30
30
|
2. **Capability check** (above). Then **fetch** via available source MCP(s). You pull; the CLI does not reach the network.
|
|
31
|
-
3. **Stage**
|
|
32
|
-
4. **List** (optional)
|
|
33
|
-
5. **Propose**
|
|
34
|
-
6. **Rewrite prefixes**
|
|
31
|
+
3. **Stage** - `fde ingest stage [--source NAME] [--title TEXT] [file|-]` writes raw text into `<engagement>/.inbox/` (outside the memory git ledger).
|
|
32
|
+
4. **List** (optional) - `fde ingest list` shows staged items when you need an id or filename.
|
|
33
|
+
5. **Propose** - `fde ingest propose <id-or-filename>` runs the debrief `--smart` path on the staged body (+ provenance line). Opens `.debrief-propose`.
|
|
34
|
+
6. **Rewrite prefixes** - same as debrief: lines without `decision:` / `risk:` / `delivery:` / `contact:` / `next:` need **you** to rewrite before showing the FDE. `--smart` is a gate, not a brain.
|
|
35
35
|
7. **Show** the proposed routing in plain language. Wait for confirm.
|
|
36
|
-
8. **Apply**
|
|
36
|
+
8. **Apply** - on FDE confirm only → `fde ingest apply` (= `fde debrief --apply`). On reject → stop; ask what to change.
|
|
37
37
|
|
|
38
38
|
No invented names, meetings, or quotes. If the propose looks wrong, fix prefixes with judgment, then re-show before apply.
|
|
39
39
|
|
|
@@ -41,7 +41,7 @@ No invented names, meetings, or quotes. If the propose looks wrong, fix prefixes
|
|
|
41
41
|
|
|
42
42
|
| Path | Role |
|
|
43
43
|
|------|------|
|
|
44
|
-
| `~/fde-engagements/<slug>/.inbox/` | Staging for raw pulls. Not the memory ledger. NDA surface
|
|
44
|
+
| `~/fde-engagements/<slug>/.inbox/` | Staging for raw pulls. Not the memory ledger. NDA surface - same home tree as `.fde/`. |
|
|
45
45
|
| `~/fde-engagements/<slug>/.fde/` | System of record (unchanged contract). |
|
|
46
46
|
| `.fde/.debrief-propose` | Propose file (shared with debrief). |
|
|
47
47
|
|
|
@@ -56,15 +56,15 @@ fde ingest apply
|
|
|
56
56
|
|
|
57
57
|
## Provenance
|
|
58
58
|
|
|
59
|
-
When a staged fact came from a named source, carry `via:<source>` on the applied line where useful (e.g. `via:granola`, `via:gmail`). Helps receipts and sponsor disputes later
|
|
59
|
+
When a staged fact came from a named source, carry `via:<source>` on the applied line where useful (e.g. `via:granola`, `via:gmail`). Helps receipts and sponsor disputes later - not mandatory on every context line.
|
|
60
60
|
|
|
61
61
|
## MCP sink + recipes
|
|
62
62
|
|
|
63
|
-
Optional `mcp/fdeops-ingest` wraps the same verbs over stdio. Source MCPs remain separate
|
|
63
|
+
Optional `mcp/fdeops-ingest` wraps the same verbs over stdio. Source MCPs remain separate - the FDE adds whichever fetch tools they trust. Setup coach: `connect.md`. Copy-paste recipes: `mcp/recipes/`.
|
|
64
64
|
|
|
65
65
|
## Checkpoint
|
|
66
66
|
|
|
67
|
-
Before apply, read back the 2
|
|
67
|
+
Before apply, read back the 2-3 most consequential captures in one breath - same as debrief. Confirm which sources you staged and what would land in the record. Then stop.
|
|
68
68
|
|
|
69
69
|
## Principles
|
|
70
70
|
|
|
@@ -20,18 +20,18 @@ State your read, let the FDE correct, then land.
|
|
|
20
20
|
|
|
21
21
|
## Brief interrogation (only when the brief is thin)
|
|
22
22
|
|
|
23
|
-
Use this when the ask is conventional or underspecified
|
|
23
|
+
Use this when the ask is conventional or underspecified - missing who decides, why now, what success looks like, or the binding constraint. **Do not** run it when the FDE already gave a clear brief, is mid-flow, or asked for speed over verification.
|
|
24
24
|
|
|
25
|
-
Format
|
|
25
|
+
Format - one question at a time, with a guess the FDE can correct:
|
|
26
26
|
|
|
27
27
|
```
|
|
28
|
-
READ: <one sentence
|
|
29
|
-
CONFIDENCE: ~NN%
|
|
28
|
+
READ: <one sentence - what you think they actually need>
|
|
29
|
+
CONFIDENCE: ~NN% - missing: <what still blocks a safe start>
|
|
30
30
|
Q: <one focused question>
|
|
31
31
|
GUESS: <your best answer, so they can push back fast>
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
Wait for the reaction before the next question. Stop when confidence is high enough to write `success.md` without inventing names, or when the FDE says move on. Every answer that is still unknown stays `unknown - ask:` in the artifact
|
|
34
|
+
Wait for the reaction before the next question. Stop when confidence is high enough to write `success.md` without inventing names, or when the FDE says move on. Every answer that is still unknown stays `unknown - ask:` in the artifact - never fill the gap with a plausible stakeholder.
|
|
35
35
|
|
|
36
36
|
## Method - part 1: interrogate the brief (you do this work)
|
|
37
37
|
|
|
@@ -65,7 +65,7 @@ Let silence sit. If their fear doesn't match the written brief, the brief is wro
|
|
|
65
65
|
- **The previous attempt** - "we tried something similar last year" is the most important sentence in the first meeting. Who was involved? Still there and protective, or gone because of it?
|
|
66
66
|
- **The passed-over internal team** - they know exactly what's wrong, and they resent the FDE's presence. Find them before the first standup, ask what they tried, use their language in every meeting. Make them look right and they protect you; ignore them and they wait for the mistake.
|
|
67
67
|
- **The sacred thing** - "Is there anything in this environment I should treat as untouchable?" The hesitation before the answer is the answer.
|
|
68
|
-
- **Exception path (operating map seed)** - "When the happy path breaks this week, what do people actually do
|
|
68
|
+
- **Exception path (operating map seed)** - "When the happy path breaks this week, what do people actually do - who do they call, what spreadsheet opens, what do they skip?" Capture the break → workaround → who owns it. Do not build a full map on day 1; seed rows later in `terrain.md` → `## Operating map (exception-led)` during discover. Unknowns stay `unknown - ask:`.
|
|
69
69
|
- **AI posture and policy** - tools already in use (sanctioned or shadow), and: "Does your organisation have a policy on AI-generated code? Are there decisions where you would not be comfortable with AI involvement?"
|
|
70
70
|
- **Boundaries in multi-vendor rooms** - who owns what surface, who signs off before a change crosses it.
|
|
71
71
|
|
|
@@ -99,7 +99,7 @@ If `stakeholders.md` already has a `## Signal history` section (it does from the
|
|
|
99
99
|
|
|
100
100
|
**`trust-profile.md`** - sacred data (`<private>` tagged), fears heard, AI policy, approval chain. Sensitive: skip for status reads; use CLI/redacted surfaces; never paste raw `<private>` into prompts or subagents.
|
|
101
101
|
|
|
102
|
-
**`assumptions.md`** - seed every unverified claim from the brief (and the day-1 hypothesis) as rows with blast radius CRITICAL / LOAD-BEARING / CONVENIENCE and status `OPEN`. Do not wait for
|
|
102
|
+
**`assumptions.md`** - seed every unverified claim from the brief (and the day-1 hypothesis) as rows with blast radius CRITICAL / LOAD-BEARING / CONVENIENCE and status `OPEN`. Do not wait for test-assumptions - land makes the register exist. Example:
|
|
103
103
|
|
|
104
104
|
```markdown
|
|
105
105
|
| # | Assumption | Blast radius | How we test | Status | Evidence |
|
|
@@ -107,7 +107,7 @@ If `stakeholders.md` already has a `## Signal history` section (it does from the
|
|
|
107
107
|
| 1 | <claim from brief> | CRITICAL | <cheapest falsifying test> | OPEN | (stated, unverified) |
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
-
One falsifiable hypothesis about the real problem also goes at the bottom of `brief.md` - discover /
|
|
110
|
+
One falsifiable hypothesis about the real problem also goes at the bottom of `brief.md` - discover / test-assumptions will test it.
|
|
111
111
|
|
|
112
112
|
## Checkpoint
|
|
113
113
|
|
|
@@ -119,9 +119,9 @@ If remote: trust-building takes ~40% longer - push for a short video call before
|
|
|
119
119
|
|
|
120
120
|
Kickoff at Acme payments. Priya (VP Eng) sponsors; the brief says "add monitoring to the reconciliation service."
|
|
121
121
|
|
|
122
|
-
Asking what happens the week after a perfect delivery gets: "I stop hearing about it from finance." That is the real success statement
|
|
122
|
+
Asking what happens the week after a perfect delivery gets: "I stop hearing about it from finance." That is the real success statement - not monitoring. The previous attempt surfaces too: the platform team built alerting last year, it was turned off. Raj, who built it, is still there and was not in the kickoff - the passed-over team, found on day 1 rather than at the first standup.
|
|
123
123
|
|
|
124
|
-
What gets written: `success.md` with bucket `risk-mitigation`, `reconciliation failures reach a named owner within 15 min (baseline: 4h, found by finance)`, gaming check `alerting on everything so nobody reads them` → guard `≤2 alerts/week, acked by name`, sign-off Priya. `brief.md` carries the gap list and the hypothesis: *the job is not unmonitored, it is unowned*. `assumptions.md` seeds `"finance would act on an alert"
|
|
124
|
+
What gets written: `success.md` with bucket `risk-mitigation`, `reconciliation failures reach a named owner within 15 min (baseline: 4h, found by finance)`, gaming check `alerting on everything so nobody reads them` → guard `≤2 alerts/week, acked by name`, sign-off Priya. `brief.md` carries the gap list and the hypothesis: *the job is not unmonitored, it is unowned*. `assumptions.md` seeds `"finance would act on an alert" - CRITICAL - OPEN - (stated, unverified)`. `trust-profile.md` records the sacred thing Priya hesitated before naming.
|
|
125
125
|
|
|
126
126
|
Day-1 deliverable: fix the log line that swallows the job's exit code. Small, visible, in their environment.
|
|
127
127
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# pick-three - when 20 things are "urgent," pick the 3 that matter
|
|
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
|
|
|
@@ -29,15 +29,15 @@ Notice: every stakeholder's initiative is P0 or P1. That's the problem this skil
|
|
|
29
29
|
| **Dependency** | How many other initiatives are blocked waiting for this? | 0 (standalone) → 5 (critical path for 3+ others) |
|
|
30
30
|
| **Cost of delay** | What happens each week this doesn't ship? | 1 (nothing) → 5 (measurable loss or regulatory exposure) |
|
|
31
31
|
|
|
32
|
-
**Triage score = Impact + Dependency + Cost of delay** (simple sum, 3
|
|
32
|
+
**Triage score = Impact + Dependency + Cost of delay** (simple sum, 3-15 range).
|
|
33
33
|
|
|
34
34
|
**3. Sort into three lanes:**
|
|
35
35
|
|
|
36
36
|
| Lane | Score | Action |
|
|
37
37
|
|------|-------|--------|
|
|
38
|
-
| **Now** (max 3) | 11
|
|
39
|
-
| **Next** (max 5) | 7
|
|
40
|
-
| **Later** (unlimited) | 3
|
|
38
|
+
| **Now** (max 3) | 11-15 | Active work this phase. FDE and team capacity allocated. |
|
|
39
|
+
| **Next** (max 5) | 7-10 | Sequenced for the following phase. Dependencies tracked but not started. |
|
|
40
|
+
| **Later** (unlimited) | 3-6 | Captured, not committed. Revisit at next triage. |
|
|
41
41
|
|
|
42
42
|
**The cap matters.** "Now" has exactly 3 slots. Not 4, not "3 plus this small one." Discipline is the product.
|
|
43
43
|
|
|
@@ -51,8 +51,8 @@ Notice: every stakeholder's initiative is P0 or P1. That's the problem this skil
|
|
|
51
51
|
|
|
52
52
|
| Engagement type | Triage frequency | Trigger for emergency re-triage |
|
|
53
53
|
|----------------|-----------------|-------------------------------|
|
|
54
|
-
| Sprint (1
|
|
55
|
-
| Standard (1
|
|
54
|
+
| Sprint (1-2 weeks) | Once, at plan | Crisis or sponsor change |
|
|
55
|
+
| Standard (1-4 weeks) | Weekly | New P0 from sponsor |
|
|
56
56
|
| Programme (months) | Bi-weekly | Quarterly review, team change, market shift |
|
|
57
57
|
|
|
58
58
|
**6. Communicate the triage result.** The output is not just a priority list - it's a commitment:
|
|
@@ -2,7 +2,7 @@
|
|
|
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
|
|
|
5
|
-
**Read first:** `reality.md`, `success.md`, `terrain.md`, `stakeholders.md`. Load `business-case.md` if
|
|
5
|
+
**Read first:** `reality.md`, `success.md`, `terrain.md`, `stakeholders.md`. Load `business-case.md` if poc produced one. Not the full folder.
|
|
6
6
|
|
|
7
7
|
## Validation gate (confirm understanding, clarify where it elevates)
|
|
8
8
|
|
|
@@ -22,7 +22,7 @@ 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 `assumptions.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
|
|
25
|
+
**0. Lock scope first.** Read `success.md` and `assumptions.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.
|
|
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
|
|
|
@@ -30,13 +30,13 @@ An FDE plan is not a sprint backlog. The technical sequence is the easy part. Th
|
|
|
30
30
|
|
|
31
31
|
**3. Slice vertically.** Each task delivers something visible and testable end to end ("user submits form, sees it saved"), never a horizontal layer ("build the database layer").
|
|
32
32
|
|
|
33
|
-
**4. Size to 30
|
|
33
|
+
**4. Size to 30-90 minutes, PR-sized.** Longer = two tasks. Each task implementable, testable, reviewable without a thousand-line diff.
|
|
34
34
|
|
|
35
35
|
**5. AI components get explicit eval tasks.** "Output validated on 50 real production examples," "fallback tested under model unavailability," "inputs/outputs logging to <destination>" - these are pre-conditions of shipping, in the plan before build starts.
|
|
36
36
|
|
|
37
|
-
**6. Stakeholder touchpoints every 2
|
|
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 slices (same discipline as
|
|
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 slices (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
|
|
|
@@ -83,7 +83,7 @@ Every FDE gets asked this in week one. The honest answer is a range, not a numbe
|
|
|
83
83
|
2. **Expected case** - normal friction: one discovery changes the plan, one integration takes longer, one approval cycle stalls. This is what to plan against.
|
|
84
84
|
3. **Worst case** - a major unknown surfaces, a dependency fails, a key person is unavailable. This is what to protect against.
|
|
85
85
|
|
|
86
|
-
**Present as:** "2
|
|
86
|
+
**Present as:** "2-4 weeks expected, could stretch to 6 if [named risk]." Never give one number.
|
|
87
87
|
|
|
88
88
|
**The sizing table:**
|
|
89
89
|
|
|
@@ -135,9 +135,9 @@ Never quietly update tasks. Name the reset: update `reality.md` and `success.md`
|
|
|
135
135
|
|
|
136
136
|
Acme, after discover: the reconciliation job is unowned, Marco's spreadsheet is the real fallback.
|
|
137
137
|
|
|
138
|
-
**Now** is three tasks, not eight. Task 1 is *failures reach a named human*
|
|
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`.
|
|
139
139
|
|
|
140
|
-
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
|
|
140
|
+
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
141
|
|
|
142
142
|
First visible slice goes to Marco, not Priya: he is the one whose morning changes, and his confirmation is what makes the sponsor update true.
|
|
143
143
|
|
|
@@ -145,7 +145,7 @@ First visible slice goes to Marco, not Priya: he is the one whose morning change
|
|
|
145
145
|
|
|
146
146
|
- Plan from success backwards, not from today forwards.
|
|
147
147
|
- Fragile zones early. Fail fast.
|
|
148
|
-
- Every 2
|
|
148
|
+
- Every 2-3 tasks, a stakeholder touchpoint. Trust decays without visibility.
|
|
149
149
|
- No written acceptance criteria, no build.
|
|
150
150
|
- No kill list, no finished plan.
|
|
151
151
|
- Estimates are ranges, not promises. Name the assumptions.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
#
|
|
1
|
+
# poc - kill or confirm a direction in a day
|
|
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
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# readout - the sponsor update that keeps the engagement alive
|
|
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
|
|
|
@@ -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?".
|
|
@@ -24,7 +24,7 @@ Then add, still on the same page:
|
|
|
24
24
|
|
|
25
25
|
Exec voice: no jargon, no hedging, every claim traceable (`(shipped Tue, delivery.md)`). Draft in the **FDE's voice, for the FDE to send** - never send anything yourself.
|
|
26
26
|
|
|
27
|
-
For board / renewal / sponsor's boss (longer pyramid): use `
|
|
27
|
+
For board / renewal / sponsor's boss (longer pyramid): use `board-memo.md`. Do not invent a second weekly format.
|
|
28
28
|
|
|
29
29
|
## Artifact
|
|
30
30
|
|
|
@@ -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
|
|
|
@@ -28,10 +28,10 @@ You are not a helpful peer right now. You are the skeptical senior who has seen
|
|
|
28
28
|
```
|
|
29
29
|
CLAIM: <the position under test, one sentence>
|
|
30
30
|
WHY IT MATTERS: <credibility / time / engagement risk if wrong>
|
|
31
|
-
CHALLENGE: <your strongest counter
|
|
31
|
+
CHALLENGE: <your strongest counter - specific names/dates from .fde/ only>
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
Wait for their defense. Score it SOLID / THIN / EXPOSED (same scale as step 5). Only then widen into the five angles. If the claim collapses here, stop
|
|
34
|
+
Wait for their defense. Score it SOLID / THIN / EXPOSED (same scale as step 5). Only then widen into the five angles. If the claim collapses here, stop - the kill list is already clear.
|
|
35
35
|
|
|
36
36
|
**3. Attack from five angles.** Every plan has five failure surfaces. Hit each one:
|
|
37
37
|
|
|
@@ -46,7 +46,7 @@ Customers remember who told them the truth before it cost them money.
|
|
|
46
46
|
|
|
47
47
|
## D. Pivot - the whole direction changed
|
|
48
48
|
|
|
49
|
-
Not scope
|
|
49
|
+
Not hold-scope (that's someone adding). This is: budget cut, new CTO arrives, strategic priority shift, acquisition changes everything, "we've decided to go a different direction." The engagement's foundation moved.
|
|
50
50
|
|
|
51
51
|
**Signals:** new leadership asks "why are we doing this?", the sponsor's boss questions ROI, a competing initiative gets the resources, the quarterly priorities deck doesn't mention your project, the team you're embedded in gets reorganized.
|
|
52
52
|
|
|
@@ -12,7 +12,7 @@ Thousands of lines or dozens of unrelated files → **stop**, recommend the spli
|
|
|
12
12
|
|
|
13
13
|
## Stage 1 - did we build what we agreed? (you do this work)
|
|
14
14
|
|
|
15
|
-
Check the diff against the **one-line intent** in `decisions.md` / acceptance criteria
|
|
15
|
+
Check the diff against the **one-line intent** in `decisions.md` / acceptance criteria - what was *explicitly decided*, not what seems right:
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
18
|
git diff <base>...HEAD --stat
|
|
@@ -23,9 +23,9 @@ For each touched path (or logical hunk), assign one verdict:
|
|
|
23
23
|
| Verdict | Meaning |
|
|
24
24
|
|---------|---------|
|
|
25
25
|
| **KEEP** | Required for the stated intent |
|
|
26
|
-
| **JUSTIFY** | Adjacent but must ship now
|
|
27
|
-
| **SPLIT** | Real work for another PR / Next / kill list
|
|
28
|
-
| **DROP** | Noise / drive-by
|
|
26
|
+
| **JUSTIFY** | Adjacent but must ship now - write one sentence why, or SPLIT |
|
|
27
|
+
| **SPLIT** | Real work for another PR / Next / kill list - do not merge with this slice |
|
|
28
|
+
| **DROP** | Noise / drive-by - revert before Pass |
|
|
29
29
|
|
|
30
30
|
Also check:
|
|
31
31
|
- Any sacred system from `trust-profile.md` touched?
|
|
@@ -34,7 +34,7 @@ Also check:
|
|
|
34
34
|
|
|
35
35
|
**Stage 1 fails → stop** if any SPLIT/DROP remains, or JUSTIFY lacks a written sentence. Quality review on out-of-scope code is wasted work. Record the mismatch (and the KEEP/JUSTIFY/SPLIT/DROP tally) in `decisions.md`.
|
|
36
36
|
|
|
37
|
-
Stakeholder "also can you…" mid-build is `scope
|
|
37
|
+
Stakeholder "also can you…" mid-build is `hold-scope` - different axis. This stage is **code vs claim**.
|
|
38
38
|
|
|
39
39
|
## Stage 2 - is it safe to live with?
|
|
40
40
|
|
|
@@ -59,7 +59,7 @@ Five dimensions, line-specific ("line 47 fails under concurrent writes - no lock
|
|
|
59
59
|
|
|
60
60
|
## Before the PR - thinking for the next reader
|
|
61
61
|
|
|
62
|
-
Code alone loses the "why." Before you call the change reviewable, run the **session digest** from the memory contract (SKILL.md On exit): TL;DR, key decisions & rationale, scope + how you verified, gotchas. Confirm with the FDE, then write into `.fde/`
|
|
62
|
+
Code alone loses the "why." Before you call the change reviewable, run the **session digest** from the memory contract (SKILL.md On exit): TL;DR, key decisions & rationale, scope + how you verified, gotchas. Confirm with the FDE, then write into `.fde/` - `decisions.md` / `delivery.md` / `context.md`. Reviewers (or Monday-you) should answer "why this approach?" from the fieldbook, not from a chat transcript. Do **not** dump agent logs into the product repo.
|
|
63
63
|
|
|
64
64
|
## Artifact
|
|
65
65
|
|
|
@@ -70,7 +70,7 @@ Code alone loses the "why." Before you call the change reviewable, run the **ses
|
|
|
70
70
|
## Principles
|
|
71
71
|
|
|
72
72
|
- Stage 1 before Stage 2. Wrong scope reviewed well is still wrong scope.
|
|
73
|
-
- KEEP / JUSTIFY / SPLIT / DROP
|
|
73
|
+
- KEEP / JUSTIFY / SPLIT / DROP - every path gets a verdict; silent extras fail Stage 1.
|
|
74
74
|
- Specific or silent - vague concerns waste everyone's time.
|
|
75
75
|
- No rollback path = first finding.
|
|
76
76
|
- A clean review proves this diff is safe as agreed - not that the feature was right.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# rollback
|
|
1
|
+
# rollback - test the escape route before you need it
|
|
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
|
-
#
|
|
1
|
+
# runbook - making yourself replaceable is the goal
|
|
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
|
|
|
@@ -58,13 +58,13 @@ Rollback: <exact command and expected time>
|
|
|
58
58
|
|
|
59
59
|
| Session | Focus | Attendees | Duration | Output |
|
|
60
60
|
|---------|-------|-----------|----------|--------|
|
|
61
|
-
| **Architecture walkthrough** | Why, not what. The decisions, the trade-offs, the things that almost went wrong. | Full team | 60
|
|
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
63
|
| **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
64
|
|
|
65
65
|
**4. The confidence check.** After the knowledge transfer, score the team's readiness:
|
|
66
66
|
|
|
67
|
-
| Area | Confidence (1
|
|
67
|
+
| Area | Confidence (1-5) | Evidence |
|
|
68
68
|
|------|------------------|----------|
|
|
69
69
|
| Daily operations | | Can they deploy and rollback without help? |
|
|
70
70
|
| Incident response | | Did they complete the drill within acceptable time? |
|
|
@@ -103,9 +103,9 @@ Rollback: <exact command and expected time>
|
|
|
103
103
|
- [ ] All access returned or transferred (repos, environments, admin panels)
|
|
104
104
|
- [ ] No personal credentials left in the system (API keys, tokens, SSH keys)
|
|
105
105
|
- [ ] `.fde/` folder handed to the successor or archived with the team
|
|
106
|
-
- [ ] Final status sent to sponsor (see `
|
|
106
|
+
- [ ] Final status sent to sponsor (see `readout.md`)
|
|
107
107
|
- [ ] Retrospective completed (see `close.md`)
|
|
108
|
-
- [ ] Patterns extracted (see `pattern
|
|
108
|
+
- [ ] Patterns extracted (see `encode-pattern.md`)
|
|
109
109
|
|
|
110
110
|
## Artifact
|
|
111
111
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
# use-
|
|
1
|
+
# score-use-cases - pick the right battle, not the interesting one
|
|
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
|
|
|
5
|
-
**Read first:** `reality.md`, `brief.md`, `terrain.md`, `context.md`. If `business-case.md` or `prototype-log.md` exist from
|
|
5
|
+
**Read first:** `reality.md`, `brief.md`, `terrain.md`, `context.md`. If `business-case.md` or `prototype-log.md` exist from poc, load those - they carry forward.
|
|
6
6
|
|
|
7
7
|
The most dangerous moment in a multi-use-case engagement is when the technically interesting problem wins over the high-value problem. Scoring replaces opinion with arithmetic. The arithmetic is wrong - all models are - but it's *visibly* wrong, which means it can be debated and corrected. Opinion can't.
|
|
8
8
|
|
|
@@ -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
|
|-----------|---|---|---|
|
|
@@ -59,7 +59,7 @@ Why this formula:
|
|
|
59
59
|
|
|
60
60
|
## Checkpoint
|
|
61
61
|
|
|
62
|
-
Walk the FDE through the top 3 scores and the recommendation. One question: "Does the sponsor have a strong preference that overrides the scoring?" If yes, log it. If no, proceed with the highest score to
|
|
62
|
+
Walk the FDE through the top 3 scores and the recommendation. One question: "Does the sponsor have a strong preference that overrides the scoring?" If yes, log it. If no, proceed with the highest score to poc or plan.
|
|
63
63
|
|
|
64
64
|
## Principles
|
|
65
65
|
|
|
@@ -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
|
|
86
|
+
This is **code drift**, not stakeholder "also can you…" (that is `hold-scope`). 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,4 +1,4 @@
|
|
|
1
|
-
#
|
|
1
|
+
# switch-clients - juggling engagements without dropping any
|
|
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
|
|
|
@@ -70,7 +70,7 @@ The 3-line context update is the bridge. Without it, the next session starts wit
|
|
|
70
70
|
| Engagement intensity | Status cadence | Touchpoint type |
|
|
71
71
|
|---------------------|---------------|-----------------|
|
|
72
72
|
| Active build (daily work) | Weekly written + ad-hoc Slack | Status update + visible progress |
|
|
73
|
-
| Light touch (2
|
|
73
|
+
| Light touch (2-3 days/week) | Weekly written | Status update + next week's plan |
|
|
74
74
|
| Monitoring only | Bi-weekly written | Health check + any emerging risks |
|
|
75
75
|
|
|
76
76
|
**The golden rule: no customer should have to chase you for an update.** Proactive status updates are cheaper than reactive ones - and they protect trust across all engagements.
|