fdeops 3.5.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 (70) hide show
  1. package/AGENTS.md +18 -0
  2. package/CLAUDE.md.template +25 -0
  3. package/LICENSE +21 -0
  4. package/README.md +328 -0
  5. package/adapters/AGENTS.md +24 -0
  6. package/adapters/GEMINI.md +24 -0
  7. package/adapters/README.md +31 -0
  8. package/adapters/copilot-instructions.md +24 -0
  9. package/adapters/cursor.fde.mdc +29 -0
  10. package/bin/check.js +260 -0
  11. package/bin/fde.js +690 -0
  12. package/bin/install.js +220 -0
  13. package/hooks/hooks.json +40 -0
  14. package/hooks/pre-compact +66 -0
  15. package/hooks/run-hook.cmd +3 -0
  16. package/hooks/session-start +91 -0
  17. package/hooks/session-stop +86 -0
  18. package/package.json +52 -0
  19. package/skills/fde/SKILL.md +219 -0
  20. package/skills/fde/references/ai.md +91 -0
  21. package/skills/fde/references/artifacts.md +247 -0
  22. package/skills/fde/references/assumption-audit.md +77 -0
  23. package/skills/fde/references/audit.md +61 -0
  24. package/skills/fde/references/blast-radius.md +91 -0
  25. package/skills/fde/references/build.md +98 -0
  26. package/skills/fde/references/business-case.md +78 -0
  27. package/skills/fde/references/close.md +43 -0
  28. package/skills/fde/references/dashboard.md +40 -0
  29. package/skills/fde/references/debrief.md +36 -0
  30. package/skills/fde/references/debug.md +55 -0
  31. package/skills/fde/references/demo-prep.md +31 -0
  32. package/skills/fde/references/discover.md +163 -0
  33. package/skills/fde/references/exec-narrative.md +108 -0
  34. package/skills/fde/references/fintech.md +48 -0
  35. package/skills/fde/references/gov.md +47 -0
  36. package/skills/fde/references/handoff-engineering.md +139 -0
  37. package/skills/fde/references/healthcare.md +45 -0
  38. package/skills/fde/references/incremental-build.md +91 -0
  39. package/skills/fde/references/initiative-triage.md +78 -0
  40. package/skills/fde/references/land.md +75 -0
  41. package/skills/fde/references/multi-customer-ops.md +114 -0
  42. package/skills/fde/references/observability.md +103 -0
  43. package/skills/fde/references/options-analysis.md +81 -0
  44. package/skills/fde/references/pattern-extract.md +93 -0
  45. package/skills/fde/references/plan.md +108 -0
  46. package/skills/fde/references/qa-live.md +113 -0
  47. package/skills/fde/references/rescue.md +81 -0
  48. package/skills/fde/references/review.md +53 -0
  49. package/skills/fde/references/rollback-drill.md +102 -0
  50. package/skills/fde/references/scope-defense.md +71 -0
  51. package/skills/fde/references/security-audit.md +105 -0
  52. package/skills/fde/references/ship.md +121 -0
  53. package/skills/fde/references/sketch.md +40 -0
  54. package/skills/fde/references/stakeholder-radar.md +68 -0
  55. package/skills/fde/references/status.md +30 -0
  56. package/skills/fde/references/test-on-legacy.md +108 -0
  57. package/skills/fde/references/trust-engineering.md +100 -0
  58. package/skills/fde/references/use-case-scoring.md +70 -0
  59. package/templates/.fde/README.md +13 -0
  60. package/templates/.fde/brief.md +8 -0
  61. package/templates/.fde/context.md +14 -0
  62. package/templates/.fde/decisions.md +18 -0
  63. package/templates/.fde/delivery.md +7 -0
  64. package/templates/.fde/reality.md +7 -0
  65. package/templates/.fde/retrospectives/.gitkeep +0 -0
  66. package/templates/.fde/risks.md +5 -0
  67. package/templates/.fde/stakeholders.md +10 -0
  68. package/templates/.fde/success.md +7 -0
  69. package/templates/.fde/terrain.md +7 -0
  70. package/templates/.fde/trust-profile.md +11 -0
@@ -0,0 +1,163 @@
1
+ # discover - find the real problem, map the terrain
2
+
3
+ **Enter when:** the brief feels wrong, the real problem is unclear, shadow processes are suspected, or any phase found that the map is missing.
4
+
5
+ **Read first:** `context.md`, `brief.md`. Load `terrain.md` if it exists - extend it, never regenerate from scratch.
6
+
7
+ ## Frame the decision first
8
+
9
+ Before any scanning, write one sentence at the top of your working notes:
10
+
11
+ > "What will the sponsor do differently because of this discovery?"
12
+
13
+ If you can't name the decision this informs (descope? rescope? pick use case A over B? touch module X first?), you're collecting trivia, not discovering. Every output of this phase is aimed at that decision.
14
+
15
+ ## Method - part 1: the codebase (you do this work)
16
+
17
+ **First move: `fde scan`** - it runs everything below deterministically in seconds (churn×tests, "temporary" archaeology, AI components, secrets redacted, previous attempts). Your job is then **interpretation**: read its output against the brief, follow the hotspots into the code, and connect the technical findings to the human signals in part 2.
18
+
19
+ If the CLI is unavailable, run the manual commands below. Either way: do not load the full codebase into context - scan wide, read deep only on hotspots.
20
+
21
+ **1. Stack and age.** Language, framework, build system, date of last major upgrade:
22
+ ```bash
23
+ git log --reverse --format="%ad" --date=short | head -1 # repo birth
24
+ git log -1 --format="%ad" --date=short # last commit
25
+ ```
26
+
27
+ **2. Churn heat - the modules everyone touches but fears:**
28
+ ```bash
29
+ git log --since="90 days ago" --name-only --pretty=format: | sort | uniq -c | sort -rn | head -20
30
+ ```
31
+ The highest-churn file in a legacy codebase is the one everyone is afraid to refactor but cannot avoid touching. Cross-reference with complexity (file size, nesting) and mark "handle with care."
32
+
33
+ **3. Test gaps - what's covered, what's a lie:**
34
+ ```bash
35
+ find . -path ./node_modules -prune -o -name "*test*" -print | head -30
36
+ ```
37
+ Map test files against the churn list. A high-churn module with no test neighbors is a load-bearing wall with no insurance. Spot-read the tests that do exist: tests that pass but assert nothing are worse than no tests - note them.
38
+
39
+ **4. The "temporary" archaeology** (repeat `--include` per extension - brace globs silently match nothing):
40
+ ```bash
41
+ grep -rnE "HACK|FIXME|XXX|temporary|for now|remove this|workaround" \
42
+ --include="*.js" --include="*.ts" --include="*.py" --include="*.java" \
43
+ --include="*.go" --include="*.rb" --include="*.cs" --include="*.php" . | head -30
44
+ ```
45
+ Temporary code in production is permanent code with an excuse. Each hit is a candidate for "what was never built properly."
46
+
47
+ **5. AI components - they fail silently:**
48
+ ```bash
49
+ grep -rlnE "openai|anthropic|llm|prompt|embedding|vector|inference" \
50
+ --include="*.js" --include="*.ts" --include="*.py" --include="*.java" \
51
+ --include="*.go" . | head -20
52
+ ```
53
+ Flag every one. AI components don't fail like regular code - they degrade as the world changes. Each needs: model version, fallback path (or note its absence), observability (or note its absence).
54
+
55
+ **6. Data flow.** Where data enters, how it moves, where it stops. Entry points first: routes, queues, cron, file drops.
56
+
57
+ ## Method - part 2: the humans (you coach, the FDE asks)
58
+
59
+ The real spec is what people **do** when the system fails - not what the slide deck says. Arm the FDE with these, in their own words:
60
+
61
+ - **"How is the team coping today without the fix?"** - the workaround is the honest requirements doc.
62
+ - **Find the spreadsheet.** Almost always there. Whoever maintains it is the best interview in the building.
63
+ - **The hesitation.** When someone says "well, there's also this other thing we do…" - stop them, ask them to finish. The main story is what they're comfortable explaining; the hesitation is the real problem.
64
+ - **"Which part of the codebase do you least want to touch?"** The answer is unanimous and it's the load-bearing wall. Check it against your churn scan - when the human answer and the churn data agree, that's your first map landmark.
65
+ - **Shadow AI.** Someone pasting data into ChatGPT to cope = a real unmet need + an uncontrolled data risk. Note both.
66
+
67
+ ## Method - part 3: workshop facilitation
68
+
69
+ When discovery requires a structured session with multiple stakeholders (alignment, prioritisation, design):
70
+
71
+ **Before the room:**
72
+ - Define the single decision the workshop must produce - not "discuss options" but "rank the three candidates and commit to one."
73
+ - Cap at 8 people. Every person above 8 halves the probability of a decision.
74
+ - Time-box: 90 minutes max. Anything longer splits into two sessions.
75
+ - Pre-read: one page, sent 48 hours ahead. Nobody will read more.
76
+
77
+ **In the room (the FDE facilitates, not presents):**
78
+ 1. **5 min - frame.** One slide: the decision, the constraint, the deadline. No history lesson.
79
+ 2. **15 min - diverge.** Silent post-its (or digital equivalent). Everyone writes before anyone talks - prevents the loudest voice dominating.
80
+ 3. **20 min - cluster.** Group themes, name them. The FDE does NOT label - the room labels.
81
+ 4. **30 min - converge.** Dot-vote or forced-rank. The FDE counts, the room decides.
82
+ 5. **10 min - lock.** State the decision back. "We're saying X. Anyone who can't live with this, speak now." Silence = consent.
83
+ 6. **10 min - next steps.** Who does what by when. Written before people stand up.
84
+
85
+ **After the room:** Summary in `decisions.md` within 2 hours. Decisions decay - what felt clear at 3pm is debatable by 5pm if unwritten.
86
+
87
+ ## Method - part 4: data estate assessment
88
+
89
+ When the engagement involves AI, analytics, or data-heavy automation, assess the data estate before scoring use cases:
90
+
91
+ **The 5 questions (ask the data owner, not the sponsor):**
92
+ 1. **Where does data live?** - List every source: databases, warehouses, SaaS exports, spreadsheets, S3 buckets, vendor APIs. Map it.
93
+ 2. **How fresh is it?** - Real-time, daily batch, "someone uploads a CSV on Mondays"? Freshness determines what's buildable.
94
+ 3. **Who owns it?** - Not "IT" - the named person who can grant access and explain the schema. No name = no access in practice.
95
+ 4. **What's the quality?** - Sample 100 rows from each critical source. Check: nulls, duplicates, format consistency, semantic correctness. A 60% null rate in a key field = that source is fiction.
96
+ 5. **What are the governance constraints?** - PII classification, retention policies, cross-border rules, consent basis. One missed constraint = a compliance stop later.
97
+
98
+ **The data readiness matrix:**
99
+
100
+ | Source | Location | Freshness | Owner | Quality (sample) | Governance | Verdict |
101
+ |--------|----------|-----------|-------|-----------------|------------|---------|
102
+ | _fill per source_ | | | | | | Ready / Needs work / Blocker |
103
+
104
+ A use case that depends on a "Blocker" source doesn't get scored - it gets a data remediation conversation first. Write this to `terrain.md` under a `## Data estate` section.
105
+
106
+ ## When scope is a transformation, not a single problem
107
+
108
+ Score every candidate use case before anything gets prototyped:
109
+
110
+ | Dimension | Question | 1–5 |
111
+ |---|---|---|
112
+ | Business value | What does it cost them unsolved? | |
113
+ | Complexity | How hard to build safely? (5 = hardest) | |
114
+ | Data readiness | Available, clean, sufficient volume today? | |
115
+
116
+ **Score = (Value × Data readiness) / Complexity.** Highest score gets prototyped first (hand to `sketch`). A 5-value/1-complexity/5-readiness case scores 25; a 5-value/5-complexity/2-readiness case scores 2 - they look identical on a whiteboard. Never let a technically interesting use case override the score.
117
+
118
+ ## Artifact (this IS the memory - write it as you work)
119
+
120
+ **`reality.md`** - the readout the FDE takes into the sponsor meeting:
121
+ ```markdown
122
+ # Reality (actual problem)
123
+ **Decision this informs:** <one line>
124
+ **Confirmed:** <real problem> (evidence: <workaround/data/quote, source, day>)
125
+ **Stated brief was wrong/right because:** <delta, with evidence>
126
+ **Implication for build:** <thin-slice direction>
127
+ **Validated with:** <who, when>
128
+ ```
129
+
130
+ **`terrain.md`** - the map every later phase loads:
131
+ ```markdown
132
+ # Terrain
133
+ **Stack:** <lang/framework/build, age>
134
+ **Hotspots (handle with care):** <file - churn n/90d - tests: none/weak/ok - why it matters>
135
+ **AI components:** <file - model - fallback? - observability?>
136
+ **Data flow:** <entry → transform → store → exit>
137
+ **Test landscape:** <covered / gaps / lies>
138
+ **Unknowns:** <named explicitly - an honest gap beats a confident guess>
139
+ ```
140
+
141
+ Every line carries its evidence. `(churn: 47/90d)` `(ops lead, Day 5)` `(stated, unverified)`.
142
+
143
+ ## Checkpoint (before any build)
144
+
145
+ Present to the FDE, four things, one paragraph each - no padding:
146
+ 1. The real problem, with the two strongest pieces of evidence.
147
+ 2. The top 3 risk areas of the codebase, one line of why each.
148
+ 3. What must not be touched without characterisation tests.
149
+ 4. The recommendation: confirm brief / descope / rescope - and the decision it puts in front of the sponsor.
150
+
151
+ If discovery revealed the problem is 3× the brief: the FDE tells the customer **before** telling themselves it's manageable. Lead with evidence, offer three paths (descope / rescope / pause-and-plan), confirm any reset in writing - update `success.md` and `brief.md` before continuing.
152
+
153
+ ## If you've formed three wrong reads
154
+
155
+ Stop. Don't form a fourth hypothesis. Three disproven reads means the brief is actively misleading - usually the person who briefed doesn't know, or knows and can't say. Change method: stop analysing the system, ask three people separately "if you had to bet on what's actually wrong here, what would you say?" The thing they all hesitate before saying is the real problem.
156
+
157
+ ## Principles
158
+
159
+ - The brief is a hypothesis until evidence confirms it.
160
+ - The workaround is more honest than the requirements document.
161
+ - Churn data + the human's "don't touch that" pointing at the same module = the map is true.
162
+ - Never modify code before the terrain map exists.
163
+ - Scan wide, read deep only on hotspots.
@@ -0,0 +1,108 @@
1
+ # exec-narrative - the story that gets the next phase funded
2
+
3
+ **Enter when:** the sponsor's boss needs a summary, a board update mentions the engagement, the FDE needs to justify continued investment, or a quarterly review is approaching.
4
+
5
+ **Read first:** `delivery.md`, `success.md`, `reality.md`, `risks.md`, `stakeholders.md`, `context.md`. The narrative is built from the engagement record, not from memory.
6
+
7
+ Technical FDEs lose renewals by presenting work instead of outcomes. The exec doesn't want to know what was built - they want to know what it changed. A good exec narrative takes 60 seconds to deliver and survives hostile questions.
8
+
9
+ ## Method (you do this work)
10
+
11
+ **1. The Pyramid Principle.** One governing thought, supported by three arguments, each backed by evidence. The exec hears the conclusion first, not the journey:
12
+
13
+ ```
14
+ GOVERNING THOUGHT: (one sentence - the conclusion)
15
+ "The payment processing overhaul cut manual reconciliation from
16
+ 3 FTEs to 0.5 FTE and eliminated the $2M annual audit risk."
17
+
18
+ SUPPORT 1: What was done (one paragraph)
19
+ → Evidence from delivery.md
20
+
21
+ SUPPORT 2: What it saved (quantified)
22
+ → Evidence from business-case.md + delivery.md
23
+
24
+ SUPPORT 3: What's next (the ask)
25
+ → Evidence from decisions.md + risks.md
26
+ ```
27
+
28
+ **2. Four narrative lengths.** The same story, scaled for the context:
29
+
30
+ | Length | When | Format |
31
+ |--------|------|--------|
32
+ | **30 seconds** | Elevator, hallway, Slack thread | The governing thought + one number |
33
+ | **2 minutes** | Stand-up, exec check-in | Governing thought + 3 supports + the ask |
34
+ | **10 minutes** | Quarterly review, steering committee | Full pyramid + hard questions answered + visual |
35
+ | **60 minutes** | Board presentation, transformation review | Full pyramid + demos + deep-dive appendix |
36
+
37
+ Write all four. The FDE will need different lengths at different moments - having them pre-written means they're never caught improvising.
38
+
39
+ **3. The opening frame - SCQA.** Structure the first 30 seconds:
40
+
41
+ | Element | Purpose | Example |
42
+ |---------|---------|---------|
43
+ | **Situation** | Where we are (shared context) | "We started this engagement to fix the payment failures that were costing $200K/month in manual reconciliation." |
44
+ | **Complication** | What changed or what's at stake | "The problem was deeper than expected - the reconciliation failures traced to a data integrity issue in the core ledger." |
45
+ | **Question** | The decision the exec needs to make | "Should we extend the engagement to fix the root cause, or ship the workaround?" |
46
+ | **Answer** | Your recommendation | "Fix the root cause. The workaround adds $40K/year in maintenance and doesn't eliminate the audit risk." |
47
+
48
+ **4. Value in their units.** Translate every technical achievement:
49
+
50
+ | What you did (internal) | What it means (their units) |
51
+ |------------------------|---------------------------|
52
+ | Reduced p95 latency from 3s to 200ms | Customers complete checkout 15x faster |
53
+ | Added test coverage from 12% to 78% | Change failure rate dropped from 40% to 5% |
54
+ | Migrated from monolith to three services | Team can deploy independently - shipping frequency from monthly to weekly |
55
+ | Built ML fraud detection | $1.2M/year in fraud losses reduced to <$200K projected |
56
+
57
+ Never: "we refactored the authentication module." Always: what the refactoring *did* for them.
58
+
59
+ **5. Pre-wire the hostile questions.** Before any exec presentation, write the five toughest questions and one-line answers:
60
+
61
+ ```markdown
62
+ ## Hard questions - <presentation date>
63
+ 1. "Why did this take longer than estimated?"
64
+ → The original brief assumed API-only work; discovery revealed a database integrity issue. We surfaced it in week 2 instead of shipping a patch that would have required rework.
65
+
66
+ 2. "How do we know it won't break again?"
67
+ → Three guards: automated reconciliation check (runs daily), alerting on drift >0.1%, and the characterisation test suite covering the 12 failure modes we found.
68
+
69
+ 3. "What happens when the FDE leaves?"
70
+ → Handoff document written for the 2am scenario. The team ran the runbook independently last Thursday - no callbacks.
71
+
72
+ 4. "Why should we fund phase 2?"
73
+ → Phase 1 addressed the bleeding. Phase 2 eliminates the root cause. Without it: $40K/year maintenance on the workaround + the audit risk remains.
74
+
75
+ 5. "Can the internal team do phase 2 without you?"
76
+ → They can, with 2x the timeline. The value of an FDE in phase 2 is speed - the patterns are established and the trust with the ledger team is built.
77
+ ```
78
+
79
+ **6. The one number.** Every exec narrative needs a single memorable quantity:
80
+
81
+ - "31 spreadsheet rows to zero"
82
+ - "p95 held at 180ms"
83
+ - "$200K monthly risk retired"
84
+ - "Time-to-deploy from 4 hours to 12 minutes"
85
+
86
+ The number should appear in the first 30 seconds and be the thing they repeat to *their* boss.
87
+
88
+ ## Artifact
89
+
90
+ **`delivery.md`** - append under `## Exec narrative - <date>`:
91
+ - The four narrative lengths (30s, 2min, 10min, 60min)
92
+ - The SCQA frame
93
+ - The hard-question sheet
94
+ - The one number
95
+
96
+ **`context.md`** - note: exec narrative prepared, presentation date, what must be updated before delivery.
97
+
98
+ ## Checkpoint
99
+
100
+ Dry-run the 2-minute version with the FDE. Confirm: the one number lands in the first 30 seconds, the SCQA frame answers "why now," and the hardest question has a prepared answer. If the FDE can't deliver the 30-second version from memory, simplify.
101
+
102
+ ## Principles
103
+
104
+ - Conclusion first, evidence second. The exec decides in the first 30 seconds.
105
+ - Value in their units. Never present work; present outcomes.
106
+ - One number per narrative. The room remembers one thing - make it the right thing.
107
+ - Pre-wire every hostile question. Surprise in an exec meeting is a trust withdrawal.
108
+ - Write all four lengths. The FDE will need them at different moments.
@@ -0,0 +1,48 @@
1
+ # fintech overlay - money moves, failures are silent
2
+
3
+ **Activate when you hear:** payments, transfers, settlements, reconciliation · PCI-DSS, PSD2, SOX, open banking, SWIFT · banking, lending, insurance, trading, crypto · "we handle money" in any form. Loads **alongside** the active phase, never instead of it.
4
+
5
+ **Read first:** `trust-profile.md` always - data classification and AI policy before any action. `terrain.md` only when reviewing transaction/cardholder code.
6
+
7
+ Financial systems carry a failure class others don't: **silent money loss.** A bug that processes a payment twice or drops a transaction is regulatory breach + customer harm + potential criminal liability, not a defect ticket.
8
+
9
+ ## The first conversation
10
+
11
+ > "Does this system store, process, or transmit cardholder data? What's the current PCI-DSS compliance level?"
12
+
13
+ Cardholder data = PAN, CVV, PIN, expiry. PAN never stored post-authorisation without explicit business case + encryption + masking (last 4 only). **Full PANs in logs, analytics events, or error messages is the first finding and outranks everything else.** Tag all cardholder scope in `trust-profile.md` under `<private>`.
14
+
15
+ ## Idempotency - the most common silent failure
16
+
17
+ Same operation twice must equal once. Retries, network failures, double-clicks all duplicate requests; without idempotency that's double charges and phantom credits. On any code that creates transactions, verify:
18
+ - An idempotency key on every write operation
19
+ - Key checked **before** processing, not after
20
+ - Retries reuse the same key, never a new one
21
+
22
+ Missing from a payment flow → flag before production. "We'll add it later" has caused real customer harm in every fintech that said it.
23
+
24
+ ## Transaction integrity
25
+
26
+ Atomic or nothing. A transfer that debits A and fails before crediting B is a financial error that may require regulatory reporting, not a technical error. Verify: DB-level transactions wrap the operations · compensating transactions exist · **the reconciliation path can catch a discrepancy at midnight.**
27
+
28
+ ## Fraud and reporting - surface early
29
+
30
+ > "What fraud signals does this system monitor, and what happens when a transaction is flagged?"
31
+
32
+ Immaturity markers: no velocity checks, no geographic anomaly detection, a review queue nobody actions, a manual override bypassing all controls. The engagement needn't build fraud detection - it must know what exposure the gaps leave. Same for regulatory reporting (CTR/SAR thresholds): manual reporting that relies on memory is a compliance risk; verify changes don't break automated reporting.
33
+
34
+ ## AI in financial systems
35
+
36
+ Regulators commonly require **explainability** for automated decisions (credit, fraud, account actions). Before any AI-driven decision ships: explainability requirement for this jurisdiction confirmed · right-to-explanation satisfiable · decisions logged with input features. Some institutions prohibit AI final decisions on regulated activities - check `trust-profile.md` first.
37
+
38
+ ## Writes
39
+
40
+ `trust-profile.md` - cardholder scope, PCI level, AI policy, reporting obligations. `risks.md` - idempotency gaps, integrity issues, fraud-control gaps, compliance exposure.
41
+
42
+ ## Principles
43
+
44
+ - Idempotency is not optional.
45
+ - Full PANs in logs = immediate flag.
46
+ - Atomic or nothing; partial transaction states are financial errors.
47
+ - If midnight reconciliation can't catch it, there is no financial integrity.
48
+ - AI on regulated decisions needs explainability and an audit trail before build.
@@ -0,0 +1,47 @@
1
+ # government overlay - classification first, everything second
2
+
3
+ **Activate when you hear:** federal/state agency, military, intelligence · FedRAMP, FISMA, NIST 800-53, CMMC, ITAR · ATO, SSP · CUI or classified data · contractor handling government data. Loads **alongside** the active phase.
4
+
5
+ **Read first:** `trust-profile.md` always - classification level and clearance requirements before any action.
6
+
7
+ Government runs on statutory authority, multi-year procurement, clearances, and classification regimes where one mishandled file is a federal offence. Slower by design; security stakes higher than any commercial engagement.
8
+
9
+ ## The first conversation
10
+
11
+ > "What is the classification level of the data this system handles? Is there a System Security Plan I should read before we start?"
12
+
13
+ - **Unclassified** - no special handling. **CUI** - NIST 800-171 handling. **Secret/Top Secret** - clearances, air-gap, need-to-know.
14
+ - CUI or above constrains everything: which tools are allowed, where code is written, **whether AI assistance is permitted at all**, who can see what. Tag in `trust-profile.md` under `<private>` immediately. If the SSP doesn't exist, that's the first finding - a system without a security plan can't get an ATO.
15
+
16
+ ## ATO - the constraint nobody warns about
17
+
18
+ > "Is this system operating under an ATO, or does this work require a new one?"
19
+
20
+ A new ATO = months to years (Security Assessment Report, POA&M, Continuous Monitoring) - the delivery timeline just changed; plan around it in week one. Existing ATO: new external connections, auth changes, new data stores, or boundary changes can trigger re-assessment.
21
+
22
+ ## FedRAMP and sovereignty
23
+
24
+ Cloud services holding federal data must be FedRAMP-authorised **at the right level** (Moderate ≠ High) - verify at fedramp.gov/marketplace. **This includes AI services: most commercial AI APIs are not FedRAMP-authorised - possibly including the assistant in use. Check the policy before processing any federal data.** Residency: data, backups, DR replicas, and third-party routes stay inside the required boundary.
25
+
26
+ ## Controls and clearance
27
+
28
+ NIST 800-53 baseline by impact level (CUI+ → Moderate, 325+ controls). The engagement doesn't implement them all - it knows which controls its changes touch. Common in dev work: AC-2 (account management), AU-2 (audit events), CM-7 (least functionality), SI-10 (input validation).
29
+
30
+ > "Does this work require a security clearance, at what level?"
31
+
32
+ Required and not held → adjust scope to the unclassified components; be explicit about the boundary.
33
+
34
+ ## Procurement
35
+
36
+ New tools or vendors may need months of procurement. Contracting officers (CO/COR) approve scope changes - not the program manager. Identify tool additions early.
37
+
38
+ ## Writes
39
+
40
+ `trust-profile.md` - classification, ATO status, AI policy, clearance, FedRAMP constraints. `risks.md` - ATO gaps, FedRAMP violations, residency risks, control gaps.
41
+
42
+ ## Principles
43
+
44
+ - Classification level determines tools, process, and people. Ask first.
45
+ - ATO timelines are delivery timelines. Week one, not week ten.
46
+ - FedRAMP is a gate, not a formality - for AI tools too.
47
+ - No SSP = first finding.
@@ -0,0 +1,139 @@
1
+ # handoff-engineering - making yourself replaceable is the goal
2
+
3
+ **Enter when:** the engagement is entering its final phase, the customer team needs to operate without the FDE, a new FDE is taking over, or the sponsor asks "what happens when you leave?"
4
+
5
+ **Read first:** `delivery.md`, `terrain.md`, `reality.md`, `decisions.md`, `context.md`, `stakeholders.md`. The handoff is built from the full engagement record. Load `trust-profile.md` for operational boundaries.
6
+
7
+ The mark of a great FDE engagement is that the team can operate without you. A handoff that requires a callback in six weeks means the engagement didn't end - it paused. Handoff engineering is deliberate: it's designed, tested, and verified before the last day.
8
+
9
+ ## Method (you do this work)
10
+
11
+ **1. The handoff inventory.** Everything the team needs to operate, categorised:
12
+
13
+ | Category | What to hand off | Test: can they do it alone? |
14
+ |----------|-----------------|---------------------------|
15
+ | **Code knowledge** | Architecture decisions (`decisions.md`), why the code is shaped the way it is | Team member can explain the three most important design decisions |
16
+ | **Operational** | Deploy, rollback, incident response, monitoring | Team member runs the deploy and rollback procedure independently |
17
+ | **Tribal** | The things only you know - the workaround, the contact, the context | Written in `handoff.md` and reviewed with the person who'll carry it |
18
+ | **Political** | Stakeholder dynamics, approval chains, who to call when | Documented in `stakeholders.md` with signal history |
19
+ | **Data/AI** | Model versions, retraining triggers, drift monitoring, fallback paths | Owner named for each AI component; kill switch documented |
20
+
21
+ **2. The 2am document.** Written for the person woken up on a Saturday night with zero context:
22
+
23
+ ```markdown
24
+ # Operations runbook - <system name>
25
+
26
+ ## The 3 things that will break (and the fix for each)
27
+
28
+ ### 1. <most likely failure>
29
+ Symptom: <what they'll see>
30
+ Cause: <most likely why>
31
+ Fix: <exact steps, copy-pasteable commands>
32
+ Who to call if this doesn't fix it: <name, contact>
33
+
34
+ ### 2. <second most likely failure>
35
+ ...
36
+
37
+ ### 3. <third most likely failure>
38
+ ...
39
+
40
+ ## Deploy
41
+ Command: <exact command>
42
+ Time: <how long it takes>
43
+ Verify: <how to confirm it worked>
44
+ Rollback: <exact command and expected time>
45
+
46
+ ## Alerts
47
+ | Alert | Means | Do this |
48
+ |-------|-------|---------|
49
+ | <alert name> | <plain English> | <action or link to detailed runbook> |
50
+
51
+ ## Contacts
52
+ | Who | When to call | How |
53
+ |-----|-------------|-----|
54
+ | <name> | <scenario> | <phone/slack/email> |
55
+ ```
56
+
57
+ **3. The knowledge transfer sessions.** Not a document dump - three structured sessions:
58
+
59
+ | Session | Focus | Attendees | Duration | Output |
60
+ |---------|-------|-----------|----------|--------|
61
+ | **Architecture walkthrough** | Why, not what. The decisions, the trade-offs, the things that almost went wrong. | Full team | 60–90 min | Recording + Q&A log |
62
+ | **Operational drill** | Deploy, rollback, incident response. They do it, you watch. | On-call team | 60 min | Drill report with confidence level |
63
+ | **Edge-case handover** | The things that aren't in any document. The workarounds, the fragile spots, the "ask Sarah because she's the only one who knows." | Team lead + 1 | 30 min | Additions to `handoff.md` |
64
+
65
+ **4. The confidence check.** After the knowledge transfer, score the team's readiness:
66
+
67
+ | Area | Confidence (1–5) | Evidence |
68
+ |------|------------------|----------|
69
+ | Daily operations | | Can they deploy and rollback without help? |
70
+ | Incident response | | Did they complete the drill within acceptable time? |
71
+ | Architecture decisions | | Can they explain why the system is built this way? |
72
+ | AI components (if any) | | Do they know how to monitor, retrain, and disable? |
73
+ | Stakeholder management | | Do they know who to update and how? |
74
+
75
+ **Average below 3.5 → the handoff is not complete.** Extend if possible; if not, document the gaps and name the risk.
76
+
77
+ **5. The successor brief.** If a new FDE is taking over, write a brief that gets them operational in one hour:
78
+
79
+ ```markdown
80
+ # Successor brief - <engagement name>
81
+
82
+ ## In 30 seconds
83
+ <The real problem, the solution, where it stands>
84
+
85
+ ## Read these files first
86
+ 1. context.md - current state
87
+ 2. reality.md - the real problem (not the brief)
88
+ 3. decisions.md - what was decided and why
89
+ 4. stakeholders.md - who matters and their current signal
90
+ 5. risks.md - what's dangerous right now
91
+
92
+ ## The three things I wish I'd known on day one
93
+ 1. <thing>
94
+ 2. <thing>
95
+ 3. <thing>
96
+
97
+ ## The one thing that will bite you
98
+ <specific warning>
99
+ ```
100
+
101
+ **6. The clean exit.** Before the last day:
102
+
103
+ - [ ] All access returned or transferred (repos, environments, admin panels)
104
+ - [ ] No personal credentials left in the system (API keys, tokens, SSH keys)
105
+ - [ ] `.fde/` folder handed to the successor or archived with the team
106
+ - [ ] Final status sent to sponsor (see `status.md`)
107
+ - [ ] Retrospective completed (see `close.md`)
108
+ - [ ] Patterns extracted (see `pattern-extract.md`)
109
+
110
+ ## Artifact
111
+
112
+ **`handoff.md`** - the 2am document + the operational inventory. The most important file the engagement produces after the code itself.
113
+
114
+ **`context.md`** - final update: engagement status, handoff confidence, named gaps.
115
+
116
+ ## Checkpoint
117
+
118
+ The acid test: "Can the team run this system for 30 days without calling you?" If yes → handoff complete. If no → name exactly what's missing, and either fix it or document the risk for the sponsor.
119
+
120
+ ## The permanent crutch anti-pattern
121
+
122
+ Warning signs you've become a dependency instead of a deliverer:
123
+ - The team defers decisions until you're in the room
124
+ - "Can you just stay one more month?" (translation: the handoff hasn't started)
125
+ - You're the only person who's run the deploy or the rollback
126
+ - The sponsor introduces you as "part of the team" in month 4
127
+ - The customer calls you within a week of "close"
128
+
129
+ If you see 2+: accelerate the handoff immediately. The longer you stay past usefulness, the harder it is for the team to believe they can operate alone. A great FDE engagement ends with the team forgetting they needed you.
130
+
131
+ ## Principles
132
+
133
+ - The goal of every engagement is to make yourself replaceable.
134
+ - The 2am document is the real handoff - everything else supports it.
135
+ - Knowledge transfer is three sessions, not a doc dump.
136
+ - A confidence score below 3.5 means the handoff isn't done.
137
+ - The successor brief gets the next FDE operational in one hour or it's too long.
138
+ - Clean exit: no personal credentials left behind, ever.
139
+ - If you're still indispensable after close, the engagement failed on the most important criterion.
@@ -0,0 +1,45 @@
1
+ # healthcare overlay - PHI ends licences
2
+
3
+ **Activate when you hear:** patient records, EHR/EMR, clinical data · HIPAA, HITECH, HL7, FHIR · hospital, clinic, payer, pharma · "we handle patient data," even informally. Loads **alongside** the active phase.
4
+
5
+ **Read first:** `trust-profile.md` always - PHI classification and AI policy before any action. `terrain.md` only when reviewing patient-data code.
6
+
7
+ A PHI breach can end an operating licence; an audit-trail gap can invalidate a clinical trial; a model trained on patient data without consent can trigger federal investigation.
8
+
9
+ ## The first conversation
10
+
11
+ > "Walk me through what patient data this system touches, stores, transmits - and who has access."
12
+
13
+ PHI is broader than names: IPs, device identifiers, sub-state geography, and dates (other than year) can all qualify in context. When in doubt, treat as PHI. Tag everything in `trust-profile.md` under `<private>` - **PHI never enters AI context in plaintext: not prompts, not test fixtures, not dev logs.**
14
+
15
+ ## AI policy before a single line
16
+
17
+ > "Does your organisation have a policy on AI tools accessing patient data? Is there a BAA covering the tools we're using?"
18
+
19
+ Unclear answer = treat as prohibited until confirmed. Asking costs zero; guessing wrong is catastrophic.
20
+
21
+ ## Audit trails - non-negotiable
22
+
23
+ Every action on PHI logged: who, what, when, from where (HIPAA Security Rule). On any PHI-touching code verify: identity+timestamp+action logged · logs immutable to application code · audit logs separate from app logs · retention ≥ 6 years. **No audit trail + a request to build a PHI feature → the audit trail gets built first.**
24
+
25
+ ## Break-glass
26
+
27
+ Clinical systems need emergency override (a clinician must reach a record even when auth fails). Every break-glass event must **alert and trigger review**, not just log; verify it can't be silently disabled.
28
+
29
+ ## Minimisation, consent, encryption
30
+
31
+ - Store the minimum PHI for the purpose; if de-identified data answers the question, use it. De-identification = HIPAA Safe Harbor's 18 identifiers - a legal definition, not a judgment call.
32
+ - Data collected for one purpose can't serve another without consent - **including model training.** A model trained on records without explicit consent is immediate legal exposure.
33
+ - Minimums: TLS 1.2+ in transit (1.3 preferred), AES-256 at rest, keys managed separately. Check `trust-profile.md` for stricter local rules.
34
+
35
+ ## Writes
36
+
37
+ `trust-profile.md` - PHI scope, AI policy, consent coverage, BAA status. `risks.md` - compliance gaps with severity and remediation path.
38
+
39
+ ## Principles
40
+
41
+ - PHI never enters AI context in plaintext.
42
+ - Audit trails before features.
43
+ - Unclear AI policy = prohibited until confirmed.
44
+ - De-identification is a legal definition (18 identifiers).
45
+ - Break-glass must alert, not just log.
@@ -0,0 +1,91 @@
1
+ # incremental-build - thin slices on someone else's codebase
2
+
3
+ **Enter when:** the build task is larger than a single PR, multiple files or systems are involved, or the FDE needs to show visible progress to a stakeholder every 2–3 days.
4
+
5
+ **Read first:** `decisions.md` (the plan), `terrain.md` (the danger zones), `context.md`. This skill works *inside* the build phase - it's the execution discipline that makes large features safe on codebases you don't own.
6
+
7
+ The FDE who builds a 2,000-line feature in one PR gets it rejected. The FDE who ships five 200-line PRs - each reviewable, testable, and revertible - earns the team's trust. On someone else's codebase, small and visible beats clever and large.
8
+
9
+ ## Method (you do this work)
10
+
11
+ **1. Slice vertically, never horizontally.**
12
+
13
+ ```
14
+ BAD (horizontal):
15
+ PR 1: Build all database models
16
+ PR 2: Build all API endpoints
17
+ PR 3: Build all UI components
18
+ PR 4: Wire everything together (and pray)
19
+
20
+ GOOD (vertical):
21
+ PR 1: User can create a payment (schema + endpoint + minimal UI) - testable
22
+ PR 2: User can view payment status (query + endpoint + UI) - testable
23
+ PR 3: Payment retry on failure (logic + endpoint + UI feedback) - testable
24
+ PR 4: Admin can void a payment (auth + logic + UI) - testable
25
+ ```
26
+
27
+ Each vertical slice delivers working functionality the customer can see. Each slice is independently revertible.
28
+
29
+ **2. The slice checklist.** Before starting any slice:
30
+
31
+ - [ ] Slice is in `decisions.md` with acceptance criteria (happy + unhappy path)
32
+ - [ ] Blast radius declared: which files, which systems, which users affected
33
+ - [ ] Rollback path identified: "revert this PR" or something more specific
34
+ - [ ] No dependency on an unmerged slice (if dependent, state it and merge in order)
35
+
36
+ **3. The implementation loop.** For each slice, in this order:
37
+
38
+ ```
39
+ Read existing code in the area (search before creating)
40
+ → Write characterisation tests for what's there (if legacy)
41
+ → Implement the minimal working path
42
+ → Verify with evidence (tests + typecheck + smallest proving run)
43
+ → Cleanup pass (dedupe, simplify - behaviour unchanged)
44
+ → Self-review against acceptance criteria
45
+ → Commit with descriptive message
46
+ → Update decisions.md + delivery.md
47
+ ```
48
+
49
+ **4. Size discipline.** Each slice targets:
50
+
51
+ | Metric | Target | Why |
52
+ |--------|--------|-----|
53
+ | Lines changed | 100–300 | Reviewable in one sitting |
54
+ | Time to implement | 30–90 minutes | Testable before context decays |
55
+ | Files touched | 1–5 | Blast radius stays containable |
56
+ | Tests added | ≥1 per new behaviour | Proves the slice works; guards against regression |
57
+
58
+ A slice larger than 300 lines → split before implementing. "It's all connected" means the design needs work, not the slice limit.
59
+
60
+ **5. Stakeholder visibility rhythm.** Every 2–3 slices, something the customer can see:
61
+
62
+ - A working endpoint they can hit
63
+ - A UI change they can click
64
+ - A metric that moved
65
+ - A risk that was retired
66
+
67
+ Technical progress invisible to stakeholders is trust decay. `delivery.md` gets updated after every visible slice.
68
+
69
+ **6. The scope trap.** Mid-slice discoveries - "this module also needs updating," "I should refactor this while I'm here":
70
+
71
+ - If it's in `decisions.md`: do it as a separate slice.
72
+ - If it's NOT in `decisions.md`: log it as a scope receipt (see `scope-defense.md`), don't touch it.
73
+ - The hardest discipline: leaving ugly code alone when it's not in your slice.
74
+
75
+ ## Artifact
76
+
77
+ **`decisions.md`** - each slice logged with: what was implemented, what was tested, what was deferred.
78
+
79
+ **`delivery.md`** - each visible slice with business-language description of what it delivers.
80
+
81
+ ## Checkpoint
82
+
83
+ After each slice: tests pass (state the command and result), acceptance criteria met, blast radius as declared. After every 2–3 slices: stakeholder visibility confirmed - what did they see, and what's their signal?
84
+
85
+ ## Principles
86
+
87
+ - Vertical slices, always. Horizontal layers are untestable until assembled.
88
+ - 100–300 lines per slice. Larger means split first.
89
+ - Every slice is independently revertible. If it isn't, the design is coupled.
90
+ - Visible progress every 2–3 slices. Technical progress alone is trust decay.
91
+ - The ugly code outside your slice stays ugly. That's discipline, not laziness.