fdeops 5.1.7 → 5.1.9

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.
Files changed (116) hide show
  1. package/README.md +73 -102
  2. package/bin/generate-skills.js +9 -6
  3. package/bin/skill-catalog.js +2 -2
  4. package/bin/skill-ui.js +47 -0
  5. package/mcp/fdeops-ingest/package.json +1 -1
  6. package/package.json +1 -1
  7. package/plugin.json +1 -1
  8. package/skills/audit/.fde-generated.json +1 -0
  9. package/skills/audit/agents/openai.yaml +4 -0
  10. package/skills/board-memo/.fde-generated.json +1 -0
  11. package/skills/board-memo/agents/openai.yaml +4 -0
  12. package/skills/brief/.fde-generated.json +1 -0
  13. package/skills/brief/agents/openai.yaml +4 -0
  14. package/skills/build/.fde-generated.json +6 -5
  15. package/skills/build/SKILL.md +2 -2
  16. package/skills/build/agents/openai.yaml +4 -0
  17. package/skills/build/references/build.md +24 -13
  18. package/skills/build/references/debug.md +26 -11
  19. package/skills/build/references/integrate.md +33 -18
  20. package/skills/build/references/qa.md +24 -11
  21. package/skills/business-case/.fde-generated.json +1 -0
  22. package/skills/business-case/agents/openai.yaml +4 -0
  23. package/skills/connect/.fde-generated.json +1 -0
  24. package/skills/connect/agents/openai.yaml +4 -0
  25. package/skills/dashboard/.fde-generated.json +1 -0
  26. package/skills/dashboard/agents/openai.yaml +4 -0
  27. package/skills/debrief/.fde-generated.json +1 -0
  28. package/skills/debrief/agents/openai.yaml +4 -0
  29. package/skills/debug/.fde-generated.json +6 -5
  30. package/skills/debug/SKILL.md +2 -2
  31. package/skills/debug/agents/openai.yaml +4 -0
  32. package/skills/debug/references/build.md +24 -13
  33. package/skills/debug/references/debug.md +26 -11
  34. package/skills/debug/references/integrate.md +33 -18
  35. package/skills/debug/references/qa.md +24 -11
  36. package/skills/demo-prep/.fde-generated.json +1 -0
  37. package/skills/demo-prep/agents/openai.yaml +4 -0
  38. package/skills/discover/.fde-generated.json +1 -0
  39. package/skills/discover/agents/openai.yaml +4 -0
  40. package/skills/earn-trust/.fde-generated.json +1 -0
  41. package/skills/earn-trust/agents/openai.yaml +4 -0
  42. package/skills/evaluate/.fde-generated.json +5 -4
  43. package/skills/evaluate/agents/openai.yaml +4 -0
  44. package/skills/evaluate/references/build.md +24 -13
  45. package/skills/evaluate/references/debug.md +26 -11
  46. package/skills/evaluate/references/integrate.md +33 -18
  47. package/skills/evaluate/references/qa.md +24 -11
  48. package/skills/fde/agents/openai.yaml +4 -0
  49. package/skills/fde/references/build.md +24 -13
  50. package/skills/fde/references/debug.md +26 -11
  51. package/skills/fde/references/integrate.md +33 -18
  52. package/skills/fde/references/qa.md +24 -11
  53. package/skills/feedback/.fde-generated.json +1 -0
  54. package/skills/feedback/agents/openai.yaml +4 -0
  55. package/skills/handoff/.fde-generated.json +1 -0
  56. package/skills/handoff/agents/openai.yaml +4 -0
  57. package/skills/ingest/.fde-generated.json +1 -0
  58. package/skills/ingest/agents/openai.yaml +4 -0
  59. package/skills/integrate/.fde-generated.json +5 -4
  60. package/skills/integrate/agents/openai.yaml +4 -0
  61. package/skills/integrate/references/build.md +24 -13
  62. package/skills/integrate/references/debug.md +26 -11
  63. package/skills/integrate/references/integrate.md +33 -18
  64. package/skills/integrate/references/qa.md +24 -11
  65. package/skills/options/.fde-generated.json +1 -0
  66. package/skills/options/agents/openai.yaml +4 -0
  67. package/skills/plan/.fde-generated.json +1 -0
  68. package/skills/plan/agents/openai.yaml +4 -0
  69. package/skills/poc/.fde-generated.json +5 -4
  70. package/skills/poc/agents/openai.yaml +4 -0
  71. package/skills/poc/references/build.md +24 -13
  72. package/skills/poc/references/debug.md +26 -11
  73. package/skills/poc/references/integrate.md +33 -18
  74. package/skills/poc/references/qa.md +24 -11
  75. package/skills/prioritize/.fde-generated.json +1 -0
  76. package/skills/prioritize/agents/openai.yaml +4 -0
  77. package/skills/qa/.fde-generated.json +5 -4
  78. package/skills/qa/agents/openai.yaml +4 -0
  79. package/skills/qa/references/build.md +24 -13
  80. package/skills/qa/references/debug.md +26 -11
  81. package/skills/qa/references/integrate.md +33 -18
  82. package/skills/qa/references/qa.md +24 -11
  83. package/skills/readout/.fde-generated.json +1 -0
  84. package/skills/readout/agents/openai.yaml +4 -0
  85. package/skills/red-team/.fde-generated.json +1 -0
  86. package/skills/red-team/agents/openai.yaml +4 -0
  87. package/skills/rescue/.fde-generated.json +1 -0
  88. package/skills/rescue/agents/openai.yaml +4 -0
  89. package/skills/review/.fde-generated.json +5 -4
  90. package/skills/review/agents/openai.yaml +4 -0
  91. package/skills/review/references/build.md +24 -13
  92. package/skills/review/references/debug.md +26 -11
  93. package/skills/review/references/integrate.md +33 -18
  94. package/skills/review/references/qa.md +24 -11
  95. package/skills/rollback/.fde-generated.json +1 -0
  96. package/skills/rollback/agents/openai.yaml +4 -0
  97. package/skills/runbook/.fde-generated.json +1 -0
  98. package/skills/runbook/agents/openai.yaml +4 -0
  99. package/skills/scope/.fde-generated.json +1 -0
  100. package/skills/scope/agents/openai.yaml +4 -0
  101. package/skills/score-use-cases/.fde-generated.json +1 -0
  102. package/skills/score-use-cases/agents/openai.yaml +4 -0
  103. package/skills/ship/.fde-generated.json +5 -4
  104. package/skills/ship/agents/openai.yaml +4 -0
  105. package/skills/ship/references/build.md +24 -13
  106. package/skills/ship/references/debug.md +26 -11
  107. package/skills/ship/references/integrate.md +33 -18
  108. package/skills/ship/references/qa.md +24 -11
  109. package/skills/switch-clients/.fde-generated.json +1 -0
  110. package/skills/switch-clients/agents/openai.yaml +4 -0
  111. package/skills/test-assumptions/.fde-generated.json +1 -0
  112. package/skills/test-assumptions/agents/openai.yaml +4 -0
  113. package/skills/what-breaks/.fde-generated.json +1 -0
  114. package/skills/what-breaks/agents/openai.yaml +4 -0
  115. package/skills/who-decides/.fde-generated.json +1 -0
  116. package/skills/who-decides/agents/openai.yaml +4 -0
