fdeops 5.0.0 → 5.1.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.
Files changed (173) hide show
  1. package/AGENTS.md +1 -1
  2. package/README.md +30 -26
  3. package/bin/catalog-doc.js +38 -0
  4. package/bin/check.js +20 -49
  5. package/bin/fde.js +2 -2
  6. package/bin/generate-skills.js +9 -1
  7. package/bin/install.js +9 -3
  8. package/bin/skill-catalog.js +283 -16
  9. package/mcp/fdeops-ingest/package.json +1 -1
  10. package/package.json +2 -2
  11. package/plugin.json +1 -1
  12. package/skills/README.md +7 -0
  13. package/skills/audit/.fde-generated.json +10 -0
  14. package/skills/audit/SKILL.md +21 -0
  15. package/skills/audit/references/audit.md +71 -0
  16. package/skills/audit/references/discover.md +112 -0
  17. package/skills/audit/references/task-context.md +18 -0
  18. package/skills/board-memo/.fde-generated.json +10 -0
  19. package/skills/board-memo/SKILL.md +21 -0
  20. package/skills/board-memo/references/board-memo.md +108 -0
  21. package/skills/board-memo/references/business-case.md +90 -0
  22. package/skills/board-memo/references/task-context.md +18 -0
  23. package/skills/brief/.fde-generated.json +9 -0
  24. package/skills/brief/SKILL.md +21 -0
  25. package/skills/brief/references/land.md +136 -0
  26. package/skills/brief/references/task-context.md +18 -0
  27. package/skills/build/.fde-generated.json +3 -3
  28. package/skills/build/references/build.md +1 -1
  29. package/skills/build/references/integrate.md +12 -2
  30. package/skills/build/references/task-context.md +7 -1
  31. package/skills/business-case/.fde-generated.json +9 -0
  32. package/skills/business-case/SKILL.md +21 -0
  33. package/skills/business-case/references/business-case.md +90 -0
  34. package/skills/business-case/references/task-context.md +18 -0
  35. package/skills/connect/.fde-generated.json +12 -0
  36. package/skills/connect/SKILL.md +21 -0
  37. package/skills/connect/references/connect.md +24 -0
  38. package/skills/connect/references/debrief.md +91 -0
  39. package/skills/connect/references/ingest.md +75 -0
  40. package/skills/connect/references/source-setup.md +30 -0
  41. package/skills/connect/references/task-context.md +18 -0
  42. package/skills/dashboard/.fde-generated.json +9 -0
  43. package/skills/dashboard/SKILL.md +21 -0
  44. package/skills/dashboard/references/dashboard.md +40 -0
  45. package/skills/dashboard/references/task-context.md +18 -0
  46. package/skills/debrief/.fde-generated.json +12 -0
  47. package/skills/debrief/SKILL.md +21 -0
  48. package/skills/debrief/references/connect.md +24 -0
  49. package/skills/debrief/references/debrief.md +91 -0
  50. package/skills/debrief/references/ingest.md +75 -0
  51. package/skills/debrief/references/source-setup.md +30 -0
  52. package/skills/debrief/references/task-context.md +18 -0
  53. package/skills/debug/.fde-generated.json +3 -3
  54. package/skills/debug/references/build.md +1 -1
  55. package/skills/debug/references/integrate.md +12 -2
  56. package/skills/debug/references/task-context.md +7 -1
  57. package/skills/demo-prep/.fde-generated.json +9 -0
  58. package/skills/demo-prep/SKILL.md +21 -0
  59. package/skills/demo-prep/references/demo-prep.md +31 -0
  60. package/skills/demo-prep/references/task-context.md +18 -0
  61. package/skills/discover/.fde-generated.json +1 -1
  62. package/skills/discover/references/task-context.md +7 -1
  63. package/skills/earn-trust/.fde-generated.json +9 -0
  64. package/skills/earn-trust/SKILL.md +21 -0
  65. package/skills/earn-trust/references/earn-trust.md +81 -0
  66. package/skills/earn-trust/references/task-context.md +18 -0
  67. package/skills/evaluate/.fde-generated.json +3 -3
  68. package/skills/evaluate/references/build.md +1 -1
  69. package/skills/evaluate/references/integrate.md +12 -2
  70. package/skills/evaluate/references/task-context.md +7 -1
  71. package/skills/fde/SKILL.md +24 -21
  72. package/skills/fde/references/build.md +1 -1
  73. package/skills/fde/references/connect.md +14 -24
  74. package/skills/fde/references/debrief.md +2 -0
  75. package/skills/fde/references/earn-trust.md +27 -46
  76. package/skills/fde/references/hold-scope.md +25 -24
  77. package/skills/fde/references/ingest.md +4 -2
  78. package/skills/fde/references/integrate.md +12 -2
  79. package/skills/fde/references/land.md +28 -28
  80. package/skills/fde/references/plan.md +6 -6
  81. package/skills/fde/references/rescue.md +18 -18
  82. package/skills/fde/references/runbook.md +52 -120
  83. package/skills/fde/references/source-setup.md +30 -0
  84. package/skills/fde/references/task-context.md +7 -1
  85. package/skills/fde/references/who-decides.md +29 -57
  86. package/skills/feedback/.fde-generated.json +1 -1
  87. package/skills/feedback/references/task-context.md +7 -1
  88. package/skills/handoff/.fde-generated.json +1 -1
  89. package/skills/handoff/references/task-context.md +7 -1
  90. package/skills/ingest/.fde-generated.json +12 -0
  91. package/skills/ingest/SKILL.md +21 -0
  92. package/skills/ingest/references/connect.md +24 -0
  93. package/skills/ingest/references/debrief.md +91 -0
  94. package/skills/ingest/references/ingest.md +75 -0
  95. package/skills/ingest/references/source-setup.md +30 -0
  96. package/skills/ingest/references/task-context.md +18 -0
  97. package/skills/integrate/.fde-generated.json +3 -3
  98. package/skills/integrate/references/build.md +1 -1
  99. package/skills/integrate/references/integrate.md +12 -2
  100. package/skills/integrate/references/task-context.md +7 -1
  101. package/skills/options/.fde-generated.json +1 -1
  102. package/skills/options/references/task-context.md +7 -1
  103. package/skills/plan/.fde-generated.json +10 -0
  104. package/skills/plan/SKILL.md +21 -0
  105. package/skills/plan/references/business-case.md +90 -0
  106. package/skills/plan/references/plan.md +167 -0
  107. package/skills/plan/references/task-context.md +18 -0
  108. package/skills/poc/.fde-generated.json +4 -4
  109. package/skills/poc/references/build.md +1 -1
  110. package/skills/poc/references/integrate.md +12 -2
  111. package/skills/poc/references/plan.md +6 -6
  112. package/skills/poc/references/task-context.md +7 -1
  113. package/skills/prioritize/.fde-generated.json +10 -0
  114. package/skills/prioritize/SKILL.md +21 -0
  115. package/skills/prioritize/references/business-case.md +90 -0
  116. package/skills/prioritize/references/pick-three.md +95 -0
  117. package/skills/prioritize/references/task-context.md +18 -0
  118. package/skills/qa/.fde-generated.json +3 -3
  119. package/skills/qa/references/build.md +1 -1
  120. package/skills/qa/references/integrate.md +12 -2
  121. package/skills/qa/references/task-context.md +7 -1
  122. package/skills/readout/.fde-generated.json +1 -1
  123. package/skills/readout/references/task-context.md +7 -1
  124. package/skills/red-team/.fde-generated.json +9 -0
  125. package/skills/red-team/SKILL.md +21 -0
  126. package/skills/red-team/references/red-team.md +105 -0
  127. package/skills/red-team/references/task-context.md +18 -0
  128. package/skills/rescue/.fde-generated.json +9 -0
  129. package/skills/rescue/SKILL.md +21 -0
  130. package/skills/rescue/references/rescue.md +82 -0
  131. package/skills/rescue/references/task-context.md +18 -0
  132. package/skills/review/.fde-generated.json +3 -3
  133. package/skills/review/references/build.md +1 -1
  134. package/skills/review/references/integrate.md +12 -2
  135. package/skills/review/references/task-context.md +7 -1
  136. package/skills/rollback/.fde-generated.json +9 -0
  137. package/skills/rollback/SKILL.md +21 -0
  138. package/skills/rollback/references/rollback.md +102 -0
  139. package/skills/rollback/references/task-context.md +18 -0
  140. package/skills/runbook/.fde-generated.json +11 -0
  141. package/skills/runbook/SKILL.md +21 -0
  142. package/skills/runbook/references/close.md +66 -0
  143. package/skills/runbook/references/encode-pattern.md +96 -0
  144. package/skills/runbook/references/runbook.md +73 -0
  145. package/skills/runbook/references/task-context.md +18 -0
  146. package/skills/scope/.fde-generated.json +2 -2
  147. package/skills/scope/references/hold-scope.md +25 -24
  148. package/skills/scope/references/task-context.md +7 -1
  149. package/skills/score-use-cases/.fde-generated.json +10 -0
  150. package/skills/score-use-cases/SKILL.md +21 -0
  151. package/skills/score-use-cases/references/business-case.md +90 -0
  152. package/skills/score-use-cases/references/score-use-cases.md +70 -0
  153. package/skills/score-use-cases/references/task-context.md +18 -0
  154. package/skills/ship/.fde-generated.json +3 -3
  155. package/skills/ship/references/build.md +1 -1
  156. package/skills/ship/references/integrate.md +12 -2
  157. package/skills/ship/references/task-context.md +7 -1
  158. package/skills/switch-clients/.fde-generated.json +9 -0
  159. package/skills/switch-clients/SKILL.md +21 -0
  160. package/skills/switch-clients/references/switch-clients.md +114 -0
  161. package/skills/switch-clients/references/task-context.md +18 -0
  162. package/skills/test-assumptions/.fde-generated.json +9 -0
  163. package/skills/test-assumptions/SKILL.md +21 -0
  164. package/skills/test-assumptions/references/task-context.md +18 -0
  165. package/skills/test-assumptions/references/test-assumptions.md +102 -0
  166. package/skills/what-breaks/.fde-generated.json +9 -0
  167. package/skills/what-breaks/SKILL.md +21 -0
  168. package/skills/what-breaks/references/task-context.md +18 -0
  169. package/skills/what-breaks/references/what-breaks.md +91 -0
  170. package/skills/who-decides/.fde-generated.json +9 -0
  171. package/skills/who-decides/SKILL.md +21 -0
  172. package/skills/who-decides/references/task-context.md +18 -0
  173. package/skills/who-decides/references/who-decides.md +63 -0
