fdeops 5.1.10 → 5.1.12

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 (43) hide show
  1. package/README.md +16 -14
  2. package/bin/check.js +5 -5
  3. package/bin/fde.js +19 -2
  4. package/bin/lib/follow-through.js +41 -0
  5. package/mcp/fdeops-ingest/package.json +1 -1
  6. package/package.json +1 -1
  7. package/plugin.json +1 -1
  8. package/skills/brief/.fde-generated.json +1 -1
  9. package/skills/brief/references/land.md +3 -1
  10. package/skills/build/.fde-generated.json +1 -1
  11. package/skills/build/references/build.md +1 -1
  12. package/skills/debug/.fde-generated.json +1 -1
  13. package/skills/debug/references/build.md +1 -1
  14. package/skills/evaluate/.fde-generated.json +1 -1
  15. package/skills/evaluate/references/build.md +1 -1
  16. package/skills/fde/SKILL.md +6 -2
  17. package/skills/fde/references/build.md +1 -1
  18. package/skills/fde/references/close.md +20 -11
  19. package/skills/fde/references/encode-pattern.md +6 -8
  20. package/skills/fde/references/hold-scope.md +9 -5
  21. package/skills/fde/references/land.md +3 -1
  22. package/skills/feedback/.fde-generated.json +1 -1
  23. package/skills/feedback/references/encode-pattern.md +6 -8
  24. package/skills/handoff/.fde-generated.json +3 -2
  25. package/skills/handoff/references/close.md +20 -11
  26. package/skills/handoff/references/encode-pattern.md +6 -8
  27. package/skills/handoff/references/land.md +138 -0
  28. package/skills/integrate/.fde-generated.json +1 -1
  29. package/skills/integrate/references/build.md +1 -1
  30. package/skills/poc/.fde-generated.json +1 -1
  31. package/skills/poc/references/build.md +1 -1
  32. package/skills/qa/.fde-generated.json +1 -1
  33. package/skills/qa/references/build.md +1 -1
  34. package/skills/review/.fde-generated.json +1 -1
  35. package/skills/review/references/build.md +1 -1
  36. package/skills/runbook/.fde-generated.json +3 -2
  37. package/skills/runbook/references/close.md +20 -11
  38. package/skills/runbook/references/encode-pattern.md +6 -8
  39. package/skills/runbook/references/land.md +138 -0
  40. package/skills/scope/.fde-generated.json +1 -1
  41. package/skills/scope/references/hold-scope.md +9 -5
  42. package/skills/ship/.fde-generated.json +1 -1
  43. package/skills/ship/references/build.md +1 -1
@@ -0,0 +1,138 @@
1
+ # land - Interrogate the brief
2
+
3
+ **Enter when:** new customer, first meeting, just got the brief, nothing started yet, or an old or closed project is reopening.
4
+
5
+ **Read first:** apply [task context](task-context.md), then permitted `context.md` evidence if it exists and the supplied brief. Once the engagement type and AI/access policy are known, inspect the supplied repo/docs relevant to the ask before asking questions they can answer. This is a bounded evidence check, not a full discovery scan.
6
+
7
+ ## Validation gate (confirm understanding, clarify where it elevates)
8
+
9
+ Before landing, state what you know in 2-3 lines:
10
+
11
+ > "New engagement: [client name]. Timeline: [days/weeks/months or 'not clear yet']. Starting with: [what the FDE has told you so far - the brief, the context, the ask]."
12
+
13
+ Then check - probe ONLY if it prevents a bad start:
14
+
15
+ 1. **Engagement speed.** If timeline is unclear → weave it in naturally: "Is this days, weeks, or months? That shapes how much structure we set up now."
16
+ 2. **Existing context.** If `.fde/` already exists → one line: "There's existing engagement memory here. Continuing this or starting fresh?"
17
+ 3. **Access.** If the FDE is about to start work → one line: "Got repo and environment access sorted, or is that still pending?"
18
+
19
+ State your read, let the FDE correct, then land.
20
+
21
+ **Reopening an old or closed project:** after the privacy-safe context check, use `fde recall <topic>` for relevant client patterns, retrospectives, and prior decisions. Treat old evidence as historical. Before dependent action, recheck current AI/data policy, access, decision and operating owners, and the deployed revision against current permitted evidence. Record changes and unknowns; an old approval or successful drill does not establish present authority or readiness. Continue independent preparation while material gaps are resolved.
22
+
23
+ ## Brief interrogation (only when the brief is thin)
24
+
25
+ Use this when the ask is conventional or underspecified - missing who decides, why now, what success looks like, or the binding constraint. **Do not** run it when the FDE already gave a clear brief, is mid-flow, or asked for speed over verification.
26
+
27
+ Format - one question at a time, with a guess the FDE can correct:
28
+
29
+ ```
30
+ READ: <one sentence - what you think they actually need>
31
+ MISSING: <fact or authority that changes the next action>
32
+ Q: <one focused question>
33
+ POSSIBLE READ: <clearly labeled interpretation, if useful; never guessed authority>
34
+ ```
35
+
36
+ Wait for the reaction before the next question. Stop when the next authorized action is clear, or when the FDE says move on; unanswered material gaps remain visible. Every answer that is still unknown stays `unknown - ask:` in the artifact - never fill the gap with a plausible stakeholder.
37
+
38
+ ## Method - part 1: interrogate the brief (you do this work)
39
+
40
+ Read the brief the FDE gives you. Separate **observed** (source/path and date), **reported** (who said it), and **hypothesis** (how to test it). A requested solution such as “build an agent” is not evidence of the cause. Ask only about gaps that change scope, access, acceptance, or the next investigation. What is **not** in the brief matters as much as what is. Produce the gap list yourself:
41
+
42
+ - **No named decision-maker** → identify who or what can accept the outcome and the source of that authority; keep it unknown until established.
43
+ - **"Straightforward cleanup" on an 8-year-old system** → inspect permitted relevant history and tests for prior attempts and constraints; age alone proves neither complexity nor a previous failure.
44
+ - **Very tight timeline** → establish the deadline, its source and which commitments are actually agreed.
45
+ - **No out-of-scope section** → clarify material boundaries against the existing agreement. An omission does not authorize additional work.
46
+
47
+ Write these into `brief.md` as **questions to answer**, not problems - they're what the FDE is walking in to resolve.
48
+
49
+ Pre-arrival checks to run through with the FDE:
50
+ - Access confirmed for the next task? Repo, environment and docs may have different permissions; identify gaps before dependent work.
51
+ - Has someone tried this before? Establish what happened and what evidence remains; do not assume the attempt failed.
52
+ - Other vendors/teams in scope? Then the FDE is not the only one in the room, even when alone in the meeting.
53
+ - Tech stack recon: job postings, GitHub org - know the stack before they say it.
54
+
55
+ ## Method - part 2: the first conversation (you coach, the FDE asks)
56
+
57
+ Intent: coach the FDE's first *customer* conversation - what keeps the sponsor up at night, personally, not the project charter. You already inspected the supplied brief and any authorized repo/docs. This is before *their* laptop in the room / before a deep build, not before you read evidence. Failure talk surfaces truth faster than "requirements." Angles in the FDE's own words:
58
+
59
+ - "Before you open the laptop - what would make this a bad engagement for *them*, not just a delayed project?"
60
+ - "What are they afraid you'll miss?"
61
+ - "Who loses credibility if this goes wrong?"
62
+ - "If nothing changes over the agreed timeframe, what happens, and who bears it?" Record the consequence and its source in `brief.md`; distinguish reported impact from measured cost. Unknown cost stays unknown, not an invented ROI.
63
+
64
+ Allow time for an answer. If a stated concern differs from the brief, record the difference and clarify whether it changes the agreed outcome; neither statement automatically supersedes the other.
65
+
66
+ **Listen for, and capture as you hear it:**
67
+ - **Decision rights** - who can approve scope, accept the result and authorize release, as relevant. A frequently mentioned person may be influential; confirm their actual authority and scope.
68
+ - **The previous attempt** - "we tried something similar last year" identifies evidence to investigate. Who was involved, what happened, and which constraints still apply? Do not infer why someone left.
69
+ - **The existing internal team** - ask what they tried, what they know and what they expect to own. Use established terminology and credit their work. Do not assume resentment, displacement or complete knowledge of the problem.
70
+ - **The sacred thing** - "Is there anything in this environment I should treat as untouchable?" Capture the stated boundary and applicable policy; hesitation alone does not identify a restriction.
71
+ - **Exception path (operating map seed)** - "When the happy path breaks this week, what do people actually do - who do they call, what spreadsheet opens, what do they skip?" Capture the break → workaround → who owns it. Do not build a full map on day 1; seed rows later in `terrain.md` → `## Operating map (exception-led)` during discover. Unknowns stay `unknown - ask:`.
72
+ - **AI posture and policy** - tools already in use (sanctioned or shadow), and: "Does your organisation have a policy on AI-generated code? Are there decisions where you would not be comfortable with AI involvement?"
73
+ - **Future operator** - "Who will run this after we leave, and have they agreed?" Record the proposed operator and unresolved ownership in `success.md`, separately from the signer. A sponsor naming a team is not that team accepting responsibility; verify with the operator during discover.
74
+ - **Boundaries in multi-vendor rooms** - who owns what surface, who signs off before a change crosses it.
75
+
76
+ ## An early deliverable
77
+
78
+ Choose an early useful result within confirmed scope: a verified small fix, a permitted diagnostic, or a concise map of an unresolved problem. Reuse the existing outcome and authority for routine work. A first-day deadline does not grant deployment permission or waive verification; use `ship` for a release. If a missing signer blocks a consequential decision, keep it visible and continue independent preparation.
79
+
80
+ ## Artifact (write as the conversation is debriefed)
81
+
82
+ **`brief.md`** - what they said, who sent the FDE, the timeline, **and the gap list**.
83
+
84
+ **`success.md`** - what done looks like, **primary value bucket** (`cost-save` | `risk-mitigation` | `revenue-uplift`), baseline → target, who actually signs off, what is explicitly out of scope. Record agreement only with its source and scope; otherwise label the target proposed. For each baseline, record source, date/window, environment, and sample size when relevant. An operator recollection is reported, not measured. If no baseline exists, name the measurement owner and cheapest way to obtain it; do not manufacture a number.
85
+
86
+ For every target number, run the **gaming check** before it is written down: *how could this metric hit its target without the customer being any better off?* Identify plausible failure modes without predicting that the customer will exploit them. Write a relevant guard next to the metric:
87
+
88
+ ```markdown
89
+ | Metric | Baseline → target | Gamed by | Guard |
90
+ |--------|-------------------|----------|-------|
91
+ | reconciliation alert latency | 4h → 15min | alerting on everything, so nobody reads them | alerts acked by a named owner, ≤2/week |
92
+ ```
93
+
94
+ If a proposed guard is disputed, capture the stated reason and assess its cost and effect on the outcome. Do not infer that the customer values the number over the result.
95
+
96
+ **`stakeholders.md`**:
97
+ ```markdown
98
+ | Who | Role | Signal | Notes |
99
+ |-----|------|--------|-------|
100
+ | <name> | <observed participation role; authority recorded separately> | green/amber/red | <evidence, day> |
101
+ ```
102
+ If `stakeholders.md` already has a `## Signal history` section (it does from the template), **never delete or overwrite it** when you rewrite this file - it holds the dated `[signal:...]` tokens `fde log contact --signal` and `fde debrief` write, and `fde status`/`fde receipts`/the dashboard read only from that section. Edit the table above it freely; keep the section below intact.
103
+
104
+ **`trust-profile.md`** - sacred data (`<private>` tagged), fears heard, AI policy, approval chain. Sensitive: skip for status reads; use CLI/redacted surfaces; never paste raw `<private>` into prompts or subagents.
105
+
106
+ **`assumptions.md`** - seed consequential unverified claims from the brief (and the initial hypothesis) as rows with Kind `UNKNOWN` (or `CONVENTION` if they said "we always"), blast radius CRITICAL / LOAD-BEARING / CONVENIENCE, and status `OPEN`. Do not wait for test-assumptions - land makes the register exist. Example:
107
+
108
+ ```markdown
109
+ | # | Assumption | Kind | Blast radius | How we test | Status | Evidence |
110
+ |---|------------|------|--------------|-------------|--------|----------|
111
+ | 1 | <claim from brief> | UNKNOWN | CRITICAL | <cheapest falsifying test> | OPEN | (stated, unverified) |
112
+ ```
113
+
114
+ One falsifiable hypothesis about the real problem also goes at the bottom of `brief.md` - discover / test-assumptions will test it.
115
+
116
+ ## Checkpoint
117
+
118
+ One page back to the FDE: success + value bucket + sign-off owner, out-of-scope boundary, sacred data, stakeholder map with veto power, AI posture, the hypothesis, the top CRITICAL assumptions still OPEN, and any exception-path seeds heard (break → workaround → owner) for discover to map into `terrain.md`. Keep the summary short and link necessary detail; a complex engagement may need supporting evidence.
119
+
120
+ If remote: agree how progress and blockers will be shared; use a short call when asynchronous context is insufficient.
121
+
122
+ ## Worked example
123
+
124
+ Kickoff at Acme payments. Priya (VP Eng) sponsors; the brief says "add monitoring to the reconciliation service."
125
+
126
+ Asking what happens the week after a perfect delivery gets: "I stop hearing about it from finance." That suggests a concern to clarify alongside the monitoring request. The previous attempt surfaces too: the platform team built alerting last year, it was turned off. Raj, who built it, is still there and was not in the kickoff. Ask for his account of the earlier attempt; his absence does not explain his views.
127
+
128
+ In this example Priya reports a four-hour baseline and proposes the following target; her acceptance authority still needs its source. What gets written: `success.md` with proposed bucket `risk-mitigation`, `reconciliation failures reach a named owner within 15 min (baseline: 4h, found by finance)`, gaming check `alerting on everything so nobody reads them` → guard `≤2 alerts/week, acked by name`, proposed sign-off Priya until confirmed. `brief.md` carries the gap list and the hypothesis: *the job is not unmonitored, it is unowned*. `assumptions.md` seeds `"finance would act on an alert" - CRITICAL - OPEN - (stated, unverified)`. `trust-profile.md` records the boundary Priya explicitly names, through the permitted privacy-safe workflow.
129
+
130
+ Early deliverable: verify and fix the log line that swallows the job's exit code within the existing scope. Deployment remains subject to the established release authority and checks.
131
+
132
+ ## Principles
133
+
134
+ - Establish the outcome and authority needed for the next action; missing record files do not block useful standalone work.
135
+ - Sacred data tagged `<private>` stays out of model context: use CLI/redacted reads; never paste raw private blocks.
136
+ - Treat unverified parts of the brief as hypotheses; discovery may support or overturn them. Record consequential assumptions.
137
+ - Learn from the existing team and verify consequential claims without guessing motives.
138
+ - If the customer cannot define success, that is the first problem to solve.
@@ -4,7 +4,7 @@
4
4
  "files": {
5
5
  "SKILL.md": "544424180d2e924e21e98e94c1d6a35c067176ff9876f6c11415638e041f89f5",
6
6
  "agents/openai.yaml": "22b669e628e4401c6b042d17fca25f0259593d90a581e232816c140e788306ec",
7
- "references/hold-scope.md": "7779188df1d7f5aef9f878719499f9c0e974deba45289329ae8fa3d62e6c5090",
7
+ "references/hold-scope.md": "651ba25570401ceda8dc518d1037f1644ee09a0166609b93d437164e4dc45837",
8
8
  "references/task-context.md": "9066514a50043f3ad888d133d4e8b89b7132551e098cf2c80203c458a80126e5"
9
9
  }
