fdeops 5.0.0 → 5.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (149) hide show
  1. package/AGENTS.md +1 -1
  2. package/README.md +22 -24
  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 +1 -1
  28. package/skills/build/references/task-context.md +7 -1
  29. package/skills/business-case/.fde-generated.json +9 -0
  30. package/skills/business-case/SKILL.md +21 -0
  31. package/skills/business-case/references/business-case.md +90 -0
  32. package/skills/business-case/references/task-context.md +18 -0
  33. package/skills/connect/.fde-generated.json +12 -0
  34. package/skills/connect/SKILL.md +21 -0
  35. package/skills/connect/references/connect.md +24 -0
  36. package/skills/connect/references/debrief.md +91 -0
  37. package/skills/connect/references/ingest.md +75 -0
  38. package/skills/connect/references/source-setup.md +30 -0
  39. package/skills/connect/references/task-context.md +18 -0
  40. package/skills/dashboard/.fde-generated.json +9 -0
  41. package/skills/dashboard/SKILL.md +21 -0
  42. package/skills/dashboard/references/dashboard.md +40 -0
  43. package/skills/dashboard/references/task-context.md +18 -0
  44. package/skills/debrief/.fde-generated.json +12 -0
  45. package/skills/debrief/SKILL.md +21 -0
  46. package/skills/debrief/references/connect.md +24 -0
  47. package/skills/debrief/references/debrief.md +91 -0
  48. package/skills/debrief/references/ingest.md +75 -0
  49. package/skills/debrief/references/source-setup.md +30 -0
  50. package/skills/debrief/references/task-context.md +18 -0
  51. package/skills/debug/.fde-generated.json +1 -1
  52. package/skills/debug/references/task-context.md +7 -1
  53. package/skills/demo-prep/.fde-generated.json +9 -0
  54. package/skills/demo-prep/SKILL.md +21 -0
  55. package/skills/demo-prep/references/demo-prep.md +31 -0
  56. package/skills/demo-prep/references/task-context.md +18 -0
  57. package/skills/discover/.fde-generated.json +1 -1
  58. package/skills/discover/references/task-context.md +7 -1
  59. package/skills/earn-trust/.fde-generated.json +9 -0
  60. package/skills/earn-trust/SKILL.md +21 -0
  61. package/skills/earn-trust/references/earn-trust.md +100 -0
  62. package/skills/earn-trust/references/task-context.md +18 -0
  63. package/skills/evaluate/.fde-generated.json +1 -1
  64. package/skills/evaluate/references/task-context.md +7 -1
  65. package/skills/fde/SKILL.md +9 -8
  66. package/skills/fde/references/connect.md +14 -24
  67. package/skills/fde/references/debrief.md +2 -0
  68. package/skills/fde/references/ingest.md +4 -2
  69. package/skills/fde/references/plan.md +6 -6
  70. package/skills/fde/references/runbook.md +52 -120
  71. package/skills/fde/references/source-setup.md +30 -0
  72. package/skills/fde/references/task-context.md +7 -1
  73. package/skills/feedback/.fde-generated.json +1 -1
  74. package/skills/feedback/references/task-context.md +7 -1
  75. package/skills/handoff/.fde-generated.json +1 -1
  76. package/skills/handoff/references/task-context.md +7 -1
  77. package/skills/ingest/.fde-generated.json +12 -0
  78. package/skills/ingest/SKILL.md +21 -0
  79. package/skills/ingest/references/connect.md +24 -0
  80. package/skills/ingest/references/debrief.md +91 -0
  81. package/skills/ingest/references/ingest.md +75 -0
  82. package/skills/ingest/references/source-setup.md +30 -0
  83. package/skills/ingest/references/task-context.md +18 -0
  84. package/skills/integrate/.fde-generated.json +1 -1
  85. package/skills/integrate/references/task-context.md +7 -1
  86. package/skills/options/.fde-generated.json +1 -1
  87. package/skills/options/references/task-context.md +7 -1
  88. package/skills/plan/.fde-generated.json +10 -0
  89. package/skills/plan/SKILL.md +21 -0
  90. package/skills/plan/references/business-case.md +90 -0
  91. package/skills/plan/references/plan.md +167 -0
  92. package/skills/plan/references/task-context.md +18 -0
  93. package/skills/poc/.fde-generated.json +2 -2
  94. package/skills/poc/references/plan.md +6 -6
  95. package/skills/poc/references/task-context.md +7 -1
  96. package/skills/prioritize/.fde-generated.json +10 -0
  97. package/skills/prioritize/SKILL.md +21 -0
  98. package/skills/prioritize/references/business-case.md +90 -0
  99. package/skills/prioritize/references/pick-three.md +95 -0
  100. package/skills/prioritize/references/task-context.md +18 -0
  101. package/skills/qa/.fde-generated.json +1 -1
  102. package/skills/qa/references/task-context.md +7 -1
  103. package/skills/readout/.fde-generated.json +1 -1
  104. package/skills/readout/references/task-context.md +7 -1
  105. package/skills/red-team/.fde-generated.json +9 -0
  106. package/skills/red-team/SKILL.md +21 -0
  107. package/skills/red-team/references/red-team.md +105 -0
  108. package/skills/red-team/references/task-context.md +18 -0
  109. package/skills/rescue/.fde-generated.json +9 -0
  110. package/skills/rescue/SKILL.md +21 -0
  111. package/skills/rescue/references/rescue.md +82 -0
  112. package/skills/rescue/references/task-context.md +18 -0
  113. package/skills/review/.fde-generated.json +1 -1
  114. package/skills/review/references/task-context.md +7 -1
  115. package/skills/rollback/.fde-generated.json +9 -0
  116. package/skills/rollback/SKILL.md +21 -0
  117. package/skills/rollback/references/rollback.md +102 -0
  118. package/skills/rollback/references/task-context.md +18 -0
  119. package/skills/runbook/.fde-generated.json +11 -0
  120. package/skills/runbook/SKILL.md +21 -0
  121. package/skills/runbook/references/close.md +66 -0
  122. package/skills/runbook/references/encode-pattern.md +96 -0
  123. package/skills/runbook/references/runbook.md +73 -0
  124. package/skills/runbook/references/task-context.md +18 -0
  125. package/skills/scope/.fde-generated.json +1 -1
  126. package/skills/scope/references/task-context.md +7 -1
  127. package/skills/score-use-cases/.fde-generated.json +10 -0
  128. package/skills/score-use-cases/SKILL.md +21 -0
  129. package/skills/score-use-cases/references/business-case.md +90 -0
  130. package/skills/score-use-cases/references/score-use-cases.md +70 -0
  131. package/skills/score-use-cases/references/task-context.md +18 -0
  132. package/skills/ship/.fde-generated.json +1 -1
  133. package/skills/ship/references/task-context.md +7 -1
  134. package/skills/switch-clients/.fde-generated.json +9 -0
  135. package/skills/switch-clients/SKILL.md +21 -0
  136. package/skills/switch-clients/references/switch-clients.md +114 -0
  137. package/skills/switch-clients/references/task-context.md +18 -0
  138. package/skills/test-assumptions/.fde-generated.json +9 -0
  139. package/skills/test-assumptions/SKILL.md +21 -0
  140. package/skills/test-assumptions/references/task-context.md +18 -0
  141. package/skills/test-assumptions/references/test-assumptions.md +102 -0
  142. package/skills/what-breaks/.fde-generated.json +9 -0
  143. package/skills/what-breaks/SKILL.md +21 -0
  144. package/skills/what-breaks/references/task-context.md +18 -0
  145. package/skills/what-breaks/references/what-breaks.md +91 -0
  146. package/skills/who-decides/.fde-generated.json +9 -0
  147. package/skills/who-decides/SKILL.md +21 -0
  148. package/skills/who-decides/references/task-context.md +18 -0
  149. package/skills/who-decides/references/who-decides.md +91 -0
@@ -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,9 @@
1
+ {
2
+ "generator": "bin/generate-skills.js",
3
+ "version": 1,
4
+ "files": {
5
+ "SKILL.md": "4e8d52c88c63b9bd365c7b698f070292bd808af4415b497119b97c58eb7f1fca",
6
+ "references/task-context.md": "73eea2d7f164fac3226599e5be26ae4e79dcf69e0d24428dd12d623861410490",
7
+ "references/test-assumptions.md": "bf60d8bb4c0701fcffb196d78f7f6c8b1c472fc877fb2caf41058fbf8e2415a1"
8
+ }
9
+ }
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: test-assumptions
3
+ description: Challenge a proposed solution by identifying and testing consequential assumptions. Use when the brief feels too certain or discovery reveals contradictions.
4
+ ---
5
+
6
+ # test-assumptions
7
+
8
+ <!-- Generated by bin/generate-skills.js; edit the canonical references and catalog. -->
9
+
10
+ ## Purpose
11
+
12
+ Challenge a proposed solution by identifying and testing consequential assumptions. Use when the brief feels too certain or discovery reveals contradictions.
13
+
14
+ Read [the task context contract](references/task-context.md), then [the method](references/test-assumptions.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,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,102 @@
1
+ # test-assumptions - Test assumptions
2
+
3
+ **Enter when:** the brief feels too neat, the customer is very confident about the solution (not the problem), someone says "we just need…" about a complex system, or discover surfaced contradictions between what was said and what the codebase shows.
4
+
5
+ **Read first:** `brief.md`, `reality.md`, `terrain.md`, `context.md`. The assumptions are hiding between what the brief says and what the code does.
6
+
7
+ Every engagement is built on assumptions. Most are invisible until they're wrong and the build is two weeks deep. The assumption audit makes them visible - and killable - before they cost time.
8
+
9
+ ## Method (you do this work)
10
+
11
+ **1. Extract the assumptions.** Read `brief.md`, `reality.md`, and `terrain.md` `## Parts` line by line. Every statement that isn't backed by evidence is an assumption. Treat every "obvious" block as a convention until a receipt proves it. Common hiding places:
12
+
13
+ | Where assumptions hide | Example | The real question |
14
+ |----------------------|---------|-------------------|
15
+ | **The problem statement** | "The API is slow" | Slow for whom? Measured how? Since when? |
16
+ | **The proposed solution** | "We need to migrate to microservices" | Is the monolith actually the bottleneck, or is it the database? |
17
+ | **The timeline** | "This should take two weeks" | Based on what? Who estimated? Have they done this before? |
18
+ | **The stakeholder claim** | "The team is on board" | Who specifically? Have they been asked? What did the resistors say? |
19
+ | **The data claim** | "We have good data for this" | Defined how? Validated when? By whom? Sample checked? |
20
+ | **The "just"** | "We just need to add a feature" | On what system? With what dependencies? What breaks? |
21
+
22
+ **2. Kind first, then blast radius.** For each row, classify:
23
+
24
+ | Kind | Meaning |
25
+ |------|---------|
26
+ | **FACT** | A dated receipt, a measurement, or the repo. You can point at it. |
27
+ | **CONVENTION** | How they have always done it. The playbook. "We just…" |
28
+ | **UNKNOWN** | No evidence either way. |
29
+
30
+ Order the list load-bearing first. For each CONVENTION or UNKNOWN, one line: what breaks if it is wrong, and what opens if you **invert** it (stop obeying it). A FACT with no receipt is UNKNOWN - do not promote it to protect the brief.
31
+
32
+ Then classify blast radius:
33
+
34
+ ```
35
+ CRITICAL - if wrong, the engagement fails or the approach changes fundamentally
36
+ → Must be validated before plan starts
37
+
38
+ LOAD-BEARING - if wrong, significant rework or timeline change
39
+ → Must be validated before build starts
40
+
41
+ CONVENIENCE - if wrong, a task changes but the approach holds
42
+ → Validate when you get there
43
+ ```
44
+
45
+ **3. Design the validation.** Each critical assumption gets one specific test - not a discussion, a test:
46
+
47
+ | Assumption | Validation method | Effort | Evidence threshold |
48
+ |-----------|-------------------|--------|-------------------|
49
+ | "The API is the bottleneck" | Instrument the three slowest endpoints, measure p95 over 24h | 2h | Latency data shows >80% of wait time in API layer |
50
+ | "The team will adopt the new tool" | Ask three team members individually: "Show me how you'd use this" | 1h | 2 of 3 can describe a use case without prompting |
51
+ | "The data is clean enough for ML" | Sample 200 records, count nulls/duplicates/format errors | 1h | <5% error rate on the fields the model needs |
52
+
53
+ **4. Run the killer test first.** The assumption with the highest blast radius AND the cheapest validation gets tested immediately. This single principle saves more engagement time than any other: if the killer assumption is wrong, you've saved weeks; if it holds, you've bought confidence. Write the kill observation in `How we test` as the result that would **stop** the plan - plan copies that line onto each Now PR as `Kill if`.
54
+
55
+ **5. Present findings as a fact base, not a challenge.**
56
+
57
+ The customer's assumptions are often wrong, but calling them wrong is a trust withdrawal. Frame as curiosity, not contradiction:
58
+
59
+ > "The brief says the API is the bottleneck. The codebase shows 80% of latency is in the database layer - here's the evidence. Should we adjust the focus?"
60
+
61
+ Evidence first, then the question. Let them reach the conclusion.
62
+
63
+ ## Artifact
64
+
65
+ **`assumptions.md`** - this IS the register (create if land did not). Keep one live table; do not only bury results in `reality.md`:
66
+
67
+ ```markdown
68
+ | # | Assumption | Kind | Blast radius | How we test | Status | Evidence |
69
+ |---|------------|------|--------------|-------------|--------|----------|
70
+ | 1 | API is the bottleneck | CONVENTION | CRITICAL | p95 instrumentation 24h | DISPROVED | 80% wait in DB layer (Day N) |
71
+ | 2 | Team will adopt new tool | UNKNOWN | LOAD-BEARING | 3 individual interviews | CONFIRMED | 2/3 describe a use case unprompted |
72
+ | 3 | Data clean enough for ML | UNKNOWN | CRITICAL | 200-record sample | PARTIAL → OPEN follow-up | 12% nulls on key field; cleaning task added |
73
+ ```
74
+
75
+ Status values: `OPEN` · `TESTING` · `CONFIRMED` · `DISPROVED` · `PARKED`. A CRITICAL row still `OPEN` blocks plan.
76
+
77
+ **`reality.md`** - short pointer only: which assumptions changed the approach and the implication for build.
78
+
79
+ **`decisions.md`** - if an assumption was disproved and the approach changed: what shifted, why, the evidence, same day.
80
+
81
+ ## Checkpoint
82
+
83
+ Tell the FDE: how many assumptions extracted, how many critical, which ones were tested, which changed the direction. If a critical assumption is disproved: recommend the next move (rescope, pivot, or the conversation with the sponsor) before the FDE asks. If any CRITICAL remains OPEN: do not route to plan.
84
+
85
+ ## Worked example
86
+
87
+ Acme's brief reads cleanly, which is the signal.
88
+
89
+ Extracted assumptions include one nobody said aloud: *finance would act on an alert*. The whole plan rests on it, and the evidence behind it is a sentence in a kickoff. Blast radius CRITICAL - if false, alerting changes nothing and the engagement delivers a page nobody answers.
90
+
91
+ Validation is a test, not a discussion, and it is cheap: send one real failure notification to the finance channel and watch what happens. It goes first because highest blast radius × cheapest test is the killer test.
92
+
93
+ Result: acked in 40 minutes, by Marco, not finance. Assumption DISPROVED, and the plan changes before six weeks are spent on it - the alert needs a rota with an owner, which is a different piece of work than the one that was funded. `assumptions.md` records the status, the evidence, and the date; the finding is presented to the FDE as a fact base, not as "the brief was wrong".
94
+
95
+ ## Principles
96
+
97
+ - Every "just" is an assumption. Every "should" is an assumption.
98
+ - Kind before blast radius. A FACT with no receipt is UNKNOWN.
99
+ - Kill the riskiest, cheapest-to-test assumption first.
100
+ - Evidence first, then the question. Let the customer reach the conclusion.
101
+ - A brief with zero disproved assumptions wasn't audited - it was accepted.
102
+ - Two weeks of building on a wrong assumption costs more than two hours of testing.
@@ -0,0 +1,9 @@
1
+ {
2
+ "generator": "bin/generate-skills.js",
3
+ "version": 1,
4
+ "files": {
5
+ "SKILL.md": "e0865a6f2bf74d6749e7bda4515e5170644fedf87a005c1791293c17078bc182",
6
+ "references/task-context.md": "73eea2d7f164fac3226599e5be26ae4e79dcf69e0d24428dd12d623861410490",
7
+ "references/what-breaks.md": "bc7f7b0d0dbaa4df520b263f0877474722ab223aac4cd6fd84b5112d9868715d"
8
+ }
9
+ }
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: what-breaks
3
+ description: Assess the impact of a proposed change on dependencies and shared infrastructure. Use before touching unfamiliar or consequential systems.
4
+ ---
5
+
6
+ # what-breaks
7
+
8
+ <!-- Generated by bin/generate-skills.js; edit the canonical references and catalog. -->
9
+
10
+ ## Purpose
11
+
12
+ Assess the impact of a proposed change on dependencies and shared infrastructure. Use before touching unfamiliar or consequential systems.
13
+
14
+ Read [the task context contract](references/task-context.md), then [the method](references/what-breaks.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,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,91 @@
1
+ # what-breaks - Assess impact
2
+
3
+ **Enter when:** about to make a change on a system you don't fully understand, touching a high-churn module from `terrain.md`, modifying shared infrastructure (auth, database, messaging), or the FDE asks "what could go wrong?"
4
+
5
+ **Read first:** `terrain.md`, `decisions.md`, `trust-profile.md` (for sacred systems), `context.md`.
6
+
7
+ On your own codebase, you know what breaks. On someone else's, you discover it in production. Blast-radius analysis is the discipline of mapping the damage before making the change - not after.
8
+
9
+ ## Method (you do this work)
10
+
11
+ **1. Trace the dependency chain.** For the file/module/system you're about to change, answer:
12
+
13
+ | Question | How to find it |
14
+ |----------|---------------|
15
+ | Who calls this? | `grep -rn "function_name\|module_name" --include="*.ts" --include="*.py" .` |
16
+ | Who does this call? | Read the imports and external calls in the module |
17
+ | What data flows through? | Trace inputs to outputs - especially user data and money |
18
+ | What breaks if this returns differently? | Check every caller's assumptions about the return value |
19
+ | What breaks if this is slow? | Timeouts, queues, user-facing latency |
20
+ | What breaks if this is down? | Circuit breakers? Fallbacks? Or cascade failure? |
21
+
22
+ **2. Classify the blast radius:**
23
+
24
+ ```
25
+ CONTAINED → Only the module you're changing is affected
26
+ Rollback: revert the PR
27
+ Example: changing a utility function with no external callers
28
+
29
+ ADJACENT → 2-5 callers or one downstream system affected
30
+ Rollback: revert the PR + verify downstream
31
+ Example: changing an API response format used by the frontend
32
+
33
+ SYSTEMIC → Multiple systems, shared infrastructure, or data integrity
34
+ Rollback: may require data migration or coordinated rollback
35
+ Example: changing the auth token format, modifying a shared database schema
36
+
37
+ IRREVERSIBLE → Cannot be rolled back without data loss or manual intervention
38
+ Example: data migration, dropping a column, changing encryption keys
39
+ ```
40
+
41
+ **3. The what-breaks declaration.** Before writing any code, state it explicitly in `decisions.md`:
42
+
43
+ ```markdown
44
+ ## Blast radius: <change name>
45
+ Classification: ADJACENT
46
+ Affected: payment-service, billing-dashboard, reconciliation-job
47
+ Data impact: none (read-only change to response format)
48
+ Rollback: revert PR; frontend falls back to previous format handler
49
+ Monitoring: error rate on /api/payments endpoint, billing dashboard load time
50
+ Time to detect: <5 minutes via error rate alert
51
+ ```
52
+
53
+ **4. Match the change to the blast radius:**
54
+
55
+ | Blast radius | Required before merge |
56
+ |-------------|----------------------|
57
+ | CONTAINED | Unit tests + self-review |
58
+ | ADJACENT | Unit + integration tests + team review + monitoring plan |
59
+ | SYSTEMIC | Full test suite + team review + staged rollout + incident playbook |
60
+ | IRREVERSIBLE | All of the above + sponsor approval + tested rollback of the rollback + go/no-go checkpoint |
61
+
62
+ **5. The invisible integration.** The most dangerous blast radius is the one you can't see in the code:
63
+
64
+ - A webhook endpoint that an external system calls - not in your repo's imports
65
+ - A cron job that reads the table you're modifying - runs at midnight, fails silently
66
+ - A reporting pipeline that depends on the exact column format
67
+ - An monitoring alert that triggers on a metric your change affects
68
+
69
+ **Ask the team:** "Is anything outside this repo reading from or writing to <the thing you're changing>?" The answer is almost always "yes, and here's one we forgot about."
70
+
71
+ **6. The 2am test.** For any SYSTEMIC or IRREVERSIBLE change, ask: "If this fails at 2am on Saturday, who gets woken up, what do they see, and what can they do?" If the answer is "they see nothing until Monday" - the monitoring plan needs work before the change ships.
72
+
73
+ ## Artifact
74
+
75
+ **`decisions.md`** - the what-breaks declaration, filed before the change starts. Updated if the blast radius grew during implementation.
76
+
77
+ **`risks.md`** - new risks discovered during the trace (the invisible integrations, the midnight cron job).
78
+
79
+ **`terrain.md`** - update if the dependency trace revealed connections the map didn't know about.
80
+
81
+ ## Checkpoint
82
+
83
+ Before merge: blast radius declared and still accurate, monitoring in place for the affected scope, rollback tested (not just planned). If the blast radius grew during implementation: re-classify, update the declaration, adjust the review/rollout requirements.
84
+
85
+ ## Principles
86
+
87
+ - Declare the blast radius before writing code, not after.
88
+ - The invisible integration is always there. Ask the team.
89
+ - Match the process to the blast radius - contained gets speed, systemic gets ceremony.
90
+ - "We can always revert" is not a rollback plan. Test the rollback.
91
+ - If the 2am failure is invisible until Monday, the monitoring isn't ready.
@@ -0,0 +1,9 @@
1
+ {
2
+ "generator": "bin/generate-skills.js",
3
+ "version": 1,
4
+ "files": {
5
+ "SKILL.md": "33a822a1e10824461543e296f93e07ed3f8e2eab7a719bcde4bb3bbef597859c",
6
+ "references/task-context.md": "73eea2d7f164fac3226599e5be26ae4e79dcf69e0d24428dd12d623861410490",
7
+ "references/who-decides.md": "56c577f0984cb69cfb18349fc9194e92dba2b56ead9a527d5e6e887c1219717f"
8
+ }
9
+ }
@@ -0,0 +1,21 @@
1
+ ---
2
+ name: who-decides
3
+ description: Map stakeholders, decision rights, influence and blockers from supplied evidence. Use when ownership is unclear or the stakeholder landscape changes.
4
+ ---
5
+
6
+ # who-decides
7
+
8
+ <!-- Generated by bin/generate-skills.js; edit the canonical references and catalog. -->
9
+
10
+ ## Purpose
11
+
12
+ Map stakeholders, decision rights, influence and blockers from supplied evidence. Use when ownership is unclear or the stakeholder landscape changes.
13
+
14
+ Read [the task context contract](references/task-context.md), then [the method](references/who-decides.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,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,91 @@
1
+ # who-decides - Map decision rights
2
+
3
+ **Enter when:** new stakeholders appear, signals shift mid-engagement, a meeting felt off but you can't say why, or it's been two weeks and the map hasn't been updated.
4
+
5
+ **Read first:** `stakeholders.md`, `context.md`. Load `trust-profile.md` only if sacred-data boundaries affect who gets told what.
6
+
7
+ The org chart tells you who reports to whom. The stakeholder radar tells you who actually decides, who blocks quietly, and who's about to escalate. FDEs who read the org chart get blindsided; FDEs who read the room stay ahead.
8
+
9
+ ## Method (you do this work)
10
+
11
+ **1. Map the five roles - every engagement has them, sometimes in one person:**
12
+
13
+ | Role | How to spot them | What they need from you |
14
+ |------|-----------------|------------------------|
15
+ | **Sponsor** | Signed the SOW, owns the budget, asks "are we on track" | Progress in their units (cost saved, risk retired), never technical detail |
16
+ | **Champion** | Wants you to succeed, opens doors, warns you about politics | Early wins they can point to - makes them look right for backing you |
17
+ | **Gatekeeper** | Controls access: repos, environments, meetings, introductions | Respect for their process; go around them and they close every door |
18
+ | **Resistor** | Sceptical, protective, or threatened - not necessarily wrong | To be heard first; resistors who feel consulted become the strongest allies |
19
+ | **Ghost** | Named on the project, never in the room - either checked out or operating above you | Find out which. A checked-out ghost is noise. A ghost operating above you is the real decision-maker. |
20
+
21
+ **2. Track signal, not sentiment.** A stakeholder's signal is what they *do*, not what they say:
22
+
23
+ | Signal | Evidence (not vibes) |
24
+ |--------|---------------------|
25
+ | **Green** | Responds same-day, shares context unprompted, introduces you to their people |
26
+ | **Amber** | Response time doubles, defers decisions, "let me check with…" when they used to decide alone |
27
+ | **Red** | Stops responding, routes around you, a new person you've never met starts asking questions |
28
+
29
+ **3. The 48-hour rule.** A stakeholder who goes amber has roughly 48 hours before they go red. A stakeholder who goes red is already escalating above you. Respond same-day to amber signals - not with more delivery, with a conversation.
30
+
31
+ **3b. One name per person.** If the table says "Denise Chen" and Signal history says "Denise" or "D. Chen", trust keys fork and prep lies. Consolidate to one spelling. `fde doctor` flags these identity clusters - treat that as a fix, not a nit.
32
+
33
+ **4. Detect the invisible escalation.** Three markers:
34
+ - Questions shift from "what are you building" to "when will it be done" - someone above is asking.
35
+ - A meeting gets shortened or cancelled - they're meeting without you.
36
+ - A new stakeholder appears with no introduction - they were sent to check.
37
+
38
+ When you see any of these: tell the FDE immediately, recommend a proactive conversation with the sponsor before the invisible meeting becomes visible.
39
+
40
+ **5. The passed-over team - the most dangerous and most valuable stakeholder.**
41
+
42
+ In every engagement where an external FDE was brought in, an internal team was passed over. They know the codebase better than you, they know the politics better than you, and they resent your presence. Three moves:
43
+
44
+ - **Ask what they tried.** Before your first standup. Their previous approach is the real requirements doc.
45
+ - **Use their language.** In every meeting. They hear their words coming back and they feel consulted, not replaced.
46
+ - **Make them look right.** Credit their prior work in your artifacts. They protect you if they feel respected; they wait for your mistake if they don't.
47
+
48
+ **6. Before a decision meeting: pre-wire, then pre-mortem.**
49
+
50
+ A recommendation that needs several people to say yes is not won in the room; it is won in the week before it. When the FDE is heading into a go/no-go, a budget ask, or anything that visibly costs someone territory:
51
+
52
+ - **Sort by position, not by seniority.** Firm supporter / firm opponent / **swing**. Effort goes almost entirely to swings - supporters need reinforcement, not persuasion, and a firm opponent is rarely moved by a louder version of the argument that already failed.
53
+ - **Name what each swing is protecting.** The objection voiced in a meeting is usually a proxy: headcount, budget, credibility, control, or the reporting line that gets messier. Write the underlying motivation next to the stated objection - they are different sentences.
54
+ - **Sequence the conversations.** Whoever makes the others easier to win goes first; whoever is reassured by seeing names already on board goes last. One-on-one for anyone who would lose face conceding in a group.
55
+ - **Pre-mortem the meeting.** "It's Thursday, the meeting went badly - who sank it, and with what sentence?" That sentence is the pre-wire you are missing. If the answer is a specific person's objection, their conversation happens *before* the room convenes, not in it.
56
+
57
+ Log the sequence and the pre-mortem sentence in `context.md` as the plan for the week - a pre-wire plan that lives only in the FDE's head is not a plan.
58
+
59
+ ## Artifact
60
+
61
+ **`stakeholders.md`** - updated with evidence-dated signal changes:
62
+ ```markdown
63
+ | Who | Role | Signal | Last evidence | Notes |
64
+ |-----|------|--------|---------------|-------|
65
+ | <name> | sponsor | green | responded same-day with budget approval (Jun 12) | owns renewal decision |
66
+ | <name> | resistor→champion | amber→green | shared API docs unprompted after we used their naming (Jun 14) | was passed-over lead |
67
+ ```
68
+
69
+ Signal changes get a dated evidence note. A signal that moved without evidence logged is a guess, not radar.
70
+
71
+ ## Checkpoint
72
+
73
+ One line per stakeholder who changed signal this week. If nobody changed: "Map stable - next check <date>." If a ghost appeared or a resistor went quiet: name it, recommend the move, and update `context.md` with the action.
74
+
75
+ ## Worked example
76
+
77
+ Acme, week 6. Priya's replies have gone from same-day to two days, and a phase-2 go/no-go is scheduled for Thursday.
78
+
79
+ Two signals, not one feeling: response time doubled *and* a finance analyst nobody introduced started asking when the work completes. That combination is an invisible escalation - someone above Priya is asking, and the meeting is already happening without the FDE.
80
+
81
+ Positions: Priya is a supporter under pressure. Marco is a supporter who does not vote. Denise (finance) is the swing, and what she is protecting is not the budget line she cites - it is that her team's escalation started this and she has nothing to show her own director. Raj is a firm opponent on the rewrite question, and no amount of the same argument moves him.
82
+
83
+ Sequence: Denise one-on-one Tuesday with the incident numbers in her units, then Priya Wednesday, so Priya walks in already knowing finance is not going to object. Pre-mortem sentence: *"Denise says 'we still don't know if this actually caught anything'"* - which is precisely why Tuesday exists. `stakeholders.md` records `Priya | sponsor | green→amber | reply latency 1d → 2d, unintroduced analyst (Jul 3)`; `context.md` carries the sequence.
84
+
85
+ ## Principles
86
+
87
+ - Signals are evidence-based, not feeling-based. "Seemed distant" doesn't move a signal; "stopped responding to three messages" does.
88
+ - The 48-hour rule: amber is a same-day response, not a next-week note.
89
+ - The passed-over team is your most important relationship. Win them first.
90
+ - Every engagement has a ghost. Find them before they find you.
91
+ - A stakeholder map that hasn't been updated in two weeks is fiction.