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
Estate TS-elimination (RSR: no TypeScript in the Tier-1 estate) requires migrating Deno I/O modules, not just wasm-pure logic and VS Code extensions. Concrete blocked consumer: hyperpolymath/ubicitysrc/storage.ts (async ExperienceStorage class, Deno FS effects, consumed as ESM ./storage.js by ~6 .js modules) and src/wasm-bridge.ts (Deno.readFile + WebAssembly.instantiate glue). The antipattern-check gate correctly flags these as genuine violations; they cannot be migrated today.
Gap analysis
Available today (per #35, Phases 1–3, lib/codegen_node.ml):
Deno-ESM emit target — emit an ES module (.js, import/export) consumable by a Deno runtime, distinct from the Node-CJS .cjs path. Output-extension dispatch like the existing .cjs route.
Class/object ESM emission — ExperienceStorage is an instantiable class with private fields; emit must expose a constructable object whose methods bridge to wasm + the JS adapter.
Scope
In: the four capabilities above + a migration of ubicity's two files as the proving harness. Out: non-Deno runtimes; experimental nextgen-languages; vscode work (covered by #35/#63/#104).
Acceptance criteria
affinescript emits a Deno-ESM module from .affine (dispatched by output ext)
stdlib/Deno.affine covers the FS/path surface listed above, with JS adapter
ubicity storage.affine + wasm-bridge.affine compile to drop-in ./storage.js/./wasm-bridge.js; ubicity deno task test + antipattern-check green; no .ts in src/
Relations
Refs #35 (builds on its codegen_node.ml/shim infra). Refs #103 (async-extern prerequisite). Motivating consumer: hyperpolymath/ubicity. Surfaced during the 2026-05-16 estate PR sweep.
Motivation
Estate TS-elimination (RSR: no TypeScript in the Tier-1 estate) requires migrating Deno I/O modules, not just wasm-pure logic and VS Code extensions. Concrete blocked consumer: hyperpolymath/ubicity
src/storage.ts(asyncExperienceStorageclass, Deno FS effects, consumed as ESM./storage.jsby ~6.jsmodules) andsrc/wasm-bridge.ts(Deno.readFile + WebAssembly.instantiate glue). Theantipattern-checkgate correctly flags these as genuine violations; they cannot be migrated today.Gap analysis
Available today (per #35, Phases 1–3,
lib/codegen_node.ml):.cjsshim wrapping compiled wasmstdlib/Vscode.affine, handle-table adapter)Missing for Deno I/O module migration:
.js,import/export) consumable by a Deno runtime, distinct from the Node-CJS.cjspath. Output-extension dispatch like the existing.cjsroute.stdlib/Deno.affineFS bindings —pub extern fnleaves forDeno.readTextFile/writeTextFile/readDir/stat/remove,ensureDir(@std/fs),join(@std/path),Deno.errors.NotFounddiscrimination. JS-side adapter mirroring thepackages/affine-vscode/mod.jshandle/readString pattern.storage.tsisasync/Promise-returning. Depends on / extends Async-extern ABI: bind withProgress + LanguageClient.sendRequest #103 (async-extern ABI). Required before any Deno FS binding is callable.ExperienceStorageis an instantiable class with private fields; emit must expose a constructable object whose methods bridge to wasm + the JS adapter.Scope
In: the four capabilities above + a migration of ubicity's two files as the proving harness. Out: non-Deno runtimes; experimental
nextgen-languages; vscode work (covered by #35/#63/#104).Acceptance criteria
affinescriptemits a Deno-ESM module from.affine(dispatched by output ext)stdlib/Deno.affinecovers the FS/path surface listed above, with JS adapterstorage.affine+wasm-bridge.affinecompile to drop-in./storage.js/./wasm-bridge.js; ubicitydeno task test+antipattern-checkgreen; no.tsinsrc/Relations
Refs #35 (builds on its
codegen_node.ml/shim infra). Refs #103 (async-extern prerequisite). Motivating consumer: hyperpolymath/ubicity. Surfaced during the 2026-05-16 estate PR sweep.