# Server-only evidence result — issue 22741

PR [#22745](https://git.cafe/pingdotgg/t3code/pulls/22745), [GitHub mirror](https://github.com/pingdotgg/t3code/pull/22745). Branch `fix/issue-22741`.

**R1 FAIL: real after update completed but active provider remained 2.1.1. No successful upgrade is claimed.** The lead-owned server selected `/home/ubuntu/.opencode/bin/opencode upgrade`; OpenCode chose `vp`, printed upgrade complete, and T3 verified `unchanged` with current 2.1.1 / latest 2.1.2. `canInstallVersion` is false for the native advisory. Reported immediately when the failed RPC file arrived. No production fix was expanded.

## SHA and execution attribution

- Baseline full SHA: [618761a2d6](https://github.com/pingdotgg/t3code/commit/618761a2d6d615b2c0a07e5de4d82384a583f717) (full SHA: 618761a2d6d615b2c0a07e5de4d82384a583f717). Original server-code SHA: [afe4563c43](https://github.com/pingdotgg/t3code/commit/afe4563c43aca935dc302b4daf241d03401ecb71) (full SHA: afe4563c43aca935dc302b4daf241d03401ecb71).
- Final local fixture-only SHA: [f83e50adce](https://git.cafe/pingdotgg/t3code/commit/f83e50adce29f3e668d2260e012819def167291a) (full SHA: f83e50adce29f3e668d2260e012819def167291a); not pushed by test agent. Only seed.sh + config.json committed. Evidence/notes remain outside repo.
- Linux x86_64. Lead-owned server 16016 / web 7976, isolated `.t3`. No server/browser launched or stopped by test agent. Existing host wrapper/config/install untouched. Chrome 1280×800 supplemental screenshots belong to lead; no pixel/viewport/theme diff required for server-only change.
- Test agent command: `vp test run packages/provider-core/src/server/maintenanceResolver.test.ts` — 60/60 passed in 9.55s at original code SHA. No repo-wide checks. CLI Vite+ 0.3.0, project Vite+ 1.3.0, Vitest 5.0.5. Commit hook format passed; `bash -n` passed.
- Fixture command: `bash scripts/fixtures/opencode-vite-system-first/seed.sh`. Pinned real npm `@voidzero-dev/vite-plus-cli-linux-x64-gnu@0.3.0` and `@opencode/cli@2.1.1`; committed system_first config; native-path shell wrapper to separate local npm prefix. Fresh temp HOME/XDG/cache/npm configs and empty inherited environment. Node v24.21.0 / npm 11.19.0 on this host; versions and effective paths printed. No credentials copied, no shell profiles edited.

## Before/after transcript index

- [Corrected before runtime transcript](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/82eb5e0fabe8d045/issue-22741-baseline.txt): baseline manager command `vp i -g @opencode/cli` installs managed 2.1.2 but same PATH still reports delegated 2.1.1. Baseline transcript uses short SHA; full baseline SHA recorded above.
- [Exact before RPC](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/1a7e87fe044e3ada/issue-22741-before-rpc.json).
- After RPC below records running → verification → final unchanged at 08:42:18.101Z; chosen command and OpenCode's actual `Using method: vp` output included. Original code SHA attribution comes from lead's running-head setup, not embedded RPC metadata.
- Independent disposable native command `<fixture>/run <fixture>/home/.opencode/bin/opencode upgrade` exited 1: method could not be detected. PATH and direct local-prefix checks both remained 2.1.1. This clean fixture does not contain the host's managed copy, so its method-detection result differs; neither result proves upgrade success.
- Native inspection: published binary compares real executable identity for curl installs, otherwise probes manager global lists, including Vite+. Its npm upgrade branch uses `npm install --global`, with no appended local `--prefix`. A shell wrapper around a local npm install does not guarantee native upgrade ownership. No forced method, binary edit, or fake version output used.
- Lead's specifically named `/tmp/issue-22741-after-rpc.json` and `/tmp/issue-22741-after-versions.txt`: absent at handoff after bounded wait (08:38–08:45 UTC). Failed RPC was supplied separately as `after-rpc-failed.json`. Do not substitute independent fixture versions for host post-update versions.

## Matrix results

The [audited proof matrix](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/84c006c22e2c8388/issue-22741-proof-pass1.md) defines the precise operands and limits. Every row is retained below. PASS applies to exercised scoped fixture logic, not unrun variants.

| Row | Result / retained limits |
|---|---|
| R1 real delegated OpenCode | FAIL: selected native wrapper upgrade, CLI picked vp, final server unchanged at 2.1.1; target was 2.1.2. Host post-version file pending. |
| F1 XDG delegated | PASS scoped simulated dispatch; separate real seed dispatch confirms Vite+ 0.3.0 → wrapper 2.1.1. Real upgrade fails as above. |
| F2 legacy delegated | PASS Linux temporary legacy model; not native macOS proof. |
| F3 explicit VP_HOME | PASS recognized layout only; arbitrary custom root GAP. |
| F4 managed configuration | PASS retained managed updater/lock. |
| F5 malformed/omitted mode | PASS; wrong-type config variant GAP. |
| F6 external absent | PASS managed fallback. |
| F7 newer/unknown Vite+ | PASS 1.3.0 and unknown retain managed. |
| F8 other target/version shapes | GAP prerelease, malformed, renamed executable, non-bin real target; source-reviewed only. |
| F9 bypass/missing executable | PASS ordinary ownership/missing command regression set; missing-realpath/empty-option variants GAP. |
| F10 config I/O and size | GAP stat/read failure, oversized, stat/read mismatch, exact threshold. |
| F11 environment precedence | PASS HOME and absolute VP_HOME/XDG individually; other precedence/relative/fallback combinations GAP. |
| F12 PATH spelling/quoting | PASS ordinary context PATH; Path/path, quoted/empty, inherited/platform variants GAP. |
| F13 rejection/identity | PASS own shim skipped then valid candidate; same-vp identity/error/multiple-target variants GAP. |
| F14 ownership handoff | PASS native composition + existing manager ownership regression set; other delegated manager compositions GAP. |
| C1 provider callers | REVIEWED shared helper callers OpenCode/Codex/Claude/Grok/Pi/Muse; only OpenCode runtime exercised. Cursor/Antigravity no direct helper caller found. Driver suite not rerun. |
| I1 cache/fresh execution | PASS scoped cache tests; after RPC proves fresh native command and refreshed unchanged version. |
| I2 pinning/failures | PASS scoped pinning tests; after RPC native canInstallVersion=false and actual unchanged outcome. Runner suite not rerun. |
| P1 native macOS arm64 remote | UNVERIFIED; no native machine accessed. |
| P2 Windows | UNVERIFIED; added fixtures skip Windows, downstream ownership tests do not prove helper. |
| S1 surfaces/connections | REVIEWED server-only. No render paths/UI/contracts changed; web/desktop/mobile pixel/theme/viewport evidence N/A. Local server exercised; native remote/multi-environment unverified. |

## What changed

Server follows stable Vite+ 0.x system_first dispatch to the external executable before applying existing maintenance ownership detection. Delegated native command replaces Vite-managed command; lock ownership changes accordingly; native advisory cannot install a selected version. Managed, missing external, non-system_first and nonmatching Vite+ versions keep conservative behavior. No UI code change. Shared provider callers inherit helper behavior; independent runtime verification is OpenCode only. This fixture-only commit does not alter production code.

## Published artifacts

- [issue-22741-focused-tests.log](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/98fead1982aa9c44/issue-22741-focused-tests.log)
- [issue-22741-fixture-seed.log](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/3187503f2ee04d2d/issue-22741-fixture-seed.log)
- [issue-22741-fixture-native-upgrade.log](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/bb6d4ef2d280ab9e/issue-22741-fixture-native-upgrade.log)
- [issue-22741-native-inspection.txt](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/019b91753f8f2ad6/issue-22741-native-inspection.txt)
- [issue-22741-after-rpc-failed.json](https://gh-file-drop-api-prod-mi5fy3sowv63ufte.pinglabs.workers.dev/f/cbf764c99ca28d41/issue-22741-after-rpc-failed.json)

All newly uploaded artifacts were manually inspected and scanned for credentials before upload. They contain selected maintenance fields, versions, fixture paths and tests; no customer conversations/projects or auth material.

## Friction

- runtime|Native updater rediscovered the unused Vite-managed installation and reported completion while active wrapper stayed old.|Require same-PATH and direct-target post-update versions plus final server verification; do not accept updater success text.
- fixture|Clean local-prefix wrapper is not recognized by native upgrade's global-manager detection.|Keep fixture honest; capture method failure and inspect ownership/prefix behavior instead of forcing a method or patching output.
- coverage|Scoped shell models leave platform/config/PATH combinations unexercised.|Retain every GAP and native UNVERIFIED row; do not infer macOS/Windows from Linux models.
- evidence|Expected after filenames were not yet present; failed RPC arrived under a separate name.|Bound waits and publish actual failed artifact with explicit provenance rather than fabricate success.

Verdict: automated resolver suite PASS; mandatory R1 runtime FAIL. Lead owns next production decision and server shutdown.
