fdeops 5.1.10 → 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 +16 -14
- 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/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/README.md
CHANGED
|
@@ -12,11 +12,13 @@ FDEOps brings that context into the work, from the first meeting to a system the
|
|
|
12
12
|
|
|
13
13
|
[Get started](#quick-start) · [What it helps with](#three-things-it-helps-with) · [Choose a skill](#task-skills) · [Data boundaries](#your-records-your-control) · [Docs](docs/README.md)
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+

|
|
16
|
+
|
|
17
|
+
*Fictional customers. Illustrative enterprise conversation with real local review-logic tests. Synthetic data; no live model or customer deployment. [Read the conversation](media/chat-demo.md) · [View a still](media/chat-demo.png).*
|
|
16
18
|
|
|
17
19
|
## Quick start
|
|
18
20
|
|
|
19
|
-
**Use customer
|
|
21
|
+
**Use your customer’s approved AI tools and data.** FDEOps runs locally; your AI agent’s settings determine what reaches its provider. Start with synthetic data until customer access is approved. [Safe setup](SECURITY.md#before-customer-work).
|
|
20
22
|
|
|
21
23
|
### Let `fde` coordinate a customer project
|
|
22
24
|
|
|
@@ -34,7 +36,7 @@ checks internal documents, then assigns each request to another team.
|
|
|
34
36
|
Help me prepare for the first meeting. Here is the brief: ...
|
|
35
37
|
```
|
|
36
38
|
|
|
37
|
-
The coordinator
|
|
39
|
+
The coordinator selects the right skill as the work changes. For an ongoing project, it keeps decisions, evidence and next actions in a local customer record. You bring the context and make the decisions.
|
|
38
40
|
|
|
39
41
|
### Use one skill for one task
|
|
40
42
|
|
|
@@ -50,7 +52,7 @@ Separate decisions, requests and open questions. Return a draft only.
|
|
|
50
52
|
[Paste notes you are permitted to share.]
|
|
51
53
|
```
|
|
52
54
|
|
|
53
|
-
|
|
55
|
+
Each task skill includes the instructions it needs. Use `debrief` on supplied notes without creating a customer record or installing the coordinator.
|
|
54
56
|
|
|
55
57
|
<details>
|
|
56
58
|
<summary>Installation requirements and alternatives</summary>
|
|
@@ -59,7 +61,7 @@ These installation commands use Node.js and Git; the optional record CLI require
|
|
|
59
61
|
|
|
60
62
|
</details>
|
|
61
63
|
|
|
62
|
-
**
|
|
64
|
+
**See it in action:** `npx fdeops demo` turns fictional meeting notes into a review and a fieldbook, a browser view of the customer record. No AI model is called. The demo uses Node.js 18+ and Git; `npx` may download the package. It creates or resets its separate `.demo` workspace. [Five-minute walkthrough](docs/USAGE.md#new-here-5-minutes).
|
|
63
65
|
|
|
64
66
|
## Three things it helps with
|
|
65
67
|
|
|
@@ -70,9 +72,9 @@ A repository tells you where the code lives. It may not tell you why the custome
|
|
|
70
72
|
<a name="keep-a-customer-record"></a>
|
|
71
73
|
<a name="how-skills-work"></a>
|
|
72
74
|
|
|
73
|
-
For
|
|
75
|
+
For ongoing engagements, each customer gets a plain-Markdown record at `~/fde-engagements/<customer>/.fde/`. The coordinator loads a short summary and looks up details as needed. Before resuming implementation, it checks the saved next action against the current task and code. Saved lessons are searchable within that customer’s record. Meeting preparation brings back recorded open questions and commitments; sharing a lesson with another customer requires explicit approval.
|
|
74
76
|
|
|
75
|
-
|
|
77
|
+
From the fictional demo’s `fde resume` output:
|
|
76
78
|
|
|
77
79
|
```text
|
|
78
80
|
next: get the reconciliation runbook from Tom before touching anything. [source: meeting 2026-09-10]
|
|
@@ -87,13 +89,13 @@ Use [debrief](skills/debrief/SKILL.md) after a meeting and [switch-clients](skil
|
|
|
87
89
|
|
|
88
90
|
A stakeholder asks for more scope. A demo looks promising. Neither establishes a new commitment or an accepted result.
|
|
89
91
|
|
|
90
|
-
FDEOps
|
|
92
|
+
FDEOps keeps requests, confirmed decisions, reported results and open questions distinct. You review proposed record changes before saving them. Dates and sources keep claims traceable; customer approval still comes from the agreed owner.
|
|
91
93
|
|
|
92
94
|
For example, these fictional notes:
|
|
93
95
|
|
|
94
96
|
> Mara agreed to keep CSV upload this phase. Devon asked for real-time sync; Mara has not answered. Two staging runs took 12 minutes. Production has not been measured.
|
|
95
97
|
|
|
96
|
-
|
|
98
|
+
The review separates them:
|
|
97
99
|
|
|
98
100
|
| Record | What the notes support |
|
|
99
101
|
|---|---|
|
|
@@ -116,9 +118,9 @@ A local test, a deployed change and a customer-accepted result answer different
|
|
|
116
118
|
| Measured | A result was observed against the agreed measure |
|
|
117
119
|
| Accepted | The agreed owner or mechanism accepted the outcome |
|
|
118
120
|
|
|
119
|
-
|
|
121
|
+
The skills use these distinctions when reporting progress; they are not automatic dashboard states.
|
|
120
122
|
|
|
121
|
-
FDEOps carries
|
|
123
|
+
FDEOps carries agreed checks into implementation and ties test results to the revision and environment checked. Before rollout, it asks for operating limits, recovery evidence and an owner. You can see what is ready, what is blocked and what still needs verification.
|
|
122
124
|
|
|
123
125
|
Use [build](skills/build/SKILL.md), [integrate](skills/integrate/SKILL.md), [review](skills/review/SKILL.md), [ship](skills/ship/SKILL.md) and [handoff](skills/handoff/SKILL.md) as needed. [See the tests and their limits](docs/verification.md).
|
|
124
126
|
|
|
@@ -136,7 +138,7 @@ Use [build](skills/build/SKILL.md), [integrate](skills/integrate/SKILL.md), [rev
|
|
|
136
138
|
| A release or operating handover | `ship`, `runbook`, `handoff` |
|
|
137
139
|
| Meeting notes or a customer update | `debrief`, `readout` |
|
|
138
140
|
|
|
139
|
-
|
|
141
|
+
Start with the task you need, or let `fde` select it. `dashboard` works with saved records; `debrief` can review supplied notes and return a draft. Each skill explains the context it needs. [Full skill catalog](docs/skills-reference.md).
|
|
140
142
|
|
|
141
143
|
<a name="what-a-working-day-looks-like"></a>
|
|
142
144
|
|
|
@@ -162,13 +164,13 @@ Copy an action into your agent to continue. Regenerate the view after record upd
|
|
|
162
164
|
|
|
163
165
|
The CLI reads local files and Git without network calls or telemetry. Installation may download packages. Your AI host controls model connections and may transmit what it reads.
|
|
164
166
|
|
|
165
|
-
CLI and hook outputs mask common identifier patterns. `<private>` blocks are redacted from those outputs and the dashboard. Local reports retain unmarked identifiers by default.
|
|
167
|
+
CLI and hook outputs mask common identifier patterns. `<private>` blocks are redacted from those outputs and the dashboard. Local reports retain unmarked identifiers by default. These filters cover FDEOps output, not raw files or text you paste into an agent. Use only approved material, including when anonymised.
|
|
166
168
|
|
|
167
169
|
You review consequential record updates. Enabled hooks can save mechanical session progress; direct CLI write commands update records when run. [Privacy](PRIVACY.md) · [Security](SECURITY.md) · [Local-model results](docs/verification.md#local-model-results).
|
|
168
170
|
|
|
169
171
|
## Who this is for
|
|
170
172
|
|
|
171
|
-
Forward deployed engineers, consultants and delivery teams working across customer meetings, codebases and operating environments.
|
|
173
|
+
Forward deployed engineers, consultants and delivery teams working across customer meetings, codebases and operating environments. Bring your existing tools, access and customer agreements. Start with one task or use `fde` throughout the engagement.
|
|
172
174
|
|
|
173
175
|
## Go deeper
|
|
174
176
|
|
package/bin/check.js
CHANGED
|
@@ -194,11 +194,11 @@ if (read('package.json').includes('postinstall')) {
|
|
|
194
194
|
}
|
|
195
195
|
|
|
196
196
|
const readme = read('README.md')
|
|
197
|
-
if (/
|
|
198
|
-
fail('README must
|
|
199
|
-
} else if (
|
|
200
|
-
fail('
|
|
201
|
-
} else ok('README
|
|
197
|
+
if (!readme.includes('media/chat-demo.gif') || !readme.includes('media/chat-demo.md') || !readme.includes('Fictional customers')) {
|
|
198
|
+
fail('README must include the chat walkthrough, text alternative and fictional-record disclosure')
|
|
199
|
+
} else if (['chat-demo.gif', 'chat-demo.png', 'chat-demo.json', 'chat-demo.md', 'render-chat-demo.py'].some(name => !fs.existsSync(path.join(root, 'media', name)))) {
|
|
200
|
+
fail('chat walkthrough must include rendered assets, text, source and renderer')
|
|
201
|
+
} else ok('README chat walkthrough has accessible text and reproducible source')
|
|
202
202
|
|
|
203
203
|
const usage = read('docs/USAGE.md')
|
|
204
204
|
if (!usage.includes('media/session.gif') || !usage.includes('media/record-session.sh')) {
|
package/bin/fde.js
CHANGED
|
@@ -33,6 +33,7 @@ const path = require('path')
|
|
|
33
33
|
const os = require('os')
|
|
34
34
|
const { execSync, execFileSync } = require('child_process')
|
|
35
35
|
const { createMemoryApi } = require('./lib/memory')
|
|
36
|
+
const { pendingSummary } = require('./lib/follow-through')
|
|
36
37
|
const { createTrustApi } = require('./lib/trust')
|
|
37
38
|
const vault = require('./lib/vault')
|
|
38
39
|
const context = require('./lib/context')
|
|
@@ -1462,7 +1463,7 @@ function cmdResume(args) {
|
|
|
1462
1463
|
console.log(`NO ENGAGEMENT for this workspace.\nexisting: ${list}\nAsk the human the client name (one question), then run: fde resume --init <client-name>\nDo not tell them to type that command.`)
|
|
1463
1464
|
process.exit(2)
|
|
1464
1465
|
}
|
|
1465
|
-
const intro = [resumeTriage(eng), firstActionLine(eng), ...hygieneTriageLines(eng), ...recordDigest(eng)].join('\n')
|
|
1466
|
+
const intro = [resumeTriage(eng), firstActionLine(eng), pendingSummary(readClean(eng, 'context.md')), ...hygieneTriageLines(eng), ...recordDigest(eng)].join('\n')
|
|
1466
1467
|
const ctx = readClean(eng, 'context.md')
|
|
1467
1468
|
const savedWork = context.implementationCheckpoint(ctx)
|
|
1468
1469
|
const checkpoint = stripTemplateNoise(savedWork.checkpoint).trim()
|
|
@@ -2710,11 +2711,25 @@ function cmdRecall(args) {
|
|
|
2710
2711
|
}
|
|
2711
2712
|
const eng = resolveEngagement()
|
|
2712
2713
|
if (!eng) { console.error('no engagement - bind a client before recall'); process.exit(2) }
|
|
2713
|
-
const files = ['context.md', 'trust-profile.md', 'success.md', 'decisions.md', 'risks.md', 'delivery.md', 'stakeholders.md', 'brief.md', 'reality.md', 'assumptions.md', 'terrain.md', 'handoff.md']
|
|
2714
|
+
const files = ['context.md', 'trust-profile.md', 'success.md', 'decisions.md', 'risks.md', 'delivery.md', 'stakeholders.md', 'brief.md', 'reality.md', 'assumptions.md', 'terrain.md', 'handoff.md', 'patterns.md']
|
|
2715
|
+
// Never follow a directory link into another customer's record.
|
|
2716
|
+
const retrospectiveDir = path.join(eng, 'retrospectives')
|
|
2717
|
+
let omitted = false
|
|
2718
|
+
try {
|
|
2719
|
+
if (fs.lstatSync(retrospectiveDir).isDirectory()) {
|
|
2720
|
+
const names = fs.readdirSync(retrospectiveDir).filter(name => {
|
|
2721
|
+
if (!/^\d{4}-\d{2}-\d{2}-.+\.md$/.test(name)) return false
|
|
2722
|
+
try { return fs.lstatSync(path.join(retrospectiveDir, name)).isFile() } catch (_) { return false }
|
|
2723
|
+
}).sort().reverse()
|
|
2724
|
+
omitted = names.length > 100
|
|
2725
|
+
files.push(...names.slice(0, 100).map(name => `retrospectives/${name}`))
|
|
2726
|
+
}
|
|
2727
|
+
} catch (_) {}
|
|
2714
2728
|
const result = context.recallSections(files.map(file => ({ file, text: readClean(eng, file) })), query, 12, masking.mask)
|
|
2715
2729
|
process.stdout.write(maskedSections([
|
|
2716
2730
|
`RECALL - ${eng}\n${result.total ? `${result.sections.length} of ${result.total} matching lines; refine the query if evidence is omitted.` : 'No matching record. This is not proof that the event never happened.'}\nSources are local record assertions; verify dates, supersession and approval scope.`,
|
|
2717
2731
|
...result.sections,
|
|
2732
|
+
omitted ? 'Older retrospectives omitted: searched at most the 100 newest dated files.' : '',
|
|
2718
2733
|
], maxBytes))
|
|
2719
2734
|
}
|
|
2720
2735
|
|
|
@@ -3497,6 +3512,8 @@ function cmdPrep(args) {
|
|
|
3497
3512
|
// Grounded brief: only text already in .fde/. No invention (Rowboat meeting-prep rule).
|
|
3498
3513
|
console.log(`MEETING PREP - ${label}`)
|
|
3499
3514
|
console.log('(grounded in local .fde/ only - if a fact is missing, it is missing)\n')
|
|
3515
|
+
const pending = pendingSummary(readClean(eng, 'context.md'))
|
|
3516
|
+
if (pending) console.log(masking.mask(pending) + '\n')
|
|
3500
3517
|
console.log(resumeTriage(eng))
|
|
3501
3518
|
const owner = readOwner(eng)
|
|
3502
3519
|
const head = memoryHead(eng)
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
'use strict'
|
|
2
|
+
|
|
3
|
+
// Explicit checkboxes keep closure human-owned; prose is not inferred as a debt.
|
|
4
|
+
function localDay(now = new Date()) {
|
|
5
|
+
return [now.getFullYear(), String(now.getMonth() + 1).padStart(2, '0'), String(now.getDate()).padStart(2, '0')].join('-')
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
function pendingItems(text, today = localDay()) {
|
|
9
|
+
const items = []
|
|
10
|
+
let section = ''
|
|
11
|
+
let fence = ''
|
|
12
|
+
for (const [index, line] of String(text || '').split('\n').entries()) {
|
|
13
|
+
if (fence) {
|
|
14
|
+
if (new RegExp(`^[\\t ]*${fence.char}{${fence.length},}[\\t ]*$`).test(line)) fence = null
|
|
15
|
+
continue
|
|
16
|
+
}
|
|
17
|
+
const opening = line.match(/^ {0,3}(?:(?:[-+*]|\d{1,9}[.)])[\t ]+)?(`{3,}|~{3,})(.*)$/)
|
|
18
|
+
if (opening && (opening[1][0] !== '`' || !opening[2].includes('`'))) {
|
|
19
|
+
fence = { char: opening[1][0], length: opening[1].length }
|
|
20
|
+
continue
|
|
21
|
+
}
|
|
22
|
+
const heading = line.match(/^(#{1,2})(?:[\t ]+|$)(.*)$/)
|
|
23
|
+
if (heading) section = heading[1] === '##' ? heading[2].replace(/[\t ]+#+[\t ]*$/, '').trim().toLowerCase() : ''
|
|
24
|
+
if (!['commitments', 'open questions'].includes(section)) continue
|
|
25
|
+
const match = line.match(/^ {0,3}-\s+\[ \]\s+(.+)/)
|
|
26
|
+
if (!match) continue
|
|
27
|
+
const due = match[1].match(/\b(?:due|review):\s*(\d{4}-\d{2}-\d{2})\b/i)
|
|
28
|
+
const date = due && due[1]
|
|
29
|
+
const valid = date && !Number.isNaN(Date.parse(date)) && new Date(date).toISOString().slice(0, 10) === date
|
|
30
|
+
items.push(`context.md:${index + 1} [${section}] ${match[1].slice(0, 400)}${valid && date < today ? ' [past recorded due/review date; confirm status]' : ''}`)
|
|
31
|
+
}
|
|
32
|
+
return items
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function pendingSummary(text) {
|
|
36
|
+
const items = pendingItems(text)
|
|
37
|
+
if (!items.length) return ''
|
|
38
|
+
return `OPEN FOLLOW-THROUGH (${Math.min(items.length, 8)} of ${items.length} recorded items)\n${items.slice(0, 8).join('\n')}\nRecorded items, not a complete agenda. Confirm status and meeting relevance.`
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
module.exports = { pendingItems, pendingSummary, localDay }
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fdeops",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.11",
|
|
4
4
|
"description": "Forward deployed engineering skills for AI coding agents. Use focused task skills or @fde for discovery, implementation, verification and handoff, with local engagement records.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"fdeops": "bin/install.js",
|
package/plugin.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://agent-plugins.org/schemas/1.0.0/plugin.schema.json",
|
|
3
3
|
"name": "fdeops",
|
|
4
|
-
"version": "5.1.
|
|
4
|
+
"version": "5.1.11",
|
|
5
5
|
"description": "Forward deployed engineering skills for AI coding agents. Use focused task skills or @fde for discovery, implementation, verification and handoff, with local engagement records.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Subash Natarajan",
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "5d88b9818951f8a8a44c39ad2b36ccdca74fef5e6ed31e67788b50d3ca1bb006",
|
|
6
6
|
"agents/openai.yaml": "8dc0b43545004419bad49e1d50cd3beb968bbcc24baacdaf7fb7304a5fd03bba",
|
|
7
|
-
"references/land.md": "
|
|
7
|
+
"references/land.md": "87dfffc8e39d35eaf23d510ba7e9913d48e90d2705eb9155ab192d12ea98d18d",
|
|
8
8
|
"references/task-context.md": "9066514a50043f3ad888d133d4e8b89b7132551e098cf2c80203c458a80126e5"
|
|
9
9
|
}
|
|
10
10
|
}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# land - Interrogate the brief
|
|
2
2
|
|
|
3
|
-
**Enter when:** new customer, first meeting, just got the brief, nothing started yet.
|
|
3
|
+
**Enter when:** new customer, first meeting, just got the brief, nothing started yet, or an old or closed project is reopening.
|
|
4
4
|
|
|
5
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
6
|
|
|
@@ -18,6 +18,8 @@ Then check - probe ONLY if it prevents a bad start:
|
|
|
18
18
|
|
|
19
19
|
State your read, let the FDE correct, then land.
|
|
20
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
|
+
|
|
21
23
|
## Brief interrogation (only when the brief is thin)
|
|
22
24
|
|
|
23
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.
|
package/skills/fde/SKILL.md
CHANGED
|
@@ -27,8 +27,8 @@ For record-backed work only:
|
|
|
27
27
|
|
|
28
28
|
1. Before client reads, run `fde setup --show` and verify `fde privacy` support. If setup is unconfigured or the user requests preferences, follow `references/record-setup.md`. Setup does not authorize sharing customer data.
|
|
29
29
|
2. Use a fresh `fde resume` packet for this turn/task. Reuse a current session-hook packet only when its visible `ENGAGEMENT:` matches the binding and its freshness is certain. Refresh after binding, masking or record changes, or when the user asks where things stand. Do not reuse an earlier turn's packet or repeat the same entry solely because another method loaded.
|
|
30
|
-
3. Read policy, signer, goals, risks and current work. Retrieve omitted or disputed evidence with `fde recall <topic>`; never replace this with raw or recursive record reads. Resume defaults to 16 KiB (4 KiB in compact setup); `--max-bytes 4096` reduces it, and `--full` is for explicitly needed complete context.
|
|
31
|
-
4. For interrupted implementation, inspect the saved checkpoint and follow `references/verification.md#recoverable-checkpoint` before acting. A checkpoint is a dated claim, not a fresh test or permission to execute.
|
|
30
|
+
3. Read policy, signer, goals, risks and current work. Retrieve omitted or disputed evidence, saved lessons and dated retrospectives with `fde recall <topic>`; never replace this with raw or recursive record reads. Resume defaults to 16 KiB (4 KiB in compact setup); `--max-bytes 4096` reduces it, and `--full` is for explicitly needed complete context.
|
|
31
|
+
4. For interrupted implementation, inspect the saved checkpoint and follow `references/verification.md#recoverable-checkpoint` before acting. A checkpoint is a dated claim, not a fresh test or permission to execute. For a returning or closed engagement, apply the reopening check in `references/land.md` before relying on historical access, owners or deployment evidence.
|
|
32
32
|
5. Give a brief playback and load the relevant method below. `hygiene:` means offer `fde doctor`; never auto-rewrite.
|
|
33
33
|
|
|
34
34
|
The CLI uses local files and Git, without network calls. Install it on the FDE's own machine, never customer infrastructure. The AI host's permissions and provider policy remain separate.
|
|
@@ -173,3 +173,7 @@ Ready to build: check that the supplied facts establish the outcome, constraints
|
|
|
173
173
|
- A missing record or check is an explicit gap, not a reason to fabricate facts or restart discovery.
|
|
174
174
|
- Confirm consequential record changes; use customer policy and actual decision authority for external actions.
|
|
175
175
|
- Report what was achieved, its evidence and remaining limits. Never equate implementation with deployment or acceptance.
|
|
176
|
+
|
|
177
|
+
### Keep open work visible
|
|
178
|
+
|
|
179
|
+
For confirmed follow-ups, maintain `## Commitments` and `## Open questions` in the existing `context.md`. Use unchecked bullets for unresolved items and check them only after confirmed resolution. A commitment says who owes what to whom; include a source and `due: YYYY-MM-DD` or `review: YYYY-MM-DD` only when agreed. Preserve unresolved `unknown - ask:` questions here when they affect the next decision. Do not infer a promise from a suggestion. `resume` and `prep` surface these entries with sources; dates prompt a status check, not an invented escalation. For a meeting, select relevant entries and use targeted recall for supporting evidence. Users describe the follow-up naturally; maintain the record for them.
|
|
@@ -6,7 +6,7 @@ For a standalone handoff draft, use the supplied notes and project evidence; no
|
|
|
6
6
|
|
|
7
7
|
**Enter when:** the engagement is ending - the customer team must run this without the FDE.
|
|
8
8
|
|
|
9
|
-
**Read first:** for standalone work, use the supplied permitted operating notes, evidence and ownership; no engagement binding or CLI command is required. For a bound engagement, use bounded `fde handoff` or `fde resume`, then
|
|
9
|
+
**Read first:** for standalone work, use the supplied permitted operating notes, evidence and ownership; no engagement binding or CLI command is required. For a bound engagement, use bounded `fde handoff` or `fde resume`, then `fde recall <topic>` for relevant client patterns, earlier retrospectives, and missing evidence. Never initialize records merely to draft a handoff. Build the picture through relevant excerpts, not a full-directory load. Consult `terrain.md` only for code paths needed by the successor.
|
|
10
10
|
|
|
11
11
|
The engagement doesn't end at ship. It ends when the customer can maintain what was built without calling.
|
|
12
12
|
|
|
@@ -28,7 +28,7 @@ The engagement doesn't end at ship. It ends when the customer can maintain what
|
|
|
28
28
|
- Eval receipt: **n/a if no AI**, else final scoped eval result + operating owner and required human-review or bounded-automation authority recorded; kill switch / fallback named in `handoff.md`.
|
|
29
29
|
- One line in the retrospective: which bucket moved, by how much, vs baseline.
|
|
30
30
|
|
|
31
|
-
**2. The pattern.** Anything that happened here and
|
|
31
|
+
**2. The pattern.** Anything that happened here and may happen again - a compliance approach, a migration pattern, a stakeholder dynamic - is a candidate for the client's `patterns.md`. Use [encode-pattern](encode-pattern.md) to record applicability, counterexamples, and evidence. Cross-client generalizations need explicit approval and a user-chosen export destination under the applicable policy; closing an engagement does not authorize an automatic scan or export.
|
|
32
32
|
|
|
33
33
|
**3. The handoff.** Operational knowledge for the person woken at 2am, not technical documentation: the 3 things that will break and the fix for each · who holds the tribal knowledge · what each alert means · deploy and rollback in plain language. AI components additionally: model version, what normal output looks like (so drift is recognisable), fallback behaviour, who owns evaluation and corrective changes, and how to disable or contain the AI path using the supported fallback. Do not assume retraining is available or appropriate.
|
|
34
34
|
|
|
@@ -40,7 +40,7 @@ The engagement doesn't end at ship. It ends when the customer can maintain what
|
|
|
40
40
|
|
|
41
41
|
## Artifact
|
|
42
42
|
|
|
43
|
-
**`retrospectives/YYYY-MM-DD-<engagement>.md`** - one file per close
|
|
43
|
+
**`retrospectives/YYYY-MM-DD-<engagement>.md`** - one file per close, retaining dated lessons for targeted recall within this client. **`patterns.md`** - client pattern candidates and evidence. **`handoff.md`** - the 2am document, including the deployed revision and the policy, access, and ownership evidence current at handoff. If the project reopens, use [land](land.md) to recheck these before dependent action; closure evidence remains historical.
|
|
44
44
|
|
|
45
45
|
## Checkpoint
|
|
46
46
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
**Enter when:** the engagement is closing and reusable patterns exist, a technique worked well and will apply to future clients, the FDE notices themselves doing the same thing on a second engagement, or close identified a pattern worth preserving.
|
|
6
6
|
|
|
7
|
-
**Read first:** `decisions.md`, `reality.md`, `delivery.md`, `retrospectives/`, `context.md`. Patterns live in what was *done*, not what was planned.
|
|
7
|
+
**Read first:** permitted evidence from `decisions.md`, `reality.md`, `delivery.md`, `retrospectives/`, `patterns.md`, and `context.md`. For a bound engagement, use `fde recall <topic>` to retrieve relevant client patterns and retrospective excerpts; do not load whole directories. Patterns live in what was *done*, not what was planned.
|
|
8
8
|
|
|
9
9
|
The difference between a 5-year FDE and a 15-year FDE is not talent - it's encoded patterns. The 15-year FDE walks into a new engagement and recognises the situation in minutes because they've seen it before, named it, and know the move. Pattern extraction turns experience into reusable intelligence.
|
|
10
10
|
|
|
@@ -49,7 +49,7 @@ The difference between a 5-year FDE and a 15-year FDE is not talent - it's encod
|
|
|
49
49
|
| **Specific enough?** | Contains concrete steps, not just principles | "Build trust" / "Communicate well" - too vague to act on |
|
|
50
50
|
| **Repeatable?** | Applies to a class of situations, not just this one | Only worked because of a unique circumstance |
|
|
51
51
|
| **Falsifiable?** | You can tell when the pattern is working or not | No way to measure whether applying it helped |
|
|
52
|
-
| **
|
|
52
|
+
| **Useful again?** | A named move plus an artifact you could use when the situation and policy permit (pipe questions, CAB dance, eval golden shape, floor-drill script) | "We learned to communicate." No concrete move or conditions for reuse |
|
|
53
53
|
|
|
54
54
|
**4. Classify by stage.** Patterns sort into the same stages as the skills:
|
|
55
55
|
|
|
@@ -69,17 +69,15 @@ The difference between a 5-year FDE and a 15-year FDE is not talent - it's encod
|
|
|
69
69
|
- After modification: increment minor version with what changed and why
|
|
70
70
|
- After contradiction: note the counter-example, adjust the "watch out for" section
|
|
71
71
|
|
|
72
|
-
**6.
|
|
72
|
+
**6. Review before reuse.** Client patterns and retrospectives remain in that client's record. Recall relevant evidence with `fde recall <topic>` and check the situation trigger, applicability, counterexamples, and current policy before applying a move. Previous success is historical evidence, not present authority or proof of fit.
|
|
73
73
|
|
|
74
|
-
-
|
|
75
|
-
- Compare permitted decision summaries - are the same decisions being made?
|
|
76
|
-
- Compare permitted lessons - are the same lessons being learned twice?
|
|
74
|
+
Cross-client reuse requires an explicitly approved generalization exported to a user-chosen destination, permitted by the source customer's data policy. Review exactly what will leave the record before export. Do not automatically scan other clients, export patterns, or maintain a shared library. In the receiving engagement, use only the approved export and recheck applicability, counterexamples, and that customer's policy before reuse; do not pull the source client record into its context.
|
|
77
75
|
|
|
78
76
|
A pattern learned twice is a process failure. Encoding it prevents the third time.
|
|
79
77
|
|
|
80
78
|
## Artifact
|
|
81
79
|
|
|
82
|
-
**`patterns.md`** - candidates and evidence for this engagement, indexed by stage and situation trigger. A
|
|
80
|
+
**`patterns.md`** - candidates and evidence for this engagement, indexed by stage and situation trigger. A cross-client export is separate and explicitly approved, to a user-chosen destination: remove names, identifiers, distinctive operational details, secrets, and confidential code or data. Keep source receipts in the original record and export only permitted generalizations with their limits and counterexamples.
|
|
83
81
|
|
|
84
82
|
**`retrospectives/YYYY-MM-DD-<engagement>.md`** - reference to which patterns were extracted from this engagement.
|
|
85
83
|
|
|
@@ -93,4 +91,4 @@ Present the extracted patterns to the FDE: "From this engagement, I've identifie
|
|
|
93
91
|
- Patterns are steps, not principles. "Build trust" isn't a pattern; "fix a small visible bug on day one" is.
|
|
94
92
|
- Every pattern needs a situation trigger - the FDE must recognise when it applies.
|
|
95
93
|
- Version substantive changes. State the evidence and limits; repeated use is not automatic confirmation.
|
|
96
|
-
-
|
|
94
|
+
- Keep client evidence local to its record; share only explicitly approved generalizations.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# land - Interrogate the brief
|
|
2
2
|
|
|
3
|
-
**Enter when:** new customer, first meeting, just got the brief, nothing started yet.
|
|
3
|
+
**Enter when:** new customer, first meeting, just got the brief, nothing started yet, or an old or closed project is reopening.
|
|
4
4
|
|
|
5
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
6
|
|
|
@@ -18,6 +18,8 @@ Then check - probe ONLY if it prevents a bad start:
|
|
|
18
18
|
|
|
19
19
|
State your read, let the FDE correct, then land.
|
|
20
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
|
+
|
|
21
23
|
## Brief interrogation (only when the brief is thin)
|
|
22
24
|
|
|
23
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.
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "7d49a9e89736e35c2aaf10c78b10be365bdf91af1aaf99430de6069e96069d55",
|
|
6
6
|
"agents/openai.yaml": "6b8d024e9ea9676a2607b76a6f1fcd2fbcba585af2990b1172dbdb8cec0364c6",
|
|
7
|
-
"references/encode-pattern.md": "
|
|
7
|
+
"references/encode-pattern.md": "9740d97faa8491d168410916c9003ea9a651a1507da186dcb29ce6e58eba6773",
|
|
8
8
|
"references/task-context.md": "9066514a50043f3ad888d133d4e8b89b7132551e098cf2c80203c458a80126e5"
|
|
9
9
|
}
|
|
10
10
|
}
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
**Enter when:** the engagement is closing and reusable patterns exist, a technique worked well and will apply to future clients, the FDE notices themselves doing the same thing on a second engagement, or close identified a pattern worth preserving.
|
|
6
6
|
|
|
7
|
-
**Read first:** `decisions.md`, `reality.md`, `delivery.md`, `retrospectives/`, `context.md`. Patterns live in what was *done*, not what was planned.
|
|
7
|
+
**Read first:** permitted evidence from `decisions.md`, `reality.md`, `delivery.md`, `retrospectives/`, `patterns.md`, and `context.md`. For a bound engagement, use `fde recall <topic>` to retrieve relevant client patterns and retrospective excerpts; do not load whole directories. Patterns live in what was *done*, not what was planned.
|
|
8
8
|
|
|
9
9
|
The difference between a 5-year FDE and a 15-year FDE is not talent - it's encoded patterns. The 15-year FDE walks into a new engagement and recognises the situation in minutes because they've seen it before, named it, and know the move. Pattern extraction turns experience into reusable intelligence.
|
|
10
10
|
|
|
@@ -49,7 +49,7 @@ The difference between a 5-year FDE and a 15-year FDE is not talent - it's encod
|
|
|
49
49
|
| **Specific enough?** | Contains concrete steps, not just principles | "Build trust" / "Communicate well" - too vague to act on |
|
|
50
50
|
| **Repeatable?** | Applies to a class of situations, not just this one | Only worked because of a unique circumstance |
|
|
51
51
|
| **Falsifiable?** | You can tell when the pattern is working or not | No way to measure whether applying it helped |
|
|
52
|
-
| **
|
|
52
|
+
| **Useful again?** | A named move plus an artifact you could use when the situation and policy permit (pipe questions, CAB dance, eval golden shape, floor-drill script) | "We learned to communicate." No concrete move or conditions for reuse |
|
|
53
53
|
|
|
54
54
|
**4. Classify by stage.** Patterns sort into the same stages as the skills:
|
|
55
55
|
|
|
@@ -69,17 +69,15 @@ The difference between a 5-year FDE and a 15-year FDE is not talent - it's encod
|
|
|
69
69
|
- After modification: increment minor version with what changed and why
|
|
70
70
|
- After contradiction: note the counter-example, adjust the "watch out for" section
|
|
71
71
|
|
|
72
|
-
**6.
|
|
72
|
+
**6. Review before reuse.** Client patterns and retrospectives remain in that client's record. Recall relevant evidence with `fde recall <topic>` and check the situation trigger, applicability, counterexamples, and current policy before applying a move. Previous success is historical evidence, not present authority or proof of fit.
|
|
73
73
|
|
|
74
|
-
-
|
|
75
|
-
- Compare permitted decision summaries - are the same decisions being made?
|
|
76
|
-
- Compare permitted lessons - are the same lessons being learned twice?
|
|
74
|
+
Cross-client reuse requires an explicitly approved generalization exported to a user-chosen destination, permitted by the source customer's data policy. Review exactly what will leave the record before export. Do not automatically scan other clients, export patterns, or maintain a shared library. In the receiving engagement, use only the approved export and recheck applicability, counterexamples, and that customer's policy before reuse; do not pull the source client record into its context.
|
|
77
75
|
|
|
78
76
|
A pattern learned twice is a process failure. Encoding it prevents the third time.
|
|
79
77
|
|
|
80
78
|
## Artifact
|
|
81
79
|
|
|
82
|
-
**`patterns.md`** - candidates and evidence for this engagement, indexed by stage and situation trigger. A
|
|
80
|
+
**`patterns.md`** - candidates and evidence for this engagement, indexed by stage and situation trigger. A cross-client export is separate and explicitly approved, to a user-chosen destination: remove names, identifiers, distinctive operational details, secrets, and confidential code or data. Keep source receipts in the original record and export only permitted generalizations with their limits and counterexamples.
|
|
83
81
|
|
|
84
82
|
**`retrospectives/YYYY-MM-DD-<engagement>.md`** - reference to which patterns were extracted from this engagement.
|
|
85
83
|
|
|
@@ -93,4 +91,4 @@ Present the extracted patterns to the FDE: "From this engagement, I've identifie
|
|
|
93
91
|
- Patterns are steps, not principles. "Build trust" isn't a pattern; "fix a small visible bug on day one" is.
|
|
94
92
|
- Every pattern needs a situation trigger - the FDE must recognise when it applies.
|
|
95
93
|
- Version substantive changes. State the evidence and limits; repeated use is not automatic confirmation.
|
|
96
|
-
-
|
|
94
|
+
- Keep client evidence local to its record; share only explicitly approved generalizations.
|
|
@@ -4,8 +4,9 @@
|
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "c4ac99ee1517c0674e5324b289521116c58a9e0ac3de22c229be8da83438f4db",
|
|
6
6
|
"agents/openai.yaml": "93ac049cf1a9d0fdfdf67d34ca6d3dd33800e91334f38bb303828eab8c4b3aaf",
|
|
7
|
-
"references/close.md": "
|
|
8
|
-
"references/encode-pattern.md": "
|
|
7
|
+
"references/close.md": "55fa64212f20bb828e3d9550dd771258945deb42b2d2c01f2bdb523c835f9034",
|
|
8
|
+
"references/encode-pattern.md": "9740d97faa8491d168410916c9003ea9a651a1507da186dcb29ce6e58eba6773",
|
|
9
|
+
"references/land.md": "87dfffc8e39d35eaf23d510ba7e9913d48e90d2705eb9155ab192d12ea98d18d",
|
|
9
10
|
"references/task-context.md": "9066514a50043f3ad888d133d4e8b89b7132551e098cf2c80203c458a80126e5"
|
|
10
11
|
}
|
|
11
12
|
}
|
|
@@ -6,7 +6,7 @@ For a standalone handoff draft, use the supplied notes and project evidence; no
|
|
|
6
6
|
|
|
7
7
|
**Enter when:** the engagement is ending - the customer team must run this without the FDE.
|
|
8
8
|
|
|
9
|
-
**Read first:** for standalone work, use the supplied permitted operating notes, evidence and ownership; no engagement binding or CLI command is required. For a bound engagement, use bounded `fde handoff` or `fde resume`, then
|
|
9
|
+
**Read first:** for standalone work, use the supplied permitted operating notes, evidence and ownership; no engagement binding or CLI command is required. For a bound engagement, use bounded `fde handoff` or `fde resume`, then `fde recall <topic>` for relevant client patterns, earlier retrospectives, and missing evidence. Never initialize records merely to draft a handoff. Build the picture through relevant excerpts, not a full-directory load. Consult `terrain.md` only for code paths needed by the successor.
|
|
10
10
|
|
|
11
11
|
The engagement doesn't end at ship. It ends when the customer can maintain what was built without calling.
|
|
12
12
|
|
|
@@ -28,7 +28,7 @@ The engagement doesn't end at ship. It ends when the customer can maintain what
|
|
|
28
28
|
- Eval receipt: **n/a if no AI**, else final scoped eval result + operating owner and required human-review or bounded-automation authority recorded; kill switch / fallback named in `handoff.md`.
|
|
29
29
|
- One line in the retrospective: which bucket moved, by how much, vs baseline.
|
|
30
30
|
|
|
31
|
-
**2. The pattern.** Anything that happened here and
|
|
31
|
+
**2. The pattern.** Anything that happened here and may happen again - a compliance approach, a migration pattern, a stakeholder dynamic - is a candidate for the client's `patterns.md`. Use [encode-pattern](encode-pattern.md) to record applicability, counterexamples, and evidence. Cross-client generalizations need explicit approval and a user-chosen export destination under the applicable policy; closing an engagement does not authorize an automatic scan or export.
|
|
32
32
|
|
|
33
33
|
**3. The handoff.** Operational knowledge for the person woken at 2am, not technical documentation: the 3 things that will break and the fix for each · who holds the tribal knowledge · what each alert means · deploy and rollback in plain language. AI components additionally: model version, what normal output looks like (so drift is recognisable), fallback behaviour, who owns evaluation and corrective changes, and how to disable or contain the AI path using the supported fallback. Do not assume retraining is available or appropriate.
|
|
34
34
|
|
|
@@ -40,7 +40,7 @@ The engagement doesn't end at ship. It ends when the customer can maintain what
|
|
|
40
40
|
|
|
41
41
|
## Artifact
|
|
42
42
|
|
|
43
|
-
**`retrospectives/YYYY-MM-DD-<engagement>.md`** - one file per close
|
|
43
|
+
**`retrospectives/YYYY-MM-DD-<engagement>.md`** - one file per close, retaining dated lessons for targeted recall within this client. **`patterns.md`** - client pattern candidates and evidence. **`handoff.md`** - the 2am document, including the deployed revision and the policy, access, and ownership evidence current at handoff. If the project reopens, use [land](land.md) to recheck these before dependent action; closure evidence remains historical.
|
|
44
44
|
|
|
45
45
|
## Checkpoint
|
|
46
46
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
**Enter when:** the engagement is closing and reusable patterns exist, a technique worked well and will apply to future clients, the FDE notices themselves doing the same thing on a second engagement, or close identified a pattern worth preserving.
|
|
6
6
|
|
|
7
|
-
**Read first:** `decisions.md`, `reality.md`, `delivery.md`, `retrospectives/`, `context.md`. Patterns live in what was *done*, not what was planned.
|
|
7
|
+
**Read first:** permitted evidence from `decisions.md`, `reality.md`, `delivery.md`, `retrospectives/`, `patterns.md`, and `context.md`. For a bound engagement, use `fde recall <topic>` to retrieve relevant client patterns and retrospective excerpts; do not load whole directories. Patterns live in what was *done*, not what was planned.
|
|
8
8
|
|
|
9
9
|
The difference between a 5-year FDE and a 15-year FDE is not talent - it's encoded patterns. The 15-year FDE walks into a new engagement and recognises the situation in minutes because they've seen it before, named it, and know the move. Pattern extraction turns experience into reusable intelligence.
|
|
10
10
|
|
|
@@ -49,7 +49,7 @@ The difference between a 5-year FDE and a 15-year FDE is not talent - it's encod
|
|
|
49
49
|
| **Specific enough?** | Contains concrete steps, not just principles | "Build trust" / "Communicate well" - too vague to act on |
|
|
50
50
|
| **Repeatable?** | Applies to a class of situations, not just this one | Only worked because of a unique circumstance |
|
|
51
51
|
| **Falsifiable?** | You can tell when the pattern is working or not | No way to measure whether applying it helped |
|
|
52
|
-
| **
|
|
52
|
+
| **Useful again?** | A named move plus an artifact you could use when the situation and policy permit (pipe questions, CAB dance, eval golden shape, floor-drill script) | "We learned to communicate." No concrete move or conditions for reuse |
|
|
53
53
|
|
|
54
54
|
**4. Classify by stage.** Patterns sort into the same stages as the skills:
|
|
55
55
|
|
|
@@ -69,17 +69,15 @@ The difference between a 5-year FDE and a 15-year FDE is not talent - it's encod
|
|
|
69
69
|
- After modification: increment minor version with what changed and why
|
|
70
70
|
- After contradiction: note the counter-example, adjust the "watch out for" section
|
|
71
71
|
|
|
72
|
-
**6.
|
|
72
|
+
**6. Review before reuse.** Client patterns and retrospectives remain in that client's record. Recall relevant evidence with `fde recall <topic>` and check the situation trigger, applicability, counterexamples, and current policy before applying a move. Previous success is historical evidence, not present authority or proof of fit.
|
|
73
73
|
|
|
74
|
-
-
|
|
75
|
-
- Compare permitted decision summaries - are the same decisions being made?
|
|
76
|
-
- Compare permitted lessons - are the same lessons being learned twice?
|
|
74
|
+
Cross-client reuse requires an explicitly approved generalization exported to a user-chosen destination, permitted by the source customer's data policy. Review exactly what will leave the record before export. Do not automatically scan other clients, export patterns, or maintain a shared library. In the receiving engagement, use only the approved export and recheck applicability, counterexamples, and that customer's policy before reuse; do not pull the source client record into its context.
|
|
77
75
|
|
|
78
76
|
A pattern learned twice is a process failure. Encoding it prevents the third time.
|
|
79
77
|
|
|
80
78
|
## Artifact
|
|
81
79
|
|
|
82
|
-
**`patterns.md`** - candidates and evidence for this engagement, indexed by stage and situation trigger. A
|
|
80
|
+
**`patterns.md`** - candidates and evidence for this engagement, indexed by stage and situation trigger. A cross-client export is separate and explicitly approved, to a user-chosen destination: remove names, identifiers, distinctive operational details, secrets, and confidential code or data. Keep source receipts in the original record and export only permitted generalizations with their limits and counterexamples.
|
|
83
81
|
|
|
84
82
|
**`retrospectives/YYYY-MM-DD-<engagement>.md`** - reference to which patterns were extracted from this engagement.
|
|
85
83
|
|
|
@@ -93,4 +91,4 @@ Present the extracted patterns to the FDE: "From this engagement, I've identifie
|
|
|
93
91
|
- Patterns are steps, not principles. "Build trust" isn't a pattern; "fix a small visible bug on day one" is.
|
|
94
92
|
- Every pattern needs a situation trigger - the FDE must recognise when it applies.
|
|
95
93
|
- Version substantive changes. State the evidence and limits; repeated use is not automatic confirmation.
|
|
96
|
-
-
|
|
94
|
+
- Keep client evidence local to its record; share only explicitly approved generalizations.
|
|
@@ -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,8 +4,9 @@
|
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "36843356c2e89e2a9205a4edf47afb8fd489d2f719c72241e3fdc3209829d2d8",
|
|
6
6
|
"agents/openai.yaml": "53922bbe55ba23dc812c9bef311fbef238e2e25252100bdac7a8bd4f6c5e2780",
|
|
7
|
-
"references/close.md": "
|
|
8
|
-
"references/encode-pattern.md": "
|
|
7
|
+
"references/close.md": "55fa64212f20bb828e3d9550dd771258945deb42b2d2c01f2bdb523c835f9034",
|
|
8
|
+
"references/encode-pattern.md": "9740d97faa8491d168410916c9003ea9a651a1507da186dcb29ce6e58eba6773",
|
|
9
|
+
"references/land.md": "87dfffc8e39d35eaf23d510ba7e9913d48e90d2705eb9155ab192d12ea98d18d",
|
|
9
10
|
"references/runbook.md": "d32a40113941c603b97f09eabfd0e25afd25129102c6b07fa91a04fb4f8e93e7",
|
|
10
11
|
"references/task-context.md": "9066514a50043f3ad888d133d4e8b89b7132551e098cf2c80203c458a80126e5",
|
|
11
12
|
"references/verification.md": "8ee2502112a37eedfdacf929041e7b91e9e6fabb007408a1ee2e2992e3af6ff6"
|
|
@@ -6,7 +6,7 @@ For a standalone handoff draft, use the supplied notes and project evidence; no
|
|
|
6
6
|
|
|
7
7
|
**Enter when:** the engagement is ending - the customer team must run this without the FDE.
|
|
8
8
|
|
|
9
|
-
**Read first:** for standalone work, use the supplied permitted operating notes, evidence and ownership; no engagement binding or CLI command is required. For a bound engagement, use bounded `fde handoff` or `fde resume`, then
|
|
9
|
+
**Read first:** for standalone work, use the supplied permitted operating notes, evidence and ownership; no engagement binding or CLI command is required. For a bound engagement, use bounded `fde handoff` or `fde resume`, then `fde recall <topic>` for relevant client patterns, earlier retrospectives, and missing evidence. Never initialize records merely to draft a handoff. Build the picture through relevant excerpts, not a full-directory load. Consult `terrain.md` only for code paths needed by the successor.
|
|
10
10
|
|
|
11
11
|
The engagement doesn't end at ship. It ends when the customer can maintain what was built without calling.
|
|
12
12
|
|
|
@@ -28,7 +28,7 @@ The engagement doesn't end at ship. It ends when the customer can maintain what
|
|
|
28
28
|
- Eval receipt: **n/a if no AI**, else final scoped eval result + operating owner and required human-review or bounded-automation authority recorded; kill switch / fallback named in `handoff.md`.
|
|
29
29
|
- One line in the retrospective: which bucket moved, by how much, vs baseline.
|
|
30
30
|
|
|
31
|
-
**2. The pattern.** Anything that happened here and
|
|
31
|
+
**2. The pattern.** Anything that happened here and may happen again - a compliance approach, a migration pattern, a stakeholder dynamic - is a candidate for the client's `patterns.md`. Use [encode-pattern](encode-pattern.md) to record applicability, counterexamples, and evidence. Cross-client generalizations need explicit approval and a user-chosen export destination under the applicable policy; closing an engagement does not authorize an automatic scan or export.
|
|
32
32
|
|
|
33
33
|
**3. The handoff.** Operational knowledge for the person woken at 2am, not technical documentation: the 3 things that will break and the fix for each · who holds the tribal knowledge · what each alert means · deploy and rollback in plain language. AI components additionally: model version, what normal output looks like (so drift is recognisable), fallback behaviour, who owns evaluation and corrective changes, and how to disable or contain the AI path using the supported fallback. Do not assume retraining is available or appropriate.
|
|
34
34
|
|
|
@@ -40,7 +40,7 @@ The engagement doesn't end at ship. It ends when the customer can maintain what
|
|
|
40
40
|
|
|
41
41
|
## Artifact
|
|
42
42
|
|
|
43
|
-
**`retrospectives/YYYY-MM-DD-<engagement>.md`** - one file per close
|
|
43
|
+
**`retrospectives/YYYY-MM-DD-<engagement>.md`** - one file per close, retaining dated lessons for targeted recall within this client. **`patterns.md`** - client pattern candidates and evidence. **`handoff.md`** - the 2am document, including the deployed revision and the policy, access, and ownership evidence current at handoff. If the project reopens, use [land](land.md) to recheck these before dependent action; closure evidence remains historical.
|
|
44
44
|
|
|
45
45
|
## Checkpoint
|
|
46
46
|
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
**Enter when:** the engagement is closing and reusable patterns exist, a technique worked well and will apply to future clients, the FDE notices themselves doing the same thing on a second engagement, or close identified a pattern worth preserving.
|
|
6
6
|
|
|
7
|
-
**Read first:** `decisions.md`, `reality.md`, `delivery.md`, `retrospectives/`, `context.md`. Patterns live in what was *done*, not what was planned.
|
|
7
|
+
**Read first:** permitted evidence from `decisions.md`, `reality.md`, `delivery.md`, `retrospectives/`, `patterns.md`, and `context.md`. For a bound engagement, use `fde recall <topic>` to retrieve relevant client patterns and retrospective excerpts; do not load whole directories. Patterns live in what was *done*, not what was planned.
|
|
8
8
|
|
|
9
9
|
The difference between a 5-year FDE and a 15-year FDE is not talent - it's encoded patterns. The 15-year FDE walks into a new engagement and recognises the situation in minutes because they've seen it before, named it, and know the move. Pattern extraction turns experience into reusable intelligence.
|
|
10
10
|
|
|
@@ -49,7 +49,7 @@ The difference between a 5-year FDE and a 15-year FDE is not talent - it's encod
|
|
|
49
49
|
| **Specific enough?** | Contains concrete steps, not just principles | "Build trust" / "Communicate well" - too vague to act on |
|
|
50
50
|
| **Repeatable?** | Applies to a class of situations, not just this one | Only worked because of a unique circumstance |
|
|
51
51
|
| **Falsifiable?** | You can tell when the pattern is working or not | No way to measure whether applying it helped |
|
|
52
|
-
| **
|
|
52
|
+
| **Useful again?** | A named move plus an artifact you could use when the situation and policy permit (pipe questions, CAB dance, eval golden shape, floor-drill script) | "We learned to communicate." No concrete move or conditions for reuse |
|
|
53
53
|
|
|
54
54
|
**4. Classify by stage.** Patterns sort into the same stages as the skills:
|
|
55
55
|
|
|
@@ -69,17 +69,15 @@ The difference between a 5-year FDE and a 15-year FDE is not talent - it's encod
|
|
|
69
69
|
- After modification: increment minor version with what changed and why
|
|
70
70
|
- After contradiction: note the counter-example, adjust the "watch out for" section
|
|
71
71
|
|
|
72
|
-
**6.
|
|
72
|
+
**6. Review before reuse.** Client patterns and retrospectives remain in that client's record. Recall relevant evidence with `fde recall <topic>` and check the situation trigger, applicability, counterexamples, and current policy before applying a move. Previous success is historical evidence, not present authority or proof of fit.
|
|
73
73
|
|
|
74
|
-
-
|
|
75
|
-
- Compare permitted decision summaries - are the same decisions being made?
|
|
76
|
-
- Compare permitted lessons - are the same lessons being learned twice?
|
|
74
|
+
Cross-client reuse requires an explicitly approved generalization exported to a user-chosen destination, permitted by the source customer's data policy. Review exactly what will leave the record before export. Do not automatically scan other clients, export patterns, or maintain a shared library. In the receiving engagement, use only the approved export and recheck applicability, counterexamples, and that customer's policy before reuse; do not pull the source client record into its context.
|
|
77
75
|
|
|
78
76
|
A pattern learned twice is a process failure. Encoding it prevents the third time.
|
|
79
77
|
|
|
80
78
|
## Artifact
|
|
81
79
|
|
|
82
|
-
**`patterns.md`** - candidates and evidence for this engagement, indexed by stage and situation trigger. A
|
|
80
|
+
**`patterns.md`** - candidates and evidence for this engagement, indexed by stage and situation trigger. A cross-client export is separate and explicitly approved, to a user-chosen destination: remove names, identifiers, distinctive operational details, secrets, and confidential code or data. Keep source receipts in the original record and export only permitted generalizations with their limits and counterexamples.
|
|
83
81
|
|
|
84
82
|
**`retrospectives/YYYY-MM-DD-<engagement>.md`** - reference to which patterns were extracted from this engagement.
|
|
85
83
|
|
|
@@ -93,4 +91,4 @@ Present the extracted patterns to the FDE: "From this engagement, I've identifie
|
|
|
93
91
|
- Patterns are steps, not principles. "Build trust" isn't a pattern; "fix a small visible bug on day one" is.
|
|
94
92
|
- Every pattern needs a situation trigger - the FDE must recognise when it applies.
|
|
95
93
|
- Version substantive changes. State the evidence and limits; repeated use is not automatic confirmation.
|
|
96
|
-
-
|
|
94
|
+
- Keep client evidence local to its record; share only explicitly approved generalizations.
|
|
@@ -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.
|