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; uninstall this 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: "This extension is no longer maintained and only supports @rstest/core ^0.12.0 (found X). 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.
    • Prompt: "This extension is no longer maintained; 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)

  • Implement the three cases above, with unit and E2E tests
  • Add the ^0.12.0 semver guard on the local @rstest/core
  • Append "(Deprecated)" to displayName
  • Add the settings key mapping table to packages/vscode/README.md
  • Release through the normal Release workflow to both Marketplace and Open VSX
  • Tag the release
  • Freeze the extension version: exclude packages/vscode/package.json from bump.config.mts and scripts/checkVersionConsistency.mjs

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.

Phase 3: stop CI and publishing in rstest

  • 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

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