fdeops 3.26.0 → 3.27.1
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 +75 -180
- package/bin/check.js +15 -32
- package/bin/fde.js +356 -122
- package/bin/install.js +1 -1
- package/bin/lib/delivery-gaps.js +34 -0
- package/bin/lib/provenance.js +42 -0
- package/bin/lib/render.js +17 -31
- package/bin/lib/value-ledger.js +8 -2
- package/mcp/fdeops-ingest/package.json +1 -1
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/skills/fde/SKILL.md +6 -5
- package/skills/fde/references/plan.md +2 -0
- package/skills/fde/references/poc.md +11 -3
- package/skills/fde/references/ship.md +3 -1
package/README.md
CHANGED
|
@@ -1,244 +1,139 @@
|
|
|
1
1
|
# FDEOps
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**Forward deployed engineering skills for AI coding agents.**
|
|
4
4
|
|
|
5
|
-
|
|
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.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
<a name="who-this-is-for"></a>
|
|
8
8
|
|
|
9
|
-
|
|
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.
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
[Install](#quick-start) · [See the dashboard](#your-daily-fieldbook) · [Documentation](docs/README.md)
|
|
12
12
|
|
|
13
|
-
|
|
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" />
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
## Why use it?
|
|
16
16
|
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
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.
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
## Quick Start
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Requires Node.js 18+, Git, and an AI coding agent that supports skills. Install the FDEOps skill:
|
|
24
24
|
|
|
25
25
|
```bash
|
|
26
26
|
npx skills add suboss87/fdeops --skill fde
|
|
27
27
|
```
|
|
28
28
|
|
|
29
|
-
|
|
29
|
+
Open a client workspace and tell your agent:
|
|
30
30
|
|
|
31
31
|
```text
|
|
32
32
|
@fde this is client01
|
|
33
33
|
```
|
|
34
34
|
|
|
35
|
-
The agent creates
|
|
36
|
-
|
|
37
|
-
Open the engagement fieldbook anytime:
|
|
38
|
-
|
|
39
|
-
```bash
|
|
40
|
-
npx fdeops dashboard --open
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
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).
|
|
44
|
-
|
|
45
|
-
<details>
|
|
46
|
-
<summary><b>Claude Code</b></summary>
|
|
47
|
-
|
|
48
|
-
```text
|
|
49
|
-
/plugin marketplace add suboss87/fdeops
|
|
50
|
-
/plugin install fdeops@fdeops
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
The plugin registers Claude Code session hooks and slash commands. A skill-only install does not register hooks.
|
|
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.
|
|
54
36
|
|
|
55
|
-
|
|
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.
|
|
56
38
|
|
|
57
|
-
|
|
58
|
-
<summary><b>Cursor</b></summary>
|
|
59
|
-
|
|
60
|
-
After the skill install, in the **client repo** you have open (pointer, not a second pack):
|
|
39
|
+
**Try it without an AI model:**
|
|
61
40
|
|
|
62
41
|
```bash
|
|
63
|
-
npx fdeops
|
|
42
|
+
npx fdeops demo
|
|
64
43
|
```
|
|
65
44
|
|
|
66
|
-
|
|
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.
|
|
67
46
|
|
|
68
|
-
|
|
47
|
+
⭐ **If FDEOps makes your client work easier, star the repo.**
|
|
69
48
|
|
|
70
|
-
|
|
71
|
-
<summary><b>Clone install and offline use</b></summary>
|
|
49
|
+
## What a working day looks like
|
|
72
50
|
|
|
73
|
-
|
|
74
|
-
git clone https://github.com/suboss87/fdeops.git
|
|
75
|
-
cd fdeops
|
|
76
|
-
node bin/install.js
|
|
77
|
-
```
|
|
51
|
+
You come out of a meeting with this:
|
|
78
52
|
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
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.
|
|
83
58
|
```
|
|
84
59
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
</details>
|
|
88
|
-
|
|
89
|
-
---
|
|
90
|
-
|
|
91
|
-
## Commands
|
|
92
|
-
|
|
93
|
-
One command per stage. Skills load automatically.
|
|
94
|
-
|
|
95
|
-
Six stages organize the engagement: Land, Discover, Plan, Ship, Outcome, Close. Start with the current situation; revisit earlier decisions when the evidence changes. Slash commands below are provided by the Claude Code plugin. In other hosts, describe the same request to `@fde`.
|
|
96
|
-
|
|
97
|
-
| What you're doing | Command | Stage |
|
|
98
|
-
|-------------------|---------|-------|
|
|
99
|
-
| First days. Get the brief. Name who signs. | `/brief` | Land |
|
|
100
|
-
| Check the brief is the real job. | `/discover` | Discover |
|
|
101
|
-
| Sequence from done, not from the ticket. | `/plan` | Plan |
|
|
102
|
-
| Prove it on their staging, then go live. | `/ship` | Ship |
|
|
103
|
-
| What you promised, measured, and who accepted. | `/outcome` | Outcome |
|
|
104
|
-
| Hand it over. They run it without you. | `/close` | Close |
|
|
105
|
-
|
|
106
|
-
Same `@fde`, when you need them: `/debrief` (notes into the record), `/prep` (one page before you walk in), `/trust` (process gap, or they stopped trusting you), `/receipts` (a dated line, or it did not happen), `/readout` (Friday page for the sponsor; not a seventh stage).
|
|
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.
|
|
107
61
|
|
|
108
|
-
|
|
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.
|
|
109
63
|
|
|
110
|
-
|
|
64
|
+
[Walk through notes → REVIEW → apply → evidence](docs/USAGE.md#new-here-5-minutes).
|
|
111
65
|
|
|
112
66
|
## Your daily fieldbook
|
|
113
67
|
|
|
114
|
-
 for context measurements, local-model observations, and MCP coverage.
|
|
119
|
-
|
|
120
|
-
Open `npx fdeops dashboard --all --open` to review every client. Filter what needs attention, open a client, and copy **Continue next action** into your agent. After a meeting, use **Debrief notes**; before a sponsor update, use **Review outcome**. These buttons copy prompts; work runs in your agent. Review changes there and regenerate the dashboard afterward.
|
|
121
|
-
|
|
122
|
-
## Try the complete loop
|
|
68
|
+

|
|
123
69
|
|
|
124
70
|
```bash
|
|
125
|
-
npx fdeops
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
This writes fictional records and HTML under `~/fde-engagements/.demo/`, resetting its own sandbox on each run. It requires no AI account. Open the generated report; remove the demo later with `npx fdeops demo --clean`. Follow the [five-minute walkthrough](docs/USAGE.md#new-here-5-minutes) for what to inspect.
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
## All 30 Skills
|
|
134
|
-
|
|
135
|
-
Not prompts to choose from: the router loads one relevant skill with concrete steps, an artifact, and a checkpoint. The [skills reference](docs/skills-reference.md) lists all 30, from discovery and scope control to incident response and handover. Industry and AI overlays apply when relevant.
|
|
136
|
-
|
|
137
|
-
Optional external sources use your configured MCP connections. The agent pulls on request, stages the material, and asks you to review its interpretation before applying it. The CLI itself stays local. See [source recipes](mcp/recipes/) and [ingest usage](docs/USAGE.md#ingest-pull-large-artifacts--same-confirm-loop).
|
|
138
|
-
|
|
139
|
-
---
|
|
140
|
-
|
|
141
|
-
## How Skills Work
|
|
142
|
-
|
|
143
|
-
One `@fde`. One file per situation. One folder per client.
|
|
144
|
-
|
|
71
|
+
npx fdeops dashboard --open # current client
|
|
72
|
+
npx fdeops dashboard --all --open # all clients
|
|
145
73
|
```
|
|
146
|
-
"@fde this is client01" creates ~/fde-engagements/client01/.fde/
|
|
147
|
-
/brief or English the AI coding agent loads skills/fde/SKILL.md
|
|
148
|
-
│ routes. you never pick a skill by name
|
|
149
|
-
▼
|
|
150
|
-
references/<one>.md one skill, then stop
|
|
151
|
-
│
|
|
152
|
-
▼
|
|
153
|
-
fde CLI (local) dates, gates, redacts. no network
|
|
154
|
-
│ after you confirm
|
|
155
|
-
▼
|
|
156
|
-
~/fde-engagements/client01/.fde/
|
|
157
|
-
│
|
|
158
|
-
▼
|
|
159
|
-
fde dashboard --open offline fieldbook (read-only snapshot)
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
**A dated line, or it did not happen.** Promised → measured → accepted, with evidence for the measurement. If it is not in `.fde/`, it is not on the record.
|
|
163
|
-
|
|
164
|
-
**Review judgments before recording them.** The agent shows proposed interpretations for confirmation. Direct CLI writes execute when invoked; enabled session hooks also capture mechanical session state automatically. Recording a note does not establish customer approval.
|
|
165
|
-
|
|
166
|
-
**The record is on your laptop.** Change hosts and keep the same Markdown. Claude Code plugins provide automatic session hooks; other hosts use `@fde` and CLI commands on demand. See the [install matrix](docs/install.md#who-needs-which-install).
|
|
167
|
-
|
|
168
|
-
One skill hosts load: `skills/fde/SKILL.md`. It opens one file in `skills/fde/references/` and stops. Slash commands live in `.claude/commands/`. The local CLI is `bin/fde.js` (git + files, no network). Layout: [docs/REPO_LAYOUT.md](docs/REPO_LAYOUT.md).
|
|
169
74
|
|
|
170
|
-
|
|
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.
|
|
171
76
|
|
|
172
|
-
|
|
77
|
+
<a name="how-skills-work"></a>
|
|
173
78
|
|
|
174
|
-
|
|
79
|
+
## From the first meeting to handover
|
|
175
80
|
|
|
176
|
-
|
|
177
|
-
|------|-------|
|
|
178
|
-
| `context.md` | Where you are |
|
|
179
|
-
| `brief.md` / `success.md` | What they asked; what “done” is and who signs |
|
|
180
|
-
| `reality.md` / `terrain.md` | The real problem; the map |
|
|
181
|
-
| `stakeholders.md` | `[signal:green\|amber\|red]` - worst active signal wins; empty is **new**, not green |
|
|
182
|
-
| `trust-profile.md` | Sacred data, AI policy, approval chain |
|
|
183
|
-
| `decisions.md` / `risks.md` / `delivery.md` | Dated choices; live risks; what shipped, evidence, rollback, acceptance |
|
|
81
|
+
Describe the situation to `@fde`; it selects the relevant workflow. You do not need to learn a catalog of skills.
|
|
184
82
|
|
|
185
|
-
|
|
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 |
|
|
186
91
|
|
|
187
|
-
|
|
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.
|
|
188
93
|
|
|
189
|
-
|
|
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.
|
|
190
95
|
|
|
191
|
-
|
|
96
|
+
## Use the CLI directly
|
|
192
97
|
|
|
193
|
-
|
|
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`.
|
|
194
99
|
|
|
195
|
-
|
|
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` |
|
|
196
109
|
|
|
197
|
-
|
|
110
|
+
[All commands and examples](docs/USAGE.md).
|
|
198
111
|
|
|
199
|
-
|
|
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.
|
|
200
113
|
|
|
201
|
-
|
|
114
|
+
## Your records, your control
|
|
202
115
|
|
|
203
|
-
|
|
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.
|
|
204
117
|
|
|
205
|
-
|
|
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.
|
|
206
119
|
|
|
207
|
-
|
|
208
|
-
- **Brief vs real job** - check the floor, not only the slide
|
|
209
|
-
- **Back from done** - sequence from signed-off, not from the ticket
|
|
210
|
-
- **Their staging then live** - prove it where they operate, then go live
|
|
211
|
-
- **Promised, measured, accepted** - a number nobody signed is claimed, not delivered; keep the evidence
|
|
212
|
-
- **They run it** - if they cannot operate it without you, you are not done
|
|
213
|
-
- **A dated line, or it did not happen** - these files get defended in the room
|
|
214
|
-
- **One customer, one folder** - verify the active binding before writing
|
|
215
|
-
- **The kit says what to check. You still decide.**
|
|
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.
|
|
216
121
|
|
|
217
|
-
|
|
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).
|
|
218
123
|
|
|
219
|
-
##
|
|
124
|
+
## Find your way around
|
|
220
125
|
|
|
221
|
-
|
|
|
126
|
+
| You want to… | Start here |
|
|
222
127
|
|---|---|
|
|
223
|
-
|
|
|
224
|
-
|
|
|
225
|
-
| `
|
|
226
|
-
|
|
|
227
|
-
|
|
|
228
|
-
|
|
|
229
|
-
| `docs/` and `examples/` | Usage, contributor guides, and fictional engagements |
|
|
230
|
-
|
|
231
|
-
See [repository layout](docs/REPO_LAYOUT.md) for where to make changes.
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
---
|
|
235
|
-
|
|
236
|
-
## Contributing
|
|
237
|
-
|
|
238
|
-
**[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)
|
|
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) |
|
|
239
134
|
|
|
240
|
-
|
|
135
|
+
## Contribute
|
|
241
136
|
|
|
242
|
-
|
|
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.
|
|
243
138
|
|
|
244
|
-
MIT
|
|
139
|
+
Built and maintained by **[Subash Natarajan](https://github.com/suboss87)**. MIT licensed; preserve applicable notices when redistributing.
|
package/bin/check.js
CHANGED
|
@@ -264,39 +264,28 @@ for (const m of readme.matchAll(/(?:\]\(|src=")([^)"#\s]+)(?:\)|")/g)) {
|
|
|
264
264
|
if (brokenLinks.length) fail(`README links to missing paths: ${brokenLinks.join(', ')}`)
|
|
265
265
|
else ok('README links all resolve')
|
|
266
266
|
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
'Who this is for',
|
|
272
|
-
'Commands',
|
|
273
|
-
'Principles',
|
|
274
|
-
]) {
|
|
275
|
-
if (!readme.includes(section)) fail(`README missing section: ${section}`)
|
|
267
|
+
// Validate usable entry points, not a fixed heading order or marketing copy.
|
|
268
|
+
// Host-specific commands and advanced setup belong in the linked guides.
|
|
269
|
+
for (const target of ['docs/install.md', 'docs/USAGE.md', 'docs/REPO_LAYOUT.md', 'docs/verification.md', 'PRIVACY.md']) {
|
|
270
|
+
if (!readme.includes(target)) fail(`README must link its public guide: ${target}`)
|
|
276
271
|
}
|
|
277
|
-
if (!readme.includes('AI coding agent')) {
|
|
278
|
-
fail('README must
|
|
272
|
+
if (!readme.includes('AI coding agent') || !/FDE|Forward Deployed Engineer/i.test(readme)) {
|
|
273
|
+
fail('README must identify the tool and its intended users')
|
|
274
|
+
}
|
|
275
|
+
if (!/npx skills add suboss87\/fdeops --skill fde/.test(readme) || !/@fde\s+this is/.test(readme)) {
|
|
276
|
+
fail('README must show skill installation and how to start a client')
|
|
279
277
|
}
|
|
280
|
-
ok('README clarity sections')
|
|
281
|
-
|
|
282
278
|
for (const cmd of ['/brief', '/discover', '/plan', '/ship', '/outcome', '/close', '/debrief', '/prep', '/trust', '/receipts', '/readout']) {
|
|
283
|
-
if (!readme.includes(cmd)) fail(`
|
|
279
|
+
if (!(readme + usage).includes(cmd)) fail(`Public usage documentation missing slash command ${cmd}`)
|
|
284
280
|
}
|
|
285
281
|
if (/(^|[^\w/])\/got\b/.test(readme)) fail('README must use /outcome, not /got')
|
|
286
|
-
ok('README
|
|
287
|
-
|
|
288
|
-
// Front-door map is the embed left-to-right (Land → Close). After the GitHub
|
|
289
|
-
// poster (#68) the table is the map: /brief /discover /plan /ship /outcome /close.
|
|
290
|
-
const front = readme.slice(0, 4000)
|
|
291
|
-
if (!['/brief', '/discover', '/plan', '/ship', '/outcome', '/close'].every(c => front.includes(c))) {
|
|
292
|
-
fail('README must include the Land→Close command map near the top')
|
|
293
|
-
} else ok('README command-map diagram')
|
|
282
|
+
ok('README entry points and documented commands')
|
|
294
283
|
|
|
295
284
|
if (readme.includes('your-client-repo')) {
|
|
296
285
|
fail('README must not instruct install in customer repo (your-client-repo)')
|
|
297
286
|
} else ok('README no customer-repo install')
|
|
298
287
|
|
|
299
|
-
if (!readme.includes('fde-engagements') || !/fdeops.*init
|
|
288
|
+
if (!readme.includes('fde-engagements') || !/fdeops.*resume --init/i.test(readme + read('docs/install.md'))) {
|
|
300
289
|
fail('README must document fde-engagements + init flow')
|
|
301
290
|
} else ok('README engagement path')
|
|
302
291
|
|
|
@@ -334,9 +323,9 @@ if (!fs.existsSync(path.join(root, 'docs', 'USAGE.md'))) {
|
|
|
334
323
|
fail('docs/USAGE.md missing')
|
|
335
324
|
} else ok('docs/USAGE.md')
|
|
336
325
|
|
|
337
|
-
if (!
|
|
338
|
-
fail('
|
|
339
|
-
} else ok('
|
|
326
|
+
if (!read('docs/install.md').includes('FDEOPS_ENGAGEMENT')) {
|
|
327
|
+
fail('Installation guide must document FDEOPS_ENGAGEMENT')
|
|
328
|
+
} else ok('Installation override documented')
|
|
340
329
|
|
|
341
330
|
const badPhrases = ['team of ten', 'solo 100x', '100x engineer']
|
|
342
331
|
for (const phrase of badPhrases) {
|
|
@@ -356,12 +345,6 @@ for (const rx of derivativeFraming) {
|
|
|
356
345
|
if (/docs\/internal|PMF_360/i.test(readme)) {
|
|
357
346
|
fail('README must not link docs/internal or PMF_360')
|
|
358
347
|
}
|
|
359
|
-
if (!/One command per stage/.test(readme) || !/Skills load automatically/.test(readme)) {
|
|
360
|
-
fail('README must formulate Commands as: one command per stage, skills load automatically')
|
|
361
|
-
}
|
|
362
|
-
if (!/Not prompts/.test(readme)) {
|
|
363
|
-
fail('README catalog must say skills are not prompts')
|
|
364
|
-
}
|
|
365
348
|
if (/\b(30|31|37)\s+methods\b|\broutes methods\b|\bphase methods\b|\bfield methods\b|\bengagement methods\b/.test(readme)) {
|
|
366
349
|
fail('README must call the catalog skills, not methods')
|
|
367
350
|
}
|