Skip to content

Commit 7732aec

Browse files
docs(ROADMAP): add TS→AffineScript estate migration campaign section (#247)
## Summary Adds the in-flight TS→AffineScript campaign to the canonical standards ROADMAP. Codifies 4-layer architecture, 7-step order, dependency graph, and bidirectional links to umbrella issue #239 + 7 step issues #240#246. Mirrors the same structure as the memory tracker so the roadmap, issues, and tracker are in lockstep. ## Test plan - [x] Layer-1 PRs referenced are merged or armed (hypatia#375/#378, standards#235/#238, reposystem#82) - [x] All 8 issues (umbrella + 7 steps) filed in standards (#239#246) - [ ] Project-board URL populated after auth scope refresh 🤖 Generated with [Claude Code](https://claude.com/claude-code)
1 parent 3ea55d0 commit 7732aec

1 file changed

Lines changed: 78 additions & 0 deletions

File tree

ROADMAP.adoc

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,6 +170,84 @@ See: https://github.com/hyperpolymath/palimpsest-license[palimpsest-license repo
170170
* **Protocol specifications** — Preferred serialization (MessagePack, Protobuf)
171171
* **Testing frameworks** — Approved testing tools per language
172172

173+
=== TypeScript → AffineScript Estate Migration (IN-FLIGHT 2026-05-28)
174+
175+
Multi-session estate-wide migration of TypeScript to AffineScript, parallel to the completed V→Zig sweep (2026-05-28) but at very different scale (~50-80 PRs across ~38 repos vs V→Zig's 16-PR single session).
176+
177+
**Campaign umbrella**: https://github.com/hyperpolymath/standards/issues/239[#239]
178+
179+
==== 4-layer architecture
180+
181+
[cols="1,3,1", options="header"]
182+
|===
183+
|Layer |Description |Status
184+
185+
|**Layer 1 — Policy & enforcement**
186+
|hypatia `:typescript_detected` rule + `path_allow_prefixes` (9 carve-out classes); standards `.claude/CLAUDE.md` exemption table; `LANGUAGE-POLICY.adoc` Banned TS row; `language-policy.yml` CI gate. Layer-1 PRs: hypatia#375, hypatia#378, standards#235, standards#238, reposystem#82.
187+
|Complete
188+
189+
|**Layer 2 — Stdlib binding capacity**
190+
|AffineScript stdlib must cover the host surface each port needs. Exists today: `Deno.affine` (readTextFile/writeTextFile/readDirNames/path), `json.affine` v0.3 (Json sum type + Zig FFI parse), `Vscode.affine` (55 fns), `VscodeLanguageClient.affine`. Known gaps: recursive walk, regex, Set, general `Map<K,V>`, `Date.toISOString`, WebExt/WP-admin/Zotero APIs.
191+
|Partial (step 3 discharges as ports surface gaps)
192+
193+
|**Layer 3 — Physical file ports**
194+
|~285 estate-authored `.ts`/`.tsx` files across 38 repos (post-carve-out). Unblocked: ~215 / ~30 repos. Plugin-host-blocked: ~70 / 5 repos. Each port is a non-trivial rewrite, not a shim swap.
195+
|In flight
196+
197+
|**Layer 4 — Parallel dependency: AS bindings top-50 roadmap**
198+
|Plugin-host APIs (WebExtensions, WP-admin, Zotero, MailExt) must be bound in `affinescript/stdlib/` before the corresponding plugin repos can migrate. Tracked separately at `project_affinescript_bindings_top50_roadmap`.
199+
|Multi-week parallel
200+
|===
201+
202+
==== Step ordering (value-per-effort)
203+
204+
[cols="1,4,2", options="header"]
205+
|===
206+
|Step |Description |Issue
207+
208+
|**①** |SEED PORT — phronesis 54L VSCode extension to `.affine` (binding coverage confirmed)
209+
|https://github.com/hyperpolymath/standards/issues/240[#240]
210+
211+
|**②** |TAIL BATCH 1 — pure-logic small repos (≤3 files each)
212+
|https://github.com/hyperpolymath/standards/issues/241[#241]
213+
214+
|**③** |STDLIB FILL — discharge gaps surfaced by step 2
215+
|https://github.com/hyperpolymath/standards/issues/242[#242]
216+
217+
|**④** |TAIL BATCH 2 — 4-9 file mid-tier repos
218+
|https://github.com/hyperpolymath/standards/issues/243[#243]
219+
220+
|**⑤** |IDAPTIK DLC PORT — 52 files (VM/instruction core)
221+
|https://github.com/hyperpolymath/standards/issues/244[#244]
222+
223+
|**⑥** |PLUGIN-HOST BINDINGS — cross-ref AS top-50 roadmap
224+
|https://github.com/hyperpolymath/standards/issues/245[#245]
225+
226+
|**⑦** |PLUGIN REPOS — 5 repos / 70 files (post step 6)
227+
|https://github.com/hyperpolymath/standards/issues/246[#246]
228+
|===
229+
230+
==== Dependency graph
231+
232+
[source]
233+
----
234+
step 1 (seed)
235+
└─→ step 2 (tail batch 1) ──→ step 3 (stdlib fill) ──→ step 4 (tail batch 2)
236+
└─→ step 5 (idaptik)
237+
step 6 (host bindings, parallel) ──→ step 7 (plugin repos)
238+
----
239+
240+
==== Cross-references
241+
242+
* **GitHub Projects board**: link inserted after `gh auth refresh -s project,read:project` (auth scope refresh required to publish board view URL)
243+
* **Memory tracker**: `project_estate_ts_to_affinescript_2026_05_28.md`
244+
* **AS bindings parallel**: `project_affinescript_bindings_top50_roadmap.md`
245+
* **V-lang precedent (completed 2026-05-28)**: `project_estate_vlang_remediation_2026_05_28.md`
246+
247+
==== Scope safety
248+
249+
Every per-repo PR runs the pre-PR ownership gate (`gh repo view hyperpolymath/<repo> --json owner,isFork,parent` → `owner=hyperpolymath, isFork=false, parent=null`). Upstream forks and archived repos are carve-outs in the hypatia rule and never touched.
250+
173251
== Non-Goals
174252

175253
This repository does *not* aim to provide:

0 commit comments

Comments
 (0)