@@ -0,0 +1,136 @@
1
+ # land - Interrogate the brief
2
+
3
+ **Enter when:** new customer, first meeting, just got the brief, nothing started yet.
4
+
5
+ **Read first:** apply [task context](task-context.md), then permitted `context.md` evidence if it exists and the supplied brief. Once the engagement type and AI/access policy are known, inspect the supplied repo/docs relevant to the ask before asking questions they can answer. This is a bounded evidence check, not a full discovery scan.
6
+
7
+ ## Validation gate (confirm understanding, clarify where it elevates)
8
+
9
+ Before landing, state what you know in 2-3 lines:
10
+
11
+ > "New engagement: [client name]. Timeline: [days/weeks/months or 'not clear yet']. Starting with: [what the FDE has told you so far - the brief, the context, the ask]."
12
+
13
+ Then check - probe ONLY if it prevents a bad start:
14
+
15
+ 1. **Engagement speed.** If timeline is unclear → weave it in naturally: "Is this days, weeks, or months? That shapes how much structure we set up now."
16
+ 2. **Existing context.** If `.fde/` already exists → one line: "There's existing engagement memory here. Continuing this or starting fresh?"
17
+ 3. **Access.** If the FDE is about to start work → one line: "Got repo and environment access sorted, or is that still pending?"
18
+
19
+ State your read, let the FDE correct, then land.
20
+
21
+ ## Brief interrogation (only when the brief is thin)
22
+
23
+ Use this when the ask is conventional or underspecified - missing who decides, why now, what success looks like, or the binding constraint. **Do not** run it when the FDE already gave a clear brief, is mid-flow, or asked for speed over verification.
24
+
25
+ Format - one question at a time, with a guess the FDE can correct:
26
+
27
+ ```
28
+ READ: <one sentence - what you think they actually need>
29
+ MISSING: <fact or authority that changes the next action>
30
+ Q: <one focused question>
31
+ POSSIBLE READ: <clearly labeled interpretation, if useful; never guessed authority>
32
+ ```
33
+
34
+ Wait for the reaction before the next question. Stop when the next authorized action is clear, or when the FDE says move on; unanswered material gaps remain visible. Every answer that is still unknown stays `unknown - ask:` in the artifact - never fill the gap with a plausible stakeholder.
35
+
36
+ ## Method - part 1: interrogate the brief (you do this work)
37
+
38
+ Read the brief the FDE gives you. Separate **observed** (source/path and date), **reported** (who said it), and **hypothesis** (how to test it). A requested solution such as “build an agent” is not evidence of the cause. Ask only about gaps that change scope, access, acceptance, or the next investigation. What is **not** in the brief matters as much as what is. Produce the gap list yourself:
39
+
40
+ - **No named decision-maker** → identify who or what can accept the outcome and the source of that authority; keep it unknown until established.
41
+ - **"Straightforward cleanup" on an 8-year-old system** → inspect permitted relevant history and tests for prior attempts and constraints; age alone proves neither complexity nor a previous failure.
42
+ - **Very tight timeline** → establish the deadline, its source and which commitments are actually agreed.
43
+ - **No out-of-scope section** → clarify material boundaries against the existing agreement. An omission does not authorize additional work.
44
+
45
+ Write these into `brief.md` as **questions to answer**, not problems - they're what the FDE is walking in to resolve.
46
+
47
+ Pre-arrival checks to run through with the FDE:
48
+ - Access confirmed for the next task? Repo, environment and docs may have different permissions; identify gaps before dependent work.
49
+ - Has someone tried this before? Establish what happened and what evidence remains; do not assume the attempt failed.
50
+ - Other vendors/teams in scope? Then the FDE is not the only one in the room, even when alone in the meeting.
51
+ - Tech stack recon: job postings, GitHub org - know the stack before they say it.
52
+
53
+ ## Method - part 2: the first conversation (you coach, the FDE asks)
54
+
55
+ Intent: coach the FDE's first *customer* conversation - what keeps the sponsor up at night, personally, not the project charter. You already inspected the supplied brief and any authorized repo/docs. This is before *their* laptop in the room / before a deep build, not before you read evidence. Failure talk surfaces truth faster than "requirements." Angles in the FDE's own words:
56
+
57
+ - "Before you open the laptop - what would make this a bad engagement for *them*, not just a delayed project?"
58
+ - "What are they afraid you'll miss?"
59
+ - "Who loses credibility if this goes wrong?"
60
+ - "If nothing changes over the agreed timeframe, what happens, and who bears it?" Record the consequence and its source in `brief.md`; distinguish reported impact from measured cost. Unknown cost stays unknown, not an invented ROI.
61
+
62
+ Allow time for an answer. If a stated concern differs from the brief, record the difference and clarify whether it changes the agreed outcome; neither statement automatically supersedes the other.
63
+
64
+ **Listen for, and capture as you hear it:**
65
+ - **Decision rights** - who can approve scope, accept the result and authorize release, as relevant. A frequently mentioned person may be influential; confirm their actual authority and scope.
66
+ - **The previous attempt** - "we tried something similar last year" identifies evidence to investigate. Who was involved, what happened, and which constraints still apply? Do not infer why someone left.
67
+ - **The existing internal team** - ask what they tried, what they know and what they expect to own. Use established terminology and credit their work. Do not assume resentment, displacement or complete knowledge of the problem.
68
+ - **The sacred thing** - "Is there anything in this environment I should treat as untouchable?" Capture the stated boundary and applicable policy; hesitation alone does not identify a restriction.
69
+ - **Exception path (operating map seed)** - "When the happy path breaks this week, what do people actually do - who do they call, what spreadsheet opens, what do they skip?" Capture the break → workaround → who owns it. Do not build a full map on day 1; seed rows later in `terrain.md` → `## Operating map (exception-led)` during discover. Unknowns stay `unknown - ask:`.
70
+ - **AI posture and policy** - tools already in use (sanctioned or shadow), and: "Does your organisation have a policy on AI-generated code? Are there decisions where you would not be comfortable with AI involvement?"
71
+ - **Future operator** - "Who will run this after we leave, and have they agreed?" Record the proposed operator and unresolved ownership in `success.md`, separately from the signer. A sponsor naming a team is not that team accepting responsibility; verify with the operator during discover.
72
+ - **Boundaries in multi-vendor rooms** - who owns what surface, who signs off before a change crosses it.
73
+
74
+ ## An early deliverable
75
+
76
+ Choose an early useful result within confirmed scope: a verified small fix, a permitted diagnostic, or a concise map of an unresolved problem. Reuse the existing outcome and authority for routine work. A first-day deadline does not grant deployment permission or waive verification; use `ship` for a release. If a missing signer blocks a consequential decision, keep it visible and continue independent preparation.
77
+
78
+ ## Artifact (write as the conversation is debriefed)
79
+
80
+ **`brief.md`** - what they said, who sent the FDE, the timeline, **and the gap list**.
81
+
82
+ **`success.md`** - what done looks like, **primary value bucket** (`cost-save` | `risk-mitigation` | `revenue-uplift`), baseline → target, who actually signs off, what is explicitly out of scope. Record agreement only with its source and scope; otherwise label the target proposed. For each baseline, record source, date/window, environment, and sample size when relevant. An operator recollection is reported, not measured. If no baseline exists, name the measurement owner and cheapest way to obtain it; do not manufacture a number.
83
+
84
+ For every target number, run the **gaming check** before it is written down: *how could this metric hit its target without the customer being any better off?* Identify plausible failure modes without predicting that the customer will exploit them. Write a relevant guard next to the metric:
85
+
86
+ ```markdown
87
+ | Metric | Baseline → target | Gamed by | Guard |
88
+ |--------|-------------------|----------|-------|
89
+ | reconciliation alert latency | 4h → 15min | alerting on everything, so nobody reads them | alerts acked by a named owner, ≤2/week |
90
+ ```
91
+
92
+ If a proposed guard is disputed, capture the stated reason and assess its cost and effect on the outcome. Do not infer that the customer values the number over the result.
93
+
94
+ **`stakeholders.md`**:
95
+ ```markdown
96
+ | Who | Role | Signal | Notes |
97
+ |-----|------|--------|-------|
98
+ | <name> | <observed participation role; authority recorded separately> | green/amber/red | <evidence, day> |
99
+ ```
100
+ If `stakeholders.md` already has a `## Signal history` section (it does from the template), **never delete or overwrite it** when you rewrite this file - it holds the dated `[signal:...]` tokens `fde log contact --signal` and `fde debrief` write, and `fde status`/`fde receipts`/the dashboard read only from that section. Edit the table above it freely; keep the section below intact.
101
+
102
+ **`trust-profile.md`** - sacred data (`<private>` tagged), fears heard, AI policy, approval chain. Sensitive: skip for status reads; use CLI/redacted surfaces; never paste raw `<private>` into prompts or subagents.
103
+
104
+ **`assumptions.md`** - seed consequential unverified claims from the brief (and the initial hypothesis) as rows with Kind `UNKNOWN` (or `CONVENTION` if they said "we always"), blast radius CRITICAL / LOAD-BEARING / CONVENIENCE, and status `OPEN`. Do not wait for test-assumptions - land makes the register exist. Example:
105
+
106
+ ```markdown
107
+ | # | Assumption | Kind | Blast radius | How we test | Status | Evidence |
108
+ |---|------------|------|--------------|-------------|--------|----------|
109
+ | 1 | <claim from brief> | UNKNOWN | CRITICAL | <cheapest falsifying test> | OPEN | (stated, unverified) |
110
+ ```
111
+
112
+ One falsifiable hypothesis about the real problem also goes at the bottom of `brief.md` - discover / test-assumptions will test it.
113
+
114
+ ## Checkpoint
115
+
116
+ One page back to the FDE: success + value bucket + sign-off owner, out-of-scope boundary, sacred data, stakeholder map with veto power, AI posture, the hypothesis, the top CRITICAL assumptions still OPEN, and any exception-path seeds heard (break → workaround → owner) for discover to map into `terrain.md`. Keep the summary short and link necessary detail; a complex engagement may need supporting evidence.
117
+
118
+ If remote: agree how progress and blockers will be shared; use a short call when asynchronous context is insufficient.
119
+
120
+ ## Worked example
121
+
122
+ Kickoff at Acme payments. Priya (VP Eng) sponsors; the brief says "add monitoring to the reconciliation service."
123
+
124
+ Asking what happens the week after a perfect delivery gets: "I stop hearing about it from finance." That suggests a concern to clarify alongside the monitoring request. The previous attempt surfaces too: the platform team built alerting last year, it was turned off. Raj, who built it, is still there and was not in the kickoff. Ask for his account of the earlier attempt; his absence does not explain his views.
125
+
126
+ In this example Priya reports a four-hour baseline and proposes the following target; her acceptance authority still needs its source. What gets written: `success.md` with proposed bucket `risk-mitigation`, `reconciliation failures reach a named owner within 15 min (baseline: 4h, found by finance)`, gaming check `alerting on everything so nobody reads them` → guard `≤2 alerts/week, acked by name`, proposed sign-off Priya until confirmed. `brief.md` carries the gap list and the hypothesis: *the job is not unmonitored, it is unowned*. `assumptions.md` seeds `"finance would act on an alert" - CRITICAL - OPEN - (stated, unverified)`. `trust-profile.md` records the boundary Priya explicitly names, through the permitted privacy-safe workflow.
127
+
128
+ Early deliverable: verify and fix the log line that swallows the job's exit code within the existing scope. Deployment remains subject to the established release authority and checks.
129
+
130
+ ## Principles
131
+
132
+ - Establish the outcome and authority needed for the next action; missing record files do not block useful standalone work.
133
+ - Sacred data tagged `<private>` stays out of model context: use CLI/redacted reads; never paste raw private blocks.
134
+ - Treat unverified parts of the brief as hypotheses; discovery may support or overturn them. Record consequential assumptions.
135
+ - Learn from the existing team and verify consequential claims without guessing motives.
136
+ - If the customer cannot define success, that is the first problem to solve.
@@ -0,0 +1,18 @@
1
+ # Task context and evidence
2
+
3
+ Use this contract for standalone methods and methods routed through `@fde`.
4
+
5
+ - **Standalone work:** use the supplied, permitted facts, notes, code, and artifacts. A client name, `.fde/` directory, or initialized engagement is not a prerequisite for work on supplied context. Tasks that inspect actual records need those records; staging or saving requires a selected customer. Never fabricate records to make an operational task appear complete. Do not bootstrap records merely to run a method. Ask only for missing information or authority that changes the next action; mark other gaps as unknown.
6
+ - **Artifact names are destinations:** names such as `success.md`, `decisions.md`, and `delivery.md` identify relevant evidence and, when bound, record destinations. If absent, use supplied facts and return the requested draft or result in the current workspace or conversation. Do not invent files or require initialization to complete useful work.
7
+ - **Bound engagement:** honor the current client binding and constraints. Before reading records, run `fde privacy` to verify masking support. Obtain a fresh, identity-matching sanitized `fde resume` packet for this task (or reuse a fresh session-hook packet); retrieve missing evidence with targeted `fde recall <topic>`. Use bounded `fde handoff` for transfer work. Refresh after binding, masking, or record changes. Never substitute raw `.fde/` reads, private blocks, masking dictionaries, or full transcripts. If the CLI is unavailable, use only permitted supplied excerpts and report the context limitation.
8
+ - **Authority:** continue reversible work within authorized scope. Reuse prior authorization when it covers the specific action. Show consequential engagement-record judgments and uncertainties for confirmation before saving unless already explicitly confirmed. New scope, acceptance changes, production actions, exports, and external messages need the applicable authority; a method invocation alone does not supply it. Keep one customer's writes in that customer's record.
9
+ - **Evidence:** distinguish supplied facts, estimates, hypotheses, and unknowns. Cite actual sources; a log date is not attribution. Never invent a source, signer, signature, customer reaction, or acceptance. Keep outcomes **promised → measured → accepted** distinct, and implementation, verification, deployment, and customer acceptance separate. Missing evidence means unproven, not an observed failure.
10
+ - **Data boundary:** use only data permitted by the customer's AI policy; clarify unknown policy before loading their code or data. Never load `<private>` content into a model. Cross-client comparison and exporting reusable material require permission and removal of customer-identifying or confidential content; anonymization alone does not grant permission.
11
+
12
+ ## CLI availability
13
+
14
+ Only locate the CLI when the selected task needs it. Check `fde` on PATH and its `fde privacy` capability before reading records. If unavailable, use `node ~/.claude/fdeops/fde.js` when the disk installer placed it there, or `npx --yes fdeops <command>` when package downloads are permitted. Respect local installation and network rules. Run commands for the user; do not turn a missing bare `fde` command into unnecessary manual setup.
15
+
16
+ If no permitted executable is available, explain the missing capability. Continue any useful draft from supplied excerpts, but do not claim to have read, switched, staged, saved or rendered real records. Do not read raw private record files as a fallback.
17
+
18
+ Apply the selected method to this context. Follow its linked supporting methods only when needed; do not restart discovery or repeat already answered questions.
@@ -3,14 +3,14 @@
3
3
  "version": 1,
