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 +229 -72
- package/bin/check.js +2 -7
- package/bin/fde.js +194 -55
- package/bin/lib/context.js +2 -2
- package/bin/lib/masking.js +138 -0
- package/bin/lib/memory.js +5 -2
- package/bin/lib/render.js +1 -1
- package/bin/lib/trust.js +4 -28
- package/bin/lib/value-ledger.js +46 -1
- package/mcp/fdeops-ingest/package.json +1 -1
- package/mcp/fdeops-ingest/server.js +7 -1
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/skills/fde/SKILL.md +6 -2
- package/skills/fde/references/audit.md +3 -3
- package/skills/fde/references/debrief.md +35 -24
- package/skills/fde/references/discover.md +6 -2
- package/skills/fde/references/ingest.md +6 -6
- package/skills/fde/references/land.md +2 -0
package/README.md
CHANGED
|
@@ -2,138 +2,295 @@
|
|
|
2
2
|
|
|
3
3
|
**Forward deployed engineering skills for AI coding agents.**
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
<a name="why-use-it"></a>
|
|
6
6
|
|
|
7
|
-
|
|
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
|
-
|
|
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
|
-
|
|
11
|
+
Keep the coding pack you already use. FDEOps adds the client brief, decisions, and evidence around that work.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
[Quick start](#quick-start) · [Daily fieldbook](#your-daily-fieldbook) · [30 skills](#all-30-skills) · [Documentation](docs/README.md)
|
|
14
14
|
|
|
15
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
35
|
+
One chat. Name the client:
|
|
30
36
|
|
|
31
37
|
```text
|
|
32
38
|
@fde this is client01
|
|
33
39
|
```
|
|
34
40
|
|
|
35
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
69
|
+
npx fdeops adapters .
|
|
43
70
|
```
|
|
44
71
|
|
|
45
|
-
|
|
72
|
+
See [adapters/](adapters/README.md).
|
|
46
73
|
|
|
47
|
-
|
|
74
|
+
</details>
|
|
48
75
|
|
|
49
|
-
|
|
76
|
+
<details>
|
|
77
|
+
<summary><b>Codex, other agents, and offline setup</b></summary>
|
|
50
78
|
|
|
51
|
-
|
|
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
|
-
```
|
|
54
|
-
|
|
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
|
-
|
|
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
|
-
|
|
90
|
+
<a name="what-a-working-day-looks-like"></a>
|
|
65
91
|
|
|
66
92
|
## Your daily fieldbook
|
|
67
93
|
|
|
68
|
-
|
|
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
|
+

|
|
69
97
|
|
|
70
98
|
```bash
|
|
71
|
-
npx fdeops dashboard --open
|
|
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
|
|
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
|
-
|
|
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
|
-
|
|
106
|
+
⭐ If FDEOps makes your client work easier, star the repo.
|
|
80
107
|
|
|
81
|
-
|
|
108
|
+
---
|
|
82
109
|
|
|
83
|
-
|
|
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
|
-
|
|
112
|
+
## Commands
|
|
93
113
|
|
|
94
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
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
|
-
|
|
175
|
+
### Outcome
|
|
111
176
|
|
|
112
|
-
|
|
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
|
-
|
|
187
|
+
### Close
|
|
115
188
|
|
|
116
|
-
|
|
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
|
-
|
|
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
|
-
|
|
199
|
+
Optional pull: you add the source MCP; we **pull** on request. [mcp/recipes/](mcp/recipes/)
|
|
121
200
|
|
|
122
|
-
|
|
201
|
+
---
|
|
123
202
|
|
|
124
|
-
|
|
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 | [
|
|
129
|
-
| Understand or change a workflow | [
|
|
130
|
-
| Work on the CLI or
|
|
131
|
-
|
|
|
132
|
-
| Check
|
|
133
|
-
|
|
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
|
-
|
|
292
|
+
Skills should be **specific** (actionable steps), **verifiable** (an artifact in `.fde/`), and **minimal**. The `fde` CLI stays local-only.
|
|
136
293
|
|
|
137
|
-
|
|
294
|
+
## License
|
|
138
295
|
|
|
139
|
-
|
|
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 -
|
|
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
|
|
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')) {
|