Repository navigation
[#446 STEP 2] Tier 1 — idaptik blockers (10 bindings) #450
Copy link
Copy link
Open
Labels
bindingsABI, FFI, WASM, and cross-language interop surfacesABI, FFI, WASM, and cross-language interop surfacesfeeds:valence-shellFeeds valence-shell's proofs/engineering (D127): judge progress by what it contributes thereFeeds valence-shell's proofs/engineering (D127): judge progress by what it contributes theremeta:campaignCoordinated multi-repo push with a defined end stateCoordinated multi-repo push with a defined end statepriority:p2Normal - queue itNormal - queue itscope:repoConfined to this repositoryConfined to this repositorystatus:readyFully specified and ready to be picked upFully specified and ready to be picked uptier-1AS bindings top-50 Tier 1 (idaptik blockers)AS bindings top-50 Tier 1 (idaptik blockers)
Description
Part of #446. STEP 2 of the top-50 bindings roadmap.
Goal
File 10 sub-issues for Tier 1 bindings (idaptik blockers). Each becomes its own scope-bounded work item that can be picked up independently.
Tier 1 contents
- PixiJS core (~Application + Container + Sprite minimal)
- PixiJS sound
- PixiJS UI
- Motion (Spine / tween)
- WASM-exports calling pattern — recommended kickoff; <1 day
- Phoenix Channels / WebSocket
- DOM (gated on affinescript#255 codegen bug)
- WebGL / Canvas2D
- IPC / postMessage for Gossamer
- Ajv coverage audit
Acceptance
- 10 sub-issues filed with
Refs hyperpolymath/affinescript#446(orPart of #446 — Tier 1) - Each carries
tier-1label (label may need creating) - Each on project board Add Node-target backend + vscode-API bindings to enable .affine VS Code extensions #35
- Top recommendation (WASM-exports calling pattern, item 5) flagged for kickoff
Notes
The DOM binding (item 7) is blocked on affinescript#255 (wasm-codegen for-in/while bug); that's tracked separately.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
bindingsABI, FFI, WASM, and cross-language interop surfacesABI, FFI, WASM, and cross-language interop surfacesfeeds:valence-shellFeeds valence-shell's proofs/engineering (D127): judge progress by what it contributes thereFeeds valence-shell's proofs/engineering (D127): judge progress by what it contributes theremeta:campaignCoordinated multi-repo push with a defined end stateCoordinated multi-repo push with a defined end statepriority:p2Normal - queue itNormal - queue itscope:repoConfined to this repositoryConfined to this repositorystatus:readyFully specified and ready to be picked upFully specified and ready to be picked uptier-1AS bindings top-50 Tier 1 (idaptik blockers)AS bindings top-50 Tier 1 (idaptik blockers)
Activity
docs(bindings-roadmap): fill in Tracking section with live issue link…
docs(bindings-roadmap): fill in Tracking section with live issue link…
Roadmap tracking + Zig-FFI doc (#19) + hex/base64 encoding (#25) + In…
hyperpolymath commentedon May 31, 2026
Tier 1 #10 — Ajv coverage audit (analysis-only)
stdlib/Ajv.affineships 2 extern types + 4 extern fns (16 lines). Audit against AJV v8 + ajv-formats v3 mainline surface.Currently bound
ajv_new()new Ajv({allErrors:true, strict:false})+addFormats(ajv)ajv_compile(a, schema)ajv.compile(JSON.parse(schema))ajv_validate(v, value)validator(JSON.parse(value)) // Boolajv_errors_json(v)JSON.stringify(validator.errors)Sufficient for the named consumer
The row note flags idaptik UMS pipeline (level config validation) as the canonical consumer. That pipeline shape is:
The 4-extern surface covers this 100%. Treating row #10 status
◑as "consumer-complete-but-narrow" rather than "broken-incomplete".Gaps surfaced for broader estate use
For the wider estate use-cases mentioned in the row note (a2ml + schema work), the missing surface clusters around three axes:
Multi-schema registry — for repos validating many schemas (
hyperpolymath/standards, multi-doc workflow_audit, the a2ml suite):ajv.addSchema(schema, key)— register named schemaajv.getSchema(key)— retrieve compiled validator by keyajv.removeSchema(key)— remove named schemaajv.validate(schemaOrRef, data)— one-shot validate against a registered schema by refCustom format / keyword extension — for a2ml's domain-specific format identifiers (
a2ml:semver,a2ml:spdx-id, etc.) and the AI-MANIFEST shape:ajv.addFormat(name, regex | fn)— register custom formatajv.addKeyword({keyword, ...})— register custom keywordAsync compile (for
$refresolution) — for distributed schemas with HTTP-loaded$refs:ajv.compileAsync(schema)— PromiseHuman-readable errors:
ajv.errorsText(errors, opts)— formatted error string (versus the JSON dump fromajv_errors_json)Estimate (if/when broader use lands)
pixiContainerOn/messagePortOnMessage)/ { Async }effect rowThat's ~8 additional externs — modest, ship-when-needed. The current
◑partial is accurate; the question for any future expansion is which consumer surfaces the need (drive by demand, not by pre-emptive coverage).Recommendation
◑ partialwith the audit-result note that the consumer-complete-but-narrow state is intentional.Refs #446 (Tier 1 umbrella),
stdlib/Ajv.affine.feat(stdlib): PixiJS 8.x Container transform-and-event surface (bindi…
feat(stdlib): Ipc.affine — MessageChannel + structuredClone (bindings #9
feat(stdlib): Canvas.affine — HTML5 Canvas 2D rendering (bindings #8) (…