You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
[Ecosystem] Port external VS Code extensions (my-lang, rsr-certifier) to .affine once #35 lands #64
Both are tracked as approved exemptions in their respective repos' policy docs. Unblock condition is #35.
This issue exists in affinescript (not the sibling repos) because the unblock is here — once #35 lands, the porting work is mechanical and can be done in each sibling repo independently.
Port work landed across three PRs. The chain has one upstream dependency: affinescript#102 must merge before standards#46 can compile against the bindings it consumes.
🔗 feat(vscode-bindings): expand surface for rsr-certifier port (#64) #102 — expands stdlib/Vscode.affine + packages/affine-vscode/mod.js with ~20 bindings for the rsr-certifier port (status bar, diagnostics, webview, clipboard, fs.writeFile, workspace folders, uri/path helpers, onDidSaveTextDocument). Adds the stringIsEmpty helper for sentinel checks. Two API shapes deliberately omitted because they need an async-extern ABI that doesn't exist yet: withProgress(opts, async task) and LanguageClient.sendRequest.
Each port verifies activation, command registration, LSP wiring, clean disposal
✅ — see test plans in each PR
Each sibling repo updates its TS-exemption table to drop the ported entry
⚠️ partial — see note below
TS-exemption table note
my-lang repo: the exemption row for vscode-extension/src/extension.ts lives on branch feat/stdlib-fs-env-format, not on main. On main there is no TS-exemption table to update. When that feature branch lands, the row for the now-ported file should be dropped at the same time.
standards repo: the extension.ts was never a per-repo exemption row — it was covered by the universal-allowlist *vscode* directory-segment pattern in .github/workflows/rsr-antipattern.yml. Removing the .ts file therefore needs no CLAUDE.md edit.
Follow-ups discovered during the port
Async-extern ABI. A real follow-up issue is worth filing in affinescript to track binding vscode.window.withProgress(opts, async task) and LanguageClient.sendRequest(method, params). Once those exist, rsr-certifier can restore: in-process compliance results, live status-bar mutation, diagnostic-collection population, per-check report HTML, and the active save-document filter in onDidSaveTextDocument.
Publish @hyperpolymath/affine-vscode to npm. The adapter is currently vendored verbatim into each external extension (src/affine-vscode-adapter.cjs). Publishing it would eliminate drift risk and let extensions npm install it directly.
extraImports codegen hookup. Today the wrapper has to be hand-written (src/index.cjs in each extension). Phase 3's original ambition was to have affinescript compile --target node-cjs emit the extraImports wiring directly; doing that would let extensions ship a single compiled artefact with no hand-written shim.
Acceptance criteria satisfied. Follow-ups (async-extern ABI, publish @hyperpolymath/affine-vscode to npm, automate extraImports wiring in codegen) tracked in the issue comment thread for future scheduling.
Activity
feat: typed-wasm xmod + Node backend + extern + VS Code (#35, #42) (#90)
hyperpolymath commentedon May 11, 2026
Port work landed across three PRs. The chain has one upstream dependency: affinescript#102 must merge before standards#46 can compile against the bindings it consumes.
PR chain
🔗 port(vscode-extension): rewrite extension.ts as extension.affine (affinescript#64) my-lang#11 — port
vscode-extension/src/extension.ts→extension.affine. Uses only the Phase-2 binding surface from Add Node-target backend + vscode-API bindings to enable .affine VS Code extensions #35 (no new bindings needed). Independent — can merge as soon as it passes review.🔗 feat(vscode-bindings): expand surface for rsr-certifier port (#64) #102 — expands
stdlib/Vscode.affine+packages/affine-vscode/mod.jswith ~20 bindings for the rsr-certifier port (status bar, diagnostics, webview, clipboard, fs.writeFile, workspace folders, uri/path helpers, onDidSaveTextDocument). Adds thestringIsEmptyhelper for sentinel checks. Two API shapes deliberately omitted because they need an async-extern ABI that doesn't exist yet:withProgress(opts, async task)andLanguageClient.sendRequest.🔗 port(rsr-certifier-vscode): rewrite extension.ts as extension.affine (affinescript#64) standards#46 — port
rhodium-standard-repositories/satellites/rsr-certifier/extensions/vscode/src/extension.ts→extension.affine. Consumes the expanded bindings from feat(vscode-bindings): expand surface for rsr-certifier port (#64) #102. Documented feature-parity degradations are scoped to the async-shaped APIs above (all four commands fall back to thersrCLI in a terminal — the same fallback path the original TS extension already had for no-LSP cases).Acceptance criteria coverage
my-langstandardsTS-exemption table note
my-langrepo: the exemption row forvscode-extension/src/extension.tslives on branchfeat/stdlib-fs-env-format, not onmain. Onmainthere is no TS-exemption table to update. When that feature branch lands, the row for the now-ported file should be dropped at the same time.standardsrepo: theextension.tswas never a per-repo exemption row — it was covered by the universal-allowlist*vscode*directory-segment pattern in.github/workflows/rsr-antipattern.yml. Removing the .ts file therefore needs no CLAUDE.md edit.Follow-ups discovered during the port
Async-extern ABI. A real follow-up issue is worth filing in affinescript to track binding
vscode.window.withProgress(opts, async task)andLanguageClient.sendRequest(method, params). Once those exist, rsr-certifier can restore: in-process compliance results, live status-bar mutation, diagnostic-collection population, per-check report HTML, and the active save-document filter inonDidSaveTextDocument.Publish
@hyperpolymath/affine-vscodeto npm. The adapter is currently vendored verbatim into each external extension (src/affine-vscode-adapter.cjs). Publishing it would eliminate drift risk and let extensionsnpm installit directly.extraImportscodegen hookup. Today the wrapper has to be hand-written (src/index.cjsin each extension). Phase 3's original ambition was to haveaffinescript compile --target node-cjsemit theextraImportswiring directly; doing that would let extensions ship a single compiled artefact with no hand-written shim.feat(vscode-bindings): expand surface for rsr-certifier port (#64) (#102
port(rsr-certifier-vscode): rewrite extension.ts as extension.affine …
hyperpolymath commentedon May 11, 2026
All three PRs merged:
Acceptance criteria satisfied. Follow-ups (async-extern ABI, publish @hyperpolymath/affine-vscode to npm, automate extraImports wiring in codegen) tracked in the issue comment thread for future scheduling.