R82.D — Launcher Config Execution Packet
Task: R82.D · launcher config reality
Scope: .mcp.json, .vscode/mcp-settings.example.json
Round: R82 phase-0-1-stabilization, Wave 2
Author: T3 executor
Date: 2026-04-19
0. Pre-edit state
Reproduced verbatim so the Edit tool finds the exact strings.
0.1. .mcp.json (18 lines)
{
"mcpServers": {
"ams-unified": {
"command": "node",
"args": [
"E:/AMS/src/server.js"
],
"env": {
"AMS_ROOT": "E:/AMS",
"AMS_WATCH_MODE": "none"
},
"_note": "Phase 0 not started — src/server.js does not exist yet. Update when P0.2 completes."
},
"github": {
"url": "http://localhost:3000/sse"
}
}
}
0.2. .vscode/mcp-settings.example.json (36 lines)
Already at §2.2 of the audit; not reproduced here. The key lines to edit are 25–34.
1. Edit plan
Two-file surgical patch. No file creates/deletes.
Edit E1 — .mcp.json full-file rewrite (it’s tiny and every line inside mcpServers.ams-unified is drifted)
Because the drift touches the server key name, command/args, env block, and footer note, the cleanest Edit is a single old_string → new_string replacement of the entire "ams-unified": { ... } block.
old_string (lines 3–13):
"ams-unified": {
"command": "node",
"args": [
"E:/AMS/src/server.js"
],
"env": {
"AMS_ROOT": "E:/AMS",
"AMS_WATCH_MODE": "none"
},
"_note": "Phase 0 not started — src/server.js does not exist yet. Update when P0.2 completes."
},
new_string (11 lines — same line count preserved for minimum diff):
"colibri": {
"command": "node",
"args": [
"--loader",
"tsx",
"E:/AMS/src/server.ts"
],
"env": {
"COLIBRI_MODE": "FULL"
}
},
Citations:
- Server identity
"colibri"(D1):package.json:2"name": "colibri". src/server.ts+ tsx loader (D3):package.json:20"dev": "tsx watch src/server.ts"; VS Code example at.vscode/mcp-settings.example.json:28uses the samenode --loader tsx ${workspaceFolder}/src/server.tspattern.AMS_ROOTremoved (D4):src/config.ts:26-33rejectsAMS_*; no live reader forCOLIBRI_ROOTeither (grepsrc/clean).COLIBRI_MODE: FULL (D5):src/modes.ts:31definesRUNTIME_MODES = ['FULL', 'READONLY', 'TEST', 'MINIMAL'];src/modes.ts:90-93treats unset as FULL. ExplicitFULLis equivalent to the default but documents intent._noteremoved (D6): Phase 0 is 28/28 sealed at R75 Wave I perCLAUDE.md §9and R82 manifest § Phase 0 status.
What stays: "github": { "url": "http://localhost:3000/sse" } untouched; outer JSON brackets untouched.
Edit E2 — .vscode/mcp-settings.example.json _colibri_phase_0_placeholder.env block
old_string (lines 29–33):
"env": {
"COLIBRI_ROOT": "${workspaceFolder}",
"COLIBRI_DB": "${workspaceFolder}/data/colibri.db",
"COLIBRI_WATCH_MODE": "none"
}
new_string (4 lines — one removed entry since COLIBRI_ROOT is not consumed):
"env": {
"COLIBRI_DB_PATH": "${workspaceFolder}/data/colibri.db",
"COLIBRI_MODE": "FULL"
}
Citations:
COLIBRI_ROOTremoved (D7):src/config.tsschema has noCOLIBRI_ROOTkey;grep -rn COLIBRI_ROOT src/returns zero hits.COLIBRI_DB_PATH(D8):src/config.ts:48.COLIBRI_MODE=FULL(D9):src/modes.ts:31+src/modes.ts:90.
Edit E3 — .vscode/mcp-settings.example.json _enabled_when comment (line 26)
old_string:
"_enabled_when": "Rename the key to 'colibri' to activate; src/server.ts and data/colibri.db are live as of R75 Wave H",
new_string:
"_enabled_when": "Rename the key to 'colibri' to activate; src/server.ts and data/colibri.db are live (Phase 0 sealed 28/28 at R75 Wave I)",
Rationale (D11): The “Wave H” framing is stale — Phase 0 has since sealed at Wave I (2026-04-18). The rename hint remains useful for users who copy this file.
Edit E4 — .vscode/mcp-settings.example.json top comment block (lines 2–16) — append R82.D reality note
old_string (last two lines of the comment array):
"Zone: CANON (config). Governed by CLAUDE.md §9 (the R74.2 inventory doc",
"was absorbed into §9.2 and deleted in R75)."
],
new_string:
"Zone: CANON (config). Governed by CLAUDE.md §9 (the R74.2 inventory doc",
"was absorbed into §9.2 and deleted in R75).",
"",
"R82.D (2026-04-19) update: env block reconciled to live config contract.",
"COLIBRI_ROOT removed (no live reader in src/); COLIBRI_DB → COLIBRI_DB_PATH",
"per src/config.ts:48; COLIBRI_WATCH_MODE → COLIBRI_MODE per src/modes.ts:90."
],
Rationale (D10): Manifest definition-of-done for R82.D says “inline ‘Phase 0 not started’ note removed” (for .mcp.json) and implicitly permits an R82.D note for .vscode example’s _comment_r75_wave_h block. A future-auditor pointer is worth the four extra lines.
2. Post-edit expected state
2.1. .mcp.json (17 lines — one fewer because _note removed shrinks by 1)
{
"mcpServers": {
"colibri": {
"command": "node",
"args": [
"--loader",
"tsx",
"E:/AMS/src/server.ts"
],
"env": {
"COLIBRI_MODE": "FULL"
}
},
"github": {
"url": "http://localhost:3000/sse"
}
}
}
2.2. .vscode/mcp-settings.example.json (relevant region)
"_colibri_phase_0_placeholder": {
"_enabled_when": "Rename the key to 'colibri' to activate; src/server.ts and data/colibri.db are live (Phase 0 sealed 28/28 at R75 Wave I)",
"command": "node",
"args": ["--loader", "tsx", "${workspaceFolder}/src/server.ts"],
"env": {
"COLIBRI_DB_PATH": "${workspaceFolder}/data/colibri.db",
"COLIBRI_MODE": "FULL"
}
}
3. Verification flow (Step 5 will re-run this)
cd E:/AMS/.worktrees/claude/r82-d-launcher
# Gate G1-G5 (negative)
grep -cF "src/server.js" .mcp.json .vscode/mcp-settings.example.json # both 0
grep -cE "AMS_ROOT|AMS_WATCH_MODE" .mcp.json # 0
grep -cE "COLIBRI_WATCH_MODE" .mcp.json .vscode/mcp-settings.example.json # both 0
grep -cE '"COLIBRI_DB"[^_]' .vscode/mcp-settings.example.json # 0
grep -cE "Phase 0 not started" .mcp.json # 0
# Gate G6-G7 (positive)
grep -cF "COLIBRI_DB_PATH" .vscode/mcp-settings.example.json # >= 1
grep -cF "COLIBRI_MODE" .mcp.json .vscode/mcp-settings.example.json # sum >= 1
# Gate JSON parse
python -c "import json; json.load(open('.mcp.json')); json.load(open('.vscode/mcp-settings.example.json')); print('json-valid')"
# Gate server identity
python -c "import json; cfg=json.load(open('.mcp.json')); keys=list(cfg['mcpServers'].keys()); assert 'colibri' in keys and 'ams-unified' not in keys; print('identity OK')"
# Gate github preservation
python -c "import json; cfg=json.load(open('.mcp.json')); assert cfg['mcpServers']['github']['url'] == 'http://localhost:3000/sse'; print('.mcp.json github OK')"
python -c "import json; cfg=json.load(open('.vscode/mcp-settings.example.json')); gh=cfg['mcpServers']['github']; assert gh['command']=='npx' and gh['args']==['-y','@modelcontextprotocol/server-github']; print('.vscode github OK')"
4. Commit plan
Step 4 (implement) commits everything as one fix(r82-d-launcher): reconcile launcher configs to COLIBRI env reality. No intermediate commits inside Step 4.
5. Next step
Implement per §1 above, then run §3 verification before committing Step 4.
R82.D packet. Four surgical Edits (E1-E4) across two files; no creates/deletes. Every value cited against live-code line number. Full post-edit state reproduced for diff review.