4
4
  "files": {
5
5
  "SKILL.md": "19f32ecae72b96ee19cb87658ddd998cce96ec2e3960255d13fcc2906c6d0b6b",
6
- "references/build.md": "3dfeed619eeb1c8401f5cdf65e6f803fb209c70cb464dac4e60a1c890fd3a6f7",
6
+ "references/build.md": "6fa07b15b682119de53c38950f94942a58e4680ab58b24319d77c54a27cd9697",
7
7
  "references/debug.md": "c3bb344d38cc3552cb4e230c601a9be3fe173af2b2efb89aab6b7b04339f24f4",
8
8
  "references/eval-pack.md": "0590b85d3cae0903c6b1274540c92eaa2a4373047e8a0548d6942516ef0bb9e1",
9
- "references/integrate.md": "107a50bddf6cb0ba7f2bc006dfe9851800c6868e43f785a33ae4b737aeb74c95",
9
+ "references/integrate.md": "d0de35a783902ca8b4762e3a42a14f467766d56a928c3a5cf11adac2a6ba90ba",
10
10
  "references/qa.md": "d8f58e6d36436469a58aeb1107037f3e27fa81ff5b82d0e4df3c23eeadaf683c",
11
11
  "references/review.md": "63a007f78288089cc84cccc72647e8ce6721b7efa0f4f8d6774c0f0af594749d",
12
12
  "references/ship.md": "8cdcb2d4d6eb57e0adf3f1996bc02ae66920852ca304d2afd778fa483b7e969a",
13
- "references/task-context.md": "8ec90708522e512a50a57ab2a377a7472e93bae169c6f075a93fa603ce2ad780",
13
+ "references/task-context.md": "73eea2d7f164fac3226599e5be26ae4e79dcf69e0d24428dd12d623861410490",
14
14
  "references/verification.md": "d453c075b849437375338fd23782ca7fe6d427b05137a2b10fc2f724aaf7f8a9"
15
15
  }
16
16
  }
@@ -6,7 +6,7 @@ Use the permitted context and authority in [task context](task-context.md). This
6
6
 
7
7
  ## Method
8
8
 
9
- 1. Identify the repository, its instructions, working tree, relevant callers, and test commands. Inspect examples before creating abstractions. Preserve unrelated edits and state which dependencies or interfaces the change touches.
9
+ 1. Identify the repository, its instructions, working tree, relevant callers, and test commands. Inspect examples before creating abstractions. 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
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
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
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.
@@ -6,13 +6,23 @@ Start from [task context](task-context.md). Permitted supplied context is enough
6
6
 
7
7
  ## Method
8
8
 
9
- 1. Map producer, consumer, owner, direction, and side effects. Inspect the actual installed version and local implementation; verify uncertain behavior against current official documentation. Identify the relevant schema, authentication scopes, network boundary, and permitted test environment.
9
+ 1. Map producer, consumer, owner, direction, and side effects. Inspect the actual installed version and local implementation; verify uncertain behavior against current official documentation. Identify the relevant schema, authentication scopes, network boundary, and permitted test environment. Before changing an untested existing boundary, characterize the mappings, ordering or other observable behavior its callers depend on.
10
10
  2. Write the acceptance example: an input at the real boundary and the observable downstream result. Include a rejection or failure example. Separate configuration validity, successful authentication, transport connectivity, contract compatibility, and end-to-end behavior; none proves the next.
11
11
  3. Inspect credentials by presence and required scope without printing values. Use existing secret storage. Check data classification and retention before moving data; never pass raw `<private>` blocks into a model. Prefer sanitized or synthetic cases approved for the target environment.
12
- 4. Implement the narrow adapter using native repository patterns. Validate external inputs and model outputs, bound timeouts and retries, preserve error context without leaking payloads, and handle cancellation. For writes, establish idempotency or duplicate detection before retries; for events, check ordering, replay, and poison messages as applicable.
12
+ 4. Implement the narrow adapter using native repository patterns. Validate external inputs and model outputs, bound timeouts and retries, preserve error codes and failure phase without leaking payloads, and handle cancellation. Keep explicit authentication or permission rejections distinguishable from transport uncertainty. For writes, establish idempotency or duplicate detection before retries and apply the uncertain-write rules below when outcomes can be ambiguous; for events, check ordering, replay, and poison messages as applicable.
13
13
  5. Exercise a permitted success case and relevant failures: denied access, malformed data, rate limit, timeout, duplicate delivery, or partial completion. Trace correlation IDs or safe evidence across both sides. A mock proves client behavior only; if live access is unavailable, report that gap instead of claiming an integration works.
14
14
  6. Check cleanup and recovery for test side effects. Use [verification](verification.md) for receipts and [review](review.md) for security or data-contract changes. Route deployment through [ship](ship.md) only when authorized.
15
15
 
16
+ ## When a write outcome is uncertain
17
+
18
+ Use the existing storage and worker mechanisms; do not introduce a new platform for these rules.
19
+
20
+ - Before a replayable write, persist its tenant-scoped operation identity and payload identity, with enough state to recover after restart. Establish who owns an in-flight attempt so concurrent workers cannot independently replay it. Establish whether upstream deduplication is guaranteed, including its key, payload rules and retention window; sending a key alone proves nothing.
21
+ - A timeout, cancellation or lost response after dispatch may leave a completed side effect. Preserve that uncertainty across restart; stopping the caller is not rollback. Do not silently turn an uncertain attempt into a fresh operation.
22
+ - Reconcile against an authoritative receipt or lookup that matches the operation and payload. One verified result can confirm completion; conflicting or multiple matches require resolution. An empty stale, partial or eventually consistent lookup does not prove absence or authorize replay. Retry only under the verified deduplication contract or evidence establishing that repeating the write is safe.
23
+ - Keep unresolved attempts visible with safe error context, a next action and a known resolution owner, or an explicit ownership gap. Manual resolution still needs authority for any corrective write; do not manufacture completion to clear a queue.
24
+ - Test the relevant failure boundary: committed write with lost response, cancellation or restart before recording success, and stale lookup or concurrent replay where applicable. Record which were exercised and which remain unproven.
25
+
16
26
  ## Deliverable and acceptance
17
27
 
18
28
  Return the boundary contract, changed paths, environment, evidence at each tested layer, and remaining dependencies with owners when known. Done requires the agreed end-to-end result or an explicit narrower agreed scope. Do not silently replace live acceptance with a stub. In engagement mode, update the terrain/delivery record with confirmed facts; otherwise return the receipt directly.
@@ -2,11 +2,17 @@
2
2
 
3
3
  Use this contract for standalone methods and methods routed through `@fde`.
4
4
 
5
- - **Standalone work:** use the supplied, permitted facts, notes, code, and artifacts. A client name, `.fde/` directory, or initialized engagement is not a prerequisite. Do not bootstrap records merely to run a method. Ask only for missing information or authority that changes the next action; mark other gaps as unknown.
5
+ - **Standalone work:** use the supplied, permitted facts, notes, code, and artifacts. A client name, `.fde/` directory, or initialized engagement is not a prerequisite for work on supplied context. Tasks that inspect actual records need those records; staging or saving requires a selected customer. Never fabricate records to make an operational task appear complete. Do not bootstrap records merely to run a method. Ask only for missing information or authority that changes the next action; mark other gaps as unknown.
6
6
  - **Artifact names are destinations:** names such as `success.md`, `decisions.md`, and `delivery.md` identify relevant evidence and, when bound, record destinations. If absent, use supplied facts and return the requested draft or result in the current workspace or conversation. Do not invent files or require initialization to complete useful work.
7
7
  - **Bound engagement:** honor the current client binding and constraints. Before reading records, run `fde privacy` to verify masking support. Obtain a fresh, identity-matching sanitized `fde resume` packet for this task (or reuse a fresh session-hook packet); retrieve missing evidence with targeted `fde recall <topic>`. Use bounded `fde handoff` for transfer work. Refresh after binding, masking, or record changes. Never substitute raw `.fde/` reads, private blocks, masking dictionaries, or full transcripts. If the CLI is unavailable, use only permitted supplied excerpts and report the context limitation.
8
8
  - **Authority:** continue reversible work within authorized scope. Reuse prior authorization when it covers the specific action. Show consequential engagement-record judgments and uncertainties for confirmation before saving unless already explicitly confirmed. New scope, acceptance changes, production actions, exports, and external messages need the applicable authority; a method invocation alone does not supply it. Keep one customer's writes in that customer's record.
9
9
  - **Evidence:** distinguish supplied facts, estimates, hypotheses, and unknowns. Cite actual sources; a log date is not attribution. Never invent a source, signer, signature, customer reaction, or acceptance. Keep outcomes **promised → measured → accepted** distinct, and implementation, verification, deployment, and customer acceptance separate. Missing evidence means unproven, not an observed failure.
10
10
  - **Data boundary:** use only data permitted by the customer's AI policy; clarify unknown policy before loading their code or data. Never load `<private>` content into a model. Cross-client comparison and exporting reusable material require permission and removal of customer-identifying or confidential content; anonymization alone does not grant permission.
11
11
 
12
+ ## CLI availability
13
+
14
+ Only locate the CLI when the selected task needs it. Check `fde` on PATH and its `fde privacy` capability before reading records. If unavailable, use `node ~/.claude/fdeops/fde.js` when the disk installer placed it there, or `npx --yes fdeops <command>` when package downloads are permitted. Respect local installation and network rules. Run commands for the user; do not turn a missing bare `fde` command into unnecessary manual setup.
15
+
16
+ If no permitted executable is available, explain the missing capability. Continue any useful draft from supplied excerpts, but do not claim to have read, switched, staged, saved or rendered real records. Do not read raw private record files as a fallback.
17
+
12
18
  Apply the selected method to this context. Follow its linked supporting methods only when needed; do not restart discovery or repeat already answered questions.
