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,167 @@
1
+ # plan - Sequence the work
2
+
3
+ **Context:** apply [task context and evidence](task-context.md). Standalone planning evaluates supplied facts directly; it does not require initialized engagement records.
4
+
5
+ **Enter when:** scope is understood and the work needs breaking down - a slice, a phase, or the whole delivery.
6
+
7
+ **Read first:** `reality.md`, `success.md`, `terrain.md`, `stakeholders.md`. Load `business-case.md` if poc produced one. Not the full folder.
8
+
9
+ **On an initialized engagement, before a new delivery plan or material scope change:** run `fde doctor --ready`. For standalone planning, check the supplied outcome, scope, acceptance and authority directly; do not initialize records to run this validator. Missing acceptance criteria or authority blocks the affected implementation commitment, not a provisional plan. Draft proposed checks and next steps, mark them pending, and ask only what changes the next action. Use a test/input and observable pass/fail under **Done when:** or **Acceptance check:**. A number, role, or successful demo alone is insufficient. Do not invent missing facts to pass lint. Routine reversible fixes within confirmed scope reuse the existing signer, acceptance criteria, and engineering plan; record verification without reopening settled decisions.
10
+
11
+ ## Validation gate (confirm understanding, clarify where it elevates)
12
+
13
+ Before planning, state what you're working from in 2-3 lines:
14
+
15
+ > "Planning against: [success definition from success.md]. Scope boundary: [out-of-scope items]. Reality check: [brief aligns with reality.md / or note the delta]."
16
+
17
+ Then check - probe ONLY if it prevents a bad plan:
18
+
19
+ 1. **Success is measurable.** If "done" is vague ("make it better") → rephrase it: "I'm reading success as: [specific measurable outcome]. That the target?"
20
+ 2. **Reality matches the brief.** If discovery contradicted the brief → name it: "Discovery found [X] but the brief says [Y]. Here is the proposed adjustment; it remains unagreed until confirmed."
21
+ 3. **Out-of-scope exists.** If missing → one line: "I will keep this draft within the supplied request and mark proposed exclusions for confirmation."
22
+
23
+ State your read, let the FDE correct, then plan.
24
+
25
+ An FDE plan is not a sprint backlog. The technical sequence is the easy part. The hard part is when to show progress, who approves the next phase, and where trust is thin enough that two silent weeks read as failure. A technically correct plan that ignores engagement politics fails on schedule.
26
+
27
+ ## Method (you do this work)
28
+
29
+ **0. Lock scope first.** Read `success.md`, `assumptions.md`, and the **Question** on `reality.md`. Make the boundary explicit using the supplied request; ask if an ambiguity changes the commitment. Investigate a critical open assumption before planning work that depends on it. If the problem itself is unclear, use discovery for that gap; absent filenames do not block a plan supported by supplied facts.
30
+
31
+ **Reuse check.** Before sequencing a build, compare the requested solution with the smallest existing capability or operating change that could satisfy the same acceptance test. Cite the relevant repo/config/workaround evidence. Record why reuse is sufficient or insufficient in `decisions.md`; include “no new code” when supported. A request for AI does not establish that a model is needed. If a host engineering pack already has an approved implementation plan, reference it from `decisions.md`; do not generate a parallel user-story backlog.
32
+
33
+ **1. Work backwards from success.** What's the last thing that must be true before done? And before that? That's the dependency chain - not a wish list.
34
+
35
+ **2. Front-load the fragile.** Check `terrain.md` hotspots. Risky modules go early - fail fast, not in week three.
36
+
37
+ **3. One user action per change.** Each task delivers something visible and testable ("user submits form, sees it saved"), never a layer ("build the database layer"). See `ship`.
38
+
39
+ **4. Size to a coherent, verifiable outcome.** Split unrelated work and tasks too complex to review or recover safely. Use bounded review sections for large cohesive changes; elapsed time and line count are signals to examine, not universal limits.
40
+
41
+ **5. AI components get explicit eval tasks.** "Output validated on 50 real production examples," "fallback tested under model unavailability," "inputs/outputs logging to <destination>" - these are pre-conditions of shipping, in the plan before build starts.
42
+
43
+ **6. Stakeholder touchpoints every 2-3 tasks.** "Show progress to <name from stakeholders.md>." Not ceremony: a customer who sees small wins stays bought in; silence gets filled with doubt.
44
+
45
+ **7. End with a kill list.** Every plan names what you will **not** do this phase. If everything is "later," you have no plan - you have a wish list. Keep **Now** small enough to review and act on; split by independently verifiable outcomes.
46
+
47
+ **Acceptance criteria gate:** no task moves to build without written happy-path AND unhappy-path criteria. Can't write them = the task isn't understood; the open question goes to the customer **before** the task starts. Vague criteria surface later as scope creep and rework.
48
+
49
+ ## Artifact
50
+
51
+ For standalone planning, return the requested draft or save to the authorized project document. In a bound engagement, propose the plan for **`decisions.md`** under its confirmation rules, or link the existing approved plan; do not duplicate it.
52
+
53
+ A plan is **not done** until all four blocks exist:
54
+
55
+ ```markdown
56
+ ## Plan - <date>
57
+ ### Now
58
+ Task N: <outcome, not activity>
59
+ Delivers: <what someone can see/test>
60
+ Accepts: <happy path> / <unhappy path>
61
+ Touches: <files/systems - blast radius declared upfront>
62
+ Risk: <what could go wrong + fallback>
63
+ Kill if: <the observation that voids this slice - copy from assumptions.md How we test, or the check that means stop>
64
+ Verify: <specific check>
65
+ Value promised: <business unit change this slice claims>
66
+ Baseline: <value + source/date/window/environment, or pending + measurement owner>
67
+ Acceptance owner: <name + authority source, or unknown - ask: who can accept?>
68
+ Evidence to collect: <before/after check, sample/window, environment, and receipt location>
69
+ Reuse: <existing capability used, or evidence it cannot satisfy the criteria>
70
+
71
+ ### Next
72
+ - ...
73
+
74
+ ### Later
75
+ - ...
76
+
77
+ ### Kill list (explicitly not this phase)
78
+ | Item | Why killed / deferred | Who accepted |
79
+ |------|----------------------|--------------|
80
+ | <rewrite / nice-to-have / political ask> | <evidence> | <name, date> |
81
+ ```
82
+
83
+ In `Who accepted`, distinguish a proposed deferral from an agreement: use `pending` until a named person accepted this scope with a dated source. Sponsorship alone is not approval of every plan detail.
84
+
85
+ No kill list → not a finished plan. Reopen with the FDE until the deferrals are written.
86
+ ## Checkpoint
87
+
88
+ Walk the FDE through: sequence + why this order, where the fragile work sits, where the touchpoints land, the acceptance gate and **Kill if** on task 1, and the kill list. One question: "Which stakeholder sees the first visible slice, and when?" Second: "Who accepted what we are not doing?" Third: "What observation stops task 1 this week?"
89
+
90
+ ## Method - estimation (when the sponsor asks "how long, how much?")
91
+
92
+ Every FDE gets asked this in week one. The honest answer is a range, not a number. A single-point estimate is a promise; a range is a professional assessment.
93
+
94
+ **The 3-point method:**
95
+ 1. **Best case** - everything goes right, no surprises, team has capacity. This is what the sponsor wants to hear.
96
+ 2. **Expected case** - normal friction: one discovery changes the plan, one integration takes longer, one approval cycle stalls. This is what to plan against.
97
+ 3. **Worst case** - a major unknown surfaces, a dependency fails, a key person is unavailable. This is what to protect against.
98
+
99
+ **Present as:** "2-4 weeks expected, could stretch to 6 if [named risk]." Never give one number.
100
+
101
+ **The sizing table:**
102
+
103
+ | Slice | Complexity | Dependencies | Unknowns | Estimate (expected) |
104
+ |-------|-----------|--------------|----------|---------------------|
105
+ | _per vertical slice from the plan_ | Low/Med/High | Named | Named | X days/weeks |
106
+
107
+ **Rules:**
108
+ - Estimate in weeks for engagements > 1 month. Days for < 1 month.
109
+ - Add 30% buffer for integration work (it always takes longer).
110
+ - Add 50% buffer for AI/ML work (eval cycles are unpredictable).
111
+ - Name assumptions explicitly: "assumes API docs are accurate", "assumes staging environment exists."
112
+ - Each named assumption needs a **kill observation**: the result that voids the estimate. Copy it from `assumptions.md` → How we test. No kill observation = it is not an assumption, it is hope.
113
+ - Revisit estimates every 2 weeks. An estimate that never updates is fiction.
114
+
115
+ Write estimates to `decisions.md` under `## Sizing`. Include the assumptions - when they break, the estimate changes and the FDE has evidence for the conversation.
116
+
117
+ ## Method - migration strategy (when the engagement is "move from X to Y")
118
+
119
+ Migrations are the most common enterprise FDE engagement. The strategy precedes the plan:
120
+
121
+ **Step 1: Classify the migration type.**
122
+
123
+ | Type | What it means | Risk profile |
124
+ |------|---------------|-------------|
125
+ | **Rehost** (lift-and-shift) | Same code, different infrastructure | Low code risk, high ops risk |
126
+ | **Replatform** | Minor code changes to use new platform features | Medium risk, clear scope |
127
+ | **Refactor** | Rewrite components to fit the new architecture | High risk, scope creep magnet |
128
+ | **Replace** | Buy/build new, retire old | Highest risk, requires parallel running |
129
+ | **Retire** | Turn off, nobody uses it | Politically hard, technically easy |
130
+
131
+ **Step 2: Map the dependency graph.** What calls what. What breaks if this moves first. The migration order is the reverse of the dependency chain - leaf nodes first, core last.
132
+
133
+ **Step 3: Define the cutover strategy.**
134
+ - **Big bang** - everything moves at once. Fast but catastrophic on failure. Only for small systems.
135
+ - **Strangler fig** - new traffic to new system, old traffic drains. Safe but slow. Preferred for anything load-bearing.
136
+ - **Parallel run** - both systems run, outputs compared. Expensive but safest for data-critical systems.
137
+
138
+ **Step 4: Write the rollback before the migration starts.** "If we move service X and it fails, we route back to old within [time]." No rollback = no migration.
139
+
140
+ **Step 5: Define success metrics per phase.** Not "migration complete" - that's a project plan. "Error rate same or lower, latency within 10%, zero data loss, team can operate without FDE." Measurable, per service.
141
+
142
+ Write migration strategy to `decisions.md` under `## Migration`. Each service gets a row: type, order, cutover method, rollback, success metric.
143
+
144
+ ## When the plan changes mid-engagement
145
+
146
+ Never quietly update tasks. Name the reset: update `reality.md` and `success.md`, one paragraph in `decisions.md` - what changed, why, new sequence. An undocumented reset looks like drift; a documented one looks like the FDE caught something important.
147
+
148
+ ## Worked example
149
+
150
+ Acme, after discover: the reconciliation job is unowned, Marco's spreadsheet is the real fallback.
151
+
152
+ **Now** is three tasks, not eight. Task 1 is *failures reach a named human* - delivers a page to a rota, accepts "kill the job mid-run → the on-call is paged within 15 min", touches the job wrapper and the alert config, rollback is re-disable the route, **Kill if:** a real failure page is acked by nobody on the rota (the *finance would act* assumption, DISPROVED if Marco is the only name that answers), verify by killing it in staging. Value promised: `risk-mitigation - a silent failure becomes a 15-minute one`.
153
+
154
+ The kill list in `decisions.md` is where the plan earns its keep: the rewrite of the reconciliation service that Tom keeps proposing goes there - *deferred, the failure mode is ownership not architecture (Priya accepted, Jun 12)* - along with the finance dashboard finance asked for directly. Both stay visible so the same argument is not re-litigated in week 4 without a receipt.
155
+
156
+ First visible slice goes to Marco, not Priya: he is the one whose morning changes, and his confirmation is what makes the sponsor update true.
157
+
158
+ ## Principles
159
+
160
+ - Plan from success backwards, not from today forwards.
161
+ - Fragile zones early. Fail fast.
162
+ - Every 2-3 tasks, a stakeholder touchpoint. Trust decays without visibility.
163
+ - No written acceptance criteria, no build.
164
+ - No kill list, no finished plan.
165
+ - No **Kill if** on a Now PR, that PR is hope.
166
+ - Estimates are ranges, not promises. Name the assumptions and the observation that voids them.
167
+ - Migrations: leaf nodes first, core last. Rollback before cutover.
@@ -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.
@@ -4,18 +4,18 @@
4
4
  "files": {
5
5
  "SKILL.md": "bceae7ba11c006b3d1e93e330a80cc58eeef55d863cc374653eef8fd124c3056",
6
6
  "references/audit.md": "ed32ea78cbccb100742dd838e8cf4cd4b6f33ad44b3de7424fc624670d571dbc",
7
- "references/build.md": "3dfeed619eeb1c8401f5cdf65e6f803fb209c70cb464dac4e60a1c890fd3a6f7",
7
+ "references/build.md": "6fa07b15b682119de53c38950f94942a58e4680ab58b24319d77c54a27cd9697",
8
8
  "references/business-case.md": "32e000e8351cd59f9eaad8be40babb276df69948ea4f81e01a4672e47f48cb25",
9
9
  "references/debug.md": "c3bb344d38cc3552cb4e230c601a9be3fe173af2b2efb89aab6b7b04339f24f4",
10
10
  "references/discover.md": "f65aa11a539b4dbbed70cfaa94ec2a35595aa9a2d0282790510b933ac9c721ce",
11
11
  "references/eval-pack.md": "0590b85d3cae0903c6b1274540c92eaa2a4373047e8a0548d6942516ef0bb9e1",
12
- "references/integrate.md": "107a50bddf6cb0ba7f2bc006dfe9851800c6868e43f785a33ae4b737aeb74c95",
13
- "references/plan.md": "a096831ea7afdde1fe954541ad854a99d2d118c1abbf8826f2332e695a802ae1",
12
+ "references/integrate.md": "d0de35a783902ca8b4762e3a42a14f467766d56a928c3a5cf11adac2a6ba90ba",
13
+ "references/plan.md": "a86e42f4c35897d48e863b7b00e287c14fe835fc034b729bacadc0401fe4ff45",
14
14
  "references/poc.md": "818dc90c2d401819735233ab9d69df171675d75abf8644c403dab7dd1dcf9199",
15
15
  "references/qa.md": "d8f58e6d36436469a58aeb1107037f3e27fa81ff5b82d0e4df3c23eeadaf683c",
16
16
  "references/review.md": "63a007f78288089cc84cccc72647e8ce6721b7efa0f4f8d6774c0f0af594749d",
17
17
  "references/ship.md": "8cdcb2d4d6eb57e0adf3f1996bc02ae66920852ca304d2afd778fa483b7e969a",
18
- "references/task-context.md": "8ec90708522e512a50a57ab2a377a7472e93bae169c6f075a93fa603ce2ad780",
18
+ "references/task-context.md": "73eea2d7f164fac3226599e5be26ae4e79dcf69e0d24428dd12d623861410490",
19
19
  "references/test-assumptions.md": "bf60d8bb4c0701fcffb196d78f7f6c8b1c472fc877fb2caf41058fbf8e2415a1",
20
20
  "references/three-options.md": "168fab9fb8ac8de85b0d1fa58e1db17deaa244cdef8c99623a04a0a6c70fe52c",
21
21
  "references/verification.md": "d453c075b849437375338fd23782ca7fe6d427b05137a2b10fc2f724aaf7f8a9"
@@ -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.
@@ -6,7 +6,7 @@
6
6
 
7
7
  **Read first:** `reality.md`, `success.md`, `terrain.md`, `stakeholders.md`. Load `business-case.md` if poc produced one. Not the full folder.
8
8
 
9
- **On an initialized engagement, before a new delivery plan or material scope change:** run `fde doctor --ready`. For standalone planning, check the supplied outcome, scope, acceptance and authority directly; do not initialize records to run this validator. Missing binary success or a named customer-side signer blocks progression: review the proposed acceptance check and authority with the FDE first. Use a test/input and observable pass/fail under **Done when:** or **Acceptance check:**. A number, role, or successful demo alone is insufficient. Do not invent missing facts to pass lint. Routine reversible fixes within confirmed scope reuse the existing signer, acceptance criteria, and engineering plan; record verification without reopening settled decisions.
9
+ **On an initialized engagement, before a new delivery plan or material scope change:** run `fde doctor --ready`. For standalone planning, check the supplied outcome, scope, acceptance and authority directly; do not initialize records to run this validator. Missing acceptance criteria or authority blocks the affected implementation commitment, not a provisional plan. Draft proposed checks and next steps, mark them pending, and ask only what changes the next action. Use a test/input and observable pass/fail under **Done when:** or **Acceptance check:**. A number, role, or successful demo alone is insufficient. Do not invent missing facts to pass lint. Routine reversible fixes within confirmed scope reuse the existing signer, acceptance criteria, and engineering plan; record verification without reopening settled decisions.
10
10
 
11
11
  ## Validation gate (confirm understanding, clarify where it elevates)
12
12
 
@@ -17,8 +17,8 @@ Before planning, state what you're working from in 2-3 lines:
17
17
  Then check - probe ONLY if it prevents a bad plan:
18
18
 
19
19
  1. **Success is measurable.** If "done" is vague ("make it better") → rephrase it: "I'm reading success as: [specific measurable outcome]. That the target?"
20
- 2. **Reality matches the brief.** If discovery contradicted the brief → name it: "Discovery found [X] but the brief says [Y]. Planning against reality unless you say otherwise."
21
- 3. **Out-of-scope exists.** If missing → one line: "Nothing's marked out-of-scope yet. That means every new request is implicitly in. Worth defining now or after the first plan draft?"
20
+ 2. **Reality matches the brief.** If discovery contradicted the brief → name it: "Discovery found [X] but the brief says [Y]. Here is the proposed adjustment; it remains unagreed until confirmed."
21
+ 3. **Out-of-scope exists.** If missing → one line: "I will keep this draft within the supplied request and mark proposed exclusions for confirmation."
22
22
 
23
23
  State your read, let the FDE correct, then plan.
24
24
 
@@ -42,19 +42,19 @@ An FDE plan is not a sprint backlog. The technical sequence is the easy part. Th
42
42
 
43
43
  **6. Stakeholder touchpoints every 2-3 tasks.** "Show progress to <name from stakeholders.md>." Not ceremony: a customer who sees small wins stays bought in; silence gets filled with doubt.
44
44
 
45
- **7. End with a kill list.** Every plan names what you will **not** do this phase. If everything is "later," you have no plan - you have a wish list. Cap **Now** at 3 PRs (same discipline as pick-three).
45
+ **7. End with a kill list.** Every plan names what you will **not** do this phase. If everything is "later," you have no plan - you have a wish list. Keep **Now** small enough to review and act on; split by independently verifiable outcomes.
46
46
 
47
47
  **Acceptance criteria gate:** no task moves to build without written happy-path AND unhappy-path criteria. Can't write them = the task isn't understood; the open question goes to the customer **before** the task starts. Vague criteria surface later as scope creep and rework.
48
48
 
49
49
  ## Artifact
50
50
 
51
- The plan goes to **`decisions.md`** - always. Build reads the plan from `decisions.md`; anywhere else and the build starts blind.
51
+ For standalone planning, return the requested draft or save to the authorized project document. In a bound engagement, propose the plan for **`decisions.md`** under its confirmation rules, or link the existing approved plan; do not duplicate it.
52
52
 
53
53
  A plan is **not done** until all four blocks exist:
54
54
 
55
55
  ```markdown
56
56
  ## Plan - <date>
57
- ### Now (max 3)
57
+ ### Now
58
58
  Task N: <outcome, not activity>
59
59
  Delivers: <what someone can see/test>
60
60
  Accepts: <happy path> / <unhappy path>
@@ -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,10 @@
1
+ {
2
+ "generator": "bin/generate-skills.js",
3
+ "version": 1,
4
+ "files": {
5
+ "SKILL.md": "b58e4c788ad2c3e83d8266556023b4046bdc489d3050e3fcb414504825082210",
6
+ "references/business-case.md": "32e000e8351cd59f9eaad8be40babb276df69948ea4f81e01a4672e47f48cb25",
7
+ "references/pick-three.md": "fa5a5f6db94c72c5a1c6419276d0f7c13ff3067ce075a074af020f736fe3fad8",
8
+ "references/task-context.md": "73eea2d7f164fac3226599e5be26ae4e79dcf69e0d24428dd12d623861410490"
9
+ }
10
+ }
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: prioritize
3
+ description: Choose up to three immediate priorities from competing initiatives. Use when everything is urgent and the customer needs a defensible order with explicit deferrals.
4
+ ---
5
+
6
+ # prioritize
7
+
8
+ <!-- Generated by bin/generate-skills.js; edit the canonical references and catalog. -->
9
+
10
+ ## Purpose
11
+
12
+ Choose up to three immediate priorities from competing initiatives. Use when everything is urgent and the customer needs a defensible order with explicit deferrals.
13
+
14
+ Read [the task context contract](references/task-context.md), then [the method](references/pick-three.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,95 @@
1
+ # pick-three - Prioritize three
2
+
3
+ **Enter when:** a transformation engagement with a long list of initiatives, the customer's roadmap has more items than weeks, competing teams want different things, or the FDE needs to recommend what to do *first* across a complex programme.
4
+
5
+ **Read first:** `reality.md`, `success.md`, `stakeholders.md`, `context.md`. Load `business-case.md` if individual initiative cases exist.
6
+
7
+ Every enterprise engagement generates more work than any timeline can hold. Triage is the discipline of saying "not now" to real work with real sponsors - and making it stick. Without it, the FDE drowns in parallel efforts and ships nothing well.
8
+
9
+ ## Method (you do this work)
10
+
11
+ **1. Collect the full list.** From the customer's roadmap, from discovery, from stakeholder requests, from `decisions.md` scope receipts. No filtering yet - everything goes on the board:
12
+
13
+ ```markdown
14
+ | # | Initiative | Requested by | Stated priority | Current status |
15
+ |---|-----------|-------------|----------------|----------------|
16
+ | 1 | Payment API rewrite | CTO | P1 | Blocked on schema decision |
17
+ | 2 | Customer dashboard | Product | P1 | Design phase |
18
+ | 3 | SOC2 compliance | CISO | P0 | Not started |
19
+ | ... | ... | ... | ... | ... |
20
+ ```
21
+
22
+ Notice: every stakeholder's initiative is P0 or P1. That's the problem this skill solves.
23
+
24
+ **2. Apply the triage matrix.** Each initiative scores on three axes:
25
+
26
+ | Axis | Question | Scale |
27
+ |------|----------|-------|
28
+ | **Impact** | If this ships, what changes for the business in 90 days? | 1 (marginal) → 5 (transformative) |
29
+ | **Dependency** | How many other initiatives are blocked waiting for this? | 0 (standalone) → 5 (critical path for 3+ others) |
30
+ | **Cost of delay** | What happens each week this doesn't ship? | 1 (nothing) → 5 (measurable loss or regulatory exposure) |
31
+
32
+ **Triage score = Impact + Dependency + Cost of delay** (simple sum, 3-15 range).
33
+
34
+ **3. Sort into three lanes:**
35
+
36
+ | Lane | Score | Action |
37
+ |------|-------|--------|
38
+ | **Now** (max 3) | 11-15 | Active work this phase. FDE and team capacity allocated. |
39
+ | **Next** (max 5) | 7-10 | Sequenced for the following phase. Dependencies tracked but not started. |
40
+ | **Later** (unlimited) | 3-6 | Captured, not committed. Revisit at next triage. |
41
+
42
+ **The cap matters.** "Now" has exactly 3 slots. Not 4, not "3 plus this small one." Discipline is the product.
43
+
44
+ **4. Handle the political override.** When a powerful stakeholder pushes a low-scoring initiative into "Now":
45
+
46
+ - Show the displacement: "Adding X to Now means Y drops to Next. Y is currently blocking Z and W."
47
+ - Let them choose: "Which of the current three should Y replace?" Making the trade-off visible makes the conversation honest.
48
+ - If they override without trading: log it. `decisions.md`: "Initiative X added to Now without displacement by <who>. Capacity impact: <what slows>."
49
+
50
+ **5. Set the triage cadence.** Triage is not a one-time event:
51
+
52
+ | Engagement type | Triage frequency | Trigger for emergency re-triage |
53
+ |----------------|-----------------|-------------------------------|
54
+ | Sprint (1-2 weeks) | Once, at plan | Crisis or sponsor change |
55
+ | Standard (1-4 weeks) | Weekly | New P0 from sponsor |
56
+ | Programme (months) | Bi-weekly | Quarterly review, team change, market shift |
57
+
58
+ **6. Communicate the triage result.** The output is not just a priority list - it's a commitment:
59
+
60
+ > "We're committing to these three initiatives this phase: [A, B, C]. Here's why, here's what they deliver, and here's what's explicitly deferred: [D, E, F, ...]. If priorities change, we re-triage - we don't add without removing."
61
+
62
+ ## Artifact
63
+
64
+ **`decisions.md`** - the triage table with scores, lanes, **and an explicit Kill / Later commitment**. Dated. Updates the same Now/Next/Later plan already uses; do not open a second plan section. Referenced by plan and status.
65
+
66
+ Required closing block (plan will not treat triage as done without it):
67
+
68
+ ```markdown
69
+ ## Triage - <date>
70
+ ### Now (max 3)
71
+ | # | Initiative | Score | Why now |
72
+ ...
73
+ ### Next
74
+ ...
75
+ ### Kill / defer (not this phase)
76
+ | Initiative | Why not now | Who accepted |
77
+ |------------|-------------|--------------|
78
+ | ... | ... | <name, date> |
79
+
80
+ Commitment: we ship only Now. Additions require a removal.
81
+ ```
82
+
83
+ **`reality.md`** - if triage revealed that the engagement scope is larger than the timeline supports, update the assessment.
84
+
85
+ ## Checkpoint
86
+
87
+ Walk the FDE through: the 3 "Now" initiatives and why, the top "Next" items and what triggers their promotion, and the one initiative that will generate the most political pushback for being in "Later." Prepare the FDE for that conversation.
88
+
89
+ ## Principles
90
+
91
+ - "Now" has 3 slots. Not 4. Discipline is the product.
92
+ - Every addition requires a removal. Visible trade-offs beat invisible overload.
93
+ - Triage is recurring, not one-time. The list changes; the discipline doesn't.
94
+ - A logged override protects the FDE. An unlogged override blames them.
95
+ - The initiative everyone wants but nobody will trade for is the one to watch.
@@ -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": "65b965474e847f240138c1ada0ee7d982affc421a24a0a7a37970021f8269a03",
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.