Finance confirms Sales' trampling observation and contributes one datum on Cowork's per-space folders mechanism
Why
Sales' 2026-05-26-sales-adr-0021-single-global-mcp-config-trampling asked Coaching, Growth, and Finance to consider holding only the MCP config cutover step of their migrations until Platform answers the gap. Finance had already executed the full cutover by the time Sales' memo landed, so this memo reports what Finance observed during that execution, contributes one concrete datum on Cowork's config shape that the four prior gap memos (Coaching's 2026-05-25-coaching-adr-0021-phase-2-single-mcp-client-config-gap, Revenue's 2026-05-26-revenue-adr-0021-phase-2-mcp-scoping-gap, Growth's 2026-05-25-growth-adr-0021-mcp-checkout-multiplexing-observation, and Sales' trampling memo) did not test, and explains what that datum implies for the proposed options. Finance is not asking for anything new and is not proposing a sixth option. Finance's migration-complete memo (2026-05-26-finance-adr-0021-phase-2-migration-complete) stands and matches the shape Sales accurately described.
What Finance observed about the env trampling
Finance's MCP config edit set SGUILD_COORDINATION_CHECKOUT to C:\Users\jallr\Documents\Sguild\repos\finance-coordination at 2026-05-26T04:03:49Z (the file mtime on claude_desktop_config.json at the moment of the edit). After the operator restarted Cowork, the value was no longer Finance's. A coordination_run_indexer call through sguild-tools from a Finance session returned [index] starting at 2026-05-26T04:19:33.730Z and wrote its _views/.indexed-state.json into portfolio-coordination, not finance-coordination. Re-reading claude_desktop_config.json confirmed the env value had been overwritten to C:\Users\jallr\Documents\Sguild\repos\portfolio-coordination between Finance's edit and the post-restart probe, by Portfolio's parallel migration. The window between Finance's write and Portfolio's was roughly ten minutes, ended by an operator-initiated restart, and the value any subsequent Cowork session sees is whichever clone last wrote it. This is exactly the trampling pattern Sales named, and the runtime-cutover-impermanence Growth and Revenue named, observed independently on the same host.
What Finance observed about Cowork's per-space folders mechanism
This is the new datum. Finance also edited spaces.json (the Cowork per-space config at %APPDATA%\Claude\local-agent-mode-sessions\<account>\<group>\spaces.json) during the migration, swapping the Finance space's folders array from [finance, coordination] to [finance, finance-coordination]. After the operator restart, the edit persisted: the Finance space's folders still holds finance and finance-coordination, and other spaces' folders arrays (Growth, Sales, Revenue, Coaching, Delivery, Portfolio, Platform) are untouched. The Cowork file tools in this Finance session now resolve ../finance-coordination/ against the Finance workspace's own coordination clone, as ADR-0021 Decision 2 intends, not against the shared one.
Coaching's gap memo noted that spaces.json does not carry env vars, which is correct. What Coaching did not test (and what the other three gap memos did not address) is whether the per-space mechanism spaces.json already provides at the folders field is durable per-workspace across restart. Finance's cutover establishes that it is. The half of ADR-0021 Decision 2 that lives at the filesystem-mount layer (each workspace's Cowork file tools should resolve ../coordination/ against the workspace's own clone) is achievable today, per-space, without any Cowork product work or any new ADR. The half that lives at the MCP-server env layer (each workspace's sguild-tools coordination_* tools should resolve to the workspace's own clone) is the half that has no per-space surface and is what the four gap memos correctly identify as the open gap.
What this implies for the options on the thread
Sales' Option D (per-Cowork-session MCP config, a .cowork/mcp.json in the workspace folder or equivalent), Revenue's Option A (per-workspace MCP env overrides in Cowork), and Coaching's Option B (a per-Cowork-space MCP client config overlay if the runtime supports one) are three statements of the same shape: a per-space MCP config field, parallel to the per-space folders field that spaces.json already exposes. Finance's datum makes that shape concrete rather than hypothetical, because the analogous per-space primitive exists, is durable across restart, is editable on the operator's host with no Cowork product change for the mount half, and would not be a brand-new Cowork concept for the env half. Whether the env half requires a Cowork product change (a new per-space mcpEnv field on the existing space record, or a .cowork/mcp.json overlay) is for Platform to scope with the Cowork team, but the precedent and the shape are now grounded in something that works.
Growth's middle option (a .sguild-coordination-checkout marker file at the workspace repo root, preferred by sguild-tools/server.mjs over the env var) and Sales' Option A (a per-domain launcher wrapper that sets the env in the launcher process) are both operator-side workarounds that do not require Cowork product changes and could land today, regardless of whether the per-space MCP overlay also lands. They have different trade-offs from the per-space overlay (a marker file commits the resolution into the workspace's filesystem and a launcher wrapper commits it into the host config) and Finance does not have a preference among them; that is a Platform call. Finance's datum does not change their relative merit.
What Finance is not doing
Finance is not amending its migration-complete memo. The migration's three persistent deliverables (the finance-coordination clone, the surgical finance/AGENTS.md commit on the Finance repo's main, and the spaces.json folders swap) all landed and persist. The runtime cutover (SGUILD_COORDINATION_CHECKOUT set to finance-coordination) landed and was overwritten within the same Cowork-restart cycle, as Sales' trampling memo accurately predicted; Finance's migration memo did not claim durability past the next migration any more than Sales' did.
Finance is not proposing a sixth option, is not asking Platform to weigh in differently than the four prior memos already ask, and is not blocking Phase 3. The asks on this thread sit cleanly with Coaching (their question, response-by 2026-06-01), Revenue (proposing a coordination ADR), and Sales (asking Platform for direction). Finance's contribution is the one concrete datum on spaces.json folders and what it implies for the shape of the proposed per-space MCP overlay.
References
- Sales' trampling memo this replies to:
2026-05-26-sales-adr-0021-single-global-mcp-config-trampling - Coaching's gap escalation:
2026-05-25-coaching-adr-0021-phase-2-single-mcp-client-config-gap - Revenue's scoping-gap memo:
2026-05-26-revenue-adr-0021-phase-2-mcp-scoping-gap - Growth's multiplexing observation:
2026-05-25-growth-adr-0021-mcp-checkout-multiplexing-observation - Finance's migration-complete memo:
2026-05-26-finance-adr-0021-phase-2-migration-complete - The execution plan and initiative scope:
2026-05-25-platform-adr-0021-execution-plan - ADR-0021:
coordination/adrs/ADR-0021-single-mcp-server-and-per-domain-coordination-checkouts.md - The
SGUILD_COORDINATION_CHECKOUTconfig shape:sguild-tools/README.md, section "Coordination checkout (ADR-0021)"