Skip to content

[campaign] AffineScript top-50 framework bindings roadmap (UMBRELLA) #446

Description

@hyperpolymath

Campaign overview

Land the AffineScript top-50 framework bindings roadmap. Compiled 2026-05-28 during post-PR-#107 (idaptik dlc-reversible pilot) planning, five tiers × 10 bindings. Drives the framework-binding development arc going upstream from idaptik into hyperpolymath/affinescript + affinescript-pixijs + new packages.

State: planning UMBRELLA. List captured in memory (project_affinescript_bindings_top50_roadmap); this issue lands it canonically + opens per-binding tracking once tier-issues are filed.

Why this matters now

This roadmap is the shared Layer-4 dependency for THREE estate campaigns:

Without this roadmap landing, all three campaigns' STEP-4 work is unscheduled.

Current state of binding packages (2026-05-28 inventory)

Package State Notes
stdlib/Deno.affine ● usable WasmExports type + wasmInstance + readFile; transpiler-direct
stdlib/Vscode.affine, VscodeLanguageClient.affine ● usable Issue #35 Phase 3 closed; VSCode extension dogfoods this
stdlib/Http.affine, Crypto.affine, Network.affine, Sqlite.affine, Grammy.affine, Ajv.affine ◑ partial extern declarations exist; coverage audits pending
affinescript-dom ●/◯ blocked-by-#255 187-line vDOM + reconciler exists; wasm-codegen for-in/while bug blocks runtime
affinescript-pixijs ◐ scaffold 1 .as file + 1 Idris2 ABI + 1 Zig FFI; NOT functional. Largest single unblocker for idaptik
affinescript-vite ◑ partial Vite plugin for AS projects (not a binding TO Vite)
affinescript-tea ◑ partial TS side exists; AS-side TEA pattern implicit
affinescript-deno-test ◑ partial Test harness — relevant for binding #48

The 50 bindings (tier summaries)

