Unlist Basilisk: inert CLI, notice-only extensions, one message on every surface - #428
Merged
Conversation
…ease The release workflow could not run: stamp-version.sh still required website/src/_data/site.json, which was deleted when the site collapsed to one statement page. It exits 2 on a missing carrier and is the first step of the build, release, vsix and pypi-wheels jobs, so tagging shipped nothing. The Zed extension still advertised a language server, fourteen slash commands and a debug adapter, and downloaded the binary itself. It now registers none of those and prints the statement under /basilisk. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
| const text = statementText(); | ||
| assert.ok(text.startsWith("Basilisk is unlisted."), text); | ||
| assert.ok(text.includes("checks nothing"), text); | ||
| assert.ok(text.includes("https://github.com/python/typing/pull/2330"), text); |
| walk(full, `${prefix}${entry}/`); | ||
| } else if (entry.endsWith(".html")) { | ||
| const url = entry === "index.html" ? prefix : `${prefix}${entry}`; | ||
| pages.push({ url, html: readFileSync(full, "utf-8") }); |
| */ | ||
| function visibleText(html: string): string { | ||
| return html | ||
| .replace(/<script[\s\S]*?<\/script>/g, " ") |
| { label: "an editor install link", pattern: /vscode:extension/i }, | ||
| { | ||
| label: "a marketplace or package listing", | ||
| pattern: /marketplace\.visualstudio\.com|open-vsx\.org|pypi\.org/i, |
Only the Zed job installs pytest. The Lint and Website Build jobs run the same suites and do not, so `python3 -m pytest` failed both. Both files are plain unittest with `unittest.main()`, so invoke them directly rather than adding a pip install to two more jobs. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
TLDR
Strip every public surface down to the withdrawal statement, make the CLI and all three editor extensions inert, and repair the release pipeline so the one final version can actually ship before anything is unlisted.
What Was Added?
delist/— the unlisting runbook. Nine dry-run-by-default scripts (00-publish-zed-final→08-verify-unlisted), each requiring you to typeUNLISTbefore touching anything public, plus a manual table for the channels with no API (PyPI yanking, Open VSX, secret revocation, third-party listings).01-verify-final-release.shrefuses to let anything else run until every channel reports the final version live.scripts/check_public_copy.py+scripts/test_check_public_copy.py— scans all 34 public surfaces (crate READMEs,SECURITY.md, package manifests, Homebrew/Scoop templates, site templates) for anything[WITHDRAWAL-PROHIBITED]bars: percentages, conformance scores, install commands, rule counts, feature marketing, scoping reassurance, shipped-status claims, and a quoted apology. Wired intomake lintand CI.scripts/verify-vsix-inert.sh— unzips the packaged VSIX and fails on any binary, anybin/,bundled/, or anyout/*.jsbeyond the notice.crates/basilisk-cli/tests/inert_cli.rs— drives the real binary over 21 argument shapes.What Was Changed or Deleted?
The release pipeline was broken and is now fixed.
scripts/stamp-version.shstill listedwebsite/src/_data/site.json, deleted when the site collapsed to one statement page. A missing carrier is fatal (exit 2) and the script is the first step of thebuild,release,vsixandpypi-wheelsjobs — tagging a release failed every job and shipped nothing to anyone. Carrier removed; the site displays no version and derives its metadata from the generated copy insite.js.The CLI is inert.
main.rsparses no arguments and links no Basilisk crate — Shipwright only. Every invocation prints the statement to stderr and exits4; stdout is always empty so--output json > report.jsonyields an empty file;--versionstill answers with exit0so package managers and installed extensions don't hang.The VS Code extension ships no checker. One command, one read-only statement document, one warning per installed version. 143 source files, every setting, view, debugger, keybinding, walkthrough and runtime dependency deleted. 8 files, 370 KB, no binary.
The Zed extension ships no checker. It previously registered a language server that launched
basilisk lsp, fourteen slash commands (profiling, memory, tests), and a DAP adapter, and downloaded the release binary itself — so with an inert binary a Zed user would see "server failed to start" and never see the statement. It now declares no[language_servers.*],[debug_adapters.*]or[grammars.*]table, dropsbasilisk-commonandserde_json(leavingzed_extension_apialone, which is why the mirror render no longer vendors a workspace crate), and prints the statement under/basilisk.Crate READMEs carry a record banner and accurate status; the unsourced "sub-10ms incremental checks", "battle-tested" and "Working — ... all shipping" claims are gone.
SECURITY.mdno longer promises response windows or a supported version line on an unlisted project.The website is one statement page; every retired URL redirects to
/.basilisk-db's cross-session result cache and the LSP stdio/Zed spawn suites are deleted along with the checking they served.How Do The Automated Tests Prove It Works?
inert_cli.rs— six tests over 21 argument shapes assert the exact stderr bytes, empty stdout, exit4, that no file in the workspace is created/deleted/rewritten, that--versionexits0, and that the version JSON advertises nolsp/mcp/dap/profilercapability.basilisk-zed/src/logic_tests.rs— 7 tests read the shippedextension.tomland fail if a language server, debug adapter or grammar table returns, if there is more than one slash command, if the description drifts from the approved one-line copy, or iflatest_github_release/download_filereappears in the glue.test_check_public_copy.py— every rule is exercised against text it must reject, no rule fires on another rule's example (so failures point at the right prohibition), and the approved copy trips nothing (a rule that couldn't tellpython/typing#2330from a score would force the copy to be watered down).withdrawal.test.ts— extension at 100% coverage;verify-vsix-inert.shconfirms the packaged 8-file VSIX ships no binary.withdrawal.spec.ts— 50 E2E tests assert the served bytes of every retired URL carrynoindex, a canonical link and a meta-refresh, and land on/.v0.42.0: stamper exits 0 across all five carriers;cargo build --release --bin basilisk→basilisk 0.42.0; archive packaged andverify_release_attribution.py --kind binarypasses; VSIX packages at 8 files and passes the inert check;gen_release_notes.pyrenders the statement from the spec.make lint,test-rust.sh(all 8 crates at or above threshold),_test_vsix(100%),test-nvim.sh(48% ≥ 47%),test-zed.sh+ wasm build + clippy + standalone mirror build,test_publish_zed_registry.py(9),unittest discover -s conformance,cargo build --release.Spec / Doc Changes
DOCS-WITHDRAWAL-MESSAGING-SPEC.mdis the single source of truth:{#WITHDRAWAL-SURFACES}now maps every surface to its block and generator and names the scan;{#WITHDRAWAL-UNLIST}fixes the order publish → verify live → unlist;{#WITHDRAWAL-INERT-TEXT}is the one fence every notice is generated from.ZED-SPEC.mdgains{#ZED-NOW}and moves the feature sections below a "record of what was built" line;{#ZED-DIST}is marked superseded.CLAUDE.mdnormalised to one vocabulary — "unlisted" throughout, never delisted/withdrawn/deprecated.WEBSITE-ERROR-PAGES-SPEC.mdandWEBSITE-SCREENSHOTS-SPEC.mdrestored as record.Breaking Changes
Yes, deliberately. The
basiliskCLI fails on every invocation with exit4— a pipeline that still calls it breaks loudly rather than reading a clean run out of a checker that was wrong. Every editor feature is removed. This is the point of the release.Coverage thresholds ratcheted up only: vsix 93→99, nvim 44→47.
🤖 Generated with Claude Code