10
10
  }
@@ -4,7 +4,7 @@
4
4
 
5
5
  **Enter when:** "also can you…" mid-build, a stakeholder adds requirements without adjusting timeline, the FDE feels scope creeping but can't name it, or `success.md` no longer matches what's being asked.
6
6
 
7
- **Read first:** `success.md` (the agreed boundary), `decisions.md`, `context.md`. Load `stakeholders.md` to know who's asking and their signal.
7
+ **Read first:** the supplied agreement, acceptance checks and request. In a bound engagement, retrieve the relevant `success.md`, `decisions.md`, `context.md` and decision authority. Missing records do not block a standalone recommendation; identify which boundary or authority remains unconfirmed.
8
8
 
9
9
  Small requests can accumulate into material changes to cost, timing or acceptance. Compare the request with the actual agreement before classifying it; an adjacent request may already be in scope, and a clarification is not automatically an addition.
10
10
 
@@ -66,13 +66,17 @@ Check cumulative impact against the agreed scope and remaining capacity. Recomme
66
66
 
67
67
  ## Worked example
68
68
 
69
- Acme, week 5. Nothing has been formally added, and the slice is a week late.
69
+ Fictional example: the agreed slice sends missing-document reminders. Sales asks to reject a case automatically after 48 hours, calling it a small rule. Compliance owns acceptance of review controls; no automated rejection has been approved.
70
70
 
