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
|
@@ -30,7 +30,7 @@ Keep the drivers explicit. "We estimate $200K savings" means nothing. "3 people
|
|
|
30
30
|
|
|
31
31
|
**3. Sensitivity check - name the two drivers that swing the result:**
|
|
32
32
|
|
|
33
|
-
Every business case has 1
|
|
33
|
+
Every business case has 1-2 variables where a small change flips the outcome. Name them explicitly:
|
|
34
34
|
|
|
35
35
|
> "This case holds if the team actually reclaims 6+ hours/week per person. If it's only 3 hours, the payback extends from 5 months to 14 months. The validation: measure time-spent before and after pilot with 2 team members."
|
|
36
36
|
|
|
@@ -75,9 +75,9 @@ Acme phase 2 needs funding. The case starts with the cost of doing nothing, not
|
|
|
75
75
|
|
|
76
76
|
Anchor: two silent failures since March, each one day of finance reconciliation by hand plus a late close (`reality.md`, Marco's sheet). That is the number the sponsor already believes because her own team reported it.
|
|
77
77
|
|
|
78
|
-
Driver model the sponsor can trace: incidents/quarter × hours of manual reconciliation × loaded cost, plus the tail risk of a late regulatory close
|
|
78
|
+
Driver model the sponsor can trace: incidents/quarter × hours of manual reconciliation × loaded cost, plus the tail risk of a late regulatory close - stated separately, because mixing a certain small number with an uncertain large one is how a case loses credibility.
|
|
79
79
|
|
|
80
|
-
Sensitivity names the two drivers that swing it: incident frequency (2/quarter → 1/quarter and the case halves) and whether the manual re-run continues in parallel (if Marco keeps re-running every morning, the saving is theoretical). The second one is the honest weakness, so it is in the case rather than waiting to be found in the room
|
|
80
|
+
Sensitivity names the two drivers that swing it: incident frequency (2/quarter → 1/quarter and the case halves) and whether the manual re-run continues in parallel (if Marco keeps re-running every morning, the saving is theoretical). The second one is the honest weakness, so it is in the case rather than waiting to be found in the room - with the condition that makes it hold: the morning re-run stops after two clean cycles, agreed with Marco.
|
|
81
81
|
|
|
82
82
|
## Principles
|
|
83
83
|
|
|
@@ -18,7 +18,7 @@ The engagement doesn't end at ship. It ends when the customer can maintain what
|
|
|
18
18
|
- AI components: did they behave in production? What failure modes did the prototype hide? Is the team equipped to maintain them?
|
|
19
19
|
|
|
20
20
|
**1b. Value + receipts close gate (refuse green close if any fail):**
|
|
21
|
-
- Primary value bucket in `success.md` matches what the sponsor funded; at least one ledger row has **Measured** (not forever-`pending`) with evidence **and a named customer-side owner in Accepted by** for that bucket
|
|
21
|
+
- Primary value bucket in `success.md` matches what the sponsor funded; at least one ledger row has **Measured** (not forever-`pending`) with evidence **and a named customer-side owner in Accepted by** for that bucket - or the retrospective explicitly records “not measured; sponsor accepted pending.” A measured-but-unaccepted number closes as `claimed`; say so in the retrospective rather than closing green on arithmetic nobody signed.
|
|
22
22
|
- Audit receipt exists for the final shipped path (exceptions/operating map walked; cite file).
|
|
23
23
|
- Eval receipt: **n/a if no AI**, else final golden/eval result + HITL owner recorded; kill switch / fallback named in `handoff.md`.
|
|
24
24
|
- One line in the retrospective: which bucket moved, by how much, vs baseline.
|
|
@@ -39,17 +39,17 @@ The engagement doesn't end at ship. It ends when the customer can maintain what
|
|
|
39
39
|
|
|
40
40
|
## Checkpoint
|
|
41
41
|
|
|
42
|
-
Direct assessment to the FDE: did the engagement achieve `success.md` · 2
|
|
42
|
+
Direct assessment to the FDE: did the engagement achieve `success.md` · 2-3 lessons that matter · is the pattern worth encoding · is the handoff complete or where are the gaps. Also: value bucket + audit receipt green; eval **n/a or green**. Pending Measured without sponsor acceptance = gap, not green close. Honest - a gap named now is cheaper than a callback in six weeks.
|
|
43
43
|
|
|
44
44
|
## Worked example
|
|
45
45
|
|
|
46
46
|
Acme, twelve weeks in, the FDE is rolling off.
|
|
47
47
|
|
|
48
|
-
Retrospective against the receipts: `brief.md` asked for monitoring, `reality.md` proved it was ownership
|
|
48
|
+
Retrospective against the receipts: `brief.md` asked for monitoring, `reality.md` proved it was ownership - and the delta is the most useful paragraph in the file, because it is exactly the argument the next engagement will need.
|
|
49
49
|
|
|
50
|
-
The close gate bites in a useful way. The ledger shows detection at 12 minutes measured across two real incidents, but **Accepted by** is empty
|
|
50
|
+
The close gate bites in a useful way. The ledger shows detection at 12 minutes measured across two real incidents, but **Accepted by** is empty - Marco confirmed it in Slack, Denise (finance) never did, and Denise is whose escalation started the engagement. So it closes as `claimed` with a one-line retrospective note and a named next step, rather than a green close on a number nobody with budget agreed to.
|
|
51
51
|
|
|
52
|
-
`handoff.md` is written for the person woken at 2am: the three things that break, what the page means, how to re-run manually the way Marco does, and who holds the tribal knowledge (Raj, who built the original job
|
|
52
|
+
`handoff.md` is written for the person woken at 2am: the three things that break, what the page means, how to re-run manually the way Marco does, and who holds the tribal knowledge (Raj, who built the original job - credited, because he protects it now). `patterns.md` gets *"unowned job" presents as "unmonitored job"* - it has now happened twice.
|
|
53
53
|
|
|
54
54
|
## Principles
|
|
55
55
|
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
- The `fde` CLI is **local, deterministic, no AI**. `--smart` is a **gate + writer**, not a brain.
|
|
14
14
|
- It keeps lines that already have `decision:` / `risk:` / `delivery:` / `contact:` / `next:` prefixes, plus a thin keyword pass (e.g. "we agreed", person+verb lines, "open question").
|
|
15
|
-
- Real messy notes without prefixes often route **0 useful lines**
|
|
15
|
+
- Real messy notes without prefixes often route **0 useful lines** - everything else lands as a context dump. That is expected. **You are the router:** rewrite `.debrief-propose` with type prefixes, then `--apply`.
|
|
16
16
|
- `.debrief-propose` is raw lines only (no routing annotations). "Edit if mis-routed" means **rewrite the line with the right prefix**, not leave a comment in the file.
|
|
17
17
|
|
|
18
18
|
## Method (you do this work)
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
1. Save the FDE's notes to a temp `.md` file in the workspace (or pipe stdin).
|
|
23
23
|
2. Run `fde debrief --smart <notes.md>` (or `npx fdeops debrief --smart …`).
|
|
24
24
|
3. Open `.debrief-propose`. If lines lack type prefixes, **rewrite them** before showing the FDE, e.g.:
|
|
25
|
-
- `decision: agreed chargebacks stay phase 2
|
|
25
|
+
- `decision: agreed chargebacks stay phase 2 - Priya`
|
|
26
26
|
- `risk: legal may reopen scope if we slip the SOW date`
|
|
27
27
|
- `contact: Priya pushed hard on Friday deck [signal:amber]`
|
|
28
28
|
- `next: send one-pager before Thursday 9am`
|
|
@@ -22,16 +22,16 @@ State your read, let the FDE correct, then discover.
|
|
|
22
22
|
|
|
23
23
|
Use when the "problem" is unfalsifiable, success is undefined, or you cannot name the decision discovery informs. Skip when `reality.md` / `terrain.md` already pin a testable claim and the FDE is ready to dig.
|
|
24
24
|
|
|
25
|
-
Same format as land
|
|
25
|
+
Same format as land - one Q + GUESS, no checklist:
|
|
26
26
|
|
|
27
27
|
```
|
|
28
28
|
READ: <the real problem you think exists, in one sentence>
|
|
29
|
-
CONFIDENCE: ~NN%
|
|
29
|
+
CONFIDENCE: ~NN% - missing: <what would falsify or confirm it>
|
|
30
30
|
Q: <one question that changes where you dig>
|
|
31
31
|
GUESS: <your answer, so they can correct it>
|
|
32
32
|
```
|
|
33
33
|
|
|
34
|
-
Stop when you can write the decision sentence under **Frame the decision first**. If a name, quote, or metric is still missing, write `unknown - ask:`
|
|
34
|
+
Stop when you can write the decision sentence under **Frame the decision first**. If a name, quote, or metric is still missing, write `unknown - ask:` - never invent ops folklore to make the map look complete.
|
|
35
35
|
|
|
36
36
|
## Frame the decision first
|
|
37
37
|
|
|
@@ -92,7 +92,7 @@ The real spec is what people **do** when the system fails - not what the slide d
|
|
|
92
92
|
- **The hesitation.** When someone says "well, there's also this other thing we do…" - stop them, ask them to finish. The main story is what they're comfortable explaining; the hesitation is the real problem.
|
|
93
93
|
- **"Which part of the codebase do you least want to touch?"** The answer is unanimous and it's the load-bearing wall. Check it against your churn scan - when the human answer and the churn data agree, that's your first map landmark.
|
|
94
94
|
- **Shadow AI.** Someone pasting data into ChatGPT to cope = a real unmet need + an uncontrolled data risk. Note both.
|
|
95
|
-
- **Exception-led operating map.** For each real break (not the slide-deck process): what fails, who notices first, what they do today, and which artifact is trusted in that moment. Prefer exceptions over happy-path swimlanes
|
|
95
|
+
- **Exception-led operating map.** For each real break (not the slide-deck process): what fails, who notices first, what they do today, and which artifact is trusted in that moment. Prefer exceptions over happy-path swimlanes - the workaround is the operating system. Write rows under `terrain.md` → `## Operating map (exception-led)`. If the section is missing on an older engagement, add it; never regenerate the rest of terrain. When AI is in play, also fill `## Intelligence placement` (deterministic vs LLM judgement vs human approve). **`fde doctor` requires at least one filled exception row before plan/build/ship/close** - empty map after discover is a hygiene fail, not optional polish.
|
|
96
96
|
|
|
97
97
|
## Method - part 3: workshop facilitation
|
|
98
98
|
|
|
@@ -137,7 +137,7 @@ A use case that depends on a "Blocker" source doesn't get scored - it gets a dat
|
|
|
137
137
|
|
|
138
138
|
Score every candidate use case before anything gets prototyped:
|
|
139
139
|
|
|
140
|
-
| Dimension | Question | 1
|
|
140
|
+
| Dimension | Question | 1-5 |
|
|
141
141
|
|---|---|---|
|
|
142
142
|
| Business value | What does it cost them unsolved? | |
|
|
143
143
|
| Complexity | How hard to build safely? (5 = hardest) | |
|
|
@@ -196,9 +196,9 @@ Stop. Don't form a fourth hypothesis. Three disproven reads means the brief is a
|
|
|
196
196
|
|
|
197
197
|
Acme's brief blamed missing monitoring. Discovery goes to the workaround first.
|
|
198
198
|
|
|
199
|
-
`git log` shows the reconciliation module at 47 commits/90d with no tests, all from one author who left in February. Marco (ops lead) turns out to keep a spreadsheet: every morning he re-runs the job manually and eyeballs the totals
|
|
199
|
+
`git log` shows the reconciliation module at 47 commits/90d with no tests, all from one author who left in February. Marco (ops lead) turns out to keep a spreadsheet: every morning he re-runs the job manually and eyeballs the totals - a habit nobody mentioned because to him it is just the job. That spreadsheet is the system of record when the job fails, which is the actual finding.
|
|
200
200
|
|
|
201
|
-
`reality.md`: **Confirmed:** the job has no owner, and the manual re-run masks failures for a day (evidence: Marco's sheet, Day 5; two silent failures since March, finance escalation Mar 14). **Stated brief was wrong because:** alerting existed last year and was disabled
|
|
201
|
+
`reality.md`: **Confirmed:** the job has no owner, and the manual re-run masks failures for a day (evidence: Marco's sheet, Day 5; two silent failures since March, finance escalation Mar 14). **Stated brief was wrong because:** alerting existed last year and was disabled - adding it again without an owner reproduces the same outcome. `terrain.md` gets the hotspot row and an operating-map row: `job fails silently → Marco notices next morning → re-runs by hand → spreadsheet is truth → LOAD-BEARING (Marco, Day 5)`.
|
|
202
202
|
|
|
203
203
|
Checkpoint to the FDE names the sponsor decision this creates: fund ownership, or fund alerting and accept the same failure in six months.
|
|
204
204
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# eval-pack - prove the system before it acts
|
|
2
2
|
|
|
3
|
-
**Enter when:** the work touches AI/LLM/agents/RAG, or ship/close is blocked because there is no evidence the non-deterministic path is safe. Activate alongside `ai.md`, `sketch`, `build`, or `ship`
|
|
3
|
+
**Enter when:** the work touches AI/LLM/agents/RAG, or they need to POC a model, or ship/close is blocked because there is no evidence the non-deterministic path is safe. Activate alongside `ai.md`, `sketch`, `incremental-build`, or `ship` - not instead of them.
|
|
4
4
|
|
|
5
5
|
**Read first:** `trust-profile.md` (AI policy + HITL), `terrain.md` (operating map), `delivery.md`. Create or extend `evals.md`.
|
|
6
6
|
|
|
@@ -14,19 +14,19 @@ Intelligence without evidence is token-maxing with a nicer name. An FDE earns tr
|
|
|
14
14
|
|
|
15
15
|
**1. Scope the judgement surface.** One sentence: which step uses model judgement, and what must never be autonomous.
|
|
16
16
|
|
|
17
|
-
**2. Build a golden set (minimum 5
|
|
18
|
-
- input (sanitized
|
|
17
|
+
**2. Build a golden set (minimum 5-20 for a slice; prefer 50-100 before broad scale).** For each case:
|
|
18
|
+
- input (sanitized - no `<private>` raw values)
|
|
19
19
|
- expected outcome or expert-approved acceptance note
|
|
20
20
|
- pass rule (exact / contains / short rubric)
|
|
21
21
|
- source: real historical example / expert label / staged fixture
|
|
22
22
|
|
|
23
23
|
**3. Score pass/fail, not vibes.** Run the suite. Record count pass / fail. Failures get a failure-mode tag (missing data, wrong record, format drift, hallucination, retrieval miss, unsafe action, other).
|
|
24
24
|
|
|
25
|
-
**4. Human-in-the-loop gate.** Name which outcomes require human approve before side effects. If none, write why that is allowed under `trust-profile.md` AI policy
|
|
25
|
+
**4. Human-in-the-loop gate.** Name which outcomes require human approve before side effects. If none, write why that is allowed under `trust-profile.md` AI policy - do not invent permission.
|
|
26
26
|
|
|
27
27
|
**5. Ship rule.** Until `evals.md` shows Verdict **SHIP** with a dated run (critical fails = 0) and HITL filled when policy requires it, AI-touching ship stays **fix-first**. Log a one-line eval receipt in `delivery.md` → `## Ship receipts`.
|
|
28
28
|
|
|
29
|
-
## Artifact
|
|
29
|
+
## Artifact - `evals.md`
|
|
30
30
|
|
|
31
31
|
Create on first AI-touching slice (not at `resume --init`). Use the stub in `templates/.fde/evals.md`. Every claim needs a source. Missing evidence → leave the cell `unknown - ask:`, never invent scores.
|
|
32
32
|
|
|
@@ -38,6 +38,6 @@ Present to the FDE: suite size, pass rate, top failure mode, HITL gate, Verdict
|
|
|
38
38
|
|
|
39
39
|
- No golden set, no AI ship.
|
|
40
40
|
- Pass/fail beats “looks good.”
|
|
41
|
-
- Failure modes are the product
|
|
41
|
+
- Failure modes are the product - the happy path is table stakes.
|
|
42
42
|
- HITL is a gate, not a slide.
|
|
43
43
|
- Non-AI work does not need this file.
|
|
@@ -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? |
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# incremental-build - 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
|
|
@@ -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.
|
|
@@ -15,15 +15,15 @@
|
|
|
15
15
|
|
|
16
16
|
## Method
|
|
17
17
|
|
|
18
|
-
1. **Ask one question**
|
|
19
|
-
2. **Capability check (current session)**
|
|
18
|
+
1. **Ask one question** - which source? (`file` / `granola` / `slack` / `notion` / other). If "other", ask for the MCP they intend to use. If they just want paste → send them to debrief and stop.
|
|
19
|
+
2. **Capability check (current session)** - list MCP tools you can actually call:
|
|
20
20
|
- Sink: `fde ingest` CLI (preferred) and/or `ingest_stage`
|
|
21
21
|
- Source: anything that can **fetch** that system's content (not post)
|
|
22
22
|
- Say clearly: *available now* vs *needs config*.
|
|
23
|
-
3. **Emit config for the source only**
|
|
24
|
-
4. **Tell them where to paste**
|
|
25
|
-
5. **Verify**
|
|
26
|
-
6. **Handoff phrase**
|
|
23
|
+
3. **Emit config for the source only** - open `mcp/recipes/<source>.md`. Fill placeholders from *that product's* docs. Tell them to paste secrets into host env - never into `.fde/`.
|
|
24
|
+
4. **Tell them where to paste** - Cursor MCP settings / `mcp.json`. Claude Code: their MCP config. Save → reload MCP / restart session.
|
|
25
|
+
5. **Verify** - after reload: re-run capability check. If source tools appear, offer a **test pull** staged to `.inbox/` only. Stop before apply unless they ask to propose.
|
|
26
|
+
6. **Handoff phrase** - e.g. `@fde pull today's Acme Granola into the fieldbook`.
|
|
27
27
|
|
|
28
28
|
## If they only want paste / files
|
|
29
29
|
|
|
@@ -1,6 +1,6 @@
|
|
|
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
5
|
**Connect / capability (different entry):** "connect a new MCP", "connect Granola/Slack/Notion", "what can you pull?" → `references/ingest-connect.md` first. Recipes: `mcp/recipes/` (file, granola, slack, notion).
|
|
6
6
|
|
|
@@ -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**
|
|
23
|
+
1. **Sink** - `ingest_stage` / `fde ingest` available?
|
|
24
|
+
2. **Sources** - which fetch tools exist (Granola-shaped, Slack, Notion, Drive, file-only)?
|
|
25
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 `ingest-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: `ingest-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
|
|
|
@@ -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:
|
|
@@ -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
|
|
|
@@ -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
|
|
|
@@ -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.
|
|
@@ -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
|
|
|
@@ -30,11 +30,11 @@ 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
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 initiative-triage).
|
|
40
40
|
|
|
@@ -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.
|
|
@@ -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
|
|
|
@@ -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-defense`
|
|
37
|
+
Stakeholder "also can you…" mid-build is `scope-defense` - 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.
|
|
@@ -38,7 +38,7 @@ Log via `fde log decision "scope change: <summary> - requested by <who>, impact:
|
|
|
38
38
|
|
|
39
39
|
**The key phrase: "Let me place it."** Not "that's out of scope" (adversarial) or "sure" (absorbed). "Let me place it" signals you're taking it seriously while buying time to assess the real cost.
|
|
40
40
|
|
|
41
|
-
**4. The accumulation conversation.** When the scope receipts show a pattern - typically 3
|
|
41
|
+
**4. The accumulation conversation.** When the scope receipts show a pattern - typically 3-5 absorbed changes - the FDE needs a conversation with the sponsor:
|
|
42
42
|
|
|
43
43
|
Frame it as **protection, not complaint:**
|
|
44
44
|
> "We've absorbed five changes since the original agreement. Each one made sense individually. Together, they've added roughly two weeks. I want to make sure the timeline expectation still matches - should we adjust the delivery date, or reprioritise to keep the original date?"
|
|
@@ -67,9 +67,9 @@ Acme, week 5. Nothing has been formally added, and the slice is a week late.
|
|
|
67
67
|
|
|
68
68
|
The pattern shows in three receipts, not one argument: a "quick" finance CSV export (Jun 20, half a day, from Denise directly), retry-logic cleanup asked for mid-build (Jun 24, one day, Tom), and a dashboard tile "while you're in there" (Jun 27, half a day). Each was individually reasonable; together they are the slip.
|
|
69
69
|
|
|
70
|
-
Three-bucket response, applied at the moment of the third ask rather than in a retrospective: the CSV export goes to Next with an accepted trade (it displaces the runbook polish), the retry cleanup goes to the kill list in `decisions.md` with the blast-radius reason, and the tile is absorbed because it is genuinely twenty minutes
|
|
70
|
+
Three-bucket response, applied at the moment of the third ask rather than in a retrospective: the CSV export goes to Next with an accepted trade (it displaces the runbook polish), the retry cleanup goes to the kill list in `decisions.md` with the blast-radius reason, and the tile is absorbed because it is genuinely twenty minutes - logged anyway, since an unlogged absorption is the one that gets forgotten in the accumulation conversation.
|
|
71
71
|
|
|
72
|
-
That conversation happens with Priya at three receipts, with the dates on screen: "these are the four asks, here is the two days, here is what moved." Not a complaint
|
|
72
|
+
That conversation happens with Priya at three receipts, with the dates on screen: "these are the four asks, here is the two days, here is what moved." Not a complaint - a decision she gets to make, with evidence, before the deadline makes it for her.
|
|
73
73
|
|
|
74
74
|
## Principles
|
|
75
75
|
|