@@ -0,0 +1,9 @@
1
+ {
2
+ "generator": "bin/generate-skills.js",
3
+ "version": 1,
4
+ "files": {
5
+ "SKILL.md": "79249fd92c3c0437954f52c6ff07a0b0e351a588ef84cd1bcc810a9fb3ab7b77",
6
+ "references/business-case.md": "32e000e8351cd59f9eaad8be40babb276df69948ea4f81e01a4672e47f48cb25",
7
+ "references/task-context.md": "73eea2d7f164fac3226599e5be26ae4e79dcf69e0d24428dd12d623861410490"
8
+ }
9
+ }
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: business-case
3
+ description: Develop a business case for an initiative using costs, benefits, risks and evidence. Use when a sponsor needs budget or timeline justification.
4
+ ---
5
+
6
+ # business-case
7
+
8
+ <!-- Generated by bin/generate-skills.js; edit the canonical references and catalog. -->
9
+
10
+ ## Purpose
11
+
12
+ Develop a business case for an initiative using costs, benefits, risks and evidence. Use when a sponsor needs budget or timeline justification.
13
+
14
+ Read [the task context contract](references/task-context.md), then [the method](references/business-case.md). Load further references only when the task needs them. Everything linked is included in this skill; no other skill pack is required.
15
+
16
+ ## Principles
17
+
18
+ - Work directly from the supplied permitted context. Standalone work does not require an engagement folder or initialization. Record filenames in the method are optional persistence destinations when no engagement is bound.
19
+ - If called by @fde, reuse its current sanitized packet and scope. Do not restart setup, discovery or questions already answered.
20
+ - The task context contract controls persistence and authority in both modes. Preserve unknowns and distinguish implementation, verification, deployment and acceptance.
21
+ - Use the customer's repository instructions and available tools. Report a missing capability or unrun check honestly; do not claim that installing a skill provisions infrastructure.
@@ -0,0 +1,90 @@
1
+ # business-case - Build the business case
2
+
3
+ **Context:** apply [task context and evidence](task-context.md) before using the named records below.
4
+
5
+ **Enter when:** the sponsor needs justification for the next phase, the FDE needs to defend budget or timeline, a feature decision needs cost/benefit evidence, or poc produced a direction that needs funding.
6
+
7
+ **Read first:** `reality.md`, `success.md`, `delivery.md`, `context.md`. Load `business-case.md` from poc if it exists - extend it, don't restart.
8
+
9
+ Technical FDEs lose engagements by shipping good code without business justification. The sponsor's boss doesn't ask "is the code clean?" - they ask "what did we get for the money?" A business case translates technical work into the language that keeps the engagement alive.
10
+
11
+ ## Method (you do this work)
12
+
13
+ **1. Name the cost of doing nothing.** This is the anchor. Every business case starts not with what you'll build, but with what it costs them to leave the problem unsolved:
14
+
15
+ | Cost type | How to find it | Example |
16
+ |-----------|---------------|---------|
17
+ | **Labor capacity / direct spend** | Ask: "What does this problem cost per month in money?" | Manual reconciliation hours × loaded rate = capacity value; separately identify reducible spend |
18
+ | **Opportunity cost** | Ask: "What can't you do because of this problem?" | Can't onboard enterprise clients because the API can't handle their volume |
19
+ | **Risk cost** | Ask: "What happens if this breaks at the worst time?" | A payment processing outage during Black Friday = $X/hour in lost sales |
20
+ | **Velocity cost** | Measure: deployment frequency, lead time, change failure rate | Team ships once/month instead of once/week; each delay = N features not reaching customers |
21
+
22
+ **2. Build the driver model.** Not a spreadsheet - a logic chain the sponsor can trace:
23
+
24
+ ```
25
+ Investment: <hours × rate, or fixed cost>
26
+ → Delivers: <specific outcome from success.md>
27
+ → Benefit: <capacity released, avoidable cash spend, revenue, or risk reduction>
28
+ → Net cash: realizable incremental cash benefit - full costs over <time horizon>
29
+ ```
30
+
31
+ Keep drivers, units, sources, and ranges explicit. For example, 3 people × 8h/week × $75/h × 52 weeks = $93.6K/year of labor capacity value. It is cash savings only if spend actually falls (for example, paid overtime or a contractor cost ends). Name who can realize the benefit and how. Include build, ongoing operation, adoption, and transition costs; avoid double-counting capacity and revenue enabled by the same hours. Do not calculate cash payback from capacity value alone.
32
+
33
+ **3. Sensitivity check - name the two drivers that swing the result:**
34
+
35
+ Every business case has 1-2 variables where a small change flips the outcome. Name them explicitly:
36
+
37
+ > "The capacity case assumes the team reclaims 6 hours/week per person. At 3 hours, that benefit halves. Cash payback remains unproven until finance identifies avoidable spend. Validate time-spent before and after the pilot with representative team members."
38
+
39
+ The sponsor who sees you've identified where the case could break trusts the case more, not less.
40
+
41
+ **4. Frame for the audience.** Different stakeholders need different lenses on the same case:
42
+
43
+ | Audience | Lead with | Avoid |
44
+ |----------|----------|-------|
45
+ | **CFO / finance** | ROI, payback period, cash flow impact | Technical architecture, feature lists |
46
+ | **CTO / engineering** | Technical debt retired, velocity improved, risk reduced | Revenue projections they can't verify |
47
+ | **CEO / founder** | Strategic enablement, competitive edge, customer impact | Detailed calculations (give the summary, offer the detail) |
48
+ | **Product** | User impact, adoption metrics, feature velocity | Cost structures that aren't their domain |
49
+
50
+ **5. The one-page format.** The business case fits one page or it isn't understood:
51
+
52
+ ```markdown
53
+ ## Business case: <initiative name>
54
+
55
+ **The problem costs:** <one line, quantified>
56
+ **The investment:** <hours and cost>
57
+ **The return:** <quantified, with time horizon>
58
+ **Payback:** <months from realizable cash benefits, or not established>
59
+ **Sensitivity:** <the 1-2 drivers that swing it, with thresholds>
60
+ **Risks:** <what must be true for this to hold>
61
+ **Recommendation:** <proceed / proceed-with-conditions / defer>
62
+ ```
63
+
64
+ ## Artifact
65
+
66
+ **`business-case.md`** - the one-page case. Lives alongside `success.md` and `reality.md` as a first-class engagement artifact. Referenced by plan, status, and close.
67
+
68
+ **`decisions.md`** - log the sponsor's response: approved, modified, deferred. With the date.
69
+
70
+ ## Checkpoint
71
+
72
+ Walk the FDE through: the cost of doing nothing (anchor), the investment, the return, and the one sensitivity that matters most. If the FDE says "the sponsor won't buy the ROI number," inspect the disputed inputs and sources, test plausible ranges, and identify what measurement would resolve the disagreement. Never reverse-engineer assumptions to hit a desired number.
73
+
74
+ ## Worked example
75
+
76
+ Acme phase 2 needs funding. The case starts with the cost of doing nothing, not the cost of building.
77
+
78
+ Anchor: two silent failures since March, each one day of finance reconciliation by hand plus a late close (`reality.md`, Marco's sheet). That is the number the sponsor already believes because her own team reported it.
79
+
80
+ Driver model the sponsor can trace: incidents/quarter × hours of manual reconciliation × loaded cost, plus the tail risk of a late regulatory close - stated separately, because mixing a certain small number with an uncertain large one is how a case loses credibility.
81
+
82
+ Sensitivity names the two drivers that swing it: incident frequency (2/quarter → 1/quarter and the case halves) and whether the manual re-run continues in parallel (if Marco keeps re-running every morning, the saving is theoretical). The second one is the honest weakness, so it is in the case rather than waiting to be found in the room - with the condition that makes it hold: the morning re-run stops after two clean cycles, agreed with Marco.
83
+
84
+ ## Principles
85
+
86
+ - The cost of doing nothing is always the opening move. Anchor before proposing.
87
+ - Driver models with visible arithmetic beat magic spreadsheets.
88
+ - Name the sensitivity. The case that admits its weakness earns more trust.
89
+ - One page. If it doesn't fit, you don't understand it yet.
90
+ - A business case the FDE can't explain in 60 seconds won't survive the sponsor's boss.
@@ -0,0 +1,18 @@
1
+ # Task context and evidence
2
+
3
+ Use this contract for standalone methods and methods routed through `@fde`.
4
+
5
+ - **Standalone work:** use the supplied, permitted facts, notes, code, and artifacts. A client name, `.fde/` directory, or initialized engagement is not a prerequisite for work on supplied context. Tasks that inspect actual records need those records; staging or saving requires a selected customer. Never fabricate records to make an operational task appear complete. Do not bootstrap records merely to run a method. Ask only for missing information or authority that changes the next action; mark other gaps as unknown.
6
+ - **Artifact names are destinations:** names such as `success.md`, `decisions.md`, and `delivery.md` identify relevant evidence and, when bound, record destinations. If absent, use supplied facts and return the requested draft or result in the current workspace or conversation. Do not invent files or require initialization to complete useful work.
7
+ - **Bound engagement:** honor the current client binding and constraints. Before reading records, run `fde privacy` to verify masking support. Obtain a fresh, identity-matching sanitized `fde resume` packet for this task (or reuse a fresh session-hook packet); retrieve missing evidence with targeted `fde recall <topic>`. Use bounded `fde handoff` for transfer work. Refresh after binding, masking, or record changes. Never substitute raw `.fde/` reads, private blocks, masking dictionaries, or full transcripts. If the CLI is unavailable, use only permitted supplied excerpts and report the context limitation.
8
+ - **Authority:** continue reversible work within authorized scope. Reuse prior authorization when it covers the specific action. Show consequential engagement-record judgments and uncertainties for confirmation before saving unless already explicitly confirmed. New scope, acceptance changes, production actions, exports, and external messages need the applicable authority; a method invocation alone does not supply it. Keep one customer's writes in that customer's record.
9
+ - **Evidence:** distinguish supplied facts, estimates, hypotheses, and unknowns. Cite actual sources; a log date is not attribution. Never invent a source, signer, signature, customer reaction, or acceptance. Keep outcomes **promised → measured → accepted** distinct, and implementation, verification, deployment, and customer acceptance separate. Missing evidence means unproven, not an observed failure.
10
+ - **Data boundary:** use only data permitted by the customer's AI policy; clarify unknown policy before loading their code or data. Never load `<private>` content into a model. Cross-client comparison and exporting reusable material require permission and removal of customer-identifying or confidential content; anonymization alone does not grant permission.
11
+
12
+ ## CLI availability
13
+
14
+ Only locate the CLI when the selected task needs it. Check `fde` on PATH and its `fde privacy` capability before reading records. If unavailable, use `node ~/.claude/fdeops/fde.js` when the disk installer placed it there, or `npx --yes fdeops <command>` when package downloads are permitted. Respect local installation and network rules. Run commands for the user; do not turn a missing bare `fde` command into unnecessary manual setup.
15
+
16
+ If no permitted executable is available, explain the missing capability. Continue any useful draft from supplied excerpts, but do not claim to have read, switched, staged, saved or rendered real records. Do not read raw private record files as a fallback.
17
+
18
+ Apply the selected method to this context. Follow its linked supporting methods only when needed; do not restart discovery or repeat already answered questions.
@@ -0,0 +1,12 @@
1
+ {
2
+ "generator": "bin/generate-skills.js",
3
+ "version": 1,
4
+ "files": {
5
+ "SKILL.md": "b2d112f09f663a1f0a7e9bb0fa7cd065ab81e22be6a385cb6afef77b2dd66b08",
6
+ "references/connect.md": "37ad703ece7fe3596be4d5d3697cc4ba5e6062615f9576733c20d055fc3e4927",
7
+ "references/debrief.md": "2d2db9a177f5341a9a2721a9d6ea32a6d07e7e982e621429ca408a38bc5617c1",
8
+ "references/ingest.md": "24880bc3d95cda09ec6c2f5edebd17fba99deb912f93e15c8b715a287283da84",
9
+ "references/source-setup.md": "a28ae7c6dbb2573a66f31b30b7abca34bc52573fe34d48fff4c7490e4dc85d3e",
10
+ "references/task-context.md": "73eea2d7f164fac3226599e5be26ae4e79dcf69e0d24428dd12d623861410490"
11
+ }
12
+ }
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: connect
3
+ description: Configure or diagnose access to a requested source using available host tools. Use for source MCP setup; source configuration needs no engagement record and credentials stay with the host.
4
+ ---
5
+
6
+ # connect
7
+
8
+ <!-- Generated by bin/generate-skills.js; edit the canonical references and catalog. -->
9
+
10
+ ## Purpose
11
+
12
+ Configure or diagnose access to a requested source using available host tools. Use for source MCP setup; source configuration needs no engagement record and credentials stay with the host.
13
+
14
+ Read [the task context contract](references/task-context.md), then [the method](references/connect.md). Load further references only when the task needs them. Everything linked is included in this skill; no other skill pack is required.
15
+
16
+ ## Principles
17
+
18
+ - Source configuration and capability checks do not require an engagement record. Use available host tools and source documentation. Any later record staging or application follows the ingest method and its binding and confirmation requirements.
19
+ - If called by @fde, reuse its current sanitized packet and scope. Do not restart setup, discovery or questions already answered.
20
+ - The task context contract controls persistence and authority in both modes. Preserve unknowns and distinguish implementation, verification, deployment and acceptance.
21
+ - Use the customer's repository instructions and available tools. Report a missing capability or unrun check honestly; do not claim that installing a skill provisions infrastructure.
@@ -0,0 +1,24 @@
1
+ # connect - Connect a source
2
+
3
+ **Enter when:** the user asks to connect a notes, chat or document source, or an expected source cannot be read.
4
+
5
+ Apply [task context](task-context.md). Source setup can run independently of a customer record. Follow [source setup](source-setup.md) for permitted tools, credentials, connectivity checks and export alternatives.
6
+
7
+ ## Method
8
+
9
+ 1. Identify the source and the material the user wants to read. Inspect the host's actual available tools before recommending setup.
10
+ 2. If the source already works, use a narrowly scoped requested read. Do not install another connector.
11
+ 3. If setup is needed, verify current provider and host documentation, explain the required access, and make only authorized configuration changes. Never put credentials into prompts or customer records.
12
+ 4. Test the selected source and distinguish configuration from successful retrieval. If access is blocked, report the specific limitation and an available file or paste alternative.
13
+ 5. If the user also wants to update a customer record, continue with [ingest](ingest.md) after selecting that record. Otherwise stop after the requested setup or read.
14
+
15
+ ## Checkpoint
16
+
17
+ Return what is connected, what read was verified, any access gap, and how to request the next pull. Do not claim an integration works from configuration alone or write customer records during setup.
18
+
19
+ ## Principles
20
+
21
+ - Existing source tools first; configuration only when needed.
22
+ - Minimum requested read, no ambient synchronization.
23
+ - Credentials stay in supported secret storage.
24
+ - Record updates require their own review and confirmation.
@@ -0,0 +1,91 @@
1
+ # debrief - Capture the meeting
2
+
3
+ **Enter when:** the FDE just left a meeting/call and dumps raw notes, a transcript, or "they said…". Highest-frequency moment in FDE life. Capture within the hour.
4
+
5
+ **Standalone review:** apply [task context](task-context.md). If the user supplies notes and wants a summary or review, interpret them using **Prepare one update** below and return a draft. Keep requests, confirmed decisions, reported results and unknowns distinct. No CLI or customer record is needed; do not claim anything was saved. Use the bound-record path below only when updating an existing record or when the user asks to start one.
6
+
7
+ **Large transcripts or emails** sitting in Granola/Gmail/Notion → prefer **`fde ingest stage`** first (via source MCPs the FDE configured), then the same propose → confirm → **`fde ingest apply`** path. See `references/ingest.md`. Pasted short notes stay on this debrief verb.
8
+
9
+ **Read first:** the bounded `fde resume` packet for the bound client. Use `fde recall` for the specific prior decision, action, or delivery result needed to reconcile this update. Do not reload the whole engagement.
10
+
11
+ **Who runs the CLI:** you (the agent). Never tell the FDE to type `fde debrief …`.
12
+
13
+ ## Honest contract (read once)
14
+
15
+ - The `fde` CLI is **local, deterministic, no AI**. `--smart` is a **gate + writer**, not a brain.
16
+ - It keeps lines that already have `decision:` / `risk:` / `delivery:` / `contact:` / `next:` / `signer:` prefixes, plus a thin keyword pass (e.g. "we agreed", person+verb lines, "open question", "X signs off").
17
+ - `signer: Priya` fills **Stakeholder who signs off** in `success.md` and logs Priya as a contact. The CLI proposes it when a sentence says someone signs off / approves / has final say. If the notes name who can say yes and the proposal does not carry a `signer:` line, add one - that is the most expensive sentence in the meeting.
18
+ - Heuristics can miss facts **and mislabel prefixed lines**. You interpret every candidate against the sanitized source, not just unprefixed lines. Split distinct decisions, requests, actions, and results; keep uncertainty. The user reviews meaning, never prefix syntax.
19
+ - `.debrief-propose` is raw lines only (no routing annotations). "Edit if mis-routed" means **rewrite the line with the right prefix**, not leave a comment in the file.
20
+
21
+ ## Method (you do this work)
22
+
23
+ ### Preferred path - smart debrief (messy notes)
24
+
25
+ 1. Save the FDE's notes to a temp `.md` file in the workspace (or pipe stdin).
26
+ 2. Run `fde debrief --smart <notes.md>` (or `npx fdeops debrief --smart …`).
27
+ 3. Run `fde debrief --review` before opening an existing proposal so legacy identifiers are masked. Open the proposal only after review succeeds. Never open a proposal containing manually inserted raw private blocks. Prepare the pending proposal using **Prepare one update** below. Read only the sanitized `.debrief-propose`, never the sealed private sidecars or raw private source. Preserve privacy markers, source metadata, and complete identifier aliases such as `[[email:...]]`. The CLI restores known aliases locally on apply. Never read `.privacy/` or try to recover an identity with file tools. If an alias is truncated, retrieve a narrower excerpt; never guess or edit the token.
28
+ 4. Run `fde debrief --review` after editing. Treat the CLI REVIEW and routing output as your validation, not a second presentation to the user. Resolve errors and replay warnings before asking for confirmation.
29
+ 5. Show **one** concise review in chat: name the client, then the consequential changes in plain English. Include decisions, requests still unagreed, actions, reported delivery, signer or contact changes, and unresolved conflicts when present. Show the previous value only where it changes the meaning. Omit empty categories and CLI routing details; do not impose a fixed four-row card that hides other changes. If the proposal is too large to show faithfully, split the review into explicit batches; never approve hidden changes.
30
+ 6. Ask **Save this update?** This confirms the engineer's record, not customer acceptance. On confirmation, apply precisely that proposal with `fde debrief --apply`. A material correction requires a revised review and renewed confirmation. On rejection, leave the proposal pending and do not apply.
31
+ 7. Verify the changed facts through bounded `fde resume` / targeted `fde recall`. If a fieldbook is part of the current task, regenerate it using the existing command and destination after the confirmed save; do not make the user run it. End with a brief saved/not-saved result and the next action, not another full summary.
32
+
33
+ ### Prepare one update (shared with ingest)
34
+
35
+ Do this work yourself before the human review:
36
+
37
+ - **Check meaning, not keywords.** “We settled on delaying the rewrite” is a decision; “Mara will request access” is an action, even if the heuristic calls it a contact. A wish or suggestion remains a request, not agreement. Do not infer authority, approval, a calendar date from an unanchored relative date, or production value from staging.
38
+ - **Make interpretation visible in the same review.** For messy or dictated input, separate consequential statements supplied by the user from your proposed interpretation. Leave a missing model, date, owner, or scope explicitly unknown; do not fill it from what seems usual. Include only interpretation calls that could change the work, not a second recap or extra approval step.
39
+ - **Handle changed minds without erasing history.** If the same speaker clearly corrects their own instruction ("send it Friday; actually, wait for Monday's review"), show the superseded instruction and the replacement together. Different speakers, uncertain chronology, or a new request conflicting with recorded authority remain a conflict to resolve, not permission to choose the last sentence. Keep consequential parked requests pending; omit conversational tangents. Never mark an inferred change as agreed.
40
+ - **Keep facts traceable.** Preserve supplied source locators on each consequential fact, using `[source: ...]`. If only a local file or staged item exists, cite that actual locator as a note source, not a customer receipt. Do not invent a meeting date or speaker. A source label is not authenticated approval.
41
+ - **Reconcile only what changed.** Compare affected facts with the current record using targeted retrieval. Leave unchanged sourced statements out of an accidental re-import. Preserve earlier history; record changed or conflicting claims explicitly. If everything is already recorded, say so and leave the pending proposal unapplied. If it blocks a later capture, explain that no new facts were saved and ask permission to replace that pending review; use `--replace-proposal` with the new notes only after that authorization. Do not delete proposal files or private sidecars manually. Do not use `--allow-replay` without explicit approval of an intentional repeat.
42
+ - **Protect the current next action.** A late meeting note does not automatically supersede a newer action. Keep older actions as dated context unless their current priority is established; show a conflict when it needs a decision. Use exactly one physical `next:` line for the current action. If multiple current actions are explicitly agreed, include them on that same line separated by semicolons; the CLI retains only the last `next:` line. Keep other dated commitments in context. Do not silently discard other commitments.
43
+ - **Keep memory useful.** Retain consequential facts and indispensable context; remove chatter and repetition from the proposal, not from the source. Preserve the raw input outside `.fde/` (staged material stays in `.inbox/`). Never remove privacy placeholders or modify sealed sidecars. Ask only about a consequential ambiguity that cannot remain explicitly unknown.
44
+ - **Structure the result.** Use `decision:` / `risk:` / `delivery:` / `contact:` / `next:` / `signer:`. Preserve `ask:` / `scope:` as explicitly proposed context when appropriate. Prepare the seven-field delivery row yourself for a reported result (see below); unknown fields stay `pending`. The human should not have to fill out a ledger to capture a meeting.
45
+
46
+ Before showing the review, check that every consequential fact in the sanitized source is represented, already recorded, or explicitly unresolved. Check classified lines as carefully as unclassified ones. Nothing is saved simply because this preparation is complete.
47
+
48
+ ### Fallback - you structure, then route
49
+
50
+ If `--smart` is unavailable or you already have clean prefixes:
51
+
52
+ 1. Extract into buckets - **only what was actually said**:
53
+ - **Decisions** - agreed, by whom, in their words where possible
54
+ - **Action items** - owner + due; unowned → `owner: unknown - ask`
55
+ - **Stakeholder signals** - tone shifts with evidence → green/amber/red
56
+ - **Risks** - new / confirmed / retired
57
+ - **Open questions** - what to chase next
58
+ 2. Format lines as `decision:` / `risk:` / `delivery:` / `contact:` / `next:` / `signer:` (contacts may end with `[signal:green|amber|red]`).
59
+ 3. Follow **Prepare one update** and show the same single plain-English review as the preferred path. Include every consequential change and ask **Save this update?**.
60
+ 4. On confirm, pipe to `fde debrief` (or write a file and run it).
61
+
62
+ Ask at most one focused question at a time when ambiguity would change the record. Otherwise preserve the unknown and include it in the review. Never treat silence as confirmation.
63
+
64
+ ## Artifact
65
+
66
+ - Smart apply / debrief CLI writes the dated routes into the right `.fde/` files.
67
+ - `next:` updates the existing `## Next action` in `context.md` (collapses duplicates). Do not append a second `## Next action` heading by hand.
68
+ - If you must write directly: decisions → `decisions.md`; signals → `stakeholders.md` Signal history; risks → `risks.md`; next actions → fill under the template `## Next action` in `context.md`. Prefer the CLI.
69
+
70
+ ## Checkpoint
71
+
72
+ Use the single pre-save review above. After saving, report verification and the next action briefly; do not ask for a second approval or repeat the review.
73
+
74
+ ## Principles
75
+
76
+ - Capture within the hour or lose the nuance.
77
+ - Verbatim quote outranks paraphrase; hesitation outranks quote.
78
+ - Signals move on evidence, never on vibe alone.
79
+ - A meeting with no decisions and no actions - say so; that is a finding.
80
+
81
+ ## Delivery rows and repeated updates
82
+
83
+ For a measured or promised slice, use a reviewed structured line:
84
+
85
+ ```text
86
+ delivery: Replay|risk-mitigation|zero duplicates|zero duplicates on staging|pending|[source: transcript:42]|pending
87
+ ```
88
+
89
+ The seven fields are Slice, Bucket, Promised, Measured, Accepted by, Evidence, Rollback. Keep unknowns `pending`; never infer approval. This lands in the value ledger during the same confirmed apply. A `delivery:` line without pipes stays a narrative note. Incorrect field counts refuse the write rather than shifting the meaning of cells.
90
+
91
+ A sourced statement already in the record triggers a replay warning. Before applying, compare newer facts and the current next action. Remove repeated statements from the proposal if this is an accidental re-import. Only after the engineer explicitly confirms an intentional repeat, apply with `fde debrief --apply --allow-replay`. This does not silently deduplicate history and does not authenticate sources.