71
- The pattern shows in three requests: a "quick" finance CSV export (Jun 20, half a day, from Denise directly), retry-logic cleanup asked for mid-build (Jun 24, one day, Tom), and a dashboard tile "while you're in there" (Jun 27, half a day). Each sounds reasonable; their cumulative estimates explain part of the slip and need a scope decision.
71
+ The code may be small, but the request changes who decides the case outcome. Recommend keeping reminders in the current slice and treating automatic rejection as a separate proposed decision. Do not imply that sales enthusiasm supplies authority or that a future phase is promised. If saved in a bound engagement, the `decisions.md` receipt remains proposed; `success.md` stays unchanged until the appropriate owner agrees.
72
72
 
73
- Three-bucket response, applied while the requests can still be placed: the CSV export fits this phase only with an accepted trade (it displaces the runbook polish), the retry cleanup goes to the kill list in `decisions.md` with the what-breaks reason, and the tile is absorbed because it is genuinely twenty minutes - included in the existing progress receipt so cumulative impact remains visible.
73
+ Reply draft: “The reminder slice stays as agreed. Automatic rejection changes the decision policy, so I would not include it under the current approval. We can assess it with the policy owner, including the exception path and impact on delivery.”
74
74
 
75
- That conversation happens with Priya when the added work threatens the date, with the receipts on screen: "here are the asks, their estimated impact, and what moved." Confirm Priya holds the relevant scope authority before treating her response as agreement.
75
+ For a lower-impact request, reach the same decision from its actual fit, risk and authority, not from how few minutes it takes.
76
+
77
+ ## Return
78
+
79
+ Give the scope fit, evidence or missing agreement, material impact, recommended disposition, and the decision needed from whom. Include a short customer-facing reply when useful. In standalone mode, return the assessment directly; do not create records or imply that the recommendation was accepted.
76
80
 
