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.
- package/AGENTS.md +1 -1
- package/README.md +30 -26
- package/bin/catalog-doc.js +38 -0
- package/bin/check.js +20 -49
- package/bin/fde.js +2 -2
- package/bin/generate-skills.js +9 -1
- package/bin/install.js +9 -3
- package/bin/skill-catalog.js +283 -16
- package/mcp/fdeops-ingest/package.json +1 -1
- package/package.json +2 -2
- package/plugin.json +1 -1
- package/skills/README.md +7 -0
- package/skills/audit/.fde-generated.json +10 -0
- package/skills/audit/SKILL.md +21 -0
- package/skills/audit/references/audit.md +71 -0
- package/skills/audit/references/discover.md +112 -0
- package/skills/audit/references/task-context.md +18 -0
- package/skills/board-memo/.fde-generated.json +10 -0
- package/skills/board-memo/SKILL.md +21 -0
- package/skills/board-memo/references/board-memo.md +108 -0
- package/skills/board-memo/references/business-case.md +90 -0
- package/skills/board-memo/references/task-context.md +18 -0
- package/skills/brief/.fde-generated.json +9 -0
- package/skills/brief/SKILL.md +21 -0
- package/skills/brief/references/land.md +136 -0
- package/skills/brief/references/task-context.md +18 -0
- package/skills/build/.fde-generated.json +3 -3
- package/skills/build/references/build.md +1 -1
- package/skills/build/references/integrate.md +12 -2
- package/skills/build/references/task-context.md +7 -1
- package/skills/business-case/.fde-generated.json +9 -0
- package/skills/business-case/SKILL.md +21 -0
- package/skills/business-case/references/business-case.md +90 -0
- package/skills/business-case/references/task-context.md +18 -0
- package/skills/connect/.fde-generated.json +12 -0
- package/skills/connect/SKILL.md +21 -0
- package/skills/connect/references/connect.md +24 -0
- package/skills/connect/references/debrief.md +91 -0
- package/skills/connect/references/ingest.md +75 -0
- package/skills/connect/references/source-setup.md +30 -0
- package/skills/connect/references/task-context.md +18 -0
- package/skills/dashboard/.fde-generated.json +9 -0
- package/skills/dashboard/SKILL.md +21 -0
- package/skills/dashboard/references/dashboard.md +40 -0
- package/skills/dashboard/references/task-context.md +18 -0
- package/skills/debrief/.fde-generated.json +12 -0
- package/skills/debrief/SKILL.md +21 -0
- package/skills/debrief/references/connect.md +24 -0
- package/skills/debrief/references/debrief.md +91 -0
- package/skills/debrief/references/ingest.md +75 -0
- package/skills/debrief/references/source-setup.md +30 -0
- package/skills/debrief/references/task-context.md +18 -0
- package/skills/debug/.fde-generated.json +3 -3
- package/skills/debug/references/build.md +1 -1
- package/skills/debug/references/integrate.md +12 -2
- package/skills/debug/references/task-context.md +7 -1
- package/skills/demo-prep/.fde-generated.json +9 -0
- package/skills/demo-prep/SKILL.md +21 -0
- package/skills/demo-prep/references/demo-prep.md +31 -0
- package/skills/demo-prep/references/task-context.md +18 -0
- package/skills/discover/.fde-generated.json +1 -1
- package/skills/discover/references/task-context.md +7 -1
- package/skills/earn-trust/.fde-generated.json +9 -0
- package/skills/earn-trust/SKILL.md +21 -0
- package/skills/earn-trust/references/earn-trust.md +81 -0
- package/skills/earn-trust/references/task-context.md +18 -0
- package/skills/evaluate/.fde-generated.json +3 -3
- package/skills/evaluate/references/build.md +1 -1
- package/skills/evaluate/references/integrate.md +12 -2
- package/skills/evaluate/references/task-context.md +7 -1
- package/skills/fde/SKILL.md +24 -21
- package/skills/fde/references/build.md +1 -1
- package/skills/fde/references/connect.md +14 -24
- package/skills/fde/references/debrief.md +2 -0
- package/skills/fde/references/earn-trust.md +27 -46
- package/skills/fde/references/hold-scope.md +25 -24
- package/skills/fde/references/ingest.md +4 -2
- package/skills/fde/references/integrate.md +12 -2
- package/skills/fde/references/land.md +28 -28
- package/skills/fde/references/plan.md +6 -6
- package/skills/fde/references/rescue.md +18 -18
- package/skills/fde/references/runbook.md +52 -120
- package/skills/fde/references/source-setup.md +30 -0
- package/skills/fde/references/task-context.md +7 -1
- package/skills/fde/references/who-decides.md +29 -57
- package/skills/feedback/.fde-generated.json +1 -1
- package/skills/feedback/references/task-context.md +7 -1
- package/skills/handoff/.fde-generated.json +1 -1
- package/skills/handoff/references/task-context.md +7 -1
- package/skills/ingest/.fde-generated.json +12 -0
- package/skills/ingest/SKILL.md +21 -0
- package/skills/ingest/references/connect.md +24 -0
- package/skills/ingest/references/debrief.md +91 -0
- package/skills/ingest/references/ingest.md +75 -0
- package/skills/ingest/references/source-setup.md +30 -0
- package/skills/ingest/references/task-context.md +18 -0
- package/skills/integrate/.fde-generated.json +3 -3
- package/skills/integrate/references/build.md +1 -1
- package/skills/integrate/references/integrate.md +12 -2
- package/skills/integrate/references/task-context.md +7 -1
- package/skills/options/.fde-generated.json +1 -1
- package/skills/options/references/task-context.md +7 -1
- package/skills/plan/.fde-generated.json +10 -0
- package/skills/plan/SKILL.md +21 -0
- package/skills/plan/references/business-case.md +90 -0
- package/skills/plan/references/plan.md +167 -0
- package/skills/plan/references/task-context.md +18 -0
- package/skills/poc/.fde-generated.json +4 -4
- package/skills/poc/references/build.md +1 -1
- package/skills/poc/references/integrate.md +12 -2
- package/skills/poc/references/plan.md +6 -6
- package/skills/poc/references/task-context.md +7 -1
- package/skills/prioritize/.fde-generated.json +10 -0
- package/skills/prioritize/SKILL.md +21 -0
- package/skills/prioritize/references/business-case.md +90 -0
- package/skills/prioritize/references/pick-three.md +95 -0
- package/skills/prioritize/references/task-context.md +18 -0
- package/skills/qa/.fde-generated.json +3 -3
- package/skills/qa/references/build.md +1 -1
- package/skills/qa/references/integrate.md +12 -2
- package/skills/qa/references/task-context.md +7 -1
- package/skills/readout/.fde-generated.json +1 -1
- package/skills/readout/references/task-context.md +7 -1
- package/skills/red-team/.fde-generated.json +9 -0
- package/skills/red-team/SKILL.md +21 -0
- package/skills/red-team/references/red-team.md +105 -0
- package/skills/red-team/references/task-context.md +18 -0
- package/skills/rescue/.fde-generated.json +9 -0
- package/skills/rescue/SKILL.md +21 -0
- package/skills/rescue/references/rescue.md +82 -0
- package/skills/rescue/references/task-context.md +18 -0
- package/skills/review/.fde-generated.json +3 -3
- package/skills/review/references/build.md +1 -1
- package/skills/review/references/integrate.md +12 -2
- package/skills/review/references/task-context.md +7 -1
- package/skills/rollback/.fde-generated.json +9 -0
- package/skills/rollback/SKILL.md +21 -0
- package/skills/rollback/references/rollback.md +102 -0
- package/skills/rollback/references/task-context.md +18 -0
- package/skills/runbook/.fde-generated.json +11 -0
- package/skills/runbook/SKILL.md +21 -0
- package/skills/runbook/references/close.md +66 -0
- package/skills/runbook/references/encode-pattern.md +96 -0
- package/skills/runbook/references/runbook.md +73 -0
- package/skills/runbook/references/task-context.md +18 -0
- package/skills/scope/.fde-generated.json +2 -2
- package/skills/scope/references/hold-scope.md +25 -24
- package/skills/scope/references/task-context.md +7 -1
- package/skills/score-use-cases/.fde-generated.json +10 -0
- package/skills/score-use-cases/SKILL.md +21 -0
- package/skills/score-use-cases/references/business-case.md +90 -0
- package/skills/score-use-cases/references/score-use-cases.md +70 -0
- package/skills/score-use-cases/references/task-context.md +18 -0
- package/skills/ship/.fde-generated.json +3 -3
- package/skills/ship/references/build.md +1 -1
- package/skills/ship/references/integrate.md +12 -2
- package/skills/ship/references/task-context.md +7 -1
- package/skills/switch-clients/.fde-generated.json +9 -0
- package/skills/switch-clients/SKILL.md +21 -0
- package/skills/switch-clients/references/switch-clients.md +114 -0
- package/skills/switch-clients/references/task-context.md +18 -0
- package/skills/test-assumptions/.fde-generated.json +9 -0
- package/skills/test-assumptions/SKILL.md +21 -0
- package/skills/test-assumptions/references/task-context.md +18 -0
- package/skills/test-assumptions/references/test-assumptions.md +102 -0
- package/skills/what-breaks/.fde-generated.json +9 -0
- package/skills/what-breaks/SKILL.md +21 -0
- package/skills/what-breaks/references/task-context.md +18 -0
- package/skills/what-breaks/references/what-breaks.md +91 -0
- package/skills/who-decides/.fde-generated.json +9 -0
- package/skills/who-decides/SKILL.md +21 -0
- package/skills/who-decides/references/task-context.md +18 -0
- package/skills/who-decides/references/who-decides.md +63 -0
|
@@ -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,70 @@
|
|
|
1
|
+
# score-use-cases - Score use cases
|
|
2
|
+
|
|
3
|
+
**Enter when:** multiple potential use cases compete for attention, the customer says "we want to do everything," a transformation engagement needs a starting point, or the FDE needs to recommend which problem to solve first.
|
|
4
|
+
|
|
5
|
+
**Read first:** `reality.md`, `brief.md`, `terrain.md`, `context.md`. If `business-case.md` or `prototype-log.md` exist from poc, load those - they carry forward.
|
|
6
|
+
|
|
7
|
+
The most dangerous moment in a multi-use-case engagement is when the technically interesting problem wins over the high-value problem. Scoring replaces opinion with arithmetic. The arithmetic is wrong - all models are - but it's *visibly* wrong, which means it can be debated and corrected. Opinion can't.
|
|
8
|
+
|
|
9
|
+
## Method (you do this work)
|
|
10
|
+
|
|
11
|
+
**1. List every candidate.** From the brief, from discovery conversations, from the FDE's own observations. Include the ones the customer hasn't said aloud but the codebase implies - a high-churn module with no tests is a candidate even if nobody named it.
|
|
12
|
+
|
|
13
|
+
**2. Score on five dimensions.** Each 1-5, with the scoring rubric below. If discover already ranked candidates with (Value × Data readiness) / Complexity, reuse that order; this table extends the conversation. Do not invent dimension scores from a thin brief - write `unknown` and ask.
|
|
14
|
+
|
|
15
|
+
| Dimension | 1 | 3 | 5 |
|
|
16
|
+
|-----------|---|---|---|
|
|
17
|
+
| **Business value** | Nice-to-have improvement | Noticeable cost or revenue impact | Existential - they lose customers or face regulatory action without it |
|
|
18
|
+
| **Urgency** | Someday; no deadline | Needed this quarter; mild pressure | Burning now; every week costs real money or trust |
|
|
19
|
+
| **Feasibility** | Requires new infrastructure, skills, or major refactoring | Moderate effort with known patterns | Can be built on existing systems with existing team |
|
|
20
|
+
| **Data readiness** | Data doesn't exist or is deeply unclean | Data exists but needs work; volume uncertain | Available, clean, sufficient volume today |
|
|
21
|
+
| **Stakeholder alignment** | No sponsor; political resistance | One sponsor but competing priorities | Active sponsor with budget and decision authority |
|
|
22
|
+
|
|
23
|
+
**3. Calculate the score.**
|
|
24
|
+
|
|
25
|
+
```
|
|
26
|
+
Score = (Business value × Urgency × Stakeholder alignment) / (6 - Feasibility) × Data readiness
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
Why this formula:
|
|
30
|
+
- **Multiplied numerator** - all three must be present. A high-value problem with no urgency or no sponsor scores low because it won't ship.
|
|
31
|
+
- **Feasibility inverted** - harder problems get a higher denominator, pulling the score down. A feasibility of 5 (easy) gives denominator 1; feasibility of 1 (hard) gives denominator 5.
|
|
32
|
+
- **Data readiness as multiplier** - for data-dependent use cases (ML, analytics). For pure engineering work, set to 3 (neutral) unless data quality is genuinely a factor.
|
|
33
|
+
|
|
34
|
+
**4. Rank and present.** Sort by score. Present the top 3 to the FDE and the sponsor:
|
|
35
|
+
|
|
36
|
+
```markdown
|
|
37
|
+
| Rank | Use case | Value | Urgency | Feasibility | Data | Alignment | Score | Recommend |
|
|
38
|
+
|------|----------|-------|---------|-------------|------|-----------|-------|-----------|
|
|
39
|
+
| 1 | Fix payment reconciliation | 5 | 5 | 4 | 3 | 5 | 187.5 | Start here |
|
|
40
|
+
| 2 | Dashboard redesign | 3 | 2 | 5 | 3 | 3 | 54.0 | Quick win if capacity |
|
|
41
|
+
| 3 | ML fraud detection | 5 | 3 | 2 | 2 | 4 | 30.0 | Phase 2 after data prep |
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
**5. Defend the recommendation, not the model.** The model is a reasoning tool, not a decision. When presenting:
|
|
45
|
+
|
|
46
|
+
- "The scoring puts payment reconciliation first because it's the only use case where all three conditions hold: the sponsor is active, the problem is burning, and we can build it on the existing system."
|
|
47
|
+
- Never: "The model says X." Models don't decide; people decide with evidence.
|
|
48
|
+
|
|
49
|
+
**6. Handle the CEO's pet project.** Sometimes the highest-scoring use case isn't the one the most powerful stakeholder wants. That's information, not a problem:
|
|
50
|
+
|
|
51
|
+
- Present the scores honestly - the stakeholder sees you're being rigorous, not political.
|
|
52
|
+
- If they override: log it in `decisions.md` as a deliberate choice, note the trade-off, and build what they chose. The FDE who was honest about the trade-off is protected when the override creates problems.
|
|
53
|
+
|
|
54
|
+
## Artifact
|
|
55
|
+
|
|
56
|
+
**`reality.md`** - the scored use-case table with the recommendation. This is the evidence the sponsor references when justifying the prioritisation upward.
|
|
57
|
+
|
|
58
|
+
**`decisions.md`** - if the scored recommendation was overridden: what was chosen, by whom, the trade-off accepted.
|
|
59
|
+
|
|
60
|
+
## Checkpoint
|
|
61
|
+
|
|
62
|
+
Walk the FDE through the top 3 scores and the recommendation. One question: "Does the sponsor have a strong preference that overrides the scoring?" If yes, log it. If no, proceed with the highest score to poc or plan.
|
|
63
|
+
|
|
64
|
+
## Principles
|
|
65
|
+
|
|
66
|
+
- Score replaces opinion. Visible arithmetic beats invisible judgment.
|
|
67
|
+
- All three conditions (value, urgency, alignment) must hold - or the use case won't ship.
|
|
68
|
+
- The technically interesting problem that scores low gets deferred, not pursued.
|
|
69
|
+
- Present the model; let the human decide. If overridden, log the trade-off.
|
|
70
|
+
- A use case with no active sponsor is a research project, not an engagement deliverable.
|
|
@@ -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": "3ed6862aac292e971af7c0a7f5a68968b89b056be60f3cdc883f51534984c1fc",
|
|
6
|
-
"references/build.md": "
|
|
6
|
+
"references/build.md": "6fa07b15b682119de53c38950f94942a58e4680ab58b24319d77c54a27cd9697",
|
|
7
7
|
"references/debug.md": "c3bb344d38cc3552cb4e230c601a9be3fe173af2b2efb89aab6b7b04339f24f4",
|
|
8
8
|
"references/eval-pack.md": "0590b85d3cae0903c6b1274540c92eaa2a4373047e8a0548d6942516ef0bb9e1",
|
|
9
|
-
"references/integrate.md": "
|
|
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": "
|
|
13
|
+
"references/task-context.md": "73eea2d7f164fac3226599e5be26ae4e79dcf69e0d24428dd12d623861410490",
|
|
14
14
|
"references/verification.md": "d453c075b849437375338fd23782ca7fe6d427b05137a2b10fc2f724aaf7f8a9"
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -6,7 +6,7 @@ Use the permitted context and authority in [task context](task-context.md). This
|
|
|
6
6
|
|
|
7
7
|
## Method
|
|
8
8
|
|
|
9
|
-
1. Identify the repository, its instructions, working tree, relevant callers, and test commands. Inspect examples before creating abstractions. Preserve unrelated edits and state which dependencies or interfaces the change touches.
|
|
9
|
+
1. Identify the repository, its instructions, working tree, relevant callers, and test commands. Inspect examples before creating abstractions. Preserve unrelated edits and state which dependencies or interfaces the change touches. Before changing an untested legacy path, capture the undocumented behavior callers depend on with targeted characterization checks; distinguish behavior to preserve from the intended change.
|
|
10
10
|
2. State the observable outcome, constraints, and acceptance checks. Reuse agreed criteria for routine fixes. If a consequential product choice is unresolved, surface that choice while continuing independent investigation; do not invent acceptance.
|
|
11
11
|
3. Choose the smallest coherent path that demonstrates the outcome through the real entry point. Include the necessary storage, error handling, and interface behavior in that slice. Name the failure that stops expansion and the recovery path for stateful changes.
|
|
12
12
|
4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code.
|
|
@@ -6,13 +6,23 @@ Start from [task context](task-context.md). Permitted supplied context is enough
|
|
|
6
6
|
|
|
7
7
|
## Method
|
|
8
8
|
|
|
9
|
-
1. Map producer, consumer, owner, direction, and side effects. Inspect the actual installed version and local implementation; verify uncertain behavior against current official documentation. Identify the relevant schema, authentication scopes, network boundary, and permitted test environment.
|
|
9
|
+
1. Map producer, consumer, owner, direction, and side effects. Inspect the actual installed version and local implementation; verify uncertain behavior against current official documentation. Identify the relevant schema, authentication scopes, network boundary, and permitted test environment. Before changing an untested existing boundary, characterize the mappings, ordering or other observable behavior its callers depend on.
|
|
10
10
|
2. Write the acceptance example: an input at the real boundary and the observable downstream result. Include a rejection or failure example. Separate configuration validity, successful authentication, transport connectivity, contract compatibility, and end-to-end behavior; none proves the next.
|
|
11
11
|
3. Inspect credentials by presence and required scope without printing values. Use existing secret storage. Check data classification and retention before moving data; never pass raw `<private>` blocks into a model. Prefer sanitized or synthetic cases approved for the target environment.
|
|
12
|
-
4. Implement the narrow adapter using native repository patterns. Validate external inputs and model outputs, bound timeouts and retries, preserve error
|
|
12
|
+
4. Implement the narrow adapter using native repository patterns. Validate external inputs and model outputs, bound timeouts and retries, preserve error codes and failure phase without leaking payloads, and handle cancellation. Keep explicit authentication or permission rejections distinguishable from transport uncertainty. For writes, establish idempotency or duplicate detection before retries and apply the uncertain-write rules below when outcomes can be ambiguous; for events, check ordering, replay, and poison messages as applicable.
|
|
13
13
|
5. Exercise a permitted success case and relevant failures: denied access, malformed data, rate limit, timeout, duplicate delivery, or partial completion. Trace correlation IDs or safe evidence across both sides. A mock proves client behavior only; if live access is unavailable, report that gap instead of claiming an integration works.
|
|
14
14
|
6. Check cleanup and recovery for test side effects. Use [verification](verification.md) for receipts and [review](review.md) for security or data-contract changes. Route deployment through [ship](ship.md) only when authorized.
|
|
15
15
|
|
|
16
|
+
## When a write outcome is uncertain
|
|
17
|
+
|
|
18
|
+
Use the existing storage and worker mechanisms; do not introduce a new platform for these rules.
|
|
19
|
+
|
|
20
|
+
- Before a replayable write, persist its tenant-scoped operation identity and payload identity, with enough state to recover after restart. Establish who owns an in-flight attempt so concurrent workers cannot independently replay it. Establish whether upstream deduplication is guaranteed, including its key, payload rules and retention window; sending a key alone proves nothing.
|
|
21
|
+
- A timeout, cancellation or lost response after dispatch may leave a completed side effect. Preserve that uncertainty across restart; stopping the caller is not rollback. Do not silently turn an uncertain attempt into a fresh operation.
|
|
22
|
+
- Reconcile against an authoritative receipt or lookup that matches the operation and payload. One verified result can confirm completion; conflicting or multiple matches require resolution. An empty stale, partial or eventually consistent lookup does not prove absence or authorize replay. Retry only under the verified deduplication contract or evidence establishing that repeating the write is safe.
|
|
23
|
+
- Keep unresolved attempts visible with safe error context, a next action and a known resolution owner, or an explicit ownership gap. Manual resolution still needs authority for any corrective write; do not manufacture completion to clear a queue.
|
|
24
|
+
- Test the relevant failure boundary: committed write with lost response, cancellation or restart before recording success, and stale lookup or concurrent replay where applicable. Record which were exercised and which remain unproven.
|
|
25
|
+
|
|
16
26
|
## Deliverable and acceptance
|
|
17
27
|
|
|
18
28
|
Return the boundary contract, changed paths, environment, evidence at each tested layer, and remaining dependencies with owners when known. Done requires the agreed end-to-end result or an explicit narrower agreed scope. Do not silently replace live acceptance with a stub. In engagement mode, update the terrain/delivery record with confirmed facts; otherwise return the receipt directly.
|
|
@@ -2,11 +2,17 @@
|
|
|
2
2
|
|
|
3
3
|
Use this contract for standalone methods and methods routed through `@fde`.
|
|
4
4
|
|
|
5
|
-
- **Standalone work:** use the supplied, permitted facts, notes, code, and artifacts. A client name, `.fde/` directory, or initialized engagement is not a prerequisite. Do not bootstrap records merely to run a method. Ask only for missing information or authority that changes the next action; mark other gaps as unknown.
|
|
5
|
+
- **Standalone work:** use the supplied, permitted facts, notes, code, and artifacts. A client name, `.fde/` directory, or initialized engagement is not a prerequisite for work on supplied context. Tasks that inspect actual records need those records; staging or saving requires a selected customer. Never fabricate records to make an operational task appear complete. Do not bootstrap records merely to run a method. Ask only for missing information or authority that changes the next action; mark other gaps as unknown.
|
|
6
6
|
- **Artifact names are destinations:** names such as `success.md`, `decisions.md`, and `delivery.md` identify relevant evidence and, when bound, record destinations. If absent, use supplied facts and return the requested draft or result in the current workspace or conversation. Do not invent files or require initialization to complete useful work.
|
|
7
7
|
- **Bound engagement:** honor the current client binding and constraints. Before reading records, run `fde privacy` to verify masking support. Obtain a fresh, identity-matching sanitized `fde resume` packet for this task (or reuse a fresh session-hook packet); retrieve missing evidence with targeted `fde recall <topic>`. Use bounded `fde handoff` for transfer work. Refresh after binding, masking, or record changes. Never substitute raw `.fde/` reads, private blocks, masking dictionaries, or full transcripts. If the CLI is unavailable, use only permitted supplied excerpts and report the context limitation.
|
|
8
8
|
- **Authority:** continue reversible work within authorized scope. Reuse prior authorization when it covers the specific action. Show consequential engagement-record judgments and uncertainties for confirmation before saving unless already explicitly confirmed. New scope, acceptance changes, production actions, exports, and external messages need the applicable authority; a method invocation alone does not supply it. Keep one customer's writes in that customer's record.
|
|
9
9
|
- **Evidence:** distinguish supplied facts, estimates, hypotheses, and unknowns. Cite actual sources; a log date is not attribution. Never invent a source, signer, signature, customer reaction, or acceptance. Keep outcomes **promised → measured → accepted** distinct, and implementation, verification, deployment, and customer acceptance separate. Missing evidence means unproven, not an observed failure.
|
|
10
10
|
- **Data boundary:** use only data permitted by the customer's AI policy; clarify unknown policy before loading their code or data. Never load `<private>` content into a model. Cross-client comparison and exporting reusable material require permission and removal of customer-identifying or confidential content; anonymization alone does not grant permission.
|
|
11
11
|
|
|
12
|
+
## CLI availability
|
|
13
|
+
|
|
14
|
+
Only locate the CLI when the selected task needs it. Check `fde` on PATH and its `fde privacy` capability before reading records. If unavailable, use `node ~/.claude/fdeops/fde.js` when the disk installer placed it there, or `npx --yes fdeops <command>` when package downloads are permitted. Respect local installation and network rules. Run commands for the user; do not turn a missing bare `fde` command into unnecessary manual setup.
|
|
15
|
+
|
|
16
|
+
If no permitted executable is available, explain the missing capability. Continue any useful draft from supplied excerpts, but do not claim to have read, switched, staged, saved or rendered real records. Do not read raw private record files as a fallback.
|
|
17
|
+
|
|
12
18
|
Apply the selected method to this context. Follow its linked supporting methods only when needed; do not restart discovery or repeat already answered questions.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"generator": "bin/generate-skills.js",
|
|
3
|
+
"version": 1,
|
|
4
|
+
"files": {
|
|
5
|
+
"SKILL.md": "f675a420f65b1542a66e713bb15f83c06310c0a8f4fa6d4a4d1b15672dea51c3",
|
|
6
|
+
"references/switch-clients.md": "4e8cb763db871b38fece3adaf9d1ac3b995c21dd1d0e463903eaa3854332c389",
|
|
7
|
+
"references/task-context.md": "73eea2d7f164fac3226599e5be26ae4e79dcf69e0d24428dd12d623861410490"
|
|
8
|
+
}
|
|
9
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: switch-clients
|
|
3
|
+
description: Switch between existing customer engagements and triage competing needs. Use when context switching causes confusion; requires engagement records and preserves one client per write.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# switch-clients
|
|
7
|
+
|
|
8
|
+
<!-- Generated by bin/generate-skills.js; edit the canonical references and catalog. -->
|
|
9
|
+
|
|
10
|
+
## Purpose
|
|
11
|
+
|
|
12
|
+
Switch between existing customer engagements and triage competing needs. Use when context switching causes confusion; requires engagement records and preserves one client per write.
|
|
13
|
+
|
|
14
|
+
Read [the task context contract](references/task-context.md), then [the method](references/switch-clients.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
|
+
- This task operates on existing engagement records. Use the local CLI and permitted sanitized packets; do not invent a portfolio or initialize records merely to complete the task. Report missing records or access as a limitation.
|
|
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,114 @@
|
|
|
1
|
+
# switch-clients - Switch engagements
|
|
2
|
+
|
|
3
|
+
**Enter when:** the FDE is running 2+ engagements simultaneously, context-switching is causing mistakes or delays, a new customer is being onboarded while existing engagements are active, or the FDE says "I'm losing track."
|
|
4
|
+
|
|
5
|
+
**Read first:** Run `fde status --all` for the portfolio view. Then per engagement: `context.md` only - load deeper files only for the engagement being worked on.
|
|
6
|
+
|
|
7
|
+
The solo FDE running three customers simultaneously is the norm, not the exception. Without a system, the third customer gets the scraps of attention left after the other two have their crises. Multi-customer ops is the discipline of giving each customer the experience of being your only customer.
|
|
8
|
+
|
|
9
|
+
## Method (you do this work)
|
|
10
|
+
|
|
11
|
+
**1. The hard boundary: one `.fde/` per customer, always.**
|
|
12
|
+
|
|
13
|
+
```
|
|
14
|
+
~/fde-engagements/
|
|
15
|
+
garvey-payments/.fde/ ← Garvey's engagement memory
|
|
16
|
+
kesterman-freight/.fde/ ← Kesterman's engagement memory
|
|
17
|
+
rennick-health/.fde/ ← Rennick's engagement memory
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
**Never:**
|
|
21
|
+
- Merge two customers' data into one folder
|
|
22
|
+
- Reference one customer's code/data in another's context
|
|
23
|
+
- Load two customers' `.fde/` folders in the same session
|
|
24
|
+
- Copy patterns between customers without stripping identifying information
|
|
25
|
+
|
|
26
|
+
Cross-contamination is the fastest way to lose two engagements at once.
|
|
27
|
+
|
|
28
|
+
**2. The daily triage.** Every morning, before opening any editor:
|
|
29
|
+
|
|
30
|
+
```markdown
|
|
31
|
+
## Daily triage - <date>
|
|
32
|
+
|
|
33
|
+
| Customer | Trust signal | Top risk | Today's action | Time budget |
|
|
34
|
+
|----------|-------------|----------|---------------|-------------|
|
|
35
|
+
| Garvey | green | Canary blocked on their security ticket | Chase ticket, prep ship checklist | 4h |
|
|
36
|
+
| Kesterman | AMBER | Sponsor went quiet Tue | Proactive conversation TODAY | 2h |
|
|
37
|
+
| Rennick | green | None active | Build slice 3, push PR | 2h |
|
|
38
|
+
|
|
39
|
+
Priority order: Kesterman (amber trust), Garvey (deadline), Rennick (steady)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
**3. The triage rules.** In order of priority:
|
|
43
|
+
|
|
44
|
+
| Priority | Rule | Why |
|
|
45
|
+
|----------|------|-----|
|
|
46
|
+
| **1** | Trust fires first | A green-trust engagement with a deadline can wait 4 hours. An amber-trust engagement cannot wait 4 hours - it's 48 hours from red. |
|
|
47
|
+
| **2** | Deadlines second | Real deadlines (customer-facing, regulatory, contractual) outrank planned milestones. |
|
|
48
|
+
| **3** | Highest-value delivery third | The engagement where today's work produces the most visible outcome. |
|
|
49
|
+
| **4** | Steady-state last | Engagements on track with no urgent needs get allocated remaining time. |
|
|
50
|
+
|
|
51
|
+
**4. Context-switch protocol.** When moving between customers:
|
|
52
|
+
|
|
53
|
+
```
|
|
54
|
+
BEFORE LEAVING CUSTOMER A:
|
|
55
|
+
1. Write 3 lines to context.md: where we are, what changed, next step
|
|
56
|
+
2. Commit or stash any work in progress
|
|
57
|
+
3. Close all customer A files and browser tabs
|
|
58
|
+
|
|
59
|
+
BEFORE STARTING CUSTOMER B:
|
|
60
|
+
1. Run: fde resume (loads Customer B's engagement)
|
|
61
|
+
2. Read context.md - where did we leave off?
|
|
62
|
+
3. Confirm: what's the one thing to accomplish in this block?
|
|
63
|
+
4. Set a time boundary (e.g., "2 hours on Kesterman, then back to Garvey")
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
The 3-line context update is the bridge. Without it, the next session starts with "what was I doing?" - that's 20 minutes of re-discovery each time.
|
|
67
|
+
|
|
68
|
+
**5. The communication cadence.** Each customer gets a rhythm:
|
|
69
|
+
|
|
70
|
+
| Engagement intensity | Status cadence | Touchpoint type |
|
|
71
|
+
|---------------------|---------------|-----------------|
|
|
72
|
+
| Active build (daily work) | Weekly written + ad-hoc Slack | Status update + visible progress |
|
|
73
|
+
| Light touch (2-3 days/week) | Weekly written | Status update + next week's plan |
|
|
74
|
+
| Monitoring only | Bi-weekly written | Health check + any emerging risks |
|
|
75
|
+
|
|
76
|
+
**The golden rule: no customer should have to chase you for an update.** Proactive status updates are cheaper than reactive ones - and they protect trust across all engagements.
|
|
77
|
+
|
|
78
|
+
**6. Capacity management.** The honest conversation with yourself:
|
|
79
|
+
|
|
80
|
+
| Situation | Action |
|
|
81
|
+
|-----------|--------|
|
|
82
|
+
| All engagements are steady | Allocate by value; reserve 20% for unplanned |
|
|
83
|
+
| One engagement is on fire | Other engagements get a proactive heads-up: "Focus is on X this week; here's what's planned for you next week" |
|
|
84
|
+
| Two engagements are on fire | Triage - one gets full attention, one gets stabilised, tell the sponsor of the stabilised one what's happening |
|
|
85
|
+
| Three+ are on fire simultaneously | Escalate to your manager/team. Solo capacity is exceeded - communicate before quality drops |
|
|
86
|
+
|
|
87
|
+
**7. The cross-contamination checklist.** Before every customer interaction:
|
|
88
|
+
|
|
89
|
+
- [ ] Am I in the right `.fde/` folder?
|
|
90
|
+
- [ ] Am I referencing the right customer's context?
|
|
91
|
+
- [ ] Is the status update addressed to the right person?
|
|
92
|
+
- [ ] Does my current context contain any data from another customer?
|
|
93
|
+
- [ ] Are my browser tabs / code editors pointed at the right customer?
|
|
94
|
+
|
|
95
|
+
One wrong customer name in a status update damages both relationships.
|
|
96
|
+
|
|
97
|
+
## Artifact
|
|
98
|
+
|
|
99
|
+
**`context.md`** (per customer) - the 3-line bridge updated at every context switch. The most-written file in multi-customer ops.
|
|
100
|
+
|
|
101
|
+
**`fieldbook.html`** - regenerated by `fde dashboard --all` (deterministic, zero tokens) for the portfolio. Bare `fde dashboard` refreshes the bound `fieldbook-current.html`.
|
|
102
|
+
|
|
103
|
+
## Checkpoint
|
|
104
|
+
|
|
105
|
+
The daily triage is the checkpoint. One line per customer: signal, priority, today's action. If any customer hasn't been touched in 3+ business days: flag it - silence is noticed.
|
|
106
|
+
|
|
107
|
+
## Principles
|
|
108
|
+
|
|
109
|
+
- One `.fde/` per customer. Never merge. Never cross-reference.
|
|
110
|
+
- Trust fires outrank deadlines. A deadline can be renegotiated; trust can't.
|
|
111
|
+
- Write the 3-line context bridge at every switch. 20 seconds saves 20 minutes.
|
|
112
|
+
- No customer should have to chase for an update.
|
|
113
|
+
- Two fires simultaneously is a triage decision. Three is an escalation.
|
|
114
|
+
- The wrong customer name in a status update is a two-customer trust fire.
|
|
@@ -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
|
+
}
|