Skip to content

Track the latest @rslint/core / @rstest/core: verify 0.9.0, join rstack-ecosystem-ci, un-pin E2E fixtures #40

Description

@fi3ework

Problem

The extension is developed and E2E-tested against a pinned toolchain that is already behind the registry, and nothing verifies it against new releases automatically.

  • @rslint/core on npm is 0.9.0. The E2E fixture install root pins ^0.8.1 (packages/vscode/e2e/lint/fixtures/package.json) and packages/vscode/package.json declares ^0.8.0. The lint E2E slice has never run against 0.9.0.
  • renovate.json5 puts @rslint/** / @rstest/** / rstack in the rstack toolchain group with schedule: at any time, but ignorePaths excludes packages/vscode/e2e/** on purpose ("bumping them is a manual, E2E-verified decision"). So the fixtures never move unless someone remembers. There is also no open Renovate PR for the 0.9.0 devDependency bump, which is worth checking.
  • 0.8.2 → 0.9.0 changed two wire surfaces the lint worker sits on: CONFIG_DISCOVERY_PROTOCOL_VERSION 2 → 3 (plus a basePath field in flat-config entries) and the plugin-lint request field fix?: boolean → required collectFixes: boolean. Static reading says the worker survives both because it loads binary, config-loader and eslint-plugin host from one core root and passes the payloads through opaquely (packages/vscode/src/stacks/lint/worker/core.ts:98-153, ConfigTransactionAdapter.ts:61-149, PluginLintPool.ts:175-225). e2e/lint/suite-eslint-plugins/plugin-pool.test.ts:51-58 still builds a request with fix: false, which does not type-check against 0.9.0.

Before the standalone extensions were retired this was a non-issue: they lived in the rslint / rstest monorepos and moved with every release. Now every core release is a potential drift.

Proposal

1. Verify 0.9.0 now

  • Bump e2e/lint/fixtures/package.json and the @rslint/core devDependency to 0.9.0.
  • Change fix: false to collectFixes: false in plugin-pool.test.ts.
  • Run pnpm test:e2e:lint and fix whatever falls out.

2. Join rstack-ecosystem-ci

Add this repo as a suite in https://github.com/rstackjs/rstack-ecosystem-ci so the extension's E2E runs against each stack's main / nightly / release on the daily schedule and on demand from a rstest or rslint PR.

  • rstest: add tests/rstest/rstack-editor.ts alongside the existing rstack-cli.ts suite, running the rstest E2E slice (pnpm test:e2e:rstest) against the built @rstest/core.
  • rslint: rstack-ecosystem-ci has no rslint stack today (stacks: rsbuild, rspack, rstest, rslib, rsdoctor, rspress). Either add one (three workflows + tests/rslint/) or, as a first step, run the lint slice under an existing stack with --release. Needs a decision with the eco-ci maintainers; a counterpart issue there may be needed.
  • The suite must run a real VS Code (packages/vscode/e2e/run.mjs, VSCODE_CLI=1), so the eco-ci runner needs a display or xvfb. Check what rstack-cli.ts already does for headless runs.

3. Keep the fixtures on latest

  • Decide whether the ignorePaths exclusion for packages/vscode/e2e/** still earns its keep once eco-ci covers the "does latest still work" question. Options: remove it and let the rstack toolchain group bump fixtures too (E2E on the Renovate PR is the verification), or keep the pin and rely on eco-ci to flag drift.
  • Either way, widen the devDependency ranges so rangeStrategy: bump actually opens a PR for a new minor (^0.8.0 does not cover 0.9.0).
  • SUPPORT_MATRIX in shared/versionCheck.ts is a floor, not a pin, and stays as is.

Activity

  1. fi3ework commented on Sep 3, 2026

    @fi3ework
    MemberAuthor

    Decision on part 3 ("keep the fixtures on latest"), prompted by #43:

    • Fixture installs become deterministic: each fixture's pnpm-lock.yaml is committed and setupFixtures.mjs installs with --frozen-lockfile. The floating-range design is what let rstack@0.6.1's ~0.8.0 drift onto an incompatible @rslint/core 0.8.2 and break main CI without any commit ("Rstack lint bridge" E2E fails on main: fixture rs lint loads 0 rules #43).
    • The "a core just shipped" signal moves to Renovate: packages/vscode/e2e/** leaves ignorePaths, so fixtures join the rstack toolchain group (schedule: at any time, no release-age cooldown). A new @rslint/core / @rstest/core / rstack release opens a PR immediately, and that PR's E2E is the compatibility check.

    Landing together with the 0.7.2 fixture bump in the PR for #43. Parts 1 (verify 0.9.0) and 2 (ecosystem-ci) stay open here.

  2. fi3ework commented on Oct 10, 2026

    @fi3ework
    MemberAuthor

    Closing; every item is either done or decided.

    1. Verify 0.9.0 — superseded: fixtures and the devDependency are on @rslint/core 0.9.5 (latest Renovate bump: chore(deps): update rstack toolchain #82), with the E2E suites passing on the PR.
    2. Join rstack-ecosystem-ci — done for the part that pays off: feat(rstest): add rstack-editor ecosystem suite rstack-ecosystem-ci#99 runs test:unit + lint (type-checked against the freshly built @rstest/core) on every rstest main push. The E2E variant was prototyped in ci: let rstack-ecosystem-ci run the E2E suites #66 and dropped: it needs a per-fixture toolchain injection in setupFixtures.mjs plus xvfb, costs ~8 min per upstream push, and the only extra signal is a runtime break in a real VS Code that type-check and unit tests miss. An rslint stack does not exist in eco-ci and building rslint there (Go toolchain, typescript-go submodule, native optional packages) is out of proportion for now.
    3. Keep the fixtures on latest — done: renovate.json5 no longer excludes packages/vscode/e2e/**, so the rstack toolchain group bumps the fixture pins too and the three-platform E2E on that PR is the verification.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions