# Upgrade Guide — vNEXT

<!-- assembled-by: assemble-next-md -->
<!-- bump: patch -->

## What Changed

`JobDefinition.mcpAccess?: 'project' | 'none'` flows frontmatter → InstallBuiltinJobs → per-slug manifest (validateManifest enforces the closed set) → JobScheduler.spawnJobSession → the existing `disableProjectMcp` spawn option (`--strict-mcp-config --mcp-config '{"mcpServers":{}}'`). Out-of-set frontmatter values fail safe to legacy at the installer and fail loud at manifest validation.

## What to Tell Your User

Scheduled background jobs (like the every-5-minutes health check) now start faster and leaner: they no longer boot the project's full MCP toolset (browser automation, remote connectors) that they never use. Jobs that need MCP keep it; nothing changes for your own custom jobs.

## Summary of New Capabilities

- `mcpAccess: none` in a job's frontmatter/manifest spawns its session with zero project MCP servers (claude-code spawns; reuses the proven mentor-loop no-MCP flag). `project` or absent = unchanged legacy behavior.
- 14 shipped utility jobs (health-check, commitment-detection, correction-analyzer, release-readiness-check, and friends) now declare it; the orchestration jobs (mentor/overseer/evolution-implement) deliberately keep full MCP this round.
- Existing agents pick the change up automatically on update — built-in job manifests regenerate from the shipped templates.

## Evidence

Grounded census (2026-06-05, live box): 81 standing MCP processes across 14 long-lived sessions — every session boots the full project .mcp.json complement; 14 playwright-mcp nodes ≈1.75GB RSS while exactly ONE session actually drives a browser. Zero shipped job templates reference any MCP tool (grep `mcp__|threadline_|playwright|browser|chrome` across `src/scaffold/templates/jobs/instar/*.md` — no matches). The headless hang hazard this removes is the live-verified mentor-loop stall (~4.5 min at 0.1% CPU on auth-required remote MCP boot → ~9s with the flag, docs/specs/LOOP-SESSION-NO-MCP-SPEC.md). Pinned by `tests/unit/scheduler/job-mcp-access.test.ts` (20 tests: closed-set validation both sides, constructor pass-through/omission, installer derivation incl. typo fail-safe, loader round-trip onto JobDefinition, spawn plumbing all three states, and the 14-template declarations + orchestration-family exclusions); 145 adjacent loader/installer/scheduler/flag tests pass unchanged.
