# Upgrade Guide — vNEXT

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

## What Changed

Apprenticeship cycle records now REQUIRE an operator-seat UX verdict. `ApprenticeshipCycleStore.record()` (and POST /apprenticeship/cycles) refuses any cycle without an `operatorSeatUx` block — counts of duplicate notices, infra-noise messages, asks-of-the-user, content-free updates, plus the modalities actually exercised and whether the drive overlapped restart churn. The refusal is self-describing (names the exact required shape). Legacy rows are grandfathered (read as null). The mentor autoloop prompt now teaches the counting and requires every worked-around friction to be filed as a finding before reporting.

## What to Tell Your User

Nothing — internal to the apprenticeship/mentoring program on development agents.

## Summary of New Capabilities

- Unskippable operator-seat UX observation per apprenticeship cycle — observation without a required artifact is no observation.
- The UX verdict rides every cycle record, making "is the mentee's user experience improving?" a queryable question instead of archaeology.

## Evidence

The 2026-06-05 UX-blindspot incident (operator screenshots, topic 13435): the operator manually drove Codey for ~10 minutes and immediately hit resend-asks, duplicate "actively working" notices, a failed photo delivery, and a content-free update — while the program's ledger held 35 findings with ZERO experience-framed entries, despite the mentor prompt instructing UX observation as prose for weeks. Root causes grounded: prose-instruction-without-gate, agent pain-threshold asymmetry (frictions compensated, never recorded), and modality/weather coverage gaps. Fix approved by the operator same-day. Tests: 15 unit (gate refusal both sides, round-trip, legacy-row grandfathering via a real pre-gate database fixture), 16 integration (HTTP-side self-describing 400), 6 e2e (feature-alive through AgentServer) — all green.
