Skip to content

Rstest extension sunset checklist #75

Open

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's source was removed from web-infra-dev/rstest (chore(vscode): remove the retired standalone extension source web-infra-dev/rstest#2013). The final published 0.12.3 release still stands down when rstack.rstack is installed, and its README says the extension 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 (#1194)
  • 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).

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

  • git rm -r packages/vscode, then clean up the remaining references (chore(vscode): remove the retired standalone extension source web-infra-dev/rstest#2013):
    • root package.json (test:vscode and the stale check-dependency-version ignore for the rstest package name)
    • bump.config.mts and scripts/checkVersionConsistency.mjs exclusions
    • knip.jsonc
    • .github/renovate.json5
    • pnpm-workspace.yaml (@vscode/vsce-sign; hoistPattern replaced with hoist: false, because restoring pnpm's default hoisting lets the bin-shim NODE_PATH expose every workspace package to install checks)
    • .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.

  3. fi3ework commented on Oct 22, 2026

    @fi3ework
    MemberAuthor

    Status update (2026-10-22). Both Phase 2 requests are now out; everything else is waiting on an external step.

    Verified today: rstack.rstest is still 0.12.3 with displayName Rstest (moved to Rstack) on both the Marketplace and Open VSX.

  4. fi3ework commented on Oct 29, 2026

    @fi3ework
    MemberAuthor

    Source removal has landed in web-infra-dev/rstest#2013 (squash commit 7a26bfb6).

    What was removed:

    • packages/vscode (all 80 tracked files) and the extension-only .vscode/launch.json / .vscode/tasks.json.
    • Remaining references in root package.json, bump.config.mts, scripts/checkVersionConsistency.mjs, knip.jsonc, .github/renovate.json5, .gitignore, root AGENTS.md, and .agents/skills/create-release-blog/SKILL.md.
    • pnpm-lock.yaml regenerated; only the vsce / test-electron dependency tree is gone.

    Two things worth noting for the rest of the checklist:

    • Two references were missing from the original Phase 4 list and needed cleanup in the same PR: the --ignore-package rstest flag in the root check-dependency-version script (the extension's package name no longer exists in the workspace), and the release-train exclusions in bump.config.mts / scripts/checkVersionConsistency.mjs.
    • In pnpm-workspace.yaml, @vscode/vsce-sign is gone, and the vsce-only hoistPattern: ['@secretlint/*'] was replaced with hoist: false rather than deleted. Deleting the setting restores pnpm's default virtual-store hoisting, and pnpm's bin shims export node_modules/.pnpm/node_modules on NODE_PATH; that makes every workspace package resolvable from any project and broke the coverage provider install check (packages/core/tests/coverage/provider.test.ts). Disabling hoisting keeps the previous effective behavior now that vsce is gone.

    The editor integration is untouched: it still lives in rstackjs/rstack-editor, and the rstest AGENTS.md requirement to open a matching change here when @rstest/core/api, CLI flags, or reporter output change is preserved.

    Still open in Phase 4: flipping both registry deprecation entries to disallowInstall: true, and repeating the process for rstack.rslint.

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