package/README.md CHANGED
@@ -4,183 +4,154 @@
4
4
 
5
5
  <a name="why-use-it"></a>
6
6
 
7
- Work through a customer project from the first conversation to a system their team can run. FDEOps helps your agent clarify the problem, compare solutions, write and test code, connect customer systems, and prepare delivery and handover evidence.
7
+ The codebase does not tell your agent what the customer agreed to last week, why an approach was rejected or who can approve the next release.
8
8
 
9
- A **skill** is a set of instructions your AI coding agent follows. FDEOps includes **35 task skills + one coordinator, `fde`**. Use any skill directly, or ask `fde` to select the relevant skills as a customer project progresses.
9
+ FDEOps brings that context into the work, from the first meeting to a system the customer can run. Use a skill for one task, or let `fde` coordinate the project and keep its record.
10
10
 
11
- Use it for a single integration, a small client project, or work within a larger enterprise team. You bring the customer context, repository tools and access. FDEOps supplies the working method; you and the responsible teams make the decisions.
11
+ **35 task skills + one coordinator, `fde`**. Use your existing tools and processes. You and the customer keep control of the decisions.
12
12
 
13
- [Get started](#quick-start) · [Choose a task](#task-skills) · [Keep a customer record](#keep-a-customer-record) · [Documentation](docs/README.md)
13
+ [Get started](#quick-start) · [What it helps with](#three-things-it-helps-with) · [Choose a skill](#task-skills) · [Data boundaries](#your-records-your-control) · [Docs](docs/README.md)
14
14
 
15
- <img width="1000" height="586" alt="fdeops-flow" src="https://github.com/user-attachments/assets/12bbec6a-d0b3-4d03-81aa-4b842731a044" />
15
+ <img width="1000" height="586" alt="FDEOps engagement flow from customer discovery through delivery and handover" src="https://github.com/user-attachments/assets/12bbec6a-d0b3-4d03-81aa-4b842731a044" />
16
16
 
17
17
  ## Quick start
18
18
 
19
- **Use customer-approved data and AI tools.** The CLI runs locally, but your AI agent may send what it reads to its provider. Masking is partial and does not protect direct file reads or pasted text. If approval is unclear, start with synthetic data. Anonymised customer material still needs permission. See [safe setup and limits](SECURITY.md#before-customer-work).
19
+ **Use customer-approved data and AI tools.** Your agent may send what it reads to its provider, even though the FDEOps CLI runs locally. If approval is unclear, use fictional data. [Safe setup](SECURITY.md#before-customer-work).
20
20
 
21
- Use FDEOps with an AI coding agent that supports skills. Start with one task, or let `fde` coordinate a customer project.
21
+ ### Let `fde` coordinate a customer project
22
22
 
23
- Try the fictional engagement first with `npx fdeops demo` (requires Node.js 18+ and Git; may download the package). It creates or resets a separate `.demo` workspace and does not need customer data.
24
-
25
- ### Work on a customer project
26
-
27
- Run this in the terminal where your coding agent runs, then select your agent in the installer:
23
+ Install in the terminal where your AI coding agent runs, then select your agent:
28
24
 
29
25
  ```bash
30
26
  npx skills add suboss87/fdeops --skill fde
31
27
  ```
32
28
 
33
- This installation method uses Node.js (which includes `npx`) and Git. If either is missing, ask your agent to help with setup. The FDEOps CLI requires Node.js 18 or later. See [installation options](docs/install.md) for your agent.
34
-
35
- Then select `fde` in your agent and start a conversation. In agents that support `@fde`, use:
29
+ Select `fde` in your agent, or use `@fde` where supported:
36
30
 
37
31
  ```text
38
32
  @fde this is client01. Their support team reads incoming requests,
39
33
  checks internal documents, then assigns each request to another team.
40
- Help me prepare for the first meeting. Here is the brief: …
34
+ Help me prepare for the first meeting. Here is the brief: ...
41
35
  ```
42
36
 
43
- `fde` asks for the information needed next and uses the relevant instructions. As work progresses, it can help you investigate delays, compare approaches, implement a change, test it, and prepare a customer update. You do not have to choose a skill at each step.
44
-
45
- For an ongoing project, naming the customer starts a local record at `~/fde-engagements/client01/.fde/`. It keeps the brief, decisions, evidence and next actions together. Review proposed agreements and corrections before saving them. [How customer records work](#keep-a-customer-record).
37
+ The coordinator uses the relevant instructions as the work changes. You do not need to choose a skill at each step. For an ongoing project, it keeps decisions, evidence and next actions in a local customer record.
46
38
 
47
- ### Use just one task
48
-
49
- For example, install only `discover`:
39
+ ### Use one skill for one task
50
40
 
51
41
  ```bash
52
- npx skills add suboss87/fdeops --skill discover
42
+ npx skills add suboss87/fdeops --skill debrief
53
43
  ```
54
44
 
55
45
  Then ask your agent:
56
46
 
57
47
  ```text
58
- Use FDEOps discover with these meeting notes. Show how the team handles
59
- an incoming request today, where time goes, and what we still need to ask.
48
+ Use FDEOps debrief to review these meeting notes.
49
+ Separate decisions, requests and open questions. Return a draft only.
60
50
  [Paste notes you are permitted to share.]
61
51
  ```
62
52
 
63
- The agent works from your notes and returns its findings. You do not need to create a customer record for this task. Each task skill includes the instructions it needs and works without installing `fde` or another skill pack.
53
+ No customer record is needed for this draft. Each task includes its required instructions; you do not need to install `fde` or another pack.
64
54
 
65
- **Want every task available by name?** Install the full pack using the [installation guide](docs/install.md#individual-skills-and-the-full-pack). Installing `fde` alone gives the coordinator all the underlying instructions; it does not add the 35 separate names to your agent's skill menu.
55
+ These installation commands use Node.js and Git; the optional record CLI requires Node.js 18+. See [installation and upgrades](docs/install.md) for host-specific invocation, the full pack and alternatives. Installing `fde` includes all underlying instructions, but does not add the 35 separate task names to your agent's menu.
66
56
 
67
- Skill invocation differs between agents. Ask for the FDEOps skill by name or select it in your agent's skill picker. For Claude Code plugin installs, use `/fdeops:fde` or `/fdeops:discover`. See [host setup and name conflicts](docs/install.md#individual-skills-and-the-full-pack).
57
+ **Try it with fictional data:** `npx fdeops demo` runs sample notes through review and creates a fieldbook without calling an AI model. It requires Node.js 18+ and Git, may download the package, and creates or resets only its separate `.demo` workspace. [Five-minute walkthrough](docs/USAGE.md#new-here-5-minutes).
68
58
 
69
- ## Choose a skill
59
+ ## Three things it helps with
70
60
 
71
- <a name="task-skills"></a>
61
+ ### 1. Starting the next session without starting over
72
62
 
73
- Use the skill that matches the work in front of you. All skills are individually installable; the [complete catalog](docs/skills-reference.md) lists the input and result for each one.
74
-
75
- | You need to… | Start with |
76
- |---|---|
77
- | Clarify a new customer request | `brief` or `discover` |
78
- | Understand who can approve the change | `who-decides` |
79
- | Decide what to build and what to leave out | `options`, `scope` or `plan` |
80
- | Implement or connect customer systems | `build` or `integrate` |
81
- | Find a failure or test the result | `debug`, `review`, `evaluate` or `qa` |
82
- | Prepare an authorized release | `ship` |
83
- | Review meeting notes or report progress | `debrief` or `readout` |
84
- | Prepare the team to run the system | `runbook` or `handoff` |
85
-
86
- These examples are starting points, not a required sequence. The catalog also covers inherited projects, business cases, incidents, recovery, source connections and multiple customer records. `fde` uses the same instructions and loads additional detail only when needed.
87
-
88
- **Which mode should I choose?** Use an individual skill for a specific task. Use `fde` when you want help selecting the next task or maintaining a continuing customer record. You can also ask it for a one-off result without creating records. Installing a skill makes it available independently; it does not remove its real input requirements. For example, `dashboard` needs records to display, while `debrief` can review pasted notes without saving anything.
63
+ A repository tells you where the code lives. It may not tell you why the customer rejected an approach, which access is still blocked or what the team promised on Tuesday.
89
64
 
65
+ <a name="keep-a-customer-record"></a>
90
66
  <a name="how-skills-work"></a>
91
67
 
92
- ## Keep a customer record
68
+ For an ongoing engagement, FDEOps keeps a separate plain-Markdown record at `~/fde-engagements/<customer>/.fde/`. The coordinator retrieves a bounded summary and looks up details when needed. A saved implementation checkpoint points back to the current task record; the agent checks it before continuing.
93
69
 
94
- An **engagement** is your ongoing project with a customer. Its record lives in a separate folder on your machine, outside the customer's application code:
70
+ Use [debrief](skills/debrief/SKILL.md) after a meeting and [switch-clients](skills/switch-clients/SKILL.md) when changing customers. [How records work](docs/USAGE.md).
95
71
 
96
- ```text
97
- ~/fde-engagements/client01/.fde/
98
- ```
72
+ ### 2. Keeping a request from becoming an agreement
99
73
 
100
- The files are readable Markdown. They track what the customer asked for, who can decide, what success means, what changed, and the evidence behind each result. You can inspect, copy or keep them if you stop using FDEOps.
74
+ A stakeholder asks for more scope. A demo looks promising. Neither establishes a new commitment or an accepted result.
101
75
 
102
- After a meeting, paste permitted notes into the same agent conversation. It proposes the new requests, decisions, unresolved questions and next actions. Correct anything it misunderstood, then confirm the update.
76
+ FDEOps separates requests, confirmed decisions, reported results and unresolved questions. You review proposed record changes before confirming them. Dates and sources make a claim traceable; they do not authenticate customer approval.
103
77
 
104
- A request is not automatically an agreement. A passing test is not a production deployment. A measured improvement is not customer acceptance. FDEOps keeps those distinctions in the record.
78
+ For example, these fictional notes:
105
79
 
106
- At the next session, the coordinator retrieves a short summary rather than loading the full history. The default summary is capped at 16 KiB; older evidence is retrieved when needed. For interrupted implementation, it also surfaces a saved checkpoint when one exists, then checks the current task record before continuing. This cap applies to FDEOps output, not everything your agent loads.
80
+ > Mara agreed to keep CSV upload this phase. Devon asked for real-time sync; Mara has not answered. Two staging runs took 12 minutes. Production has not been measured.
107
81
 
108
- If your agent cannot start the record, run this in your terminal from the workspace where you work on that customer:
82
+ A review should keep those distinctions:
109
83
 
110
- ```bash
111
- npx fdeops resume --init client01
112
- ```
84
+ | Record | What the notes support |
85
+ |---|---|
86
+ | Decision | Keep CSV upload this phase; attributed to Mara in the supplied notes |
87
+ | Request | Real-time sync remains unapproved |
88
+ | Evidence | Two staging runs took 12 minutes; production benefit is unmeasured |
89
+ | Next step | Resolve the scope request with Mara before changing the commitment |
113
90
 
114
- This links that workspace to the customer's record. [Daily use and meeting walkthrough](docs/USAGE.md) · [Record format](docs/schema.md).
91
+ This is a draft, not a saved agreement. Use [who-decides](skills/who-decides/SKILL.md), [scope](skills/scope/SKILL.md) or [readout](skills/readout/SKILL.md) for the decision in front of you.
115
92
 
116
- <a name="what-a-working-day-looks-like"></a>
93
+ ### 3. Knowing what is actually ready
117
94
 
118
- ## Your daily fieldbook
95
+ A local test, a deployed change and a customer-accepted result answer different questions.
119
96
 
120
- The fieldbook is a read-only browser view of your customer records. It shows next actions, open risks, missing evidence and results waiting for acceptance.
97
+ FDEOps carries the agreed checks into implementation and binds verification to the relevant revision and environment. Release guidance asks for operating limits, recovery evidence and an owner. Missing access or evidence stays visible; a passing local test does not fill that gap.
121
98
 
122
- ![FDEOps fieldbook showing next actions and delivery gaps across fictional customers](media/fieldbook-preview.png)
99
+ Use [build](skills/build/SKILL.md), [integrate](skills/integrate/SKILL.md), [review](skills/review/SKILL.md), [ship](skills/ship/SKILL.md) and [handoff](skills/handoff/SKILL.md) as needed. [See the tests and their limits](docs/verification.md).
123
100
 
124
- Run this in your terminal to view all your customers:
101
+ ## Choose a skill
125
102
 
126
- ```bash
127
- npx fdeops dashboard --all --open
128
- ```
103
+ <a name="task-skills"></a>
129
104
 
130
- Open a customer's record and copy an action into your agent to continue. Run the command again after updates to refresh the view.
105
+ | Work in front of you | Start with |
106
+ |---|---|
107
+ | An unclear customer request | `brief`, `discover` |
108
+ | Unclear ownership or access | `who-decides`, `earn-trust` |
109
+ | A decision about scope or approach | `scope`, `options`, `plan` |
110
+ | An implementation or system connection | `build`, `integrate` |
111
+ | A failure or a result to verify | `debug`, `review`, `qa`, `evaluate` |
112
+ | A release or operating handover | `ship`, `runbook`, `handoff` |
113
+ | Meeting notes or a customer update | `debrief`, `readout` |
131
114
 
132
- **Try a fictional example first:** `npx fdeops demo` runs sample meeting notes through review and produces a fieldbook without using an AI model. It creates or resets its demo folder under `~/fde-engagements/.demo/`. Remove that example with `npx fdeops demo --clean`.
115
+ These are entry points, not a required sequence. Every task can be called directly or selected by `fde`. Some tasks need records to work with: `dashboard` displays saved records, while `debrief` can review supplied notes without saving them. [Full skill catalog](docs/skills-reference.md).
133
116
 
134
- ## Fit it to the project
117
+ <a name="what-a-working-day-looks-like"></a>
135
118
 
136
- Start with the work in front of you:
119
+ <details>
120
+ <summary><strong>View your customer records in the fieldbook</strong></summary>
137
121
 
138
- | Project | How to use FDEOps |
139
- |---|---|
140
- | Small fix or analysis | Give a task skill the relevant notes or code. Get the result and its verification; no customer record is required. |
141
- | Customer integration or ongoing delivery | Use `fde` to connect discovery, implementation, tests and updates in one continuing record. |
142
- | Enterprise engagement | Work within the customer’s existing access, change-control and operating processes. Record who can approve each decision and what evidence they require. |
122
+ The fieldbook is a read-only browser view of next actions, risks, evidence gaps and results awaiting acceptance.
143
123
 
144
- The pack includes implementation, integration, debugging and QA instructions. It uses the repository's existing tools. It does not supply customer credentials, infrastructure, specialist approvals or production authority.
124
+ ![Fieldbook showing fictional customer records](media/fieldbook-preview.png)
145
125
 
146
- Optional setup:
126
+ ```bash
127
+ npx fdeops dashboard --all --open
128
+ ```
147
129
 
148
- - **Personal preferences:** `npx fdeops setup` records how you work and what to mask before sharing context.
149
- - **Repository reconnaissance:** `npx fdeops scan` reads local files and returns an initial assessment and questions. It does not change the repository.
150
- - **Other agent hosts:** [Adapters](adapters/README.md) add a pointer to the coordinator in your workspace.
151
- - **External sources:** [Connection recipes](mcp/recipes/) explain how to pull permitted material from tools you already use.
130
+ Copy an action into your agent to continue. Regenerate the view after record updates. [Daily use](docs/USAGE.md).
152
131
 
153
- Use the [installation guide](docs/install.md) for the full pack, Claude Code hooks, offline setup and upgrading from earlier versions.
132
+ </details>
154
133
 
155
134
  <a name="your-records-your-control"></a>
135
+ <a name="your-data-stays-yours"></a>
156
136
 
157
- ## Your data stays yours
158
-
159
- The CLI reads local files and Git, with no network calls or telemetry. Installation through `npx` may download packages. Your AI host may send material it reads to its configured model.
137
+ ## Local records, explicit data boundaries
160
138
 
161
- FDEOps masks common sensitive patterns and excludes `<private>` blocks from CLI, dashboard and hook outputs. This is not complete sensitive-data detection. Do not ask the agent to read private blocks directly, and use only material allowed by the customer's AI policy.
139
+ The CLI reads local files and Git without network calls or telemetry. Installation may download packages. Your AI host controls model connections and may transmit what it reads.
162
140
 
163
- You review proposed decisions. Enabled session hooks can save mechanical session progress automatically; direct CLI write commands update records when you run them.
141
+ CLI and hook outputs mask common identifier patterns. `<private>` blocks are redacted from those outputs and the dashboard. Local reports retain unmarked identifiers by default. Masking is partial; raw file reads and pasted text bypass it. Anonymisation does not grant permission to use customer material.
164
142
 
165
- [Privacy](PRIVACY.md) · [Security](SECURITY.md) · [What has been tested and its limits](docs/verification.md)
143
+ You review consequential record updates. Enabled hooks can save mechanical session progress; direct CLI write commands update records when run. [Privacy](PRIVACY.md) · [Security](SECURITY.md) · [Local-model results](docs/verification.md#local-model-results).
166
144
 
167
145
  ## Who this is for
168
146
 
169
- Forward deployed engineers, consultants and small delivery teams working with customers across meetings, codebases and operating environments. The pack supports the engineering and customer work together. Its checks help expose missing evidence; they do not replace professional judgment or prove every deployment safe.
147
+ Forward deployed engineers, consultants and delivery teams working across customer meetings, codebases and operating environments. Start with one task or coordinate an ongoing engagement. The skills use your existing tools and processes; they do not provide infrastructure, access rights or customer approval.
170
148
 
171
- ## Find your way around
149
+ ## Go deeper
172
150
 
173
- | You want to… | Start here |
174
- |---|---|
175
- | Install or upgrade | [Installation](docs/install.md) |
176
- | Work through your first customer project | [Usage](docs/USAGE.md) and [examples](examples/) |
177
- | Explore the instructions | [Skill reference](docs/skills-reference.md) |
178
- | Understand the repository | [Repository layout](docs/REPO_LAYOUT.md) |
179
- | Check the test evidence | [Verification](docs/verification.md) |
180
- | Improve the pack | [Contributing](CONTRIBUTING.md) |
151
+ [Install or upgrade](docs/install.md) · [Daily use](docs/USAGE.md) · [Worked examples](examples/) · [Skill catalog](docs/skills-reference.md) · [Source connections](mcp/recipes/) · [Repository layout](docs/REPO_LAYOUT.md) · [Verification](docs/verification.md) · [Contribute](CONTRIBUTING.md)
181
152
 
182
- Built by [Subash Natarajan](https://www.linkedin.com/in/subashn/). [Issues](https://github.com/suboss87/fdeops/issues) · [Discussions](https://github.com/suboss87/fdeops/discussions)
153
+ Built and maintained by [Subash Natarajan](https://www.linkedin.com/in/subashn/). [Issues](https://github.com/suboss87/fdeops/issues) · [Discussions](https://github.com/suboss87/fdeops/discussions).
183
154
 
184
155
  ## License
185
156
 
186
- MIT. Use FDEOps in your customer work. See [LICENSE](LICENSE).
157
+ [MIT](LICENSE). Use FDEOps in your customer work.
@@ -4,6 +4,7 @@ const fs = require('node:fs')
4
4
  const path = require('node:path')
5
5
  const { createHash } = require('node:crypto')
6
6
  const catalog = require('./skill-catalog')
7
+ const { interfaceYaml } = require('./skill-ui')
7
8
  const root = path.resolve(__dirname, '..')
8
9
  const source = path.join(root, 'skills/fde/references')
9
10
 
@@ -44,6 +45,8 @@ function entrypoint(item) {
44
45
  }
45
46
  function expectedFiles(item, referenceRoot = source) {
46
47
  const files = new Map([['SKILL.md', entrypoint(item)]])
48
+ const ui = interfaceYaml(item.name, item.ui)
49
+ if (ui) files.set('agents/openai.yaml', ui)
47
50
  for (const ref of referencesFor(item.method, referenceRoot)) files.set(`references/${ref}`, fs.readFileSync(path.join(referenceRoot, ref), 'utf8'))
48
51
  return files
49
52
  }
@@ -59,7 +62,7 @@ function walk(dir, prefix = '') {
59
62
  const rel = prefix + e.name
60
63
  if (e.isSymbolicLink() || (!e.isDirectory() && !e.isFile()) || (e.isFile() && fs.lstatSync(path.join(dir, e.name)).nlink > 1)) throw new Error(`Unsafe generated path: ${path.join(dir, e.name)}`)
61
64
  if (e.isDirectory()) {
62
- if (rel !== 'references') throw new Error(`Unowned generated directory: ${path.join(dir, e.name)}`)
65
+ if (rel !== 'references' && rel !== 'agents') throw new Error(`Unowned generated directory: ${path.join(dir, e.name)}`)
63
66
  entries.push(...walk(path.join(dir, e.name), rel + '/'))
64
67
  } else entries.push(rel)
65
68
  }
@@ -103,7 +106,7 @@ function generate(check = false, options = {}) {
103
106
  if (manifest.generator !== 'bin/generate-skills.js' || manifest.version !== 1 || !manifest.files || Array.isArray(manifest.files) || typeof manifest.files !== 'object') throw new Error(`Invalid ownership manifest: ${name}`)
104
107
  owned = manifest.files
105
108
  for (const [rel, hash] of Object.entries(owned)) {
106
- if (!/^(?:SKILL\.md|references\/[a-z][a-z-]*\.md)$/.test(rel) || !/^[a-f0-9]{64}$/.test(hash)) throw new Error(`Invalid ownership entry: ${name}/${rel}`)
109
+ if (!/^(?:SKILL\.md|agents\/openai\.yaml|references\/[a-z][a-z-]*\.md)$/.test(rel) || !/^[a-f0-9]{64}$/.test(hash)) throw new Error(`Invalid ownership entry: ${name}/${rel}`)
107
110
  }
108
111
  } else {
109
112
  // Migrate 4.1.0 packages conservatively: only the marked entry and exact
@@ -138,11 +141,11 @@ function generate(check = false, options = {}) {
138
141
  fs.mkdirSync(path.dirname(path.join(dest, rel)), { recursive: true })
139
142
  fs.writeFileSync(path.join(dest, rel), body)
140
143
  }
141
- if (!output.size) {
142
- const refs = path.join(dest, 'references')
143
- if (stat(refs)) fs.rmdirSync(refs)
144
- fs.rmdirSync(dest)
144
+ for (const directory of ['references', 'agents']) {
145
+ const target = path.join(dest, directory)
146
+ if (stat(target)?.isDirectory() && fs.readdirSync(target).length === 0) fs.rmdirSync(target)
145
147
  }
148
+ if (!output.size) fs.rmdirSync(dest)
146
149
  }
147
150
  }
148
151
  module.exports = { referencesFor, expectedFiles, generate }
@@ -116,7 +116,7 @@ module.exports = [
116
116
  {
117
117
  "name": "build",
118
118
  "method": "build",
119
- "description": "Implement a scoped customer-facing software change in the existing repository and verify its behavior. Use for delivery work with an understood outcome, not incident response.",
119
+ "description": "Implement a scoped software change for a customer and verify its behavior. Use for delivery work with an understood outcome, not incident response.",
120
120
  "group": "Build and verify",
121
121
  "result": "An implemented change with verification evidence.",
122
122
  "inputMode": "context"
@@ -132,7 +132,7 @@ module.exports = [
132
132
  {
133
133
  "name": "debug",
134
134
  "method": "debug",
135
- "description": "Investigate and repair a reproducible failure in a customer integration or application. Use for diagnosis and regression prevention; follow incident authority for live mitigation.",
135
+ "description": "Investigate a failure, regression or incorrect result in an integration or application, even before it can be reproduced. Use for diagnosis and repair; follow incident authority for live mitigation.",
136
136
  "group": "Build and verify",
137
137
  "result": "A diagnosed failure, repair and regression evidence.",
138
138
  "inputMode": "context"
@@ -0,0 +1,47 @@
1
+ // Optional host UI metadata. Task routing and methods live in skill-catalog.js.
2
+ const entries = {
3
+ brief: ['Customer Brief', 'Clarify the outcome, constraints, and evidence', 'clarify this customer brief and its open questions'],
4
+ audit: ['Engagement Audit', 'Check inherited claims against delivery evidence', 'audit this inherited engagement and its risks'],
5
+ 'who-decides': ['Who Decides', 'Map stakeholders and decision ownership', 'map the stakeholders and decision rights for this work'],
6
+ 'earn-trust': ['Earn Trust', 'Plan credible next steps and appropriate access', 'plan how to earn trust and appropriate customer access'],
7
+ discover: ['Discover', 'Trace the workflow and identify the real problem', 'trace this customer workflow and identify evidence gaps'],
8
+ 'test-assumptions': ['Test Assumptions', 'Find consequential assumptions and test them', 'identify and test the assumptions behind this proposal'],
9
+ 'score-use-cases': ['Score Use Cases', 'Compare customer use cases and their trade-offs', 'compare these customer use cases using the available evidence'],
10
+ poc: ['Proof of Concept', 'Test a delivery uncertainty with a bounded pilot', 'design a bounded proof of concept for this uncertainty'],
11
+ scope: ['Scope', 'Assess new requests against agreed commitments', 'assess this request against the agreed scope'],
12
+ options: ['Delivery Options', 'Compare feasible approaches to a customer problem', 'compare feasible approaches and recommend a delivery path'],
13
+ plan: ['Delivery Plan', 'Sequence delivery into verifiable increments', 'turn this agreed outcome into a sequenced delivery plan'],
14
+ 'business-case': ['Business Case', 'Connect investment decisions to costs and evidence', 'develop a business case with explicit assumptions'],
15
+ prioritize: ['Prioritize', 'Choose immediate priorities and explicit deferrals', 'choose the immediate priorities from this competing work'],
16
+ 'red-team': ['Red Team', 'Challenge a plan with evidence and failure modes', 'stress-test this plan and identify corrective actions'],
17
+ build: ['Build', 'Implement and verify an agreed software change', 'implement this scoped change and verify the agreed behavior'],
18
+ integrate: ['Integrate', 'Prove system connections and failure handling', 'implement this integration and verify its downstream result'],
19
+ debug: ['Debug', 'Investigate failures and verify the repair', 'investigate this failure using the available evidence'],
20
+ review: ['Code Review', 'Review a change for delivery and operational risks', 'review this change against its outcome and operational risks'],
21
+ evaluate: ['Evaluate AI', 'Measure AI workflow behavior and failure modes', 'evaluate this AI workflow using representative cases'],
22
+ qa: ['Journey QA', 'Verify the real customer journey and its results', 'exercise the changed customer journey and report evidence'],
23
+ 'what-breaks': ['What Breaks', 'Assess the blast radius before changing a system', 'assess the impact of this change on dependent systems'],
24
+ rollback: ['Rollback', 'Rehearse recovery and expose remaining gaps', 'prepare a recovery drill within the permitted environment'],
25
+ ship: ['Ship', 'Prepare a controlled release with recovery evidence', 'prepare this increment for an authorized release'],
26
+ readout: ['Sponsor Readout', 'Separate promises, measured results, and acceptance', 'prepare a sponsor readout from the delivery evidence'],
27
+ 'demo-prep': ['Demo Prep', 'Rehearse an evidenced demo with a fallback', 'prepare a customer demo and its failure fallback'],
28
+ debrief: ['Meeting Debrief', 'Extract sourced decisions and next actions', 'turn these meeting notes into sourced decisions and actions'],
29
+ 'board-memo': ['Board Memo', 'Draft an executive account of outcomes and risks', 'draft an executive memo from the engagement evidence'],
30
+ rescue: ['Rescue', 'Triage urgent delivery and engagement failures', 'triage this failing engagement and identify recovery steps'],
31
+ dashboard: ['Engagement Dashboard', 'Review status across existing engagement records', 'review the portfolio using available engagement records'],
32
+ 'switch-clients': ['Switch Clients', 'Refresh customer context and triage competing needs', 'switch to the requested engagement and refresh its context'],
33
+ runbook: ['Operating Runbook', 'Document verified operations and recovery steps', 'draft an operating runbook from these verified procedures'],
34
+ handoff: ['Handoff', 'Transfer operation with evidence and clear ownership', 'prepare an operating handoff with evidence and ownership'],
35
+ feedback: ['Field Feedback', 'Assess field lessons for safe and useful reuse', 'assess this field lesson for reuse or product feedback'],
36
+ connect: ['Connect a Source', 'Check source setup and available host capabilities', 'check the requested source connection and available capabilities'],
37
+ ingest: ['Ingest Notes', 'Prepare sourced engagement updates for review', 'prepare sourced engagement updates from this requested material'],
38
+ }
39
+
40
+ function interfaceYaml(name, fields = entries[name]) {
41
+ if (!fields) return null
42
+ const [displayName, shortDescription, prompt] = fields
43
+ if (typeof displayName !== 'string' || !displayName.trim() || typeof shortDescription !== 'string' || shortDescription.length < 25 || shortDescription.length > 64 || typeof prompt !== 'string' || !prompt.trim()) throw new Error(`Invalid skill UI metadata: ${name}`)
44
+ // JSON string literals are also YAML double-quoted scalars; no parser dependency.
45
+ return `interface:\n display_name: ${JSON.stringify(displayName)}\n short_description: ${JSON.stringify(shortDescription)}\n default_prompt: ${JSON.stringify(`Use $${name} to ${prompt}.`)}\n`
46
+ }
47
+ module.exports = { entries, interfaceYaml }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fdeops-ingest-mcp",
3
- "version": "5.1.7",
3
+ "version": "5.1.9",
4
4
  "private": true,
5
5
  "description": "Thin stdio MCP sink for FDEOps ingest (stage \u2192 propose \u2192 apply). Zero runtime dependencies.",
6
6
  "bin": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fdeops",
3
- "version": "5.1.7",
3
+ "version": "5.1.9",
4
4
  "description": "Forward deployed engineering skills for AI coding agents. Use focused task skills or @fde for discovery, implementation, verification and handoff, with local engagement records.",
5
5
  "bin": {
6
6
  "fdeops": "bin/install.js",
package/plugin.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
3
3
  "name": "fdeops",
4
- "version": "5.1.7",
4
+ "version": "5.1.9",
5
5
  "description": "Forward deployed engineering skills for AI coding agents. Use focused task skills or @fde for discovery, implementation, verification and handoff, with local engagement records.",
6
6
  "author": {
7
7
  "name": "Subash Natarajan",
@@ -3,6 +3,7 @@
3
3
  "version": 1,
4
4
  "files": {
5
5
  "SKILL.md": "b0dee139ba4f681a61eb0c3d8c802f06857502fd479843edb8e3b8cb27229ae5",
6
+ "agents/openai.yaml": "3b08e2e6a4149545da08238463955501bc60b7bf628cf4e344e893330590bbde",
6
7
  "references/audit.md": "ed32ea78cbccb100742dd838e8cf4cd4b6f33ad44b3de7424fc624670d571dbc",
7
8
  "references/discover.md": "f65aa11a539b4dbbed70cfaa94ec2a35595aa9a2d0282790510b933ac9c721ce",
8
9
  "references/task-context.md": "9066514a50043f3ad888d133d4e8b89b7132551e098cf2c80203c458a80126e5"
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Engagement Audit"
3
+ short_description: "Check inherited claims against delivery evidence"
4
+ default_prompt: "Use $audit to audit this inherited engagement and its risks."
@@ -3,6 +3,7 @@
3
3
  "version": 1,
4
4
  "files": {
5
5
  "SKILL.md": "5782488d9878335cdc1db68c08eccd613486370164284ff11d93422eced6423a",
6
+ "agents/openai.yaml": "a3ce2dc79d3732da6c9aa2d45d09541c09c8f7bdf44f34c6603b5dbaf8624095",
6
7
  "references/board-memo.md": "44eb3c27f164da63af694591025b3fc96bb23d149c29de400997c1653e3322f8",
7
8
  "references/business-case.md": "32e000e8351cd59f9eaad8be40babb276df69948ea4f81e01a4672e47f48cb25",
8
9
  "references/task-context.md": "9066514a50043f3ad888d133d4e8b89b7132551e098cf2c80203c458a80126e5"
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Board Memo"
3
+ short_description: "Draft an executive account of outcomes and risks"
4
+ default_prompt: "Use $board-memo to draft an executive memo from the engagement evidence."
@@ -3,6 +3,7 @@
3
3
  "version": 1,
4
4
  "files": {
5
5
  "SKILL.md": "5d88b9818951f8a8a44c39ad2b36ccdca74fef5e6ed31e67788b50d3ca1bb006",
6
+ "agents/openai.yaml": "8dc0b43545004419bad49e1d50cd3beb968bbcc24baacdaf7fb7304a5fd03bba",
6
7
  "references/land.md": "7a82ac999d23b51b602cd815777a853c4879ca8be40dc6c84c66f154d1f77951",
7
8
  "references/task-context.md": "9066514a50043f3ad888d133d4e8b89b7132551e098cf2c80203c458a80126e5"
8
9
  }
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Customer Brief"
3
+ short_description: "Clarify the outcome, constraints, and evidence"
4
+ default_prompt: "Use $brief to clarify this customer brief and its open questions."
@@ -2,12 +2,13 @@
2
2
  "generator": "bin/generate-skills.js",
3
3
  "version": 1,
4
4
  "files": {
5
- "SKILL.md": "245c53b404549ed73fd6ef532e48c002de7d20a6a93eaca6c0714c4e4d14ba92",
6
- "references/build.md": "7634abd02b70011b7443a65ea3aaf3cb536ed5b051312aed188f46523deea7f9",
7
- "references/debug.md": "c3bb344d38cc3552cb4e230c601a9be3fe173af2b2efb89aab6b7b04339f24f4",
5
+ "SKILL.md": "77570e69b8d708d60cd6ab1dcc79c95a75824ab668f60a83a0dedbe668de2a70",
6
+ "agents/openai.yaml": "abd0a33ab4efa25ea038932d37eae2faa2527baa96ebae8732ea90f1ebc3865e",
7
+ "references/build.md": "03c52eda90642c62053b53ef1e85c97b4e647600f454aee9da0e415c9d98903e",
8
+ "references/debug.md": "3273a921a98522431ae821a283814897270c719cbfab83d14b99175537d869e5",
8
9
  "references/eval-pack.md": "0590b85d3cae0903c6b1274540c92eaa2a4373047e8a0548d6942516ef0bb9e1",
9
- "references/integrate.md": "d0de35a783902ca8b4762e3a42a14f467766d56a928c3a5cf11adac2a6ba90ba",
10
- "references/qa.md": "d8f58e6d36436469a58aeb1107037f3e27fa81ff5b82d0e4df3c23eeadaf683c",
10
+ "references/integrate.md": "1cb7a60d7545b0bf224fce678a04ce6ccdf368c47877d9c8e4dc4272bb0d5b0c",
11
+ "references/qa.md": "41de4d70827c83291efa217e97d777f62ec2849827687fbba7e4b1d17484b87e",
11
12
  "references/review.md": "55733ca868c00fb22110bc7b3ec7bb6c6451366c795073b19a2bccd30d2764c8",
12
13
  "references/ship.md": "95f51772b29de6f7d174f1f7678f15d46a3a5327dcb8facb94288e27907ae92c",
13
14
  "references/task-context.md": "9066514a50043f3ad888d133d4e8b89b7132551e098cf2c80203c458a80126e5",
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: build
3
- description: Implement a scoped customer-facing software change in the existing repository and verify its behavior. Use for delivery work with an understood outcome, not incident response.
3
+ description: Implement a scoped software change for a customer and verify its behavior. Use for delivery work with an understood outcome, not incident response.
4
4
  ---
5
5
 
6
6
  # build
@@ -9,7 +9,7 @@ description: Implement a scoped customer-facing software change in the existing
9
9
 
10
10
  ## Purpose
11
11
 
12
- Implement a scoped customer-facing software change in the existing repository and verify its behavior. Use for delivery work with an understood outcome, not incident response.
12
+ Implement a scoped software change for a customer and verify its behavior. Use for delivery work with an understood outcome, not incident response.
13
13
 
14
14
  Before investigating or acting:
15
15
  1. Read [the task context contract](references/task-context.md).
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Build"
3
+ short_description: "Implement and verify an agreed software change"
4
+ default_prompt: "Use $build to implement this scoped change and verify the agreed behavior."
@@ -1,22 +1,33 @@
1
1
  # build - Implement a verifiable increment
2
2
 
3
- **Enter when:** an agreed behavior needs implementation in an existing or new repository. For a broken behavior, start with [debug](debug.md); for a system boundary, use [integrate](integrate.md).
3
+ Build the smallest complete change that demonstrates the agreed customer outcome through the real entry point.
4
4
 
5
- Use the permitted context and authority in [task context](task-context.md). This method works without `.fde/`; an existing engagement record can supply the same contract. Do not initialize memory just to write code.
5
+ **Use when:** agreed behavior needs implementation in a new or existing repository. Use [debug](debug.md) for broken behavior and [integrate](integrate.md) for a system boundary.
6
6
 
7
- ## Method
7
+ Follow [task context](task-context.md). Supplied permitted context or an existing engagement record can provide the contract; do not initialize `.fde/` merely to write code.
8
8
 
9
- 1. Identify the repository, its instructions, working tree, relevant callers, and test commands. Inspect examples before creating abstractions. Follow the repository's branch policy and choose any needed checkout isolation according to that policy and overlapping work. Preserve unrelated edits and state which dependencies or interfaces the change touches. Before changing an untested legacy path, capture the undocumented behavior callers depend on with targeted characterization checks; distinguish behavior to preserve from the intended change.
10
- 2. State the observable outcome, constraints, and acceptance checks. Reuse agreed criteria for routine fixes. If a consequential product choice is unresolved, surface that choice while continuing independent investigation; do not invent acceptance.
11
- 3. Choose the smallest coherent path that demonstrates the outcome through the real entry point. Include the necessary storage, error handling, and interface behavior in that slice. Name the failure that stops expansion and the recovery path for stateful changes.
12
- 4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code. When changing dependencies, inspect the package source, requested version, lockfile changes and repository install-script policy before executing package code. Use the approved package manager and bootstrap controls; do not blanket-enable scripts or apply unrelated dependency upgrades.
13
- 5. Add or update automated coverage for changed behavior when meaningful and feasible, including the relevant failure path. Existing tests must actually exercise the change; explain manual-only coverage and its limits. Run focused checks, then required repository checks. Exercise the actual affected journey with [QA](qa.md) when appropriate. For uncertain model behavior, use [eval-pack](eval-pack.md). Record results with [verification](verification.md), including checks that could not run.
14
- 6. Inspect the final diff against the agreed outcome. If public behavior, interfaces, configuration or operating steps changed, update affected existing documentation and examples; exercise relevant commands or clearly mark checks that could not run. For substantial or risky work, seek [review](review.md) using an actual separate reviewer when available; identify a self-check honestly. Reverify affected behavior after fixes.
9
+ ## Understand the repository and outcome
15
10
 
16
- ## Deliverable and acceptance
11
+ Inspect repository instructions, working tree, relevant callers, examples, and test commands. Preserve unrelated edits. Follow its branch policy and choose checkout isolation according to overlapping work. Identify the dependencies and interfaces the change touches. Before changing an untested legacy path, use targeted characterization checks to capture undocumented behavior callers rely on; separate that behavior from the intended change.
17
12
 
18
- For substantial work, maintain the [recoverable checkpoint](verification.md#recoverable-checkpoint) in the existing task record as slices complete or work pauses.
13
+ State the observable outcome, constraints, and acceptance checks, reusing agreed criteria for routine fixes. Surface unresolved consequential product choices while continuing independent investigation; do not invent acceptance.
19
14
 
20
- Return the implemented behavior, relevant paths, evidence, remaining limitations, and any decision needed. Done means the agreed checks have applicable evidence and the change is reviewable; passing tests does not imply deployment or customer acceptance. Committing, opening a PR, merging, and publishing happen only when the requested workflow authorizes those actions.
15
+ ## Build one complete slice
21
16
 
22
- When coordinated through `@fde`, record implementation and verification in the existing decisions/delivery records under their write rules. Standalone work can return the same receipt directly or use the repository's task record.
17
+ Choose a coherent path through the real entry point, including its necessary storage, error handling, and interface behavior. Name the failure that would stop expansion and the recovery path for stateful changes.
18
+
19
+ Use existing services, fixtures, validation, and repository conventions before adding alternatives. Limit cleanup to making the changed path understandable. For dependency changes, inspect the package source, requested version, lockfile changes, and install-script policy before executing package code. Use the approved package manager and bootstrap controls; do not blanket-enable scripts or include unrelated upgrades.
20
+
21
+ ## Demonstrate the behavior
22
+
23
+ Add or update automated coverage when meaningful and feasible, including the relevant failure path. Check that existing tests actually exercise the change. Explain manual-only coverage and its limits. Run focused checks, then required repository checks; use [QA](qa.md) for the affected journey when appropriate and [eval-pack](eval-pack.md) for uncertain model behavior. Record evidence and unrun checks with [verification](verification.md).
24
+
25
+ Inspect the final diff against the agreed outcome. Update affected existing documentation and examples when public behavior, interfaces, configuration, or operating steps change. Exercise relevant commands or state what could not run. For substantial or risky work, use [review](review.md) with a separate reviewer when available; label a self-check honestly. Reverify affected behavior after repairs.
26
+
27
+ *Fictional example:* Northstar needs failed imports to be recoverable. A useful first slice takes one failed import through the existing retry action to a persisted result, including the retry's failure behavior. A new button alone does not demonstrate recovery.
28
+
29
+ ## Completion
30
+
31
+ Return implemented behavior, relevant paths, evidence, limitations, and any decision needed. The change is ready when agreed checks have applicable evidence and the work is reviewable. Passing tests does not establish deployment or customer acceptance. Commit, open a PR, merge, or publish only when the requested workflow authorizes it.
32
+
33
+ For substantial work, maintain a [recoverable checkpoint](verification.md#recoverable-checkpoint) in the existing task record as slices finish or work pauses. When coordinated through `@fde`, record implementation and verification in existing decisions/delivery records under their write rules. Standalone work can return the receipt directly or use the repository's task record.