Repository navigation
Rstest extension sunset checklist #75
Description
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.rstackis installed, and its README says the extension is retired. - As of 2026-09-29:
- Marketplace:
rstack.rstesthas about 700 installs;rstack.rstackhas 156. - Open VSX:
rstack.rstesthas 57k downloads;rstack.rstackhas 4.4k.
- Marketplace:
- 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.*torstack.rstest.*.rstest.nodeExecutablemaps torstack.nodeExecutable. - No changes to
rstack.rstackfor the migration. All migration logic lives in the old extension's final release. - No
extensionPack/extensionDependencieslink between the two extensions. - "Don't show again" is stored in
globalState, never in the user'ssettings.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
disallowInstallalso stops auto-update.
Final release behavior
The final release of the old extension checks these cases in order:
rstack.rstackis installed and enabled.- Stand down, as it does today.
- Prompt: "Rstack has taken over Rstest. Uninstall the Rstest extension."
- Uninstall Rstest runs
workbench.extensions.uninstallExtensionon its own ID, then offers a reload. - Don't show again sets a
globalStateflag.
- Uninstall Rstest runs
- Only check whether Rstack is installed. Do not also require workspace trust or
rstack.rstest.enable.
- The local
@rstest/coredoes 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.tsonly verifies that the@rstest/core/apiexport andcreateRstestexist, and has no upper bound.
- Only the old extension is present. This includes the case where Rstack is installed but disabled, because
getExtensiononly 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
globalStateflag.
- Install Rstack runs
Checklist
Phase 0: rstack-editor
- Drop the
previewflag fromrstack.rstack
Phase 1: final rstack.rstest release (web-infra-dev/rstest)
- Implement the three cases above, with unit and E2E tests (feat(vscode): prepare the final standalone extension release web-infra-dev/rstest#1917)
- Add the
^0.12.0semver guard on the local@rstest/core(feat(vscode): prepare the final standalone extension release web-infra-dev/rstest#1917) - Rename
displayNametoRstest (moved to Rstack). The Marketplace rejectedRstest (Deprecated)at publish time as too similar to the existingVitest (DEPRECATED); its display-name similarity check is server-side and only runs on publish. - Add the settings key mapping table to
packages/vscode/README.md(feat(vscode): prepare the final standalone extension release web-infra-dev/rstest#1917) - Release through the normal Release workflow to both Marketplace and Open VSX (0.12.3, release: 0.12.3 web-infra-dev/rstest#1920)
- Tag the release (
v0.12.3) - Freeze the extension version: exclude
packages/vscode/package.jsonfrombump.config.mtsandscripts/checkVersionConsistency.mjs(chore(vscode): freeze the extension version after its final release web-infra-dev/rstest#1919). The VS Code E2E intest.ymlnow runs only on full runs (push tomain,release:PRs, manual full runs).
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.jsonwith the same entry (#1194) - Replace remaining
rstack.rstestreferences in rstest docs, templates, and devcontainer examples withrstack.rstack. VS Code still recommends deprecated IDs listed in a repo's.vscode/extensions.json. Checked on rstestmain(2026-10-08): the only mentions left outsidepackages/vscode/are the intentional migration notes inwebsite/docs/{en,zh}/guide/basic/vscode-extension.mdx; the install links already point torstack.rstack,.vscode/extensions.jsonrecommends onlyrstack.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_extensionjob from.github/workflows/release.yml(chore(vscode): stop publishing and E2E-testing the frozen extension in CI web-infra-dev/rstest#1969) - Remove the "VS Code Extension Test" step from
.github/workflows/test.yml(chore(vscode): stop publishing and E2E-testing the frozen extension in CI web-infra-dev/rstest#1969) - Revoke
VSCE_PAT/OVSX_PATand thevscode-marketplaceenvironment. 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 (chore(vscode): remove the retired standalone extension source web-infra-dev/rstest#2013):- root
package.json(test:vscodeand the stalecheck-dependency-versionignore for therstestpackage name) bump.config.mtsandscripts/checkVersionConsistency.mjsexclusionsknip.jsonc.github/renovate.json5pnpm-workspace.yaml(@vscode/vsce-sign;hoistPatternreplaced withhoist: false, because restoring pnpm's default hoisting lets the bin-shimNODE_PATHexpose every workspace package to install checks).gitignore.vscode/launch.jsonand.vscode/tasks.jsonAGENTS.md.agents/skills/create-release-blog/SKILL.md
- root
- 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/rslintpackages/vscode-extension)
References
- Deprecating extensions (VS Code publishing docs): https://code.visualstudio.com/api/working-with-extensions/publishing-extension#deprecating-extensions
- Marketplace deprecation requests: Deprecated extensions microsoft/vscode-discussions#1
- Open VSX extension control: https://github.com/EclipseFdn/open-vsx.org/wiki/Managing-Extensions
Activity
fi3ework commentedon Oct 10, 2026
Coverage note for Phase 3. Once rstest stops running the extension E2E in its own
test.yml, the check against rstestmainis rstackjs/rstack-ecosystem-ci#99: this repo'stest:unit+lint(type-checked against the freshly built@rstest/core) on everymainpush.Running this repo's VS Code E2E in ecosystem-ci was prototyped in #66 and dropped: it needs per-fixture toolchain injection in
setupFixtures.mjsplus 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'srstack toolchaingroup, 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.fi3ework commentedon Oct 22, 2026
Status update (2026-10-22). Both Phase 2 requests are now out; everything else is waiting on an external step.
eclipsefdn/ecapassed; "Validate PR" and "Validate Extension Control Schema" completed with conclusionaction_required, i.e. waiting for a maintainer to approve and merge.VSCE_PAT/OVSX_PATand thevscode-marketplaceenvironment; it does not affect this repo, so it waits for an explicit go-ahead.Verified today:
rstack.rstestis still 0.12.3 with displayNameRstest (moved to Rstack)on both the Marketplace and Open VSX.chore: keep the frozen vscode package out of the reporter contract ch…
chore: keep the frozen vscode package out of the reporter contract ch…
chore: keep the frozen vscode package out of the reporter contract ch…
chore(vscode): remove the retired standalone extension source
fi3ework commentedon Oct 29, 2026
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.package.json,bump.config.mts,scripts/checkVersionConsistency.mjs,knip.jsonc,.github/renovate.json5,.gitignore, rootAGENTS.md, and.agents/skills/create-release-blog/SKILL.md.pnpm-lock.yamlregenerated; only the vsce / test-electron dependency tree is gone.Two things worth noting for the rest of the checklist:
--ignore-package rstestflag in the rootcheck-dependency-versionscript (the extension's package name no longer exists in the workspace), and the release-train exclusions inbump.config.mts/scripts/checkVersionConsistency.mjs.pnpm-workspace.yaml,@vscode/vsce-signis gone, and the vsce-onlyhoistPattern: ['@secretlint/*']was replaced withhoist: falserather than deleted. Deleting the setting restores pnpm's default virtual-store hoisting, and pnpm's bin shims exportnode_modules/.pnpm/node_modulesonNODE_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.mdrequirement 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 forrstack.rslint.