77
81
  ## Principles
78
82
 
@@ -4,7 +4,7 @@
4
4
  "files": {
5
5
  "SKILL.md": "545fa51462ad174899b9a2007daf61f1a56c65d0d514292a1951569d1657912a",
6
6
  "agents/openai.yaml": "f114bfdaf8ae71139fe5903965187dca326edb015c709a8e9d74ddd771ac8a6f",
7
- "references/build.md": "03c52eda90642c62053b53ef1e85c97b4e647600f454aee9da0e415c9d98903e",
7
+ "references/build.md": "4ebea9776605f79f902d9bf83a065e4cded191d7b5f8defcf58c054514fc34f5",
8
8
  "references/debug.md": "3273a921a98522431ae821a283814897270c719cbfab83d14b99175537d869e5",
9
9
  "references/eval-pack.md": "0590b85d3cae0903c6b1274540c92eaa2a4373047e8a0548d6942516ef0bb9e1",
10
10
  "references/integrate.md": "1cb7a60d7545b0bf224fce678a04ce6ccdf368c47877d9c8e4dc4272bb0d5b0c",
@@ -20,7 +20,7 @@ Use existing services, fixtures, validation, and repository conventions before a
20
20
 
21
21
  ## Demonstrate the behavior
22
22
 
23
- Add or update automated coverage when meaningful and feasible, including the relevant failure path. Check that existing tests actually exercise the change. Explain manual-only coverage and its limits. Run focused checks, then required repository checks; use [QA](qa.md) for the affected journey when appropriate and [eval-pack](eval-pack.md) for uncertain model behavior. Record evidence and unrun checks with [verification](verification.md).
23
+ Add or update automated coverage when meaningful and feasible, including the relevant failure path. Check that existing tests actually exercise the change. Derive expected results from the agreed behavior or an independent fixture, not by repeating the implementation in the assertion; a passing test must be capable of detecting a wrong result. Explain manual-only coverage and its limits. Run focused checks, then required repository checks; use [QA](qa.md) for the affected journey when appropriate and [eval-pack](eval-pack.md) for uncertain model behavior. Record evidence and unrun checks with [verification](verification.md).
24
24
 
25
25
  Inspect the final diff against the agreed outcome. Update affected existing documentation and examples when public behavior, interfaces, configuration, or operating steps change. Exercise relevant commands or state what could not run. For substantial or risky work, use [review](review.md) with a separate reviewer when available; label a self-check honestly. Reverify affected behavior after repairs.
26
26