ci: enforce app-server release gates - #208
Conversation
Review: approved ✅Gates that run against real packaged artifacts rather than source. That distinction is the whole value: #202 already found an On the budgets — measured, with headroom, and each has a stated baseline:
The timing budgets are ~100× the local measurement, which is right for CI runners — a timing gate tight enough to be informative is a timing gate that flakes. The size budgets are ~1.3–2× and are the ones that will actually catch regressions. Requiring before/after measurements in the PR description to raise a budget is the part that keeps them from being ratcheted up silently. The thin-client scan is the gate I value most: 53 production source files, zero violations, asserting that desktop/VS Code/LSP sources do not import the provider, credentials, agent loop, or Release-ordering change is correct: publishing the VSIX as a Release artifact and delaying npm publication until VSIX and signed DMG builds succeed fixes a real hazard — npm publish is effectively irreversible, so it must be the last step, after the failure-prone platform builds. Previously a DMG/notarization failure could leave a published npm version with no matching desktop build. Documenting isolated-home rollback drills and post-build DMG smoke checks is good; those are manual, so their value depends on actually running them at release time. Validation: CI green on Ubuntu, macOS, and tag validation. |
Takes the safe half of #176. That PR grouped typescript-eslint with @types/vscode ^1.85.0 → ^1.125.0, and the @types/vscode half fails the release gate added in #208: @types/vscode ^1.125.0 greater than engines.vscode ^1.85.0. Either upgrade engines.vscode or use an older @types/vscode version `vsce package` requires @types/vscode <= engines.vscode. Raising engines.vscode to ^1.125.0 to satisfy it would drop support for every VS Code from 1.85 through 1.124 — a product decision, not a dependency bump, and one with no upside since the extension uses no API newer than 1.85. @types/vscode should track the minimum supported VS Code, so it stays pinned. Verified with pnpm release:check, which is the gate #176 fails. - tsc -b --force, lint (--max-warnings=0), format:check: clean - 1033 tests across 8 packages: pass - pnpm release:check (build + VSIX package + release gate): pass Co-authored-by: t <t@t> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Supersedes #138 and #139, which are coupled (plugin-react 6 requires vite 7+) and were deferred in June because `vite build` failed with `Rolldown failed to resolve import "openai"` — vite 8 swaps in the rolldown bundler, and the renderer was transitively pulling core/dist/providers/deepseek.js. That blocker is gone: #192 split dependency-free model metadata from the provider implementation specifically so provider/OpenAI SDK code is absent from renderer bundles. The import rolldown could not resolve no longer reaches the renderer graph, so no `build.rolldownOptions.external` migration is needed. Also replaces `__dirname` with `import.meta.dirname` in vite.config.ts. vite 8 warns that `__dirname` is unsupported by `configLoader: 'native'`, which is planned to become the default in a future major. The repo requires Node >=22, so `import.meta.dirname` is available. Verified on top of React 19 (#211), forced rebuild throughout: - tsc -b --force, lint (--max-warnings=0), format:check: clean - 1033 tests across 8 packages: pass - pnpm build + full build:tauri-assets pipeline: pass (app-server.cjs 599,395 bytes — within the 768 KiB #208 budget) - desktop Playwright protocol journey (4 tests): pass Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Supersedes #138 and #139, which are coupled (plugin-react 6 requires vite 7+) and were deferred in June because `vite build` failed with `Rolldown failed to resolve import "openai"` — vite 8 swaps in the rolldown bundler, and the renderer was transitively pulling core/dist/providers/deepseek.js. That blocker is gone: #192 split dependency-free model metadata from the provider implementation specifically so provider/OpenAI SDK code is absent from renderer bundles. The import rolldown could not resolve no longer reaches the renderer graph, so no `build.rolldownOptions.external` migration is needed. Also replaces `__dirname` with `import.meta.dirname` in vite.config.ts. vite 8 warns that `__dirname` is unsupported by `configLoader: 'native'`, which is planned to become the default in a future major. The repo requires Node >=22, so `import.meta.dirname` is available. Verified on top of React 19 (#211), forced rebuild throughout: - tsc -b --force, lint (--max-warnings=0), format:check: clean - 1033 tests across 8 packages: pass - pnpm build + full build:tauri-assets pipeline: pass (app-server.cjs 599,395 bytes — within the 768 KiB #208 budget) - desktop Playwright protocol journey (4 tests): pass Co-authored-by: t <t@t> Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Summary
Measured baseline
Validation
Stacked on #207.