- The xd registry reconciles before the async prompt rebuild while the
active tool swap lands after it; polling the mount alone raced the
write-transport activation on slow runners.
Interactive sessions defer MCP discovery, so CLI --tools produced an initial built-in-only active set and later MCP refreshes respected that filtered set.
Force-activate deferred MCP tools when MCP discovery mode is disabled, matching the blocking startup path while leaving discovery-mode selection intact.
Fixes#5013
Migrate 203 test files (356 call sites) from fs.rm/fs.rmSync to
removeWithRetries/removeSyncWithRetries to reduce EBUSY test failures
on Windows. removeWithRetries is now exported from @oh-my-pi/pi-utils.
The migration uses a regex-based approach that:
- Replaces fs.rm(path, { recursive, force }) → removeWithRetries(path)
- Replaces fs.rmSync(path, { recursive, force }) → removeSyncWithRetries(path)
- Replaces fs.rm(path) → removeWithRetries(path) (no options)
- Skips fs.rm/fs.rmSync inside template literals (bun --eval scripts)
- Adds imports to existing @oh-my-pi/pi-utils import or creates new one
- Removes unused fs imports where fs.rm was the only fs usage (4 files)
Deferred UI MCP discovery gated server-instruction inclusion on
`!deferMCPDiscoveryForUI`, so both `rebuildSystemPrompt` and the
`getMcpServerInstructions` signature callback omitted instructions for
the lifetime of every interactive session — even after background
discovery connected the servers. Server-provided instructions were
dropped permanently, contradicting the changelog's "next session" claim.
Both reads now depend only on `mcpManager.getServerInstructions()`,
which is empty before connect and populated after, so the post-discovery
`refreshMCPTools` rebuild folds them into the prompt. Corrects the
changelog and adds a home-isolated deferred end-to-end regression test
(stdio fixture server) that fails if the gate is reintroduced.