Skip to content

Rstest extension sunset checklist #75

Description

@fi3ework

The standalone Rstest extension (rstack.rstest, source in web-infra-dev/rstest packages/vscode) is being retired in favor of the unified Rstack extension (rstack.rstack, this repo). rstack.rstack already covers everything the old extension does. This issue tracks the sunset. Rslint (rstack.rslint) will follow the same process once this one is done.

Current state

  • The old extension stands down when rstack.rstack is installed (src/migrationNotice.ts in rstest), and its README says it is retired.
  • As of 2026-09-29:
    • Marketplace: rstack.rstest has about 700 installs; rstack.rstack has 156.
    • Open VSX: rstack.rstest has 57k downloads; rstack.rstack has 4.4k.
  • Cursor does not show registry deprecation flags. For Cursor users, a prompt from the old extension is the only migration signal they get.

Decisions

  • No settings migration. The old extension's README gets a mapping table from rstest.* to rstack.rstest.*. rstest.nodeExecutable maps to rstack.nodeExecutable.
  • No changes to rstack.rstack for the migration. All migration logic lives in the old extension's final release.
  • No extensionPack / extensionDependencies link between the two extensions.
  • "Don't show again" is stored in globalState, never in the user's settings.json.
  • Supported core range for the final release is @rstest/core ^0.12.0.
  • Ship the final release before requesting deprecation. Once an extension is flagged deprecated, VS Code hides its Update action, and disallowInstall also stops auto-update.

Final release behavior

The final release of the old extension checks these cases in order:

  1. rstack.rstack is installed and enabled.
    • Stand down, as it does today.
    • Prompt: "Rstack has taken over Rstest. Uninstall the Rstest extension."
      • Uninstall Rstest runs workbench.extensions.uninstallExtension on its own ID, then offers a reload.
      • Don't show again sets a globalState flag.
    • Only check whether Rstack is installed. Do not also require workspace trust or rstack.rstest.enable.
  2. The local @rstest/core does not satisfy ^0.12.0.
    • Do not start the worker.
    • Show an error on every activation: "Rstest has moved into the Rstack extension. The Rstest extension only supports @rstest/core ^0.12.0 (found X). Please install Rstack."
      • Install Rstack.
    • There is no "Don't show again", because the extension cannot work in this case.
    • This needs a new semver check. The current versionCheck.ts only verifies that the @rstest/core/api export and createRstest exist, and has no upper bound.
  3. Only the old extension is present. This includes the case where Rstack is installed but disabled, because getExtension only returns enabled extensions.
    • Run normally. The prompt is shown once, after test discovery, and only if case 2 did not fire.
    • Prompt: "Rstest has moved into the Rstack extension. The Rstest extension is deprecated and will not be updated. Please install Rstack."
      • Install Rstack runs workbench.extensions.installExtension('rstack.rstack', { enable: true }).
      • Don't show again sets a globalState flag.

Checklist

Phase 0: rstack-editor

  • Drop the preview flag from rstack.rstack

Phase 1: final rstack.rstest release (web-infra-dev/rstest)

Phase 2: registries and docs (2 to 4 weeks after Phase 1, once auto-update has reached most users)

  • Request Marketplace deprecation (rstack.rstest → rstack.rstack, disallowInstall: false) in Deprecated extensions microsoft/vscode-discussions#1. Allow about 3 weeks; they may ask to verify publisher ownership by email.
  • Open a PR to EclipseFdn/publish-extensions extension-control/extensions.json with the same entry
  • Replace remaining rstack.rstest references in rstest docs, templates, and devcontainer examples with rstack.rstack. VS Code still recommends deprecated IDs listed in a repo's .vscode/extensions.json. Checked on rstest main (2026-10-08): the only mentions left outside packages/vscode/ are the intentional migration notes in website/docs/{en,zh}/guide/basic/vscode-extension.mdx; the install links already point to rstack.rstack, .vscode/extensions.json recommends only rstack.rslint, and there are no devcontainer or template references.

Phase 3: stop CI and publishing in rstest

Upstream coverage after this phase: rstackjs/rstack-ecosystem-ci#99 runs this repo's test:unit + lint (type-checked against the freshly built @rstest/core) on every rstest main push, and Renovate's rstack toolchain group opens a PR that runs the three-platform E2E on every release. Running this repo's VS Code E2E in ecosystem-ci was prototyped in #66 and dropped (see #40).

  • Remove the release_vscode_extension job from .github/workflows/release.yml
  • Remove the "VS Code Extension Test" step from .github/workflows/test.yml
  • Revoke VSCE_PAT / OVSX_PAT and the vscode-marketplace environment. First confirm the token is not shared with this repo's release.

Phase 4: remove the source (once installs have dropped off)

  • git rm -r packages/vscode, then clean up the remaining references:
    • root package.json test:vscode
    • knip.jsonc
    • .github/renovate.json5
    • pnpm-workspace.yaml (@vscode/vsce-sign, hoistPattern)
    • .gitignore
    • .vscode/launch.json and .vscode/tasks.json
    • AGENTS.md
    • .agents/skills/create-release-blog/SKILL.md
  • Update both deprecation entries to disallowInstall: true. On Open VSX, change an entry's values rather than deleting it: deleting the entry does not undo a deprecation.
  • Repeat Phases 1 to 4 for rstack.rslint (web-infra-dev/rslint packages/vscode-extension)

References

Activity

  1. pinned this issue on Sep 30, 2026
  2. fi3ework commented on Oct 10, 2026

    @fi3ework
    MemberAuthor

    Coverage note for Phase 3. Once rstest stops running the extension E2E in its own test.yml, the check against rstest main is rstackjs/rstack-ecosystem-ci#99: this repo's test:unit + lint (type-checked against the freshly built @rstest/core) on every main push.

    Running this repo's VS Code E2E in ecosystem-ci was prototyped in #66 and dropped: it needs per-fixture toolchain injection in setupFixtures.mjs plus xvfb, costs about 8 minutes per upstream push, and the only extra signal is a runtime break inside a real VS Code that type-check and unit tests miss. Release-time verification stays with Renovate's rstack toolchain group, whose PRs run the three-platform E2E. This matches the protection rstack-cli has, so Phase 3 can remove the rstest-side step without a replacement. Added as a note under Phase 3 in the description.

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions