fdeops 5.1.2 → 5.1.4
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 +7 -3
- package/bin/check.js +0 -9
- package/bin/fde.js +31 -10
- package/bin/lib/delivery-gaps.js +1 -1
- package/mcp/fdeops-ingest/package.json +1 -1
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/skills/build/.fde-generated.json +2 -2
- package/skills/build/references/build.md +2 -2
- package/skills/build/references/verification.md +2 -0
- package/skills/debug/.fde-generated.json +2 -2
- package/skills/debug/references/build.md +2 -2
- package/skills/debug/references/verification.md +2 -0
- package/skills/evaluate/.fde-generated.json +2 -2
- package/skills/evaluate/references/build.md +2 -2
- package/skills/evaluate/references/verification.md +2 -0
- package/skills/fde/references/build.md +2 -2
- package/skills/fde/references/close.md +2 -0
- package/skills/fde/references/plan.md +8 -19
- package/skills/fde/references/verification.md +2 -0
- package/skills/handoff/.fde-generated.json +1 -1
- package/skills/handoff/references/close.md +2 -0
- package/skills/integrate/.fde-generated.json +2 -2
- package/skills/integrate/references/build.md +2 -2
- package/skills/integrate/references/verification.md +2 -0
- package/skills/plan/.fde-generated.json +1 -1
- package/skills/plan/references/plan.md +8 -19
- package/skills/poc/.fde-generated.json +3 -3
- package/skills/poc/references/build.md +2 -2
- package/skills/poc/references/plan.md +8 -19
- package/skills/poc/references/verification.md +2 -0
- package/skills/qa/.fde-generated.json +2 -2
- package/skills/qa/references/build.md +2 -2
- package/skills/qa/references/verification.md +2 -0
- package/skills/review/.fde-generated.json +2 -2
- package/skills/review/references/build.md +2 -2
- package/skills/review/references/verification.md +2 -0
- package/skills/runbook/.fde-generated.json +1 -1
- package/skills/runbook/references/close.md +2 -0
- package/skills/ship/.fde-generated.json +2 -2
- package/skills/ship/references/build.md +2 -2
- package/skills/ship/references/verification.md +2 -0
package/README.md
CHANGED
|
@@ -12,19 +12,23 @@ Use it for a single integration, a small client project, or work within a larger
|
|
|
12
12
|
|
|
13
13
|
[Get started](#quick-start) · [Choose a task](#task-skills) · [Keep a customer record](#keep-a-customer-record) · [Documentation](docs/README.md)
|
|
14
14
|
|
|
15
|
+
<img width="1000" height="586" alt="fdeops-flow" src="https://github.com/user-attachments/assets/12bbec6a-d0b3-4d03-81aa-4b842731a044" />
|
|
16
|
+
|
|
15
17
|
## Quick start
|
|
16
18
|
|
|
17
|
-
|
|
19
|
+
Use FDEOps with an AI coding agent that supports skills. Start with one task, or let `fde` coordinate a customer project.
|
|
18
20
|
|
|
19
21
|
### Work on a customer project
|
|
20
22
|
|
|
21
|
-
Run this in
|
|
23
|
+
Run this in the terminal where your coding agent runs, then select your agent in the installer:
|
|
22
24
|
|
|
23
25
|
```bash
|
|
24
26
|
npx skills add suboss87/fdeops --skill fde
|
|
25
27
|
```
|
|
26
28
|
|
|
27
|
-
|
|
29
|
+
This installation method uses Node.js (which includes `npx`) and Git. If either is missing, ask your agent to help with setup. The FDEOps CLI requires Node.js 18 or later. See [installation options](docs/install.md) for your agent.
|
|
30
|
+
|
|
31
|
+
Then select `fde` in your agent and start a conversation. In agents that support `@fde`, use:
|
|
28
32
|
|
|
29
33
|
```text
|
|
30
34
|
@fde this is client01. Their support team reads incoming requests,
|
package/bin/check.js
CHANGED
|
@@ -291,15 +291,6 @@ for (const phrase of badPhrases) {
|
|
|
291
291
|
fail(`README must not contain hype phrase: ${phrase}`)
|
|
292
292
|
}
|
|
293
293
|
}
|
|
294
|
-
// fdeops stands on its own. The README must never frame it as a derivative -
|
|
295
|
-
// a fork, port, or rebuild of another project.
|
|
296
|
-
const derivativeFraming = [
|
|
297
|
-
/\b(fork of|forked from|port of|rebuild of|reimplementation of|based on)\s+[A-Z]/,
|
|
298
|
-
/\b(inspired by|built on top of|powered by)\s+[A-Z][A-Za-z0-9-]+/,
|
|
299
|
-
]
|
|
300
|
-
for (const rx of derivativeFraming) {
|
|
301
|
-
if (rx.test(readme)) fail(`README must not frame fdeops as derivative: ${rx}`)
|
|
302
|
-
}
|
|
303
294
|
if (/docs\/internal|PMF_360/i.test(readme)) {
|
|
304
295
|
fail('README must not link docs/internal or PMF_360')
|
|
305
296
|
}
|
package/bin/fde.js
CHANGED
|
@@ -76,7 +76,15 @@ function maskedSections(sections, maxBytes = context.DEFAULT_BYTES, heading = ''
|
|
|
76
76
|
return prefix + context.boundedSections(sections.map(text => masking.mask(text)), maxBytes - Buffer.byteLength(prefix))
|
|
77
77
|
}
|
|
78
78
|
const DEBRIEF_MAX_BYTES = 256 * 1024
|
|
79
|
-
const CODE_EXT = ['.js', '.ts', '.tsx', '.jsx', '.py', '.java', '.go', '.rb', '.cs', '.php']
|
|
79
|
+
const CODE_EXT = ['.js', '.mjs', '.cjs', '.ts', '.mts', '.cts', '.tsx', '.jsx', '.py', '.java', '.go', '.rb', '.cs', '.php']
|
|
80
|
+
function isTestCodeFile(file, cwd) {
|
|
81
|
+
if (!CODE_EXT.includes(path.extname(file))) return false
|
|
82
|
+
const parts = path.relative(cwd, file).split(path.sep)
|
|
83
|
+
const name = path.basename(parts.pop(), path.extname(file))
|
|
84
|
+
return parts.some(part => /^(?:tests?|specs?|__tests__)$/i.test(part))
|
|
85
|
+
|| /(?:^|[._-])(?:test|spec)(?:[._-]|$)/i.test(name)
|
|
86
|
+
|| /(?:Tests?|Specs?)$/.test(name)
|
|
87
|
+
}
|
|
80
88
|
const CONF_EXT = CODE_EXT.concat(['.env', '.yaml', '.yml', '.json'])
|
|
81
89
|
// Bare "inference" is banned here: TypeScript codebases are full of "type
|
|
82
90
|
// inference" comments and the false positives poison the day-1 questions.
|
|
@@ -1252,7 +1260,11 @@ function cmdScan() {
|
|
|
1252
1260
|
out.push('='.repeat(60))
|
|
1253
1261
|
|
|
1254
1262
|
// stack + age
|
|
1255
|
-
const
|
|
1263
|
+
const candidates = walk(cwd, CONF_EXT.concat(['.md']), 5001)
|
|
1264
|
+
const files = candidates.slice(0, 5000)
|
|
1265
|
+
out.push(`COVERAGE ${files.length} supported files selected${candidates.length > 5000 ? ' - 5,000-file limit reached; scan is partial' : ''}`)
|
|
1266
|
+
out.push(' Hidden/generated directories, files over 1 MiB and unsupported formats are not inspected.')
|
|
1267
|
+
out.push(' Findings are capped per section. Absence of findings does not establish test coverage or production readiness.')
|
|
1256
1268
|
const extCount = {}
|
|
1257
1269
|
for (const f of files) { const e = path.extname(f); extCount[e] = (extCount[e] || 0) + 1 }
|
|
1258
1270
|
const langs = Object.entries(extCount).sort((a, b) => b[1] - a[1]).slice(0, 4).map(([e, n]) => `${e}:${n}`).join(' ')
|
|
@@ -1268,7 +1280,7 @@ function cmdScan() {
|
|
|
1268
1280
|
const counts = {}
|
|
1269
1281
|
churn.split('\n').filter(Boolean).forEach(f => { counts[f] = (counts[f] || 0) + 1 })
|
|
1270
1282
|
const top = Object.entries(counts).sort((a, b) => b[1] - a[1]).slice(0, 8)
|
|
1271
|
-
const testFiles = files.filter(f =>
|
|
1283
|
+
const testFiles = files.filter(f => isTestCodeFile(f, cwd))
|
|
1272
1284
|
if (top.length === 0) out.push(' (no commits in the last 90 days)')
|
|
1273
1285
|
for (const [f, n] of top) {
|
|
1274
1286
|
const base = path.basename(f).replace(/\.[^.]+$/, '')
|
|
@@ -1317,7 +1329,7 @@ function cmdScan() {
|
|
|
1317
1329
|
if (!reverts && readmeHits.length === 0) out.push(' none visible')
|
|
1318
1330
|
|
|
1319
1331
|
// test landscape
|
|
1320
|
-
const testCount =
|
|
1332
|
+
const testCount = codeFiles.filter(f => isTestCodeFile(f, cwd)).length
|
|
1321
1333
|
out.push(`\nTEST LANDSCAPE ${testCount} test file(s) across ${codeFiles.length} code files`)
|
|
1322
1334
|
|
|
1323
1335
|
// day-1 questions - each one earned by a finding above, skipped when empty
|
|
@@ -1330,7 +1342,7 @@ function cmdScan() {
|
|
|
1330
1342
|
if (tmp.length) asks.push("Which of these 'temporary' fixes are now load-bearing contracts?")
|
|
1331
1343
|
asks.length
|
|
1332
1344
|
? asks.slice(0, 5).forEach((q, i) => out.push(` ${i + 1}. ${q}`))
|
|
1333
|
-
: out.push('
|
|
1345
|
+
: out.push(codeFiles.length ? ' No additional questions from these heuristics; inspect the untested paths with the team.' : ' No supported code files inspected; identify the application files before relying on this scan.')
|
|
1334
1346
|
|
|
1335
1347
|
out.push('\n' + '-'.repeat(60))
|
|
1336
1348
|
out.push("Facts only - interpretation is the FDE's (or @fde's) job.")
|
|
@@ -1969,6 +1981,7 @@ function printDebriefReview(text, eng) {
|
|
|
1969
1981
|
}
|
|
1970
1982
|
}
|
|
1971
1983
|
console.log('REVIEW (one screen - confirm once, then apply)\n')
|
|
1984
|
+
console.log('PENDING UPDATE - not yet saved. Review these proposed changes:\n')
|
|
1972
1985
|
const order = [
|
|
1973
1986
|
['decided', buckets.decided],
|
|
1974
1987
|
['stated asks', buckets.asked],
|
|
@@ -1994,10 +2007,14 @@ function printDebriefReview(text, eng) {
|
|
|
1994
2007
|
const measured = recorded.some(row => row.state !== 'unmeasured')
|
|
1995
2008
|
const evidenced = recorded.some(row => !row.evidenceMissing)
|
|
1996
2009
|
const accepted = recorded.some(row => row.state === 'accepted')
|
|
1997
|
-
console.log('
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2010
|
+
console.log('\nSAVED RECORD - before this update; pending changes above are not included:')
|
|
2011
|
+
if (!recorded.length) {
|
|
2012
|
+
console.log(' No delivery results saved yet. Review the proposed delivery above before applying.')
|
|
2013
|
+
} else {
|
|
2014
|
+
console.log(` - result: ${measured ? 'recorded; check its scope in the value ledger' : 'not yet recorded'}`)
|
|
2015
|
+
console.log(` - evidence: ${evidenced ? 'recorded; review its source' : 'not yet recorded'}`)
|
|
2016
|
+
console.log(` - customer approval: ${accepted ? 'recorded for a prior result; not this proposal' : 'not yet recorded'}`)
|
|
2017
|
+
}
|
|
2001
2018
|
console.log(' Saving this update confirms your record, not customer acceptance.\n')
|
|
2002
2019
|
}
|
|
2003
2020
|
|
|
@@ -2610,7 +2627,11 @@ function cmdHandoff(args, label = 'Handoff') {
|
|
|
2610
2627
|
out = path.resolve(parsed.args[1])
|
|
2611
2628
|
}
|
|
2612
2629
|
const eng = resolveEngagement()
|
|
2613
|
-
if (!eng) {
|
|
2630
|
+
if (!eng) {
|
|
2631
|
+
const skill = label === 'Handoff' ? 'handoff' : 'readout'
|
|
2632
|
+
console.error(`This command exports an existing customer record; none is selected.\nFor a standalone draft, ask your agent to use the ${skill} skill with supplied notes; no record is required.\nTo keep an ongoing customer record, run: fde resume --init <name>`)
|
|
2633
|
+
process.exit(2)
|
|
2634
|
+
}
|
|
2614
2635
|
const success = stripTemplateNoise(readClean(eng, 'success.md'))
|
|
2615
2636
|
const signer = ((success.match(/^\*\*Stakeholder who signs off:\*\*[^\S\n]*(.*)$/m) || [])[1] || '').trim()
|
|
2616
2637
|
const ledger = parseValueLedger(eng).rows
|
package/bin/lib/delivery-gaps.js
CHANGED
|
@@ -17,7 +17,7 @@ function deliverySummary(e) {
|
|
|
17
17
|
const unmeasured = rows.filter(r => r.state === 'unmeasured').length
|
|
18
18
|
if (unmeasured) add('measurement', `${unmeasured} outcome${unmeasured === 1 ? '' : 's'} not yet measured`, 'Agree how to measure the outcome and collect the result', 'delivery.md')
|
|
19
19
|
const claimed = rows.filter(r => r.state === 'claimed').length
|
|
20
|
-
if (claimed) add('acceptance', `${claimed}
|
|
20
|
+
if (claimed) add('acceptance', `${claimed} reported result${claimed === 1 ? '' : 's'} awaiting acceptance`, 'Ask the acceptance owner to review the reported result and its evidence', 'delivery.md')
|
|
21
21
|
if (signals.trust === 'amber') add('trust', 'Check in with the customer: trust is watch', 'Check the customer concern and agree the next step', 'stakeholders.md')
|
|
22
22
|
if (signals.stale) add('stale-trust', 'Reconfirm the dated trust signal', 'Check whether the recorded customer signal still applies', 'stakeholders.md')
|
|
23
23
|
if (!e.hasNext) add('next', 'Set the next action', 'Set one next action with an owner and completion check', 'context.md')
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fdeops",
|
|
3
|
-
"version": "5.1.
|
|
3
|
+
"version": "5.1.4",
|
|
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.4",
|
|
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",
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "19f32ecae72b96ee19cb87658ddd998cce96ec2e3960255d13fcc2906c6d0b6b",
|
|
6
|
-
"references/build.md": "
|
|
6
|
+
"references/build.md": "3f8b5e52eb874ee4e99db5e0b70d1ccca1134f667a39279d6b4e55629832ae75",
|
|
7
7
|
"references/debug.md": "c3bb344d38cc3552cb4e230c601a9be3fe173af2b2efb89aab6b7b04339f24f4",
|
|
8
8
|
"references/eval-pack.md": "0590b85d3cae0903c6b1274540c92eaa2a4373047e8a0548d6942516ef0bb9e1",
|
|
9
9
|
"references/integrate.md": "d0de35a783902ca8b4762e3a42a14f467766d56a928c3a5cf11adac2a6ba90ba",
|
|
@@ -11,6 +11,6 @@
|
|
|
11
11
|
"references/review.md": "63a007f78288089cc84cccc72647e8ce6721b7efa0f4f8d6774c0f0af594749d",
|
|
12
12
|
"references/ship.md": "8cdcb2d4d6eb57e0adf3f1996bc02ae66920852ca304d2afd778fa483b7e969a",
|
|
13
13
|
"references/task-context.md": "28684273e9d6edf1d05fb02c96caf4223e19b73e7ae840bdec2ff0bf06e3bc27",
|
|
14
|
-
"references/verification.md": "
|
|
14
|
+
"references/verification.md": "62bb4fb40d9b71c6481c57a4564bcc98c4014a8be5d4aedfe1eb3f7f90d5e1f7"
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -9,9 +9,9 @@ Use the permitted context and authority in [task context](task-context.md). This
|
|
|
9
9
|
1. Identify the repository, its instructions, working tree, relevant callers, and test commands. Inspect examples before creating abstractions. Preserve unrelated edits and state which dependencies or interfaces the change touches. Before changing an untested legacy path, capture the undocumented behavior callers depend on with targeted characterization checks; distinguish behavior to preserve from the intended change.
|
|
10
10
|
2. State the observable outcome, constraints, and acceptance checks. Reuse agreed criteria for routine fixes. If a consequential product choice is unresolved, surface that choice while continuing independent investigation; do not invent acceptance.
|
|
11
11
|
3. Choose the smallest coherent path that demonstrates the outcome through the real entry point. Include the necessary storage, error handling, and interface behavior in that slice. Name the failure that stops expansion and the recovery path for stateful changes.
|
|
12
|
-
4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code.
|
|
12
|
+
4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code. When changing dependencies, inspect the package source, requested version, lockfile changes and repository install-script policy before executing package code. Use the approved package manager and bootstrap controls; do not blanket-enable scripts or apply unrelated dependency upgrades.
|
|
13
13
|
5. Add or update automated coverage for changed behavior when meaningful and feasible, including the relevant failure path. Existing tests must actually exercise the change; explain manual-only coverage and its limits. Run focused checks, then required repository checks. Exercise the actual affected journey with [QA](qa.md) when appropriate. For uncertain model behavior, use [eval-pack](eval-pack.md). Record results with [verification](verification.md), including checks that could not run.
|
|
14
|
-
6. Inspect the final diff against the agreed outcome. For substantial or risky work, seek [review](review.md) using an actual separate reviewer when available; identify a self-check honestly. Reverify affected behavior after fixes.
|
|
14
|
+
6. Inspect the final diff against the agreed outcome. If public behavior, interfaces, configuration or operating steps changed, update affected existing documentation and examples; exercise relevant commands or clearly mark checks that could not run. For substantial or risky work, seek [review](review.md) using an actual separate reviewer when available; identify a self-check honestly. Reverify affected behavior after fixes.
|
|
15
15
|
|
|
16
16
|
## Deliverable and acceptance
|
|
17
17
|
|
|
@@ -13,6 +13,8 @@ Use [task context](task-context.md). This method returns evidence directly or wr
|
|
|
13
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
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
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
|
+
|
|
16
18
|
## Receipt
|
|
17
19
|
|
|
18
20
|
Use one compact entry per check or a table with these fields:
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "7862670d5c023f0195e0b3fa8b52a3b33796813e53aaad083ae82a9a469e0faa",
|
|
6
|
-
"references/build.md": "
|
|
6
|
+
"references/build.md": "3f8b5e52eb874ee4e99db5e0b70d1ccca1134f667a39279d6b4e55629832ae75",
|
|
7
7
|
"references/debug.md": "c3bb344d38cc3552cb4e230c601a9be3fe173af2b2efb89aab6b7b04339f24f4",
|
|
8
8
|
"references/eval-pack.md": "0590b85d3cae0903c6b1274540c92eaa2a4373047e8a0548d6942516ef0bb9e1",
|
|
9
9
|
"references/integrate.md": "d0de35a783902ca8b4762e3a42a14f467766d56a928c3a5cf11adac2a6ba90ba",
|
|
@@ -11,6 +11,6 @@
|
|
|
11
11
|
"references/review.md": "63a007f78288089cc84cccc72647e8ce6721b7efa0f4f8d6774c0f0af594749d",
|
|
12
12
|
"references/ship.md": "8cdcb2d4d6eb57e0adf3f1996bc02ae66920852ca304d2afd778fa483b7e969a",
|
|
13
13
|
"references/task-context.md": "28684273e9d6edf1d05fb02c96caf4223e19b73e7ae840bdec2ff0bf06e3bc27",
|
|
14
|
-
"references/verification.md": "
|
|
14
|
+
"references/verification.md": "62bb4fb40d9b71c6481c57a4564bcc98c4014a8be5d4aedfe1eb3f7f90d5e1f7"
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -9,9 +9,9 @@ Use the permitted context and authority in [task context](task-context.md). This
|
|
|
9
9
|
1. Identify the repository, its instructions, working tree, relevant callers, and test commands. Inspect examples before creating abstractions. Preserve unrelated edits and state which dependencies or interfaces the change touches. Before changing an untested legacy path, capture the undocumented behavior callers depend on with targeted characterization checks; distinguish behavior to preserve from the intended change.
|
|
10
10
|
2. State the observable outcome, constraints, and acceptance checks. Reuse agreed criteria for routine fixes. If a consequential product choice is unresolved, surface that choice while continuing independent investigation; do not invent acceptance.
|
|
11
11
|
3. Choose the smallest coherent path that demonstrates the outcome through the real entry point. Include the necessary storage, error handling, and interface behavior in that slice. Name the failure that stops expansion and the recovery path for stateful changes.
|
|
12
|
-
4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code.
|
|
12
|
+
4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code. When changing dependencies, inspect the package source, requested version, lockfile changes and repository install-script policy before executing package code. Use the approved package manager and bootstrap controls; do not blanket-enable scripts or apply unrelated dependency upgrades.
|
|
13
13
|
5. Add or update automated coverage for changed behavior when meaningful and feasible, including the relevant failure path. Existing tests must actually exercise the change; explain manual-only coverage and its limits. Run focused checks, then required repository checks. Exercise the actual affected journey with [QA](qa.md) when appropriate. For uncertain model behavior, use [eval-pack](eval-pack.md). Record results with [verification](verification.md), including checks that could not run.
|
|
14
|
-
6. Inspect the final diff against the agreed outcome. For substantial or risky work, seek [review](review.md) using an actual separate reviewer when available; identify a self-check honestly. Reverify affected behavior after fixes.
|
|
14
|
+
6. Inspect the final diff against the agreed outcome. If public behavior, interfaces, configuration or operating steps changed, update affected existing documentation and examples; exercise relevant commands or clearly mark checks that could not run. For substantial or risky work, seek [review](review.md) using an actual separate reviewer when available; identify a self-check honestly. Reverify affected behavior after fixes.
|
|
15
15
|
|
|
16
16
|
## Deliverable and acceptance
|
|
17
17
|
|
|
@@ -13,6 +13,8 @@ Use [task context](task-context.md). This method returns evidence directly or wr
|
|
|
13
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
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
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
|
+
|
|
16
18
|
## Receipt
|
|
17
19
|
|
|
18
20
|
Use one compact entry per check or a table with these fields:
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "6a8f9490294e1a055c25984955d011db23ebb1eb2fb4f8634584d1455331425e",
|
|
6
|
-
"references/build.md": "
|
|
6
|
+
"references/build.md": "3f8b5e52eb874ee4e99db5e0b70d1ccca1134f667a39279d6b4e55629832ae75",
|
|
7
7
|
"references/debug.md": "c3bb344d38cc3552cb4e230c601a9be3fe173af2b2efb89aab6b7b04339f24f4",
|
|
8
8
|
"references/eval-pack.md": "0590b85d3cae0903c6b1274540c92eaa2a4373047e8a0548d6942516ef0bb9e1",
|
|
9
9
|
"references/integrate.md": "d0de35a783902ca8b4762e3a42a14f467766d56a928c3a5cf11adac2a6ba90ba",
|
|
@@ -11,6 +11,6 @@
|
|
|
11
11
|
"references/review.md": "63a007f78288089cc84cccc72647e8ce6721b7efa0f4f8d6774c0f0af594749d",
|
|
12
12
|
"references/ship.md": "8cdcb2d4d6eb57e0adf3f1996bc02ae66920852ca304d2afd778fa483b7e969a",
|
|
13
13
|
"references/task-context.md": "28684273e9d6edf1d05fb02c96caf4223e19b73e7ae840bdec2ff0bf06e3bc27",
|
|
14
|
-
"references/verification.md": "
|
|
14
|
+
"references/verification.md": "62bb4fb40d9b71c6481c57a4564bcc98c4014a8be5d4aedfe1eb3f7f90d5e1f7"
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -9,9 +9,9 @@ Use the permitted context and authority in [task context](task-context.md). This
|
|
|
9
9
|
1. Identify the repository, its instructions, working tree, relevant callers, and test commands. Inspect examples before creating abstractions. Preserve unrelated edits and state which dependencies or interfaces the change touches. Before changing an untested legacy path, capture the undocumented behavior callers depend on with targeted characterization checks; distinguish behavior to preserve from the intended change.
|
|
10
10
|
2. State the observable outcome, constraints, and acceptance checks. Reuse agreed criteria for routine fixes. If a consequential product choice is unresolved, surface that choice while continuing independent investigation; do not invent acceptance.
|
|
11
11
|
3. Choose the smallest coherent path that demonstrates the outcome through the real entry point. Include the necessary storage, error handling, and interface behavior in that slice. Name the failure that stops expansion and the recovery path for stateful changes.
|
|
12
|
-
4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code.
|
|
12
|
+
4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code. When changing dependencies, inspect the package source, requested version, lockfile changes and repository install-script policy before executing package code. Use the approved package manager and bootstrap controls; do not blanket-enable scripts or apply unrelated dependency upgrades.
|
|
13
13
|
5. Add or update automated coverage for changed behavior when meaningful and feasible, including the relevant failure path. Existing tests must actually exercise the change; explain manual-only coverage and its limits. Run focused checks, then required repository checks. Exercise the actual affected journey with [QA](qa.md) when appropriate. For uncertain model behavior, use [eval-pack](eval-pack.md). Record results with [verification](verification.md), including checks that could not run.
|
|
14
|
-
6. Inspect the final diff against the agreed outcome. For substantial or risky work, seek [review](review.md) using an actual separate reviewer when available; identify a self-check honestly. Reverify affected behavior after fixes.
|
|
14
|
+
6. Inspect the final diff against the agreed outcome. If public behavior, interfaces, configuration or operating steps changed, update affected existing documentation and examples; exercise relevant commands or clearly mark checks that could not run. For substantial or risky work, seek [review](review.md) using an actual separate reviewer when available; identify a self-check honestly. Reverify affected behavior after fixes.
|
|
15
15
|
|
|
16
16
|
## Deliverable and acceptance
|
|
17
17
|
|
|
@@ -13,6 +13,8 @@ Use [task context](task-context.md). This method returns evidence directly or wr
|
|
|
13
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
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
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
|
+
|
|
16
18
|
## Receipt
|
|
17
19
|
|
|
18
20
|
Use one compact entry per check or a table with these fields:
|
|
@@ -9,9 +9,9 @@ Use the permitted context and authority in [task context](task-context.md). This
|
|
|
9
9
|
1. Identify the repository, its instructions, working tree, relevant callers, and test commands. Inspect examples before creating abstractions. Preserve unrelated edits and state which dependencies or interfaces the change touches. Before changing an untested legacy path, capture the undocumented behavior callers depend on with targeted characterization checks; distinguish behavior to preserve from the intended change.
|
|
10
10
|
2. State the observable outcome, constraints, and acceptance checks. Reuse agreed criteria for routine fixes. If a consequential product choice is unresolved, surface that choice while continuing independent investigation; do not invent acceptance.
|
|
11
11
|
3. Choose the smallest coherent path that demonstrates the outcome through the real entry point. Include the necessary storage, error handling, and interface behavior in that slice. Name the failure that stops expansion and the recovery path for stateful changes.
|
|
12
|
-
4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code.
|
|
12
|
+
4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code. When changing dependencies, inspect the package source, requested version, lockfile changes and repository install-script policy before executing package code. Use the approved package manager and bootstrap controls; do not blanket-enable scripts or apply unrelated dependency upgrades.
|
|
13
13
|
5. Add or update automated coverage for changed behavior when meaningful and feasible, including the relevant failure path. Existing tests must actually exercise the change; explain manual-only coverage and its limits. Run focused checks, then required repository checks. Exercise the actual affected journey with [QA](qa.md) when appropriate. For uncertain model behavior, use [eval-pack](eval-pack.md). Record results with [verification](verification.md), including checks that could not run.
|
|
14
|
-
6. Inspect the final diff against the agreed outcome. For substantial or risky work, seek [review](review.md) using an actual separate reviewer when available; identify a self-check honestly. Reverify affected behavior after fixes.
|
|
14
|
+
6. Inspect the final diff against the agreed outcome. If public behavior, interfaces, configuration or operating steps changed, update affected existing documentation and examples; exercise relevant commands or clearly mark checks that could not run. For substantial or risky work, seek [review](review.md) using an actual separate reviewer when available; identify a self-check honestly. Reverify affected behavior after fixes.
|
|
15
15
|
|
|
16
16
|
## Deliverable and acceptance
|
|
17
17
|
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
**Context:** apply [task context and evidence](task-context.md) before using the named records below.
|
|
4
4
|
|
|
5
|
+
For a standalone handoff draft, use the supplied notes and project evidence; no customer record is required. The `fde handoff` CLI exports an existing record. Use it only when a record is selected, not to create one merely for a draft.
|
|
6
|
+
|
|
5
7
|
**Enter when:** the engagement is ending - the customer team must run this without the FDE.
|
|
6
8
|
|
|
7
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 targeted `fde recall` for 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.
|
|
@@ -116,30 +116,19 @@ Write estimates to `decisions.md` under `## Sizing`. Include the assumptions - w
|
|
|
116
116
|
|
|
117
117
|
## Method - migration strategy (when the engagement is "move from X to Y")
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
Choose the strategy from the existing contracts and permitted operating constraints before sequencing changes.
|
|
120
120
|
|
|
121
|
-
**Step 1: Classify the
|
|
121
|
+
**Step 1: Classify what changes.** Rehost moves infrastructure; replatform changes platform dependencies; refactor changes implementation; replace introduces a different system; retire removes one. Identify affected data, callers, ownership and external effects. The label alone does not determine the risk.
|
|
122
122
|
|
|
123
|
-
|
|
124
|
-
|------|---------------|-------------|
|
|
125
|
-
| **Rehost** (lift-and-shift) | Same code, different infrastructure | Low code risk, high ops risk |
|
|
126
|
-
| **Replatform** | Minor code changes to use new platform features | Medium risk, clear scope |
|
|
127
|
-
| **Refactor** | Rewrite components to fit the new architecture | High risk, scope creep magnet |
|
|
128
|
-
| **Replace** | Buy/build new, retire old | Highest risk, requires parallel running |
|
|
129
|
-
| **Retire** | Turn off, nobody uses it | Politically hard, technically easy |
|
|
123
|
+
**Step 2: Order by compatibility.** Map who calls or reads what, which versions coexist, and which prerequisite each change needs. There is no universal leaf-first order. Add compatible schema/API capabilities and reader support before switching dependent writers or callers. Remove an old contract only after its consumers and retention obligations permit it, within approved scope.
|
|
130
124
|
|
|
131
|
-
**Step
|
|
125
|
+
**Step 3: Choose cutover and data handling.** Compare a direct switch, staged replacement or parallel comparison against downtime, consistency, capacity and side-effect constraints. Parallel execution must not duplicate customer actions. For a live backfill, define resumable batches, how concurrent writes are preserved, and reconciliation of actual values and tenant ownership; row counts alone do not prove correctness. Use the existing platform's supported mechanisms and test their failure cases.
|
|
132
126
|
|
|
133
|
-
**Step
|
|
134
|
-
- **Big bang** - everything moves at once. Fast but catastrophic on failure. Only for small systems.
|
|
135
|
-
- **Strangler fig** - new traffic to new system, old traffic drains. Safe but slow. Preferred for anything load-bearing.
|
|
136
|
-
- **Parallel run** - both systems run, outputs compared. Expensive but safest for data-critical systems.
|
|
127
|
+
**Step 4: Specify recovery before cutover.** Use the recovery required for release: rollback, restore, compensation or roll-forward must match the effects that persist and the agreed recovery limits. Do not route to an old binary that cannot read new writes. Identify the irreversible boundary, required authority, operator and stop conditions; exercise the chosen recovery in a permitted representative environment before release. Missing recovery evidence blocks cutover, not useful planning or reversible preparation.
|
|
137
128
|
|
|
138
|
-
**Step
|
|
129
|
+
**Step 5: Define phase acceptance.** Check supported old/new version combinations, no lost updates, tenant isolation and relevant service-level targets. Record baseline, environment, thresholds, evidence and operating owner rather than imposing generic percentages.
|
|
139
130
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
Write migration strategy to `decisions.md` under `## Migration`. Each service gets a row: type, order, cutover method, rollback, success metric.
|
|
131
|
+
In a bound engagement, propose the migration plan in `decisions.md` under `## Migration`. Each step records compatibility prerequisites, cutover/data handling, recovery and acceptance evidence. Standalone work returns the same plan directly.
|
|
143
132
|
|
|
144
133
|
## When the plan changes mid-engagement
|
|
145
134
|
|
|
@@ -164,4 +153,4 @@ First visible slice goes to Marco, not Priya: he is the one whose morning change
|
|
|
164
153
|
- No kill list, no finished plan.
|
|
165
154
|
- No **Kill if** on a Now PR, that PR is hope.
|
|
166
155
|
- Estimates are ranges, not promises. Name the assumptions and the observation that voids them.
|
|
167
|
-
- Migrations:
|
|
156
|
+
- Migrations: compatibility determines order; verified recovery precedes cutover.
|
|
@@ -13,6 +13,8 @@ Use [task context](task-context.md). This method returns evidence directly or wr
|
|
|
13
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
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
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
|
+
|
|
16
18
|
## Receipt
|
|
17
19
|
|
|
18
20
|
Use one compact entry per check or a table with these fields:
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "9f08605914670f2c0bd09631d3d40c079e7f63174d1a2607e60ea6eca5d54d93",
|
|
6
|
-
"references/close.md": "
|
|
6
|
+
"references/close.md": "b3dbc1ecef12ee1c9d298e32a21d87ce61c9f6c88039d7a8b19970c6e3f21254",
|
|
7
7
|
"references/encode-pattern.md": "3be7bf9d0f69af31659423c54d6023a4af1556e2ce200fb025bf64d0757de4d8",
|
|
8
8
|
"references/task-context.md": "28684273e9d6edf1d05fb02c96caf4223e19b73e7ae840bdec2ff0bf06e3bc27"
|
|
9
9
|
}
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
**Context:** apply [task context and evidence](task-context.md) before using the named records below.
|
|
4
4
|
|
|
5
|
+
For a standalone handoff draft, use the supplied notes and project evidence; no customer record is required. The `fde handoff` CLI exports an existing record. Use it only when a record is selected, not to create one merely for a draft.
|
|
6
|
+
|
|
5
7
|
**Enter when:** the engagement is ending - the customer team must run this without the FDE.
|
|
6
8
|
|
|
7
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 targeted `fde recall` for 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.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "ea74e65eff6b189e1e2fb00c3553192116ccc475785eb82bfaee49819610dfd4",
|
|
6
|
-
"references/build.md": "
|
|
6
|
+
"references/build.md": "3f8b5e52eb874ee4e99db5e0b70d1ccca1134f667a39279d6b4e55629832ae75",
|
|
7
7
|
"references/debug.md": "c3bb344d38cc3552cb4e230c601a9be3fe173af2b2efb89aab6b7b04339f24f4",
|
|
8
8
|
"references/eval-pack.md": "0590b85d3cae0903c6b1274540c92eaa2a4373047e8a0548d6942516ef0bb9e1",
|
|
9
9
|
"references/integrate.md": "d0de35a783902ca8b4762e3a42a14f467766d56a928c3a5cf11adac2a6ba90ba",
|
|
@@ -11,6 +11,6 @@
|
|
|
11
11
|
"references/review.md": "63a007f78288089cc84cccc72647e8ce6721b7efa0f4f8d6774c0f0af594749d",
|
|
12
12
|
"references/ship.md": "8cdcb2d4d6eb57e0adf3f1996bc02ae66920852ca304d2afd778fa483b7e969a",
|
|
13
13
|
"references/task-context.md": "28684273e9d6edf1d05fb02c96caf4223e19b73e7ae840bdec2ff0bf06e3bc27",
|
|
14
|
-
"references/verification.md": "
|
|
14
|
+
"references/verification.md": "62bb4fb40d9b71c6481c57a4564bcc98c4014a8be5d4aedfe1eb3f7f90d5e1f7"
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -9,9 +9,9 @@ Use the permitted context and authority in [task context](task-context.md). This
|
|
|
9
9
|
1. Identify the repository, its instructions, working tree, relevant callers, and test commands. Inspect examples before creating abstractions. Preserve unrelated edits and state which dependencies or interfaces the change touches. Before changing an untested legacy path, capture the undocumented behavior callers depend on with targeted characterization checks; distinguish behavior to preserve from the intended change.
|
|
10
10
|
2. State the observable outcome, constraints, and acceptance checks. Reuse agreed criteria for routine fixes. If a consequential product choice is unresolved, surface that choice while continuing independent investigation; do not invent acceptance.
|
|
11
11
|
3. Choose the smallest coherent path that demonstrates the outcome through the real entry point. Include the necessary storage, error handling, and interface behavior in that slice. Name the failure that stops expansion and the recovery path for stateful changes.
|
|
12
|
-
4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code.
|
|
12
|
+
4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code. When changing dependencies, inspect the package source, requested version, lockfile changes and repository install-script policy before executing package code. Use the approved package manager and bootstrap controls; do not blanket-enable scripts or apply unrelated dependency upgrades.
|
|
13
13
|
5. Add or update automated coverage for changed behavior when meaningful and feasible, including the relevant failure path. Existing tests must actually exercise the change; explain manual-only coverage and its limits. Run focused checks, then required repository checks. Exercise the actual affected journey with [QA](qa.md) when appropriate. For uncertain model behavior, use [eval-pack](eval-pack.md). Record results with [verification](verification.md), including checks that could not run.
|
|
14
|
-
6. Inspect the final diff against the agreed outcome. For substantial or risky work, seek [review](review.md) using an actual separate reviewer when available; identify a self-check honestly. Reverify affected behavior after fixes.
|
|
14
|
+
6. Inspect the final diff against the agreed outcome. If public behavior, interfaces, configuration or operating steps changed, update affected existing documentation and examples; exercise relevant commands or clearly mark checks that could not run. For substantial or risky work, seek [review](review.md) using an actual separate reviewer when available; identify a self-check honestly. Reverify affected behavior after fixes.
|
|
15
15
|
|
|
16
16
|
## Deliverable and acceptance
|
|
17
17
|
|
|
@@ -13,6 +13,8 @@ Use [task context](task-context.md). This method returns evidence directly or wr
|
|
|
13
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
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
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
|
+
|
|
16
18
|
## Receipt
|
|
17
19
|
|
|
18
20
|
Use one compact entry per check or a table with these fields:
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "7228088cfea2128c220475fb1b2a417e3aecfb70dbd96a8fcbbc6b652ab0e3a2",
|
|
6
6
|
"references/business-case.md": "32e000e8351cd59f9eaad8be40babb276df69948ea4f81e01a4672e47f48cb25",
|
|
7
|
-
"references/plan.md": "
|
|
7
|
+
"references/plan.md": "4ccc74a3476da1c10bf8c05d249d573bcf73d13b8b6c88bd769635d816d0914b",
|
|
8
8
|
"references/task-context.md": "28684273e9d6edf1d05fb02c96caf4223e19b73e7ae840bdec2ff0bf06e3bc27"
|
|
9
9
|
}
|
|
10
10
|
}
|
|
@@ -116,30 +116,19 @@ Write estimates to `decisions.md` under `## Sizing`. Include the assumptions - w
|
|
|
116
116
|
|
|
117
117
|
## Method - migration strategy (when the engagement is "move from X to Y")
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
Choose the strategy from the existing contracts and permitted operating constraints before sequencing changes.
|
|
120
120
|
|
|
121
|
-
**Step 1: Classify the
|
|
121
|
+
**Step 1: Classify what changes.** Rehost moves infrastructure; replatform changes platform dependencies; refactor changes implementation; replace introduces a different system; retire removes one. Identify affected data, callers, ownership and external effects. The label alone does not determine the risk.
|
|
122
122
|
|
|
123
|
-
|
|
124
|
-
|------|---------------|-------------|
|
|
125
|
-
| **Rehost** (lift-and-shift) | Same code, different infrastructure | Low code risk, high ops risk |
|
|
126
|
-
| **Replatform** | Minor code changes to use new platform features | Medium risk, clear scope |
|
|
127
|
-
| **Refactor** | Rewrite components to fit the new architecture | High risk, scope creep magnet |
|
|
128
|
-
| **Replace** | Buy/build new, retire old | Highest risk, requires parallel running |
|
|
129
|
-
| **Retire** | Turn off, nobody uses it | Politically hard, technically easy |
|
|
123
|
+
**Step 2: Order by compatibility.** Map who calls or reads what, which versions coexist, and which prerequisite each change needs. There is no universal leaf-first order. Add compatible schema/API capabilities and reader support before switching dependent writers or callers. Remove an old contract only after its consumers and retention obligations permit it, within approved scope.
|
|
130
124
|
|
|
131
|
-
**Step
|
|
125
|
+
**Step 3: Choose cutover and data handling.** Compare a direct switch, staged replacement or parallel comparison against downtime, consistency, capacity and side-effect constraints. Parallel execution must not duplicate customer actions. For a live backfill, define resumable batches, how concurrent writes are preserved, and reconciliation of actual values and tenant ownership; row counts alone do not prove correctness. Use the existing platform's supported mechanisms and test their failure cases.
|
|
132
126
|
|
|
133
|
-
**Step
|
|
134
|
-
- **Big bang** - everything moves at once. Fast but catastrophic on failure. Only for small systems.
|
|
135
|
-
- **Strangler fig** - new traffic to new system, old traffic drains. Safe but slow. Preferred for anything load-bearing.
|
|
136
|
-
- **Parallel run** - both systems run, outputs compared. Expensive but safest for data-critical systems.
|
|
127
|
+
**Step 4: Specify recovery before cutover.** Use the recovery required for release: rollback, restore, compensation or roll-forward must match the effects that persist and the agreed recovery limits. Do not route to an old binary that cannot read new writes. Identify the irreversible boundary, required authority, operator and stop conditions; exercise the chosen recovery in a permitted representative environment before release. Missing recovery evidence blocks cutover, not useful planning or reversible preparation.
|
|
137
128
|
|
|
138
|
-
**Step
|
|
129
|
+
**Step 5: Define phase acceptance.** Check supported old/new version combinations, no lost updates, tenant isolation and relevant service-level targets. Record baseline, environment, thresholds, evidence and operating owner rather than imposing generic percentages.
|
|
139
130
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
Write migration strategy to `decisions.md` under `## Migration`. Each service gets a row: type, order, cutover method, rollback, success metric.
|
|
131
|
+
In a bound engagement, propose the migration plan in `decisions.md` under `## Migration`. Each step records compatibility prerequisites, cutover/data handling, recovery and acceptance evidence. Standalone work returns the same plan directly.
|
|
143
132
|
|
|
144
133
|
## When the plan changes mid-engagement
|
|
145
134
|
|
|
@@ -164,4 +153,4 @@ First visible slice goes to Marco, not Priya: he is the one whose morning change
|
|
|
164
153
|
- No kill list, no finished plan.
|
|
165
154
|
- No **Kill if** on a Now PR, that PR is hope.
|
|
166
155
|
- Estimates are ranges, not promises. Name the assumptions and the observation that voids them.
|
|
167
|
-
- Migrations:
|
|
156
|
+
- Migrations: compatibility determines order; verified recovery precedes cutover.
|
|
@@ -4,13 +4,13 @@
|
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "bceae7ba11c006b3d1e93e330a80cc58eeef55d863cc374653eef8fd124c3056",
|
|
6
6
|
"references/audit.md": "ed32ea78cbccb100742dd838e8cf4cd4b6f33ad44b3de7424fc624670d571dbc",
|
|
7
|
-
"references/build.md": "
|
|
7
|
+
"references/build.md": "3f8b5e52eb874ee4e99db5e0b70d1ccca1134f667a39279d6b4e55629832ae75",
|
|
8
8
|
"references/business-case.md": "32e000e8351cd59f9eaad8be40babb276df69948ea4f81e01a4672e47f48cb25",
|
|
9
9
|
"references/debug.md": "c3bb344d38cc3552cb4e230c601a9be3fe173af2b2efb89aab6b7b04339f24f4",
|
|
10
10
|
"references/discover.md": "f65aa11a539b4dbbed70cfaa94ec2a35595aa9a2d0282790510b933ac9c721ce",
|
|
11
11
|
"references/eval-pack.md": "0590b85d3cae0903c6b1274540c92eaa2a4373047e8a0548d6942516ef0bb9e1",
|
|
12
12
|
"references/integrate.md": "d0de35a783902ca8b4762e3a42a14f467766d56a928c3a5cf11adac2a6ba90ba",
|
|
13
|
-
"references/plan.md": "
|
|
13
|
+
"references/plan.md": "4ccc74a3476da1c10bf8c05d249d573bcf73d13b8b6c88bd769635d816d0914b",
|
|
14
14
|
"references/poc.md": "818dc90c2d401819735233ab9d69df171675d75abf8644c403dab7dd1dcf9199",
|
|
15
15
|
"references/qa.md": "d8f58e6d36436469a58aeb1107037f3e27fa81ff5b82d0e4df3c23eeadaf683c",
|
|
16
16
|
"references/review.md": "63a007f78288089cc84cccc72647e8ce6721b7efa0f4f8d6774c0f0af594749d",
|
|
@@ -18,6 +18,6 @@
|
|
|
18
18
|
"references/task-context.md": "28684273e9d6edf1d05fb02c96caf4223e19b73e7ae840bdec2ff0bf06e3bc27",
|
|
19
19
|
"references/test-assumptions.md": "bf60d8bb4c0701fcffb196d78f7f6c8b1c472fc877fb2caf41058fbf8e2415a1",
|
|
20
20
|
"references/three-options.md": "168fab9fb8ac8de85b0d1fa58e1db17deaa244cdef8c99623a04a0a6c70fe52c",
|
|
21
|
-
"references/verification.md": "
|
|
21
|
+
"references/verification.md": "62bb4fb40d9b71c6481c57a4564bcc98c4014a8be5d4aedfe1eb3f7f90d5e1f7"
|
|
22
22
|
}
|
|
23
23
|
}
|
|
@@ -9,9 +9,9 @@ Use the permitted context and authority in [task context](task-context.md). This
|
|
|
9
9
|
1. Identify the repository, its instructions, working tree, relevant callers, and test commands. Inspect examples before creating abstractions. Preserve unrelated edits and state which dependencies or interfaces the change touches. Before changing an untested legacy path, capture the undocumented behavior callers depend on with targeted characterization checks; distinguish behavior to preserve from the intended change.
|
|
10
10
|
2. State the observable outcome, constraints, and acceptance checks. Reuse agreed criteria for routine fixes. If a consequential product choice is unresolved, surface that choice while continuing independent investigation; do not invent acceptance.
|
|
11
11
|
3. Choose the smallest coherent path that demonstrates the outcome through the real entry point. Include the necessary storage, error handling, and interface behavior in that slice. Name the failure that stops expansion and the recovery path for stateful changes.
|
|
12
|
-
4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code.
|
|
12
|
+
4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code. When changing dependencies, inspect the package source, requested version, lockfile changes and repository install-script policy before executing package code. Use the approved package manager and bootstrap controls; do not blanket-enable scripts or apply unrelated dependency upgrades.
|
|
13
13
|
5. Add or update automated coverage for changed behavior when meaningful and feasible, including the relevant failure path. Existing tests must actually exercise the change; explain manual-only coverage and its limits. Run focused checks, then required repository checks. Exercise the actual affected journey with [QA](qa.md) when appropriate. For uncertain model behavior, use [eval-pack](eval-pack.md). Record results with [verification](verification.md), including checks that could not run.
|
|
14
|
-
6. Inspect the final diff against the agreed outcome. For substantial or risky work, seek [review](review.md) using an actual separate reviewer when available; identify a self-check honestly. Reverify affected behavior after fixes.
|
|
14
|
+
6. Inspect the final diff against the agreed outcome. If public behavior, interfaces, configuration or operating steps changed, update affected existing documentation and examples; exercise relevant commands or clearly mark checks that could not run. For substantial or risky work, seek [review](review.md) using an actual separate reviewer when available; identify a self-check honestly. Reverify affected behavior after fixes.
|
|
15
15
|
|
|
16
16
|
## Deliverable and acceptance
|
|
17
17
|
|
|
@@ -116,30 +116,19 @@ Write estimates to `decisions.md` under `## Sizing`. Include the assumptions - w
|
|
|
116
116
|
|
|
117
117
|
## Method - migration strategy (when the engagement is "move from X to Y")
|
|
118
118
|
|
|
119
|
-
|
|
119
|
+
Choose the strategy from the existing contracts and permitted operating constraints before sequencing changes.
|
|
120
120
|
|
|
121
|
-
**Step 1: Classify the
|
|
121
|
+
**Step 1: Classify what changes.** Rehost moves infrastructure; replatform changes platform dependencies; refactor changes implementation; replace introduces a different system; retire removes one. Identify affected data, callers, ownership and external effects. The label alone does not determine the risk.
|
|
122
122
|
|
|
123
|
-
|
|
124
|
-
|------|---------------|-------------|
|
|
125
|
-
| **Rehost** (lift-and-shift) | Same code, different infrastructure | Low code risk, high ops risk |
|
|
126
|
-
| **Replatform** | Minor code changes to use new platform features | Medium risk, clear scope |
|
|
127
|
-
| **Refactor** | Rewrite components to fit the new architecture | High risk, scope creep magnet |
|
|
128
|
-
| **Replace** | Buy/build new, retire old | Highest risk, requires parallel running |
|
|
129
|
-
| **Retire** | Turn off, nobody uses it | Politically hard, technically easy |
|
|
123
|
+
**Step 2: Order by compatibility.** Map who calls or reads what, which versions coexist, and which prerequisite each change needs. There is no universal leaf-first order. Add compatible schema/API capabilities and reader support before switching dependent writers or callers. Remove an old contract only after its consumers and retention obligations permit it, within approved scope.
|
|
130
124
|
|
|
131
|
-
**Step
|
|
125
|
+
**Step 3: Choose cutover and data handling.** Compare a direct switch, staged replacement or parallel comparison against downtime, consistency, capacity and side-effect constraints. Parallel execution must not duplicate customer actions. For a live backfill, define resumable batches, how concurrent writes are preserved, and reconciliation of actual values and tenant ownership; row counts alone do not prove correctness. Use the existing platform's supported mechanisms and test their failure cases.
|
|
132
126
|
|
|
133
|
-
**Step
|
|
134
|
-
- **Big bang** - everything moves at once. Fast but catastrophic on failure. Only for small systems.
|
|
135
|
-
- **Strangler fig** - new traffic to new system, old traffic drains. Safe but slow. Preferred for anything load-bearing.
|
|
136
|
-
- **Parallel run** - both systems run, outputs compared. Expensive but safest for data-critical systems.
|
|
127
|
+
**Step 4: Specify recovery before cutover.** Use the recovery required for release: rollback, restore, compensation or roll-forward must match the effects that persist and the agreed recovery limits. Do not route to an old binary that cannot read new writes. Identify the irreversible boundary, required authority, operator and stop conditions; exercise the chosen recovery in a permitted representative environment before release. Missing recovery evidence blocks cutover, not useful planning or reversible preparation.
|
|
137
128
|
|
|
138
|
-
**Step
|
|
129
|
+
**Step 5: Define phase acceptance.** Check supported old/new version combinations, no lost updates, tenant isolation and relevant service-level targets. Record baseline, environment, thresholds, evidence and operating owner rather than imposing generic percentages.
|
|
139
130
|
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
Write migration strategy to `decisions.md` under `## Migration`. Each service gets a row: type, order, cutover method, rollback, success metric.
|
|
131
|
+
In a bound engagement, propose the migration plan in `decisions.md` under `## Migration`. Each step records compatibility prerequisites, cutover/data handling, recovery and acceptance evidence. Standalone work returns the same plan directly.
|
|
143
132
|
|
|
144
133
|
## When the plan changes mid-engagement
|
|
145
134
|
|
|
@@ -164,4 +153,4 @@ First visible slice goes to Marco, not Priya: he is the one whose morning change
|
|
|
164
153
|
- No kill list, no finished plan.
|
|
165
154
|
- No **Kill if** on a Now PR, that PR is hope.
|
|
166
155
|
- Estimates are ranges, not promises. Name the assumptions and the observation that voids them.
|
|
167
|
-
- Migrations:
|
|
156
|
+
- Migrations: compatibility determines order; verified recovery precedes cutover.
|
|
@@ -13,6 +13,8 @@ Use [task context](task-context.md). This method returns evidence directly or wr
|
|
|
13
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
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
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
|
+
|
|
16
18
|
## Receipt
|
|
17
19
|
|
|
18
20
|
Use one compact entry per check or a table with these fields:
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "65b965474e847f240138c1ada0ee7d982affc421a24a0a7a37970021f8269a03",
|
|
6
|
-
"references/build.md": "
|
|
6
|
+
"references/build.md": "3f8b5e52eb874ee4e99db5e0b70d1ccca1134f667a39279d6b4e55629832ae75",
|
|
7
7
|
"references/debug.md": "c3bb344d38cc3552cb4e230c601a9be3fe173af2b2efb89aab6b7b04339f24f4",
|
|
8
8
|
"references/eval-pack.md": "0590b85d3cae0903c6b1274540c92eaa2a4373047e8a0548d6942516ef0bb9e1",
|
|
9
9
|
"references/integrate.md": "d0de35a783902ca8b4762e3a42a14f467766d56a928c3a5cf11adac2a6ba90ba",
|
|
@@ -11,6 +11,6 @@
|
|
|
11
11
|
"references/review.md": "63a007f78288089cc84cccc72647e8ce6721b7efa0f4f8d6774c0f0af594749d",
|
|
12
12
|
"references/ship.md": "8cdcb2d4d6eb57e0adf3f1996bc02ae66920852ca304d2afd778fa483b7e969a",
|
|
13
13
|
"references/task-context.md": "28684273e9d6edf1d05fb02c96caf4223e19b73e7ae840bdec2ff0bf06e3bc27",
|
|
14
|
-
"references/verification.md": "
|
|
14
|
+
"references/verification.md": "62bb4fb40d9b71c6481c57a4564bcc98c4014a8be5d4aedfe1eb3f7f90d5e1f7"
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -9,9 +9,9 @@ Use the permitted context and authority in [task context](task-context.md). This
|
|
|
9
9
|
1. Identify the repository, its instructions, working tree, relevant callers, and test commands. Inspect examples before creating abstractions. Preserve unrelated edits and state which dependencies or interfaces the change touches. Before changing an untested legacy path, capture the undocumented behavior callers depend on with targeted characterization checks; distinguish behavior to preserve from the intended change.
|
|
10
10
|
2. State the observable outcome, constraints, and acceptance checks. Reuse agreed criteria for routine fixes. If a consequential product choice is unresolved, surface that choice while continuing independent investigation; do not invent acceptance.
|
|
11
11
|
3. Choose the smallest coherent path that demonstrates the outcome through the real entry point. Include the necessary storage, error handling, and interface behavior in that slice. Name the failure that stops expansion and the recovery path for stateful changes.
|
|
12
|
-
4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code.
|
|
12
|
+
4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code. When changing dependencies, inspect the package source, requested version, lockfile changes and repository install-script policy before executing package code. Use the approved package manager and bootstrap controls; do not blanket-enable scripts or apply unrelated dependency upgrades.
|
|
13
13
|
5. Add or update automated coverage for changed behavior when meaningful and feasible, including the relevant failure path. Existing tests must actually exercise the change; explain manual-only coverage and its limits. Run focused checks, then required repository checks. Exercise the actual affected journey with [QA](qa.md) when appropriate. For uncertain model behavior, use [eval-pack](eval-pack.md). Record results with [verification](verification.md), including checks that could not run.
|
|
14
|
-
6. Inspect the final diff against the agreed outcome. For substantial or risky work, seek [review](review.md) using an actual separate reviewer when available; identify a self-check honestly. Reverify affected behavior after fixes.
|
|
14
|
+
6. Inspect the final diff against the agreed outcome. If public behavior, interfaces, configuration or operating steps changed, update affected existing documentation and examples; exercise relevant commands or clearly mark checks that could not run. For substantial or risky work, seek [review](review.md) using an actual separate reviewer when available; identify a self-check honestly. Reverify affected behavior after fixes.
|
|
15
15
|
|
|
16
16
|
## Deliverable and acceptance
|
|
17
17
|
|
|
@@ -13,6 +13,8 @@ Use [task context](task-context.md). This method returns evidence directly or wr
|
|
|
13
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
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
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
|
+
|
|
16
18
|
## Receipt
|
|
17
19
|
|
|
18
20
|
Use one compact entry per check or a table with these fields:
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "7c8310fbceb8768b6997c758bf041bf97be66a3e8cc1de5df2aa84e2771a374b",
|
|
6
|
-
"references/build.md": "
|
|
6
|
+
"references/build.md": "3f8b5e52eb874ee4e99db5e0b70d1ccca1134f667a39279d6b4e55629832ae75",
|
|
7
7
|
"references/debug.md": "c3bb344d38cc3552cb4e230c601a9be3fe173af2b2efb89aab6b7b04339f24f4",
|
|
8
8
|
"references/eval-pack.md": "0590b85d3cae0903c6b1274540c92eaa2a4373047e8a0548d6942516ef0bb9e1",
|
|
9
9
|
"references/integrate.md": "d0de35a783902ca8b4762e3a42a14f467766d56a928c3a5cf11adac2a6ba90ba",
|
|
@@ -11,6 +11,6 @@
|
|
|
11
11
|
"references/review.md": "63a007f78288089cc84cccc72647e8ce6721b7efa0f4f8d6774c0f0af594749d",
|
|
12
12
|
"references/ship.md": "8cdcb2d4d6eb57e0adf3f1996bc02ae66920852ca304d2afd778fa483b7e969a",
|
|
13
13
|
"references/task-context.md": "28684273e9d6edf1d05fb02c96caf4223e19b73e7ae840bdec2ff0bf06e3bc27",
|
|
14
|
-
"references/verification.md": "
|
|
14
|
+
"references/verification.md": "62bb4fb40d9b71c6481c57a4564bcc98c4014a8be5d4aedfe1eb3f7f90d5e1f7"
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -9,9 +9,9 @@ Use the permitted context and authority in [task context](task-context.md). This
|
|
|
9
9
|
1. Identify the repository, its instructions, working tree, relevant callers, and test commands. Inspect examples before creating abstractions. Preserve unrelated edits and state which dependencies or interfaces the change touches. Before changing an untested legacy path, capture the undocumented behavior callers depend on with targeted characterization checks; distinguish behavior to preserve from the intended change.
|
|
10
10
|
2. State the observable outcome, constraints, and acceptance checks. Reuse agreed criteria for routine fixes. If a consequential product choice is unresolved, surface that choice while continuing independent investigation; do not invent acceptance.
|
|
11
11
|
3. Choose the smallest coherent path that demonstrates the outcome through the real entry point. Include the necessary storage, error handling, and interface behavior in that slice. Name the failure that stops expansion and the recovery path for stateful changes.
|
|
12
|
-
4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code.
|
|
12
|
+
4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code. When changing dependencies, inspect the package source, requested version, lockfile changes and repository install-script policy before executing package code. Use the approved package manager and bootstrap controls; do not blanket-enable scripts or apply unrelated dependency upgrades.
|
|
13
13
|
5. Add or update automated coverage for changed behavior when meaningful and feasible, including the relevant failure path. Existing tests must actually exercise the change; explain manual-only coverage and its limits. Run focused checks, then required repository checks. Exercise the actual affected journey with [QA](qa.md) when appropriate. For uncertain model behavior, use [eval-pack](eval-pack.md). Record results with [verification](verification.md), including checks that could not run.
|
|
14
|
-
6. Inspect the final diff against the agreed outcome. For substantial or risky work, seek [review](review.md) using an actual separate reviewer when available; identify a self-check honestly. Reverify affected behavior after fixes.
|
|
14
|
+
6. Inspect the final diff against the agreed outcome. If public behavior, interfaces, configuration or operating steps changed, update affected existing documentation and examples; exercise relevant commands or clearly mark checks that could not run. For substantial or risky work, seek [review](review.md) using an actual separate reviewer when available; identify a self-check honestly. Reverify affected behavior after fixes.
|
|
15
15
|
|
|
16
16
|
## Deliverable and acceptance
|
|
17
17
|
|
|
@@ -13,6 +13,8 @@ Use [task context](task-context.md). This method returns evidence directly or wr
|
|
|
13
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
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
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
|
+
|
|
16
18
|
## Receipt
|
|
17
19
|
|
|
18
20
|
Use one compact entry per check or a table with these fields:
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "5488cddb607cb05face73ad1a838dd87babb00716544793f36997ca15dcb1560",
|
|
6
|
-
"references/close.md": "
|
|
6
|
+
"references/close.md": "b3dbc1ecef12ee1c9d298e32a21d87ce61c9f6c88039d7a8b19970c6e3f21254",
|
|
7
7
|
"references/encode-pattern.md": "3be7bf9d0f69af31659423c54d6023a4af1556e2ce200fb025bf64d0757de4d8",
|
|
8
8
|
"references/runbook.md": "1233aa1943da8db6d3c7624b7a54b3a1afc340b97e16f95d70b42cdbf521b63c",
|
|
9
9
|
"references/task-context.md": "28684273e9d6edf1d05fb02c96caf4223e19b73e7ae840bdec2ff0bf06e3bc27"
|
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
**Context:** apply [task context and evidence](task-context.md) before using the named records below.
|
|
4
4
|
|
|
5
|
+
For a standalone handoff draft, use the supplied notes and project evidence; no customer record is required. The `fde handoff` CLI exports an existing record. Use it only when a record is selected, not to create one merely for a draft.
|
|
6
|
+
|
|
5
7
|
**Enter when:** the engagement is ending - the customer team must run this without the FDE.
|
|
6
8
|
|
|
7
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 targeted `fde recall` for 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.
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"version": 1,
|
|
4
4
|
"files": {
|
|
5
5
|
"SKILL.md": "3ed6862aac292e971af7c0a7f5a68968b89b056be60f3cdc883f51534984c1fc",
|
|
6
|
-
"references/build.md": "
|
|
6
|
+
"references/build.md": "3f8b5e52eb874ee4e99db5e0b70d1ccca1134f667a39279d6b4e55629832ae75",
|
|
7
7
|
"references/debug.md": "c3bb344d38cc3552cb4e230c601a9be3fe173af2b2efb89aab6b7b04339f24f4",
|
|
8
8
|
"references/eval-pack.md": "0590b85d3cae0903c6b1274540c92eaa2a4373047e8a0548d6942516ef0bb9e1",
|
|
9
9
|
"references/integrate.md": "d0de35a783902ca8b4762e3a42a14f467766d56a928c3a5cf11adac2a6ba90ba",
|
|
@@ -11,6 +11,6 @@
|
|
|
11
11
|
"references/review.md": "63a007f78288089cc84cccc72647e8ce6721b7efa0f4f8d6774c0f0af594749d",
|
|
12
12
|
"references/ship.md": "8cdcb2d4d6eb57e0adf3f1996bc02ae66920852ca304d2afd778fa483b7e969a",
|
|
13
13
|
"references/task-context.md": "28684273e9d6edf1d05fb02c96caf4223e19b73e7ae840bdec2ff0bf06e3bc27",
|
|
14
|
-
"references/verification.md": "
|
|
14
|
+
"references/verification.md": "62bb4fb40d9b71c6481c57a4564bcc98c4014a8be5d4aedfe1eb3f7f90d5e1f7"
|
|
15
15
|
}
|
|
16
16
|
}
|
|
@@ -9,9 +9,9 @@ Use the permitted context and authority in [task context](task-context.md). This
|
|
|
9
9
|
1. Identify the repository, its instructions, working tree, relevant callers, and test commands. Inspect examples before creating abstractions. Preserve unrelated edits and state which dependencies or interfaces the change touches. Before changing an untested legacy path, capture the undocumented behavior callers depend on with targeted characterization checks; distinguish behavior to preserve from the intended change.
|
|
10
10
|
2. State the observable outcome, constraints, and acceptance checks. Reuse agreed criteria for routine fixes. If a consequential product choice is unresolved, surface that choice while continuing independent investigation; do not invent acceptance.
|
|
11
11
|
3. Choose the smallest coherent path that demonstrates the outcome through the real entry point. Include the necessary storage, error handling, and interface behavior in that slice. Name the failure that stops expansion and the recovery path for stateful changes.
|
|
12
|
-
4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code.
|
|
12
|
+
4. Implement using the repository's tools and conventions. Search for existing services, fixtures, and validation before adding alternatives. Keep cleanup limited to what makes the changed path understandable; do not expand scope to repair unrelated code. When changing dependencies, inspect the package source, requested version, lockfile changes and repository install-script policy before executing package code. Use the approved package manager and bootstrap controls; do not blanket-enable scripts or apply unrelated dependency upgrades.
|
|
13
13
|
5. Add or update automated coverage for changed behavior when meaningful and feasible, including the relevant failure path. Existing tests must actually exercise the change; explain manual-only coverage and its limits. Run focused checks, then required repository checks. Exercise the actual affected journey with [QA](qa.md) when appropriate. For uncertain model behavior, use [eval-pack](eval-pack.md). Record results with [verification](verification.md), including checks that could not run.
|
|
14
|
-
6. Inspect the final diff against the agreed outcome. For substantial or risky work, seek [review](review.md) using an actual separate reviewer when available; identify a self-check honestly. Reverify affected behavior after fixes.
|
|
14
|
+
6. Inspect the final diff against the agreed outcome. If public behavior, interfaces, configuration or operating steps changed, update affected existing documentation and examples; exercise relevant commands or clearly mark checks that could not run. For substantial or risky work, seek [review](review.md) using an actual separate reviewer when available; identify a self-check honestly. Reverify affected behavior after fixes.
|
|
15
15
|
|
|
16
16
|
## Deliverable and acceptance
|
|
17
17
|
|
|
@@ -13,6 +13,8 @@ Use [task context](task-context.md). This method returns evidence directly or wr
|
|
|
13
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
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
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
|
+
|
|
16
18
|
## Receipt
|
|
17
19
|
|
|
18
20
|
Use one compact entry per check or a table with these fields:
|