fdeops 5.1.9 → 5.1.11
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/README.md +38 -12
- package/adapters/AGENTS.md +1 -1
- package/adapters/GEMINI.md +1 -1
- package/adapters/LOCAL-LLM.md +1 -1
- package/adapters/README.md +2 -2
- package/adapters/copilot-instructions.md +1 -1
- package/adapters/cursor.fde.mdc +1 -1
- package/bin/check.js +5 -5
- package/bin/fde.js +19 -2
- package/bin/lib/follow-through.js +41 -0
- package/mcp/fdeops-ingest/package.json +1 -1
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/skills/brief/.fde-generated.json +1 -1
- package/skills/brief/references/land.md +3 -1
- package/skills/fde/SKILL.md +6 -2
- package/skills/fde/references/close.md +3 -3
- package/skills/fde/references/encode-pattern.md +6 -8
- package/skills/fde/references/land.md +3 -1
- package/skills/fde/references/switch-clients.md +29 -90
- package/skills/feedback/.fde-generated.json +1 -1
- package/skills/feedback/references/encode-pattern.md +6 -8
- package/skills/handoff/.fde-generated.json +3 -2
- package/skills/handoff/references/close.md +3 -3
- package/skills/handoff/references/encode-pattern.md +6 -8
- package/skills/handoff/references/land.md +138 -0
- package/skills/runbook/.fde-generated.json +3 -2
- package/skills/runbook/references/close.md +3 -3
- package/skills/runbook/references/encode-pattern.md +6 -8
- package/skills/runbook/references/land.md +138 -0
- package/skills/switch-clients/.fde-generated.json +3 -2
- package/skills/switch-clients/references/switch-clients.md +29 -90
- package/skills/switch-clients/references/verification.md +45 -0
- package/hooks/run-hook.cmd +0 -3
|
@@ -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,8 @@
|
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "ebfebe6e5872800c749659aec45af48b2287db2e72c0b914118482e4c73334b5",
|
|
6
6
|
"agents/openai.yaml": "67ecd37a1e5bd57986d800a782aeff8d00171d6d09794b6026d8daf1e2d91e6f",
|
|
7
|
-
"references/switch-clients.md": "
|
|
8
|
-
"references/task-context.md": "9066514a50043f3ad888d133d4e8b89b7132551e098cf2c80203c458a80126e5"
|
|
7
|
+
"references/switch-clients.md": "4c13df4441182f6ef9455e0abed4facdb6d1c99dd5d10de278708f0bc07f631f",
|
|
8
|
+
"references/task-context.md": "9066514a50043f3ad888d133d4e8b89b7132551e098cf2c80203c458a80126e5",
|
|
9
|
+
"references/verification.md": "8ee2502112a37eedfdacf929041e7b91e9e6fabb007408a1ee2e2992e3af6ff6"
|
|
9
10
|
}
|
|
10
11
|
}
|
|
@@ -1,114 +1,53 @@
|
|
|
1
1
|
# switch-clients - Switch engagements
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Switch customers without losing the next action or carrying one customer's information into another's work.
|
|
4
4
|
|
|
5
|
-
**
|
|
5
|
+
**Use when:** moving between existing engagements, reviewing competing customer needs, or recovering from confused customer context.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
Apply [task context](task-context.md). This task needs existing records; do not invent or initialise a customer merely to complete a portfolio view. Check `fde privacy` before record access, then use `fde status --all` for the permitted portfolio summary. Do not read raw `.fde/` files.
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## Decide what needs attention
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
Use the available evidence to compare customer impact, safety or security incidents, contractual deadlines, blocked work and agreed commitments. A trust signal is a prompt to examine its source, not a fixed countdown or an automatic priority over an incident. A delayed reply does not establish lost trust.
|
|
12
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
|
-
```
|
|
13
|
+
Keep portfolio summaries brief and authorised. Inspect deeper context only for the customer being worked on, through a sanitized `fde resume` packet and targeted `fde recall`. If there is not enough capacity for the competing commitments, name the conflict and the decision-maker who can change priorities. Do not silently deprioritise another customer.
|
|
19
14
|
|
|
20
|
-
|
|
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
|
|
15
|
+
## Leave the current engagement recoverable
|
|
25
16
|
|
|
26
|
-
|
|
17
|
+
Identify what changed, what remains uncertain and the next action. For unfinished implementation, use the existing [recoverable checkpoint](verification.md#recoverable-checkpoint), with its task ID, working-tree state and applicable evidence.
|
|
27
18
|
|
|
28
|
-
|
|
19
|
+
Follow the record's confirmation and CLI write rules. An unconfirmed checkpoint stays a draft; switching customers does not approve it. Keep every update in the current customer's record. Do not automatically commit, stash, discard or move working-tree changes. Preserve them under the repository's policy and the user's existing authority.
|
|
29
20
|
|
|
30
|
-
|
|
31
|
-
## Daily triage - <date>
|
|
21
|
+
## Select the next customer explicitly
|
|
32
22
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
23
|
+
1. Identify the requested customer and the intended workspace. If either is ambiguous, resolve that before record access or changes.
|
|
24
|
+
2. Inspect the binding with `fde resume --bind`. Merely opening another editor tab or running bare `fde resume` does not select a different customer.
|
|
25
|
+
3. Confirm the target exists using permitted metadata. Prefer its already-bound workspace. For read-only work, a command-scoped `FDEOPS_ENGAGEMENT=<known-record-path>` selects that existing record without changing the workspace binding; use the same scope for each record command and report that the persistent binding is unchanged. `fde resume --init <existing-client>` can fill missing templates and initialise memory Git as well as bind the workspace. Use it only when those record changes are also authorised; a request to switch alone is not enough. Never guess a missing customer or silently change unrelated host settings.
|
|
26
|
+
4. Get a fresh sanitized `fde resume` packet and verify its visible `ENGAGEMENT:` identity matches the intended customer. Stop on a mismatch; do not continue from the previous customer's packet.
|
|
27
|
+
5. Resume the selected task from current evidence. Check actual repository state before relying on a saved implementation checkpoint. Keep the other customer's files and output out of subsequent tool reads and messages.
|
|
38
28
|
|
|
39
|
-
|
|
40
|
-
```
|
|
29
|
+
Changing the binding does not erase earlier conversation context. Use a fresh agent session when the customer's isolation policy requires it or prior sensitive context should not remain available. Do not claim that closing tabs removes information already supplied to a model.
|
|
41
30
|
|
|
42
|
-
|
|
31
|
+
## Communicate within the agreed boundaries
|
|
43
32
|
|
|
44
|
-
|
|
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. |
|
|
33
|
+
Use each customer's agreed audience, channel and cadence. Prepare an update when a commitment changes or a material risk needs a decision; send it only within existing communication authority. Explain the effect on that customer's work without disclosing another customer's identity, incident or confidential priorities.
|
|
50
34
|
|
|
51
|
-
|
|
35
|
+
Reusing a field lesson across customers requires permission as well as removal of identifying and confidential information. Masking alone does not authorise reuse.
|
|
52
36
|
|
|
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
|
|
37
|
+
## Worked example
|
|
58
38
|
|
|
59
|
-
|
|
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
|
-
```
|
|
39
|
+
The FDE is leaving Garvey with an unfinished retry fix and switching to Kesterman. Garvey's `context.md` has a confirmed checkpoint pointing to the existing task and its unrun staging check. The FDE preserves the dirty working tree rather than committing or stashing it automatically. `fde resume --bind` still identifies Garvey, so bare resume would reopen the wrong record. After verifying that Kesterman already exists, the FDE selects its bound workspace or uses a command-scoped selection when record writes are prohibited, then obtains a fresh sanitized packet and checks `ENGAGEMENT:` before continuing. A temporary selection is reported as temporary, not as a changed workspace binding. Kesterman's sponsor has not replied, but the notes show planned leave; that alone does not justify an amber signal. An unconfirmed Garvey update stays a draft for Garvey and is never written into Kesterman's record.
|
|
65
40
|
|
|
66
|
-
|
|
41
|
+
## Completion
|
|
67
42
|
|
|
68
|
-
|
|
43
|
+
Return the selected customer, whether selection is temporary or persistent, binding evidence, next action, and any unsaved update or unresolved priority. A switch is complete only when the fresh packet identifies the intended customer and the previous work remains recoverable. Standalone portfolio review can return its summary without rebinding or saving anything.
|
|
69
44
|
|
|
70
|
-
|
|
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.
|
|
45
|
+
For an authorised portfolio view, `fde dashboard --all` regenerates `fieldbook.html`; it does not change customer records. Neither the dashboard nor the agent's summary grants approval for a release or customer communication.
|
|
106
46
|
|
|
107
47
|
## Principles
|
|
108
48
|
|
|
109
|
-
- One
|
|
110
|
-
-
|
|
111
|
-
-
|
|
112
|
-
-
|
|
113
|
-
-
|
|
114
|
-
- The wrong customer name in a status update is a two-customer trust fire.
|
|
49
|
+
- One customer's writes belong in that customer's record.
|
|
50
|
+
- Use sanitized CLI packets; never substitute raw record reads.
|
|
51
|
+
- Verify identity after a switch and preserve unfinished work without inventing authority.
|
|
52
|
+
- Prioritise from impact and commitments, not unsupported trust timelines.
|
|
53
|
+
- A fresh binding is not a fresh model context.
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# verification - Make a claim replayable
|
|
2
|
+
|
|
3
|
+
**Enter when:** reporting completion, evaluating an acceptance check, handing work to a reviewer, or preparing a release.
|
|
4
|
+
|
|
5
|
+
Use [task context](task-context.md). This method returns evidence directly or writes an existing permitted task/engagement record; it never requires `.fde/` initialization.
|
|
6
|
+
|
|
7
|
+
## Method
|
|
8
|
+
|
|
9
|
+
1. Translate each claim into the observation that would support or reject it. Cite the agreed acceptance criteria and required repository checks. Compare the checks being run with that agreement; flag any weakened threshold or removed requirement without an attributed approval from the appropriate decision-maker. Select focused checks for changed behavior before broadening to release requirements.
|
|
10
|
+
2. Identify the actual repository commands, fixtures, runtime, and environment. Read command behavior before executing it, especially when it can write externally. Use authorized environments and avoid leaking secrets through logs or diagnostic commands.
|
|
11
|
+
3. Run the checks and inspect results, including exit status and relevant output. A running job, test discovery, a mocked response, and a successful real request are different evidence. Record asynchronous completion before claiming success. Describe a command as executed only when its actual invocation and result are available; an inferred result is not a run.
|
|
12
|
+
4. Bind evidence to the tested revision and working tree. For uncommitted changes record the base revision plus changed paths and an available diff digest or snapshot identifier. For browser/manual checks record the steps, inputs, observed result, and inspected evidence.
|
|
13
|
+
5. After a change, rerun checks whose behavior or assumptions were affected. Reuse prior evidence only when the relevant code, dependencies, data, and environment remain applicable; cite the original run and reason. Never imply reused evidence was rerun.
|
|
14
|
+
6. Label every required check **passed**, **failed**, **blocked**, or **not run**. Include why blocked/not run, impact, and next step. Missing evidence is unproven; it is not an observed failure or a pass.
|
|
15
|
+
|
|
16
|
+
For performance claims, identify the measured bottleneck and compare before/after runs under comparable workload, environment and cache conditions. Repeat enough to distinguish a change from noise, retain correctness checks, and report unmatched conditions or uncertainty rather than claiming an unsupported improvement. Use the project's existing profiling and benchmark tools.
|
|
17
|
+
|
|
18
|
+
## Receipt
|
|
19
|
+
|
|
20
|
+
Use one compact entry per check or a table with these fields:
|
|
21
|
+
|
|
22
|
+
- Claim / acceptance check and expected result.
|
|
23
|
+
- Exact command and working directory, or manual journey and inputs.
|
|
24
|
+
- Environment, runtime/tool versions when relevant, and fixture/data source.
|
|
25
|
+
- Revision plus working-tree identity; run date/time.
|
|
26
|
+
- Observed result and exit status where available; safe evidence location.
|
|
27
|
+
- Status, limitations, unrun checks, and next step.
|
|
28
|
+
|
|
29
|
+
Keep implementation, verification, deployment, measured outcome, and customer acceptance distinct. A local pass supports the tested local behavior. An acceptance claim needs an attributed source from the agreed decision-maker or agreed acceptance mechanism. Record no raw `<private>` blocks, credentials, or hidden reasoning.
|
|
30
|
+
|
|
31
|
+
## Operator response
|
|
32
|
+
|
|
33
|
+
When readiness depends on a failure signal, verify that a representative failure reaches the responsible operator through the intended route in an approved environment. Record separately whether the route is configured, the signal was delivered, and the operator acknowledged it; configuration alone proves neither delivery nor response. Use an authorized test route or an already approved drill, and identify any difference from the intended operating route. Do not page people or trigger production incidents without authorization. Reuse applicable evidence with attribution; a draft guide can mark this check untested.
|
|
34
|
+
|
|
35
|
+
## Recoverable checkpoint
|
|
36
|
+
|
|
37
|
+
For substantial work, keep a compact checkpoint in the existing permitted customer or project task record; if none exists, include it in the returned receipt. Reuse existing task/ticket identifiers when available. Record the task and agreed outcome, repository/branch/revision and dirty state, completed work and check results, pending work and checks, current blocker or `none`, and the exact next action. Link existing evidence rather than copying it into a new tracking artifact. Follow the record's write rules; a checkpoint does not silently change agreed scope or acceptance.
|
|
38
|
+
|
|
39
|
+
In an ongoing engagement, optionally summarize that checkpoint under an unindented `## Implementation checkpoint` heading in the existing `context.md`, with the next action and task-record path/ID first. Follow the engagement confirmation and privacy rules. `fde resume` surfaces this saved summary without opening the referenced task file; retrieve that source only when permitted. Keep one current checkpoint, and clear or explicitly close it when the work ends. Do not initialize `.fde/` for standalone work or copy the whole backlog.
|
|
40
|
+
|
|
41
|
+
Update it after meaningful completed slices and before a pause or handoff. On resuming, inspect the actual working tree and relevant evidence before taking the recorded next action; stale status is not proof that work or checks are still applicable.
|
|
42
|
+
|
|
43
|
+
## Acceptance
|
|
44
|
+
|
|
45
|
+
A completion statement cites applicable evidence for its claims and explicitly names material gaps. If required checks fail, investigate or report the blocker; never skip them, edit expectations, or relabel the scope without authority to obtain a green result.
|
package/hooks/run-hook.cmd
DELETED