fdeops 3.27.0 → 3.28.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 +216 -78
- package/bin/check.js +15 -32
- package/bin/fde.js +268 -51
- package/bin/lib/render.js +2 -2
- package/bin/lib/trust.js +4 -28
- package/bin/lib/value-ledger.js +46 -1
- package/mcp/fdeops-ingest/package.json +1 -1
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/skills/fde/references/audit.md +3 -3
- package/skills/fde/references/debrief.md +13 -1
package/README.md
CHANGED
|
@@ -1,158 +1,296 @@
|
|
|
1
1
|
# FDEOps
|
|
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
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
| You switch clients, agents, or engineers | Decisions, constraints, evidence, and one next action in each client's record |
|
|
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
|
+
|
|
9
|
+
Notes stay on your laptop, in a separate record for each client. Review the agent's proposed changes before saving them.
|
|
10
|
+
|
|
11
|
+
Keep the coding pack you already use. FDEOps adds the client brief, decisions, and evidence around that work.
|
|
13
12
|
|
|
14
|
-
|
|
13
|
+
[Quick start](#quick-start) · [Daily fieldbook](#your-daily-fieldbook) · [30 skills](#all-30-skills) · [Documentation](docs/README.md)
|
|
15
14
|
|
|
16
|
-
<img width="
|
|
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
|
+
|
|
17
|
+
---
|
|
17
18
|
|
|
18
19
|
## Quick Start
|
|
19
20
|
|
|
20
|
-
|
|
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:**
|
|
21
30
|
|
|
22
31
|
```bash
|
|
23
32
|
npx skills add suboss87/fdeops --skill fde
|
|
24
33
|
```
|
|
25
34
|
|
|
26
|
-
|
|
35
|
+
One chat. Name the client:
|
|
27
36
|
|
|
28
37
|
```text
|
|
29
38
|
@fde this is client01
|
|
30
39
|
```
|
|
31
40
|
|
|
32
|
-
|
|
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.
|
|
33
42
|
|
|
34
|
-
|
|
43
|
+
Open the engagement fieldbook:
|
|
35
44
|
|
|
36
|
-
|
|
37
|
-
|
|
45
|
+
```bash
|
|
46
|
+
npx fdeops dashboard --open
|
|
47
|
+
```
|
|
38
48
|
|
|
39
|
-
|
|
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).
|
|
50
|
+
|
|
51
|
+
<details>
|
|
52
|
+
<summary><b>Claude Code</b></summary>
|
|
40
53
|
|
|
41
54
|
```text
|
|
42
55
|
/plugin marketplace add suboss87/fdeops
|
|
43
56
|
/plugin install fdeops@fdeops
|
|
44
57
|
```
|
|
45
58
|
|
|
46
|
-
The plugin
|
|
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>
|
|
47
65
|
|
|
48
|
-
|
|
66
|
+
After installing the skill, add the FDEOps instructions to the **client workspace** you have open:
|
|
49
67
|
|
|
50
68
|
```bash
|
|
51
|
-
|
|
52
|
-
cd fdeops
|
|
53
|
-
node bin/install.js
|
|
69
|
+
npx fdeops adapters .
|
|
54
70
|
```
|
|
55
71
|
|
|
56
|
-
|
|
72
|
+
See [adapters/](adapters/README.md).
|
|
57
73
|
|
|
58
74
|
</details>
|
|
59
75
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
One command per stage. Skills load automatically. Describe the situation to `@fde`; the Claude Code plugin also provides these slash commands.
|
|
63
|
-
|
|
64
|
-
| Stage | Command | Result to review |
|
|
65
|
-
|---|---|---|
|
|
66
|
-
| Land | `/brief` | The brief, unknowns, and who can accept the work |
|
|
67
|
-
| Discover | `/discover` | The actual workflow and evidence behind the problem |
|
|
68
|
-
| Plan | `/plan` | A small deliverable, constraints, and acceptance criteria |
|
|
69
|
-
| Ship | `/ship` | Proof on their staging, release approval, and rollback |
|
|
70
|
-
| Outcome | `/outcome` | Promised, measured, accepted, and supporting evidence |
|
|
71
|
-
| Close | `/close` | Runbook, operating owner, and handover gaps |
|
|
76
|
+
<details>
|
|
77
|
+
<summary><b>Codex, other agents, and offline setup</b></summary>
|
|
72
78
|
|
|
73
|
-
|
|
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:
|
|
74
80
|
|
|
75
|
-
|
|
81
|
+
```bash
|
|
82
|
+
npx fdeops resume --init client01
|
|
83
|
+
```
|
|
76
84
|
|
|
77
|
-
|
|
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).
|
|
78
86
|
|
|
79
|
-
|
|
80
|
-
@fde Debrief: Mara agreed to CSV upload. Devon asked for ERP sync,
|
|
81
|
-
but Mara has not approved it. The staging replay took 5 minutes;
|
|
82
|
-
we have no comparable production baseline. Ask Mara for staging access.
|
|
83
|
-
```
|
|
87
|
+
</details>
|
|
84
88
|
|
|
85
|
-
1. **Review:** the agent separates decisions, requests, unknowns, measurements, and next actions. Check the source and any conflicts with existing records.
|
|
86
|
-
2. **Apply:** confirm the proposed interpretation. An ERP request stays a request; a staging result stays a staging result. Saving the record does not mean the customer approved either.
|
|
87
|
-
3. **Defend:** ask `@fde What did we agree about ERP, and what evidence supports the result?` Review the supplied source, superseded decisions, and missing evidence before using the answer in a sponsor update.
|
|
88
89
|
|
|
89
|
-
|
|
90
|
+
<a name="what-a-working-day-looks-like"></a>
|
|
90
91
|
|
|
91
92
|
## Your daily fieldbook
|
|
92
93
|
|
|
93
|
-
|
|
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.
|
|
94
95
|
|
|
95
|
-
|
|
96
|
+

|
|
96
97
|
|
|
97
98
|
```bash
|
|
98
|
-
npx fdeops dashboard --open
|
|
99
|
-
npx fdeops dashboard --all --open # all clients
|
|
99
|
+
npx fdeops dashboard --all --open
|
|
100
100
|
```
|
|
101
101
|
|
|
102
|
-
|
|
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.
|
|
103
|
+
|
|
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`.
|
|
105
|
+
|
|
106
|
+
⭐ If FDEOps makes your client work easier, star the repo.
|
|
107
|
+
|
|
108
|
+
---
|
|
109
|
+
|
|
110
|
+
<a name="from-the-first-meeting-to-handover"></a>
|
|
111
|
+
|
|
112
|
+
## Commands
|
|
113
|
+
|
|
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`.
|
|
115
|
+
|
|
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 |
|
|
124
|
+
|
|
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).
|
|
126
|
+
|
|
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" |
|
|
174
|
+
|
|
175
|
+
### Outcome
|
|
176
|
+
|
|
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 |
|
|
186
|
+
|
|
187
|
+
### Close
|
|
188
|
+
|
|
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" |
|
|
196
|
+
|
|
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).
|
|
198
|
+
|
|
199
|
+
Optional pull: you add the source MCP; we **pull** on request. [mcp/recipes/](mcp/recipes/)
|
|
200
|
+
|
|
201
|
+
---
|
|
202
|
+
|
|
203
|
+
<a name="use-the-cli-directly"></a>
|
|
103
204
|
|
|
104
205
|
## How Skills Work
|
|
105
206
|
|
|
106
|
-
One
|
|
207
|
+
One `@fde`. One file per situation. One folder per client.
|
|
107
208
|
|
|
108
|
-
|
|
109
|
-
@fde + your situation → one relevant skill → reviewed work → .fde/ → fieldbook
|
|
110
|
-
```
|
|
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.
|
|
111
210
|
|
|
112
|
-
|
|
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.
|
|
113
212
|
|
|
114
|
-
|
|
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
|
+
---
|
|
115
220
|
|
|
116
221
|
## Engagement memory (`.fde/`)
|
|
117
222
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
|
121
|
-
|
|
122
|
-
| `
|
|
123
|
-
| `
|
|
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 |
|
|
124
233
|
|
|
125
|
-
|
|
234
|
+
Schema: [docs/schema.md](docs/schema.md). Fieldbook: `npx fdeops dashboard --open` (bound) or `--all --open` (portfolio).
|
|
235
|
+
|
|
236
|
+
---
|
|
126
237
|
|
|
127
238
|
## Who this is for
|
|
128
239
|
|
|
129
|
-
|
|
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.
|
|
130
241
|
|
|
131
|
-
|
|
242
|
+
If your work has no client commitments or operating handover to track, a simpler project note may be enough.
|
|
132
243
|
|
|
133
|
-
-
|
|
134
|
-
- Name who can accept which outcome.
|
|
135
|
-
- Keep promised, measured, and accepted results separate.
|
|
136
|
-
- Prove a small change where the client will operate it, with a tested recovery path.
|
|
137
|
-
- Leave a record another engineer can understand and challenge.
|
|
138
|
-
- Keep each client separate and confirm the active binding before writing.
|
|
244
|
+
<a name="your-records-your-control"></a>
|
|
139
245
|
|
|
140
246
|
## Your data stays yours
|
|
141
247
|
|
|
142
|
-
The CLI
|
|
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. 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.
|
|
143
255
|
|
|
144
256
|
[Privacy](PRIVACY.md) · [Security](SECURITY.md)
|
|
145
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
|
+
|
|
146
272
|
## Project Structure
|
|
147
273
|
|
|
148
|
-
|
|
274
|
+
| You want to… | Start here |
|
|
275
|
+
|---|---|
|
|
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>
|
|
149
287
|
|
|
150
288
|
## Contributing
|
|
151
289
|
|
|
152
|
-
|
|
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)
|
|
153
291
|
|
|
154
|
-
|
|
292
|
+
Skills should be **specific** (actionable steps), **verifiable** (an artifact in `.fde/`), and **minimal**. The `fde` CLI stays local-only.
|
|
155
293
|
|
|
156
294
|
## License
|
|
157
295
|
|
|
158
|
-
MIT - use
|
|
296
|
+
MIT - use these skills on client work.
|
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
|
}
|