Repository navigation
fix(server): preview builds keep their bundled OpenCode 2 compatibility policy - #14368
Conversation
ApprovabilityVerdict: Not approved Macroscope's review found this PR not approvable — This changes the shipped OpenCode compatibility recommendation and status defaults, while adding release-channel-specific behavior that changes provider advisories for preview, stable, and nightly builds. The implementation is focused and tested, but the product-default and user-visible policy changes warrant human review. Notes:
You can add or adjust custom eligibility rules. Learn more. |
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: unavailable · PR result: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
…ty policy The runtime manifest is fetched from main, whose OpenCode policy marks OpenCode 2 broken (#14198). That is right for stable and nightly, which have no OpenCode 2 runtime, but V2 preview builds run it. A policy's t3CodeRange cannot target preview builds because range matching drops prerelease tags, so preview builds now keep their bundled compatibility policy and take the rest of the manifest from the fetch. The bundled V2 policy supports OpenCode >=2.0.18 and gives >=1.14.19 <2.0.0 limited support. Temporary V2-only stopgap, listed on #2829's revert-before-merge checklist. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
They matched no range, so they resolved to unknown and showed no warning. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
ee49d31 to
19c0c91
Compare
The server fetches
model-manifest.jsonfrommainat runtime and adopts its compatibility policy. Main marks OpenCode>=2.0.0broken (#14198). That is right for stable and nightly, which have no OpenCode 2 runtime, but V2 preview builds do run OpenCode 2, so they show it as broken. A policy'st3CodeRangecannot target preview builds:satisfiesSemverRangedrops the prerelease tag, and stable, nightly and preview all share the same0.0.4xbase version.What changed
ModelManifest: when the server's own version (apps/server/package.json, stamped with the fullx.y.z-preview.YYYYMMDD.Nversion byscripts/update-release-package-versions.tsinrelease.yml) is on the preview channel (cliReleaseChannelOf), a fetched or disk-cached manifest keepsBUNDLED_MODEL_MANIFEST.compatibility. Model lists, defaults and everything else still come from the fetched manifest. The disk cache still stores the unmodified fetched manifest; the override is applied when it is loaded. Stable and nightly behavior is unchanged.makeis nowmakeForVersion(packageJson.version)so tests can build the service for each channel.model-manifest.json(V2 only; main's copy is untouched): OpenCode>=2.0.18supported,>=2.0.0 <2.0.18unsupported,>=1.14.19 <2.0.0graceful (limited support),<1.14.19broken,recommendedRange>=2.0.18.recommendedVersionis dropped, because a pinned1.14.19would now be a graceful version and the schema requires the recommendation to land in a supported range.Verification
vp test run src/provider/providerCompatibility.test.ts src/provider/ModelManifest.test.ts src/provider/Layers/ProviderRegistry.test.ts src/provider/providerMaintenanceRunner.test.ts src/provider/CodexInstallation.test.ts(apps/server): 5 files, 126 tests passed.0.0.44-preview.20260929.1) keeps the bundled policy after a refresh that fetches main's OpenCode policy (OpenCode 2.0.18 →supported), including after a restart that reads the disk cache. Stable (0.0.44) and nightly (0.0.44-nightly.20260929.1) adopt the fetched policy (2.0.18 →broken).recommendedRange>=2.0.18.vp exec tsc --noEmit -p .(apps/server): exit 0, noerror TS.vp linton the touched files: exit 0.vpr knip:check: exit 0.Model: Claude Opus 5.5 (Claude Code)
🤖 Generated with Claude Code