fdeops 3.27.1 → 3.29.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/README.md CHANGED
@@ -2,138 +2,295 @@
2
2
 
3
3
  **Forward deployed engineering skills for AI coding agents.**
4
4
 
5
- Your agent writes code. FDEOps helps you deliver the client work around it: understand the problem, agree what done means, prove the result, and hand it over.
5
+ <a name="why-use-it"></a>
6
6
 
7
- <a name="who-this-is-for"></a>
7
+ You're on a customer site. The AI coding agent writes code in their repo. This kit is the work around that code: the brief, who can say yes, proof on their staging then live, whether they signed off, whether they can run it after you leave.
8
8
 
9
- An open-source kit for FDEs, independent consultants, and small agencies working across client projects. Use it with your coding agent. Keep a separate record for each client on your own laptop.
9
+ Notes stay on your laptop, in a separate record for each client. Review the agent's proposed changes before saving them.
10
10
 
11
- [Install](#quick-start) · [See the dashboard](#your-daily-fieldbook) · [Documentation](docs/README.md)
11
+ Keep the coding pack you already use. FDEOps adds the client brief, decisions, and evidence around that work.
12
12
 
13
- <img width="960" height="640" alt="FDEOps: forward deployed engineering from the first client meeting to handover" src="https://github.com/user-attachments/assets/2bcb8739-55ee-445d-8a1a-8b38433b7b58" />
13
+ [Quick start](#quick-start) · [Daily fieldbook](#your-daily-fieldbook) · [30 skills](#all-30-skills) · [Documentation](docs/README.md)
14
14
 
15
- ## Why use it?
15
+ <img width="960" height="640" alt="FDEOps: client delivery from the first meeting to handover" src="https://github.com/user-attachments/assets/2bcb8739-55ee-445d-8a1a-8b38433b7b58" />
16
16
 
17
- - **Pick up where you left off.** The brief, decisions, risks, and next action travel with the client record, across sessions and agents.
18
- - **Know what you can stand behind.** Keep what was promised, what was measured, and what the customer accepted separate, with evidence for each result.
19
- - **See what needs you today.** An offline dashboard shows the next step and missing evidence, measurement, or approval across your clients.
17
+ ---
20
18
 
21
19
  ## Quick Start
22
20
 
23
- Requires Node.js 18+, Git, and an AI coding agent that supports skills. Install the FDEOps skill:
21
+ **Try it in a local checkout.** Requires Node.js 18+ and Git:
22
+
23
+ ```bash
24
+ npx fdeops scan
25
+ ```
26
+
27
+ It prints what to look at on day one and the questions to ask. The scan reads local files without changing them. `npx` may download the package.
28
+
29
+ **Then install the skill:**
24
30
 
25
31
  ```bash
26
32
  npx skills add suboss87/fdeops --skill fde
27
33
  ```
28
34
 
29
- Open a client workspace and tell your agent:
35
+ One chat. Name the client:
30
36
 
31
37
  ```text
32
38
  @fde this is client01
33
39
  ```
34
40
 
35
- The agent creates `~/fde-engagements/client01/.fde/` on your laptop and links the workspace to that client. Paste the brief or meeting notes into the same conversation. `@fde` works through the situation with you; you review the proposed record before it is applied.
41
+ That creates `~/fde-engagements/client01/.fde/` on your laptop. Paste kickoff notes in the same thread. `@fde` picks what to check. You still decide. After a meeting you review what changed, new asks, open questions, and next actions. Correct the proposal, then confirm the update.
42
+
43
+ Open the engagement fieldbook:
44
+
45
+ ```bash
46
+ npx fdeops dashboard --open
47
+ ```
36
48
 
37
- **Claude Code plugin or another host?** Follow the [installation guide](docs/install.md). It explains hooks, adapters, offline setup, and the CLI fallback if your agent cannot run setup. Skill-only installation does not add automatic session hooks.
49
+ Read-only HTML of the record - promised, measured, accepted, and evidence. Regenerate after you change memory. Day to day: [docs/USAGE.md](docs/USAGE.md).
38
50
 
39
- **Try it without an AI model:**
51
+ <details>
52
+ <summary><b>Claude Code</b></summary>
53
+
54
+ ```text
55
+ /plugin marketplace add suboss87/fdeops
56
+ /plugin install fdeops@fdeops
57
+ ```
58
+
59
+ The plugin adds session hooks and the slash commands below. Skill-only installation does not add hooks. See the [installation guide](docs/install.md) for setup details.
60
+
61
+ </details>
62
+
63
+ <details>
64
+ <summary><b>Cursor</b></summary>
65
+
66
+ After installing the skill, add the FDEOps instructions to the **client workspace** you have open:
40
67
 
41
68
  ```bash
42
- npx fdeops demo
69
+ npx fdeops adapters .
43
70
  ```
44
71
 
45
- The demo runs fictional notes through review, applies them in a sandbox, and prints a fieldbook path to open. It writes and resets only its demo folder under `~/fde-engagements/.demo/`. Remove the demo with `npx fdeops demo --clean`. `npx` may download packages; the FDEOps CLI itself works locally.
72
+ See [adapters/](adapters/README.md).
46
73
 
47
- ⭐ **If FDEOps makes your client work easier, star the repo.**
74
+ </details>
48
75
 
49
- ## What a working day looks like
76
+ <details>
77
+ <summary><b>Codex, other agents, and offline setup</b></summary>
50
78
 
51
- You come out of a meeting with this:
79
+ Use the skill installation above in a supported host. If the agent cannot create and bind the client folder, run this from the client workspace:
52
80
 
53
- ```text
54
- @fde Mara wants CSV upload first. Devon asked for ERP sync,
55
- but Mara has not approved that scope. The staging replay took
56
- five minutes; production has not been measured. Ask Mara for
57
- staging access before Friday. Source: kickoff meeting, 10 September.
81
+ ```bash
82
+ npx fdeops resume --init client01
58
83
  ```
59
84
 
60
- The agent shows you what changed, what was only requested, what is still unknown, and what happens next. You correct it and confirm the update. A request does not become agreed scope. A staging result does not become a production result. Naming a signer does not mean they accepted the work.
85
+ For offline use, transfer an existing checkout to a machine with Node.js and Git, then run `node bin/install.js` from that checkout. Host adapters, local models, and advanced options are covered in [docs/install.md](docs/install.md).
86
+
87
+ </details>
61
88
 
62
- Tomorrow, `@fde` resumes from that record. Before a sponsor meeting, ask what was promised, what was measured, and where the proof is. When someone takes over, give them the handoff packet.
63
89
 
64
- [Walk through notes → REVIEW → apply → evidence](docs/USAGE.md#new-here-5-minutes).
90
+ <a name="what-a-working-day-looks-like"></a>
65
91
 
66
92
  ## Your daily fieldbook
67
93
 
68
- ![Dark FDEOps fieldbook with one recommended action per client and the gaps behind it](media/fieldbook-preview.png)
94
+ See what needs your attention before you open another client thread: an open risk, missing evidence, a result waiting for acceptance, or the next action.
95
+
96
+ ![Dark FDEOps fieldbook showing next actions and delivery gaps across fictional clients](media/fieldbook-preview.png)
69
97
 
70
98
  ```bash
71
- npx fdeops dashboard --open # current client
72
- npx fdeops dashboard --all --open # all clients
99
+ npx fdeops dashboard --all --open
73
100
  ```
74
101
 
75
- Open a client, inspect its record, and copy an action into your agent to continue the work. The dashboard is a read-only snapshot. After updating the record, run the command again to refresh it. The screenshot uses fictional clients.
102
+ Open a client, inspect its record, and copy an action into your agent to continue. The dashboard is a read-only snapshot; repeat the command after updating your records to refresh it.
76
103
 
77
- <a name="how-skills-work"></a>
104
+ **Want to see the whole loop first?** `npx fdeops demo` runs fictional notes through review and prints a sample fieldbook path to open. It writes and resets its own folder under `~/fde-engagements/.demo/`, needs no AI model, and can be removed with `npx fdeops demo --clean`.
78
105
 
79
- ## From the first meeting to handover
106
+ ⭐ If FDEOps makes your client work easier, star the repo.
80
107
 
81
- Describe the situation to `@fde`; it selects the relevant workflow. You do not need to learn a catalog of skills.
108
+ ---
82
109
 
83
- | Stage | What you work through |
84
- |---|---|
85
- | Land | Understand the brief and name who can accept the work |
86
- | Discover | Check the actual workflow, constraints, and source of the problem |
87
- | Plan | Agree a small deliverable and an observable test for “done” |
88
- | Ship | Prove it on their staging, review release approval, and test recovery |
89
- | Outcome | Compare promised and measured results; record customer acceptance |
90
- | Close | Transfer the runbook, evidence, open risks, and operating ownership |
110
+ <a name="from-the-first-meeting-to-handover"></a>
91
111
 
92
- The Claude Code plugin also provides `/brief`, `/discover`, `/plan`, `/ship`, `/outcome`, and `/close`. Daily plugin shortcuts are `/debrief`, `/prep`, `/trust`, `/receipts`, and `/readout`. Other hosts use the same `@fde` entry and methodology.
112
+ ## Commands
93
113
 
94
- Each skill gives the agent steps to follow, a record to produce, and a checkpoint with you. There are 30 routed skills, plus industry overlays. Start with the [three delivery checklists](docs/skills.md#three-delivery-checklists); use the [full reference](docs/skills-reference.md) when you need the detail.
114
+ Describe the situation to `@fde`. It selects the relevant skill. The Claude Code plugin also provides these stage commands; other hosts use the same method through `@fde`.
95
115
 
96
- ## Use the CLI directly
116
+ | What you're doing | Command | Stage |
117
+ |-------------------|---------|-------|
118
+ | First days. Get the brief. Name who signs. | `/brief` | Land |
119
+ | Check the brief is the real job. | `/discover` | Discover |
120
+ | Sequence from done, not from the ticket. | `/plan` | Plan |
121
+ | Prove it on their staging, then go live. | `/ship` | Ship |
122
+ | What you promised, measured, and who accepted. | `/outcome` | Outcome |
123
+ | Hand it over. They run it without you. | `/close` | Close |
97
124
 
98
- The CLI does the file work without calling a model. Commands that change records write when you run them; `debrief --smart` stages a proposal for review before `--apply`.
125
+ Claude Code shortcuts for the moments between stages: `/debrief` (notes into the record), `/prep` (one page before you walk in), `/trust` (process gap, or they stopped trusting you), `/receipts` (find what was recorded and where it came from), `/readout` (Friday page for the sponsor; not a seventh stage).
99
126
 
100
- | You need to… | Run |
101
- |---|---|
102
- | Resume a client | `npx fdeops resume` |
103
- | Review messy notes | `npx fdeops debrief --smart notes.md` |
104
- | Apply the reviewed proposal | `npx fdeops debrief --apply` |
105
- | Find a source | `npx fdeops recall "retry decision"` |
106
- | Prepare a sponsor readout | `npx fdeops defend` |
107
- | Check readiness to plan or build | `npx fdeops doctor --ready` |
108
- | Export a successor packet | `npx fdeops handoff --out successor.md` |
127
+ You can also just say it: “Prep me for the sponsor meeting,” “What did we agree about scope?” or “Help me hand this over.”
128
+
129
+ ---
130
+
131
+ ## All 30 Skills
132
+
133
+ Thirty situations, grouped by stage. Each skill gives the agent steps to follow, a record or report to produce, and a checkpoint with you. You describe the work; `@fde` finds the skill.
134
+
135
+ Full detail: [docs/skills-reference.md](docs/skills-reference.md).
136
+
137
+ ### Land
138
+
139
+ | Skill | What it does | Use when |
140
+ |--------|--------------|----------|
141
+ | [land](skills/fde/references/land.md) | Interrogate the brief | New client, first meeting, just got the brief |
142
+ | [audit](skills/fde/references/audit.md) | Verify inherited claims | Taking over, previous consultant left |
143
+ | [who-decides](skills/fde/references/who-decides.md) | Map decision rights | Need to know who matters |
144
+ | [earn-trust](skills/fde/references/earn-trust.md) | Earn access | Need access or credibility |
145
+ | [hold-scope](skills/fde/references/hold-scope.md) | Hold scope | "Also can you…", timeline unchanged |
146
+
147
+ ### Discover
148
+
149
+ | Skill | What it does | Use when |
150
+ |--------|--------------|----------|
151
+ | [discover](skills/fde/references/discover.md) | Frame the problem | Brief feels wrong, shadow processes |
152
+ | [test-assumptions](skills/fde/references/test-assumptions.md) | Test assumptions | Brief feels too neat |
153
+ | [score-use-cases](skills/fde/references/score-use-cases.md) | Score use cases | Everything is P0 |
154
+ | [poc](skills/fde/references/poc.md) | Validate the solution | POC, spike, need to de-risk |
155
+
156
+ ### Plan
157
+
158
+ | Skill | What it does | Use when |
159
+ |--------|--------------|----------|
160
+ | [plan](skills/fde/references/plan.md) | Sequence the work | What order, what is done |
161
+ | [business-case](skills/fde/references/business-case.md) | Build the business case | Defend budget or timeline |
162
+ | [three-options](skills/fde/references/three-options.md) | Generate options | "What should we do?" |
163
+ | [pick-three](skills/fde/references/pick-three.md) | Prioritize three | Everything is urgent |
164
+
165
+ ### Ship
166
+
167
+ | Skill | What it does | Use when |
168
+ |--------|--------------|----------|
169
+ | [ship](skills/fde/references/ship.md) | Deliver the increment | Building, updating, or going live |
170
+ | [what-breaks](skills/fde/references/what-breaks.md) | Assess impact | Touching shared infrastructure |
171
+ | [rescue](skills/fde/references/rescue.md) | Resolve the incident | Down, or they went quiet |
172
+ | [review](skills/fde/references/review.md) | Review the change | Before merge, scope creep |
173
+ | [rollback](skills/fde/references/rollback.md) | Rehearse rollback | "We can always revert" |
109
174
 
110
- [All commands and examples](docs/USAGE.md).
175
+ ### Outcome
111
176
 
112
- For free-form notes, start with `@fde` so your agent can help interpret them. The CLI's `--smart` option recognizes common phrases; review its proposal because it can miss requests or next actions in ordinary prose.
177
+ | Skill | What it does | Use when |
178
+ |--------|--------------|----------|
179
+ | [readout](skills/fde/references/readout.md) | Report the outcome | Friday, sponsor update |
180
+ | [demo-prep](skills/fde/references/demo-prep.md) | Prepare the demo | Demo or exec walkthrough |
181
+ | [debrief](skills/fde/references/debrief.md) | Capture the meeting | Just left a meeting |
182
+ | [board-memo](skills/fde/references/board-memo.md) | Brief the board | Justify continued investment |
183
+ | [dashboard](skills/fde/references/dashboard.md) | Open the fieldbook | This customer, or all of them |
184
+ | [ingest](skills/fde/references/ingest.md) | Ingest sources | Transcript, Notion, Slack |
185
+ | [connect](skills/fde/references/connect.md) | Connect a source | Connect Granola |
113
186
 
114
- ## Your records, your control
187
+ ### Close
115
188
 
116
- Each client has its own `.fde/` folder of Markdown files. The brief, success criteria, decisions, risks, and delivery ledger stay readable outside FDEOps. The CLI uses local files and Git, with no network calls or telemetry. Optional [MCP sources](mcp/recipes/) are connected through your agent host, then pulled and reviewed on request.
189
+ | Skill | What it does | Use when |
190
+ |--------|--------------|----------|
191
+ | [close](skills/fde/references/close.md) | Transfer operations | Wrapping up |
192
+ | [runbook](skills/fde/references/runbook.md) | Write the runbook | They must operate without you |
193
+ | [switch-clients](skills/fde/references/switch-clients.md) | Switch engagements | 2+ clients |
194
+ | [encode-pattern](skills/fde/references/encode-pattern.md) | Encode the pattern | It will apply again |
195
+ | [red-team](skills/fde/references/red-team.md) | Challenge the plan | "Poke holes in this" |
117
196
 
118
- Default session context is capped at **16 KiB**, including constraints and selected records. Older detail stays on disk and can be retrieved with `recall`. This limits FDEOps output, not everything your agent puts into its context window.
197
+ Overlays (on signal, not on request): [ai](skills/fde/references/ai.md) · [artifacts](skills/fde/references/artifacts.md) · [fintech](skills/fde/references/fintech.md) · [healthcare](skills/fde/references/healthcare.md) · [gov](skills/fde/references/gov.md). AI companion (not a sixth overlay): [eval-pack](skills/fde/references/eval-pack.md).
119
198
 
120
- Your AI host may send what it reads to its configured model. FDEOps redacts `<private>` blocks from its CLI, hook, and dashboard outputs; do not paste or load raw private blocks through file tools. Enabled session hooks can record mechanical session state automatically. Review reports before sharing client information.
199
+ Optional pull: you add the source MCP; we **pull** on request. [mcp/recipes/](mcp/recipes/)
121
200
 
122
- The CLI and dashboard need no model. The tested small local models produced wrong or incomplete answers; read the results before relying on one for client work. [Verification and limits](docs/verification.md) · [Privacy](PRIVACY.md) · [Security](SECURITY.md).
201
+ ---
123
202
 
124
- ## Find your way around
203
+ <a name="use-the-cli-directly"></a>
204
+
205
+ ## How Skills Work
206
+
207
+ One `@fde`. One file per situation. One folder per client.
208
+
209
+ Tell the agent what is happening. It reads the client record, opens the relevant skill, and works through the situation with you. After a meeting, it proposes the decisions, open questions, and next action. You correct what it misunderstood and confirm the update.
210
+
211
+ A request stays a request until agreed. A staging result stays separate from production. Recording a result does not mean the customer accepted it.
212
+
213
+ At the next session, FDEOps supplies a short summary instead of the whole history. Older detail stays on disk; `recall` finds relevant records when needed. The default summary is capped at 16 KiB, which limits FDEOps output rather than everything your agent loads.
214
+
215
+ Before a sponsor meeting, `npx fdeops defend` separates recorded acceptance from claims and missing evidence. For a successor, `npx fdeops handoff --out successor.md` creates a portable summary with risks and sources.
216
+
217
+ For free-form notes, start with `@fde`. The CLI's `debrief --smart` recognizes common phrases; it can miss details that your agent needs to help interpret. [Follow the notes → review → apply walkthrough](docs/USAGE.md#new-here-5-minutes).
218
+
219
+ ---
220
+
221
+ ## Engagement memory (`.fde/`)
222
+
223
+ One folder per client. Plain markdown. Grep it, copy it, take it into a meeting.
224
+
225
+ | File | Holds |
226
+ |------|-------|
227
+ | `context.md` | Where you are |
228
+ | `brief.md` / `success.md` | What they asked; what “done” is and who signs |
229
+ | `reality.md` / `terrain.md` | The real problem; the map |
230
+ | `stakeholders.md` | `[signal:green\|amber\|red]` - worst active signal wins; empty is **new**, not green |
231
+ | `trust-profile.md` | Sacred data, AI policy, approval chain |
232
+ | `decisions.md` / `risks.md` / `delivery.md` | Dated choices; live risks; what shipped, evidence, rollback, acceptance |
233
+
234
+ Schema: [docs/schema.md](docs/schema.md). Fieldbook: `npx fdeops dashboard --open` (bound) or `--all --open` (portfolio).
235
+
236
+ ---
237
+
238
+ ## Who this is for
239
+
240
+ Forward deployed engineers, independent consultants, and small agencies working with customer teams. You need to carry the brief, decisions, delivery evidence, and handover across meetings, repositories, and sometimes several clients.
241
+
242
+ If your work has no client commitments or operating handover to track, a simpler project note may be enough.
243
+
244
+ <a name="your-records-your-control"></a>
245
+
246
+ ## Your data stays yours
247
+
248
+ The CLI works with local files and Git, without network calls or telemetry. Client records remain readable Markdown if you stop using FDEOps.
249
+
250
+ Your AI host may send the material it reads to its configured model. CLI context and smart proposals mask common email, phone, SSN-shaped, and credential patterns locally; this is not complete PII detection. FDEOps redacts `<private>` blocks from CLI, dashboard, and hook outputs; do not load those raw blocks through the agent's file tools. Review reports before sharing client information.
251
+
252
+ You review proposed decisions. Enabled session hooks can save where the session left off automatically; direct CLI write commands update records when you run them.
253
+
254
+ The CLI and dashboard need no model. AI-assisted local use needs an agent with file and command access. Our small local-model tests produced wrong or incomplete answers, so check the [verification results](docs/verification.md) before relying on one for client work.
255
+
256
+ [Privacy](PRIVACY.md) · [Security](SECURITY.md)
257
+
258
+ ## Principles
259
+
260
+ - **Who signs** - name who can accept the work.
261
+ - **Brief vs real job** - check what happens on the floor, not only the slide.
262
+ - **Back from done** - agree how you will test success before planning the build.
263
+ - **Their staging, then live** - prove the change and agree the release and rollback.
264
+ - **Promised, measured, accepted** - keep each separate, with its evidence.
265
+ - **They run it** - hand over the knowledge and ownership, not just the code.
266
+ - **The kit says what to check. You still decide.**
267
+
268
+ ---
269
+
270
+ <a name="find-your-way-around"></a>
271
+
272
+ ## Project Structure
125
273
 
126
274
  | You want to… | Start here |
127
275
  |---|---|
128
- | Install or use FDEOps | [Documentation](docs/README.md) |
129
- | Understand or change a workflow | [The `@fde` skill](skills/fde/SKILL.md) and its `references/` |
130
- | Work on the CLI or dashboard | [`bin/`](bin/), shared helpers in `bin/lib/`, regressions in [`test/`](test/) |
131
- | Explore sample client records | [`examples/`](examples/) |
132
- | Check measured behavior and known gaps | [`evals/`](evals/) and [verification](docs/verification.md) |
133
- | Understand every folder | [Repository map](docs/REPO_LAYOUT.md) |
276
+ | Install or use FDEOps | [docs/](docs/README.md) |
277
+ | Understand or change a workflow | [skills/fde/](skills/fde/SKILL.md) and its `references/` |
278
+ | Work on the CLI or fieldbook | [bin/](bin/) and [test/](test/) |
279
+ | Walk through a client engagement | [examples/](examples/) |
280
+ | Check what has been tested | [evals/](evals/) and [verification](docs/verification.md) |
281
+
282
+ [Full repository map](docs/REPO_LAYOUT.md).
283
+
284
+ ---
285
+
286
+ <a name="contribute"></a>
287
+
288
+ ## Contributing
289
+
290
+ **[Subash Natarajan](https://www.linkedin.com/in/subashn/)**. [Issues](https://github.com/suboss87/fdeops/issues) · [Discussions](https://github.com/suboss87/fdeops/discussions) · [CONTRIBUTING.md](CONTRIBUTING.md) · [Code of Conduct](CODE_OF_CONDUCT.md)
134
291
 
135
- ## Contribute
292
+ Skills should be **specific** (actionable steps), **verifiable** (an artifact in `.fde/`), and **minimal**. The `fde` CLI stays local-only.
136
293
 
137
- Share an anonymized failure case, a reproducible bug, or a focused improvement through [Issues](https://github.com/suboss87/FDEOps/issues) or [Discussions](https://github.com/suboss87/FDEOps/discussions). Read the [contribution guide](CONTRIBUTING.md) before changing a workflow or command.
294
+ ## License
138
295
 
139
- Built and maintained by **[Subash Natarajan](https://github.com/suboss87)**. MIT licensed; preserve applicable notices when redistributing.
296
+ MIT - use these skills on client work.
package/bin/check.js CHANGED
@@ -354,7 +354,7 @@ if (/\broutes methods\b|\bphase methods\b|\bengagement methods\b/.test(usage)) {
354
354
  ok('README tone')
355
355
 
356
356
  if (fs.existsSync(path.join(root, '.codex')) || fs.existsSync(path.join(root, '.opencode'))) {
357
- fail('.codex/ or .opencode/ must not live at repo root - use docs/internal/experimental-agents/')
357
+ fail('.codex/ or .opencode/ must not live at repo root - keep personal agent setup outside the public repository')
358
358
  } else ok('no root-level experimental stubs')
359
359
 
360
360
  for (const rel of ['docs/schema.md', 'docs/skills-reference.md', 'PRIVACY.md']) {
@@ -415,18 +415,13 @@ ok('examples walkthrough files')
415
415
  }
416
416
 
417
417
  if (fs.existsSync(path.join(root, 'tasks', 'plan.md'))) {
418
- fail('tasks/plan.md should not be in public tree (move to docs/internal)')
418
+ fail('tasks/plan.md should not be in the public tree; keep work plans outside the repository')
419
419
  }
420
420
 
421
421
  if (fs.existsSync(path.join(root, 'patterns'))) {
422
422
  fail('patterns/ is deprecated - use skills/ only (overlays live there)')
423
423
  }
424
424
 
425
- const pmf = path.join(root, 'docs', 'internal', 'PMF_360_REVIEW.md')
426
- if (fs.existsSync(pmf) && !read('docs/internal/PMF_360_REVIEW.md').includes('INTERNAL')) {
427
- fail('PMF_360_REVIEW.md needs INTERNAL banner')
428
- } else if (fs.existsSync(pmf)) ok('internal PMF banner')
429
-
430
425
  const hook = read('hooks/session-start')
431
426
  const hookCode = hook.replace(/^[ \t]*#.*$/gm, '')
432
427
  if (!hook.includes('FDEOPS_ENGAGEMENT')) {