fdeops 3.9.3 → 3.9.5

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/README.md CHANGED
@@ -1,156 +1,225 @@
1
- # fdeops
1
+ # FDEOps
2
2
 
3
3
  **Your AI coding agent forgets your client every morning. fdeops remembers.**
4
4
 
5
- Local-first engagement fieldbook for Forward Deployed Engineers — memory under `.fde/` + one `@fde` router. Not an OS. Not a coworker.
5
+ [![npm version](https://img.shields.io/npm/v/fdeops)](https://www.npmjs.com/package/fdeops)
6
+ [![CI](https://github.com/suboss87/fdeops/actions/workflows/validate.yml/badge.svg)](https://github.com/suboss87/fdeops/actions)
7
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
8
+ [![Node](https://img.shields.io/badge/node-%3E%3D18-brightgreen)](https://nodejs.org)
6
9
 
7
- ---
10
+ CLI + one `@fde` skill + hooks over a local `.fde/` fieldbook - one folder per client. The **second brain for Forward Deployed Engineers** - engineers embedded at a client, from first meeting to final handoff. Works the same for consultants, agency developers, solutions architects, and fractional CTOs.
8
11
 
9
- ## How it works
12
+ ```
13
+ land discover plan build ship close
14
+ | | | | | |
15
+ +-----------+-----------+---------+----------+---------+
16
+ the fieldbook (.fde/) - one per engagement
17
+ written as a side effect of the work
18
+ ```
10
19
 
11
- ### The week
20
+ **Glossary:** **fieldbook** = the `.fde/` folder · **TRIAGE** = trust + phase + next from memory · **receipts** = dated search of what you logged · **hooks** = auto load/capture at session start/end.
12
21
 
13
- | When | What you do |
14
- |------|-------------|
15
- | **Monday** | Open agent → TRIAGE loads (trust, phase, next) |
16
- | **After a meeting** | `fde debrief --smart notes.txt` → review → `--apply` |
17
- | **Before a walk-in** | `fde prep "Denise sync"` |
18
- | **Scope fight** | `fde receipts descope` (+ memory git hash) |
19
- | **Friday** | `fde status` → sponsor update from the real record |
22
+ Describe your situation - `@fde` routes to the right method and writes the matching `.fde/` artifact. Phase methods (land → close) live in the skill; the CLI owns scan, memory, and receipts. You still confirm judgment - the fieldbook does not maintain itself without you.
20
23
 
21
- Same engagement folder every time. Git versions `.fde/`. Your AI coding agent reads it on every session.
24
+ ---
22
25
 
23
- <details>
24
- <summary><strong>All methods (land → close)</strong> — below the fold</summary>
25
-
26
- | Method | When |
27
- |--------|------|
28
- | `land` | First day — bind people, success, risks |
29
- | `discover` | Map systems before you change them |
30
- | `prep` | Start of week — week's focus from memory |
31
- | `status` | Mid-engagement health check |
32
- | `triage` | Something broke — decide in 60s |
33
- | `debrief` | End of week — compound into memory |
34
- | `garden` | Memory hygiene — archive stale / promote truth |
35
- | `doctor` | Is `.fde/` healthy? |
36
- | `ship` | Before the blast — challenge, then go |
37
- | `red-team` | Adversarial pass before ship |
38
- | `close` | Engagement ends — archive + handoff |
39
-
40
- Full method map: [`docs/skills.md`](docs/skills.md)
26
+ ## The week
41
27
 
42
- </details>
28
+ What you actually run most days - the habit that compounds the fieldbook:
29
+
30
+ | When | What you do | Why it matters |
31
+ |------|-------------|----------------|
32
+ | **Monday** | Open your AI coding agent → TRIAGE loads (trust, phase, next) | Start where last week left off - no re-paste |
33
+ | **After a meeting** | `fde debrief --smart notes.txt` → review → `--apply` | Messy notes become dated decisions, risks, contacts |
34
+ | **Before a walk-in** | `fde prep "Denise sync"` | Walk in with memory, not a blank chat |
35
+ | **Scope fight** | `fde receipts descope` (+ memory git hash) | Answer "when did we agree?" from the record |
36
+ | **Friday** | `fde status` → sponsor update from the real record | Status from evidence, not memory theater |
37
+
38
+ Same engagement folder every time (`~/fde-engagements/<client>/.fde/`). Git versions it. Your AI coding agent reads it on every session.
43
39
 
44
40
  ---
45
41
 
46
42
  ## Quickstart
47
43
 
44
+ **1. Install** (pick one)
45
+
48
46
  ```bash
49
- npx skills add suboss87/fdeops # @fde skill (any agent that supports skills)
50
- # or Claude: /plugin marketplace add suboss87/fdeops
51
- npx fdeops resume --init haulline # bind this workspace → ~/fde-engagements/haulline
47
+ npx skills add suboss87/fdeops # Cursor, Codex, and skills-compatible agents
52
48
  ```
53
49
 
54
- Then work as usual — `@fde` routes; the CLI owns scan, memory, receipts.
50
+ ```text
51
+ /plugin marketplace add suboss87/fdeops # Claude Code
52
+ /plugin install fdeops@fdeops
53
+ ```
55
54
 
56
- **CLI-only path** (npm global):
55
+ **2. Bind** - once, inside the client workspace:
57
56
 
58
57
  ```bash
59
- npm install -g fdeops
60
- fdeops install --global
61
- mkdir -p ~/fde-engagements && cd ~/fde-engagements
62
- fdeops init acme
63
- cd acme && git init && git add . && git commit -m "init engagement"
58
+ npx fdeops resume --init garvey # creates ~/fde-engagements/garvey engagement + binds workspace
64
59
  ```
65
60
 
66
- | Flag | When |
67
- |------|------|
68
- | `--global` | Install once for your user |
69
- | `--here` | This engagement only |
70
- | *(default)* | Project + user, Claude Code |
71
-
72
- <details>
73
- <summary>Cursor · uninstall · upgrades · path override</summary>
61
+ **Verify:**
74
62
 
75
63
  ```bash
76
- fdeops install --cursor --global # Cursor project rules
77
- fdeops uninstall # remove installed copies
78
- fdeops upgrade # pull latest from npm
64
+ npx fdeops resume # should print TRIAGE (trust, phase, next) for garvey
79
65
  ```
80
66
 
81
- Multiple engagements: `export FDEOPS_ENGAGEMENT=~/fde-engagements/acme`
67
+ **3. Work**
82
68
 
83
- Full install notes: [`docs/install.md`](docs/install.md)
69
+ ```text
70
+ @fde I just got the brief. New client, payments platform, they want it live before their Q3 audit.
71
+ ```
72
+
73
+ `@fde` routes and writes `.fde/` artifacts - you confirm judgment. Use `npx fdeops …` until you want a short command: `npm i -g fdeops` (optional). Full workflow: [docs/USAGE.md](docs/USAGE.md).
74
+
75
+ <details>
76
+ <summary><strong>Other install paths</strong> · scan · env</summary>
77
+
78
+ - **Cursor / Codex / Copilot / Gemini CLI:** `npx fdeops adapters .` - [adapters/](adapters/README.md)
79
+ - **Local LLMs (Ollama, LM Studio, llama.cpp):** load `skills/fde/SKILL.md` as the system prompt - [guide](adapters/LOCAL-LLM.md)
80
+ - **Manual / air-gapped:** `git clone https://github.com/suboss87/fdeops.git && cd fdeops && node bin/install.js`
81
+ - **Try without install:** `npx fdeops scan` - day-1 recon (heuristic leads, not findings)
82
+ - **Requires:** [Node.js](https://nodejs.org) >= 18 for the CLI and adapters
83
+ - **Advanced:** `FDEOPS_ENGAGEMENT` overrides the workspace registry. Full matrix: [docs/install.md](docs/install.md)
84
84
 
85
85
  </details>
86
86
 
87
87
  ---
88
88
 
89
- ## Engagement memory
89
+ ## How it works
90
+
91
+ Three pieces on top of the fieldbook:
90
92
 
91
- Everything lives under `.fde/` in the engagement folder:
93
+ - **Session start** - a hook loads where you left off into your AI coding agent's context
94
+ - **Session end** - a hook captures what happened back into the fieldbook
95
+ - **`@fde`** - routes your situation to a field method; you confirm before memory sticks
96
+ - **CLI** - deterministic, offline (`scan`, `debrief`, `prep`, `receipts`, `status`)
92
97
 
93
- | Path | What |
98
+ fdeops complements repo memory: CLAUDE.md holds how the *code* works; the fieldbook holds how the *engagement* works.
99
+
100
+ Works with **Claude Code** · **Cursor** · **Copilot** · **Gemini CLI** · **Ollama** · **LM Studio** - any model that reads markdown.
101
+
102
+ <details>
103
+ <summary><strong>Phase verbs</strong> (land → close)</summary>
104
+
105
+ | Verb | When |
94
106
  |------|------|
95
- | `.fde/people.md` | Who matters, trust, notes |
96
- | `.fde/log.md` | Running notes (append-only) |
97
- | `.fde/context.md` | Stack, constraints, systems |
98
- | `.fde/signals.md` | Verified facts + open questions |
99
- | `.fde/decisions.md` | Choices and why |
100
- | `.fde/risks.md` | Risks and owners |
101
- | `.fde/meta.json` | Phase, checksums, lock |
107
+ | **land** | First days at a new client - interrogate the brief, map stakeholders, define success |
108
+ | **discover** | The brief feels wrong - find the real problem, with evidence from the repo |
109
+ | **plan** | Scope agreed - sequence it backwards from success, in PR-sized slices |
110
+ | **build** | Ready to write code - declare blast radius, log deliveries as you ship |
111
+ | **ship** | Going to production - pre-flight, canary, tested rollback |
112
+ | **close** | Engagement ending - handoff doc, retrospective, receipts that survive you |
102
113
 
103
- Writes are **bound** (engagement required), **locked** (one writer), **atomic**, and **refused** when they look like secrets. Corrupt or incomplete state fails closed — never "green" by accident.
114
+ Overlays for regulated domains (AI, fintech, healthcare, government) activate on signal. Full matrix: [docs/skills.md](docs/skills.md).
104
115
 
105
- Commit `.fde/` like code. That's the whole compounding loop.
116
+ </details>
106
117
 
107
118
  ---
108
119
 
109
- ## Without fdeops vs with fdeops
120
+ ## Engagement memory (`.fde/`)
121
+
122
+ The **fieldbook** - one folder per client, plain markdown you can read, grep, and take with you:
110
123
 
111
- | Without | With |
112
- |---------|------|
113
- | Context dies when the chat ends | `@fde prep` resurfaces last week's risks |
114
- | "We're fine" until the blast | Trust + signals force the hard conversation |
115
- | Notes scatter across Notion/Slack | One local fieldbook, git-versioned |
116
- | Agent invents stakeholders | Bind-required writes no engagement, no write |
124
+ | File | Holds |
125
+ |------|-------|
126
+ | `context.md` | Where you are - loaded first every session |
127
+ | `brief.md` / `success.md` | What they asked for; what "done" means and who signs it off |
128
+ | `reality.md` / `terrain.md` | The real problem; the codebase map |
129
+ | `stakeholders.md` | Champions, resistance, `[signal:green\|amber\|red]` trust tokens |
130
+ | `trust-profile.md` | Sacred data, AI policy, approval chain |
131
+ | `decisions.md` / `risks.md` / `delivery.md` | Choices with dates; live risk register; what shipped and its rollback |
132
+
133
+ Every entry is dated and sourced, so you can defend it in front of skeptical stakeholders. Schema: [docs/schema.md](docs/schema.md).
134
+
135
+ ---
136
+
137
+ ## The CLI
138
+
139
+ Commands that match **The week** (skill adds judgment on top):
140
+
141
+ ```bash
142
+ fde resume # TRIAGE + load this workspace's engagement
143
+ fde resume --init <client> # create + bind + git-version .fde/
144
+ fde debrief --smart notes.md # propose routing → --apply to confirm
145
+ fde prep "Denise sync" # walk-in brief from existing memory
146
+ fde receipts <term> # dated search (gap ≠ proof of absence)
147
+ fde status # sponsor-ready triage (--all for portfolio)
148
+ fde scan # day-1 recon + ASK ON DAY 1 (works via npx)
149
+ ```
150
+
151
+ <details>
152
+ <summary><strong>More commands</strong></summary>
153
+
154
+ ```bash
155
+ fde triage # TRIAGE only (hooks / Cursor entry)
156
+ fde debrief notes.md # prefix router: decision: / risk: / delivery: / contact:
157
+ fde doctor # lint: stale signals, unset phase, gaps
158
+ fde log decision "…"
159
+ fde log contact "…" --signal amber
160
+ fde dashboard # FieldBook HTML (--all for every client)
161
+ ```
162
+
163
+ Optional: `export FDEOPS_ENGAGEMENTS_ROOT=~/path/to/engagements` to isolate from `~/fde-engagements`.
164
+
165
+ Each `.fde/` is a local git repo (no remote, no telemetry) - dated entries carry an author tag; every write commits so receipts are tamper-evident. Worst-of `[signal:...]` per stakeholder drives trust; signals older than 21 days show as stale.
166
+
167
+ </details>
168
+
169
+ <p align="center"><img src="media/terminal-demo.svg" alt="fde CLI - status, scan, dashboard" width="720"/></p>
170
+
171
+ `fde dashboard` (FieldBook) renders the **current** engagement by default. Pass `--all` for every client sorted by trust:
172
+
173
+ <p align="center"><img width="1336" height="624" alt="fde dashboard FieldBook" src="https://github.com/user-attachments/assets/5683614c-7730-4a3a-860d-185053a377eb" /></p>
117
174
 
118
175
  ---
119
176
 
120
177
  ## Who this is for
121
178
 
122
- FDEs, solutions engineers, and anyone dropped into a customer codebase who has to earn trust, ship under ambiguity, and not lose the thread between Mondays.
179
+ | You are... | What fdeops does for you |
180
+ |----------|-------------------|
181
+ | **Forward Deployed Engineer** | The role this was built for - the full lifecycle, first meeting to final handoff |
182
+ | **Consultant or contractor at a client site** | Remembers the engagement so you stop re-explaining it |
183
+ | **Solutions architect / engineer** | Methods for the politics as well as the architecture |
184
+ | **Agency developer running 3-5 clients** | One `.fde/` per client - details stop blurring |
185
+ | **Fractional CTO doing client work** | The fieldbook is your second brain - and your audit trail for billable work |
123
186
 
124
- Not for: generic chatbots, multi-tenant SaaS dashboards, or "AI coworker" shells.
187
+ ---
188
+
189
+ ## Your data stays yours
190
+
191
+ - **Local only.** Pure `git` + file reads - no network calls, no telemetry, no account. Works air-gapped.
192
+ - **Plain markdown.** No database, no lock-in.
193
+ - **No new data path.** The AI sees client code only when *you* point your agent at it; `<private>`-tagged data never enters the model's context.
194
+ - **Nothing enters the record unreviewed.** The model drafts, you confirm (`fde debrief --dry-run` shows the routing first); the hooks record only git facts. Your fieldbook stays yours to defend.
195
+ - **Know your sync surface.** `~/fde-engagements` lives in your home directory - your backup and cloud-sync setup now covers client notes. `fde resume --init` warns if the folder sits in a synced path. Read [PRIVACY.md](PRIVACY.md) before your first NDA'd engagement.
196
+
197
+ Details: [PRIVACY.md](PRIVACY.md) · [SECURITY.md](SECURITY.md)
125
198
 
126
199
  ---
127
200
 
128
201
  ## Principles
129
202
 
130
- 1. **Local-first** memory on your disk, not a vendor cloud
131
- 2. **Compounding** debrief is the product; chat is disposable
132
- 3. **Refuse bad writes** secrets, symlinks, unbound paths
133
- 4. **Honest status** corrupt green; worst stakeholder trust wins
134
- 5. **Thin packaging** one skill (`@fde`), many methods — not a skill tree
203
+ - **The artifact is the memory** - producing work and recording it are one action
204
+ - **Methods, not autonomy** - each skill tells you what to check; the judgment, the trust, and the consequences stay yours
205
+ - **Brief is a hypothesis** - discover before building the wrong thing
206
+ - **Evidence on every claim** - these files get defended in front of skeptical clients
207
+ - **One customer, one folder** - context never bleeds
135
208
 
136
209
  ---
137
210
 
138
- ## Docs
139
-
140
- | Doc | |
141
- |-----|--|
142
- | [Install](docs/install.md) | Global, Cursor, upgrades |
143
- | [Usage](docs/USAGE.md) | Methods in depth |
144
- | [Skills](docs/skills.md) | `@fde` method reference |
145
- | [CHANGELOG](CHANGELOG.md) | What changed |
211
+ ## Updating
146
212
 
147
213
  ```bash
148
- npm test
149
- node bin/check.js
214
+ # Plugin / skills install: re-run the install command from Quickstart
215
+ # From a git clone:
216
+ cd fdeops && git pull && node bin/install.js
150
217
  ```
151
218
 
152
219
  ---
153
220
 
154
- ## License
221
+ ## Contributing
222
+
223
+ Built and maintained by **[Subash Natarajan](https://www.linkedin.com/in/subashn/)**. Share your feedback via [Issues](https://github.com/suboss87/fdeops/issues) - see [CONTRIBUTING.md](CONTRIBUTING.md).
155
224
 
156
- MIT
225
+ [FDE Methodology](FDE-METHODOLOGY.md) - [ATTRIBUTION.md](ATTRIBUTION.md) - [SECURITY.md](SECURITY.md) - [PRIVACY.md](PRIVACY.md) - [Repo layout](docs/REPO_LAYOUT.md) - [Skills matrix](docs/skills.md) - MIT
package/bin/check.js CHANGED
@@ -111,7 +111,7 @@ for (const section of [
111
111
  'Quickstart',
112
112
  'Engagement memory',
113
113
  'Who this is for',
114
- 'Without fdeops vs with fdeops',
114
+ 'The week',
115
115
  'Principles',
116
116
  ]) {
117
117
  if (!readme.includes(section)) fail(`README missing section: ${section}`)
@@ -205,6 +205,22 @@ const hook = read('hooks/session-start')
205
205
  if (!hook.includes('FDEOPS_ENGAGEMENT')) {
206
206
  fail('session-start hook must read FDEOPS_ENGAGEMENT env var')
207
207
  } else ok('hook FDEOPS_ENGAGEMENT')
208
+ // Token discipline: SessionStart must not dump the full skill (L1 progressive disclosure).
209
+ // Strip comments before scanning for a real `cat …SKILL.md` / BOOTSTRAP inject.
210
+ const hookCode = hook.replace(/^[ \t]*#.*$/gm, '')
211
+ if (/\$\(cat\s+"\$BOOTSTRAP"\)|cat\s+"\$BOOTSTRAP"|cat\s+[^\n]*SKILL\.md/.test(hookCode)) {
212
+ fail('session-start must not cat SKILL.md - inject TRIAGE + bounded context + pointer only')
213
+ }
214
+ if (hookCode.includes('BOOTSTRAP=')) {
215
+ fail('session-start must not resolve BOOTSTRAP skill path for inject')
216
+ }
217
+ if (!hook.includes('invoke @fde')) {
218
+ fail('session-start must include a lean @fde pointer (not full skill)')
219
+ }
220
+ if (!/\btriage\b/.test(hook)) {
221
+ fail('session-start must still inject TRIAGE')
222
+ }
223
+ ok('session-start lean inject (no SKILL dump)')
208
224
 
209
225
  // v3: write-side memory backstop
210
226
  if (!fs.existsSync(path.join(root, 'hooks', 'session-stop'))) {
@@ -1,18 +1,10 @@
1
1
  #!/bin/bash
2
- # fdeops SessionStart - load @fde + engagement context from FDE laptop path.
2
+ # fdeops SessionStart - inject TRIAGE + bounded engagement context (not the full skill).
3
+ # Token discipline (L1 progressive disclosure): Claude/Cursor already discover @fde via
4
+ # skill metadata. Dumping skills/fde/SKILL.md here paid ~6-8k tokens every session even
5
+ # when the FDE was not doing field work. Load the skill body only when @fde triggers.
3
6
 
4
7
  CONTEXT_FILE=""
5
- BOOTSTRAP=""
6
-
7
- for candidate in \
8
- "${CLAUDE_PLUGIN_ROOT:+$CLAUDE_PLUGIN_ROOT/skills/fde/SKILL.md}" \
9
- "$(dirname "$0")/../skills/fde/SKILL.md" \
10
- "$HOME/.claude/skills/fde/SKILL.md"; do
11
- if [ -n "$candidate" ] && [ -f "$candidate" ]; then
12
- BOOTSTRAP="$candidate"
13
- break
14
- fi
15
- done
16
8
 
17
9
  resolve_engagement_dir() {
18
10
  local raw="$1"
@@ -143,9 +135,8 @@ bounded_context() {
143
135
 
144
136
  CONTENT=""
145
137
 
146
- if [ -n "$BOOTSTRAP" ]; then
147
- CONTENT="$CONTENT$(cat "$BOOTSTRAP")\n\n"
148
- fi
138
+ # Lean pointer only - never cat SKILL.md. Methods load on @fde / skill trigger.
139
+ CONTENT="${CONTENT}fdeops: engagement fieldbook active. For field methods, invoke @fde (loads skills/fde/SKILL.md + one references/*.md). Plumbing is zero-token CLI: fde triage | resume | debrief | prep | receipts | status.\n\n"
149
140
 
150
141
  # Same TRIAGE block as `fde resume` / `fde triage` - Monday morning must not
151
142
  # depend on the model remembering to run a CLI command. Prefer the installed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fdeops",
3
- "version": "3.9.3",
3
+ "version": "3.9.5",
4
4
  "description": "Field kit for engineers embedded in client work - a real CLI (recon, memory, portfolio), one @fde skill with field judgment on top, and hooks that make it automatic. Claude Code plugin and any agent that loads skills.",
5
5
  "bin": {
6
6
  "fdeops": "bin/install.js",
@@ -70,7 +70,7 @@ When NOT to interrogate or challenge: unambiguous one-liners, mechanical ops, FD
70
70
 
71
71
  CLI missing → use the manual fallback commands inside each reference.
72
72
 
73
- **Token model - where the cost goes.** Deterministic work is the CLI's job and costs **zero model tokens**: memory writes, recon, receipts, status, dashboard, and the bounded `fde resume`. Spend tokens only on judgment - reading the situation, routing, running the phase method, writing the artifact. Three rules keep a full day of FDE work cheap: load the router first and pull **one** reference only when you route to it; never dump a whole `.fde/` file into context - read the bounded resume, or `fde receipts <term>` for a targeted slice; don't re-read files you already have. The expensive model should fire for real decisions, not for plumbing the CLI already does.
73
+ **Token model - where the cost goes.** Deterministic work is the CLI's job and costs **zero model tokens**: memory writes, recon, receipts, status, dashboard, and the bounded `fde resume`. Session-start hooks inject **TRIAGE + bounded `context.md` + a one-line pointer** - never this full skill body (that loads only when `@fde` triggers). Spend tokens only on judgment - reading the situation, routing, running the phase method, writing the artifact. Three rules keep a full day of FDE work cheap: load the router first and pull **one** reference only when you route to it; never dump a whole `.fde/` file into context - read the bounded resume, or `fde receipts <term>` for a targeted slice; don't re-read files you already have. The expensive model should fire for real decisions, not for plumbing the CLI already does.
74
74
 
75
75
  ## Proactive intelligence (run on every session start)
76
76
 
@@ -146,19 +146,27 @@ The FDE can nod (zero friction) or correct ("billing-service too"). This replace
146
146
 
147
147
  **Never:** fire multiple questions at once, probe where the answer doesn't change the work, repeat what's already in the artifacts, or slow down a confident FDE to prove you're being thorough. One well-placed observation beats five careful questions.
148
148
 
149
- ## Forward momentum — `Next:` after land / debrief / ship only
149
+ ## Forward momentum (after writing memory)
150
150
 
151
- After **land**, **debrief** (once applied), or **ship** (proceed verdict), end with **one** directed line that starts with `Next:`. Not a menu. Not after every minor log/signal edit.
151
+ After updating `.fde/` artifacts, suggest the ONE next move that accelerates the engagement - but only when the next step isn't already obvious to the FDE.
152
152
 
153
- **Format:** `Next: <one concrete move>` — grounded in what you just wrote to `.fde/`.
153
+ **Do this when:**
154
+ - The FDE just finished a phase and the natural next step saves them thinking time
155
+ - There's a dependency that unblocks faster if acted on now (access request, stakeholder conversation, spec generation)
156
+ - The engagement is at a decision point (plan needs approval, risk needs escalation)
154
157
 
155
- | Just finished | Example |
156
- |---------------|---------|
157
- | **land** (brief + success written) | `Next: run fde scan on the repo, or draft the access ask if you don't have clone yet.` |
158
- | **debrief --apply** | `Next: fde prep "Denise sync" before Thursday, or fde status if you're writing the sponsor note.` |
159
- | **ship** (pre-blast proceed) | `Next: set the pulse in delivery.md, or fde log contact if Denise hasn't seen the canary.` |
158
+ **Don't do this when:**
159
+ - The FDE is clearly in flow and already knows what's next
160
+ - You just finished a minor update (logging a risk, updating a signal)
161
+ - The next step is obvious from context (mid-build, next task in sequence)
160
162
 
161
- **Skip `Next:` when:** the FDE is already in flow, you only logged a risk/signal, or the next step is obvious from the sequence they're mid-way through.
163
+ **The format:** One line, directed, based on engagement state. Not a menu.
164
+
165
+ > "Updated. Terrain is mapped - ready to plan the slices, or does Denise need to see this first?"
166
+
167
+ > "Shipped and logged. Task 4 touches the billing module where that open risk sits. Worth addressing that before starting?"
168
+
169
+ > "Brief written. You don't have repo access yet - want me to draft the request or are you handling that?"
162
170
 
163
171
  ## Routing - 6 domains
164
172