Tier 1 — idaptik blockers (10): PixiJS core + sound + UI; motion; WASM-exports calling pattern; Phoenix Channels / WebSocket; DOM (unblock affinescript#255); WebGL/Canvas2D; IPC/postMessage for Gossamer; Ajv coverage audit.

Tier 2 — estate near-term (10): GitHub API (rewire to hpm-github-api-rsr); Anthropic API; HTTP coverage; raw WebSocket; SQLite coverage; Crypto rewire to hpm-crypto-rsr; Tauri 2.0; Dioxus; Zig FFI canonical patterns doc; Grammy coverage.

Tier 3 — broadly useful (10): Web Audio; Gamepad; Pointer/Touch/Keyboard/IME; IndexedDB; Workers; Streams (Fetch); Storage / Cache; Notifications; Geolocation/sensors; MediaDevices.

Tier 4 — backend/cloud (10): Postgres; Redis; S3/object-storage; GraphQL client; OpenTelemetry; OpenAI; Cloudflare API (not Workers, banned); Stripe; Supabase; Slack + Discord APIs.

Tier 5 — tooling/interop (10): Idris2 ABIs; Rust FFI; OCaml interop; Just integration; Vite plugin pattern; esbuild/Rollup plugin; Playwright; Testing coverage; VSCode coverage; generic LSP.

Recommended kickoff

  1. WASM-exports calling pattern (Tier 1, item 5) — smallest scope (~30 extern fns or one generic wasm_export_call); unblocks idaptik vm/wasm AND every future WASM-host integration. Estimated < 1 day.
  2. PixiJS core (Tier 1, item 1) — largest single unblocker (215 idaptik src/app files depend). Multi-week; scaffold exists. Start with minimal Application + Container + Sprite surface.
  3. DOM unblock via affinescript#255 — codegen bug, not a binding. Adjacent / different repo.

Step plan (deferred — file as sibling issues when work begins)

Excluded by policy

  • Cloudflare Workers runtime
  • React Native, Flutter
  • Non-SaltStack Python ecosystem

Cross-references

  • Standards campaigns: hyperpolymath/standards#252, #253, #254, #239
  • Project board: https://github.com/users/hyperpolymath/projects/35
  • Memory: project_affinescript_bindings_top50_roadmap.md
  • Idaptik dlc-reversible pilot: hyperpolymath/idaptik#107 (MERGED)

Activity

  1. added
    majorMajor issue — significant scope, broader impact than a feature/bug
    bindingsABI, FFI, WASM, and cross-language interop surfaces
    on May 30, 2026
  2. hyperpolymath commented on May 30, 2026

    @hyperpolymath
    OwnerAuthor

    documentation label applied to this umbrella.

    STEP 1 status: shipped

    The umbrella's STEP 1 deliverable ("Land canonical roadmap doc — docs/bindings-roadmap.adoc") is already on disk at https://github.com/hyperpolymath/affinescript/blob/main/docs/bindings-roadmap.adoc (454 lines, compiled 2026-05-28 from the idaptik PR #107 pilot + estate-wide binding-need inventory + general-purpose modern-language binding patterns).

    The doc carries:

    • Reading guide for the ○ / ◐ / ◑ / ● status vocabulary
    • All 50 bindings organised by tier with status + notes
    • Cross-references to ROADMAP.adoc and ECOSYSTEM.adoc as the canonical bindings-side companion view
    • Compiled-from-which-source provenance lines

    STEPs 2-5 (tier sub-issues #450-#454, kickoff pick, parallel tier execution, cross-campaign coordination) remain open as the umbrella's ongoing work scope. Tier 1 #5 (WASM-exports calling pattern) shipped as #455 / PR #467.

    This umbrella stays open per its multi-tier scope.

  3. hyperpolymath commented on May 31, 2026

    @hyperpolymath
    OwnerAuthor

    Campaign status update — 2026-05-31

    Shipped since the umbrella body (2026-05-30 → 2026-05-31)

    Tier 1 # Item Status
    #5 WASM-exports calling pattern (Option B) ✅ MERGED PR #467 (stdlib/Deno.affine WasmValue + wasm_export_call + 8 codegen entries)
    #1 PixiJS core — Container 8.x transform-and-event expansion 🟡 PR #502 auto-merge armed — 11 new externs (scale/pivot/rotation/alpha/zIndex/sortableChildren/eventMode/cursor + on/off + Sprite anchor)
    — Zig C-ABI FFI patterns doc (bindings #19) 🟡 PR #474 auto-merge armed — docs/specs/zig-ffi-patterns.adoc, recipe for binding new Zig exports + bindings-roadmap.adoc row #19 promoted to ●

    Follow-up sub-issues filed (from #455 deferred scope)

    Closed #455 (Tier 1 #5 kickoff) deferred 4 items per the owner's Option-B scope breakdown. Now tracked separately:

    Sub-issue Scope
    #497 Zig FFI implementation for wasm_export_call dispatch (native/linear-memory wasm host)
    #498 Idris2 ABI proof-carrier doc for WasmValue + wasm_export_call
    #500 examples/wasm-exports-demo.affine end-to-end usage demo
    #501 wasm_export_call Zig-FFI smoke-test (paired with #497)

    Where the campaign sits

    Remaining Tier 1 surface (per bindings-roadmap.adoc)

    After #502 lands:

    Umbrella stays OPEN per its multi-tier scope.

  4. added a commit that references this issue on May 31, 2026
  5. hyperpolymath commented on May 31, 2026

    @hyperpolymath
    OwnerAuthor

    Update — IPC binding shipped (Tier 1 #9)

    PR #506 auto-merge armed 2026-05-31 — stdlib/Ipc.affine lands the first concrete IPC / structuredClone surface.

    What ships

    • 2 extern types (MessageChannel, MessagePort)
    • 9 extern fns covering channel construction, port handoff, post + onmessage, start/close lifecycle, generic targetPostMessage (Worker / iframe.contentWindow / self-from-worker), and structuredCloneValue deep-copy
    • No consumer init required — MessageChannel, MessagePort, and structuredClone are standard web-platform globals (Deno, Node 16+, browsers, Web Workers)
    • Test fixture tests/codegen-deno/ipc_smoke.{affine,harness.mjs} exercises port-pair round-trip with handler-identity preservation across on() calls + structuredClone reference-distinctness across nested arrays and objects

    Row #9 status: ○ → ◑. Deferred items captured in the row note (transfer-list, BroadcastChannel, typed MessageEvent accessors, Worker constructors — Tier 3 #25).

    Tier 1 status board (updated)

    # Item Status Pointer
    1 PixiJS core ◑ (Container 8.x transform-and-event surface expansion in flight) #502
    2 @pixi/sound ◐ Deferred follow-ups exist
    3 @pixi/ui ◐ Deferred follow-ups exist
    4 motion ● Done
    5 WASM-exports calling pattern ● #467 ✅; 4 follow-ups #497/#498/#500/#501
    6 Phoenix Channels / WebSocket ○ —
    7 DOM ●/◯ blocked-by-#255 Codegen bug, not binding gap
    8 WebGL / Canvas2D ○ —
    9 IPC / structuredClone ◑ (this update) #506
    10 Ajv coverage audit ◑ Pending

    In-flight PRs touching the campaign

    All three are CI-queued due to estate-wide queue saturation; each will auto-merge as checks complete.

  6. hyperpolymath commented on May 31, 2026

    @hyperpolymath
    OwnerAuthor

    STEP-3 progress landed via PR #474 (merge commit fb7e855)

    The bindings campaign advanced — umbrella stays open per its multi-tier scope (STEP 4 parallel execution + STEP 5 cross-campaign coordination are long-running by design).

    What landed this session

    Roadmap state now

    Tier-1/2 item Status
    #5 WASM-exports calling pattern ● (shipped #455/#467)
    #19 Zig FFI canonical patterns ● (this PR)
    #1–#4 PixiJS/motion, #6–#10, #11–#18, #20 per docs/bindings-roadmap.adoc rows (unchanged)

    Remaining (STEP 4/5)

    Tiers 1–5 binding work continues demand-driven; the cross-campaign hand-offs to standards #252/#254/#239 STEP-4 are unchanged. No action needed on this umbrella beyond its ongoing tracking.

    Session record: docs/history/BINDINGS-STDLIB-CODEGEN-2026-05-31.{adoc,a2ml}.


    Generated by Claude Code

  7. hyperpolymath commented on May 31, 2026

    @hyperpolymath
    OwnerAuthor

    All three in-flight PRs MERGED 2026-05-31 ✅

    PR Item Commit Mechanism
    #474 Zig-FFI patterns doc (bindings #19) + hex/base64 (stdlib #25) + Int-div fix (#478) fb7e855 Owner admin-merge 07:22Z
    #502 PixiJS 8.x Container transform-and-event surface (Tier 1 #1, 11 externs) 44a0685 Admin-merge 07:33Z after local verify clean (6 baseline-red governance checks pre-existing on main, per #467 precedent)
    #506 Ipc.affine — MessageChannel + structuredClone (Tier 1 #9) 7ada658 Admin-merge 07:33Z, same rationale

    Local verification before admin-merge

    For #502 and #506, rebased onto current main (post-#474), then ran on each branch:

    • dune build bin/main.exe — clean (only expected parser warnings)
    • dune runtest --force — 354 tests pass
    • tools/run_codegen_deno_tests.sh — all 18 harnesses pass (including the new pixi_smoke accessors-flow + ipc_smoke)

    Baseline-red governance checks

    These 6 checks were FAILURE on the predecessor PR #467 (which also merged) and remain pre-existing red on main; they're not regressions from #502/#506:

    • governance / Language / package anti-pattern policy
    • governance / Guix primary / Nix fallback policy
    • governance / Security policy checks
    • governance / Code quality + docs
    • governance / Workflow security linter
    • governance / Licence consistency

    The other 21 checks (build, lint, all scan checks, Hypatia, etc.) are expected to pass per the additive shape of the changes; they remained QUEUED at admin-merge time due to estate-wide CI saturation.

    Tier 1 status board after this session

    # Item Status
    1 PixiJS core ◑ (Container 8.x transform-and-event surface landed)
    2 @pixi/sound ◐
    3 @pixi/ui ◐
    4 motion ●
    5 WASM-exports calling pattern ● (+ 4 deferred sub-issues #497/#498/#500/#501)
    6 Phoenix Channels / WebSocket ○
    7 DOM ●/◯ blocked-by-#255
    8 WebGL / Canvas2D ○
    9 IPC / structuredClone ◑ (MessageChannel + MessagePort + structuredClone landed)
    10 Ajv coverage audit ◑ (audited; consumer-complete-but-narrow, expand on demand)

    Umbrella stays OPEN per its multi-tier scope; Tier 1 forward-progress sweep complete for this session.

  8. hyperpolymath commented on Jun 1, 2026

    @hyperpolymath
    OwnerAuthor

    Status update — AS stdlib codegen landed; campaign waypoint shift (2026-06-01) 📌

    For the campaign umbrella tracking here:

    What landed (sourced):

    • affinescript#522 (2026-06-01) — Sqlite.affine codegen foundation; first stdlib extern with full Deno-ESM lowering + tests end-to-end.
    • affinescript#504 (2026-06-01) — 6 Deno-ESM stdlib externs (stat helpers, byte ops, importMetaUrl) + wildcard-let codegen fix; closes 6 of 10 STEP-3 gaps in standards#242.
    • affinescript#463 (2026-05-30) — non-ASCII Unicode escape emit in Deno-ESM.
    • affinescript#421 — stdlib/json v0.3 via hpm-json-rsr Zig FFI.

    What this means for the campaign:

    • Stdlib extern → Deno-ESM lowering pattern is repeatable and tested (lib/codegen_deno.ml + tests/codegen-deno/*).
    • STEP 3 / STEP 4 / megaport STEP 8 prerequisites partially closed (stdlib-extern side).
    • Not yet sufficient for user-module codegen / hand-port → runtime replacement on its own; user-module emit + remaining stdlib primitives (affinescript#160 Http.fetch / stdlib: Dict / Map primitive (keyed associative container) #162 Dict/Map / etc.) remain the keystone gaps.

    Action: No new mass-port being kicked off from this post — surfacing the status so campaign waypoints stay accurate. Dependent sub-tickets can re-evaluate parking once they verify their specific blockers are in the "now-closed" set above.

    🤖 Cross-estate AS-status sweep on 2026-06-01.

  9. added
    meta:umbrellaParent issue aggregating child issues
    meta:campaignCoordinated multi-repo push with a defined end state
    and removed on Aug 26, 2026
  10. added
    scope:estateAffects many or all repos across the estate
    feeds:valence-shellFeeds valence-shell's proofs/engineering (D127): judge progress by what it contributes there
    on Sep 30, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bindingsABI, FFI, WASM, and cross-language interop surfacesdocumentationDocs, prose, diagrams, READMEs, ADRsfeeds:valence-shellFeeds valence-shell's proofs/engineering (D127): judge progress by what it contributes theremajorMajor issue — significant scope, broader impact than a feature/bugmeta:campaignCoordinated multi-repo push with a defined end statemeta:umbrellaParent issue aggregating child issuespriority:p3Low - nice to havescope:estateAffects many or all repos across the estate

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions