Repository navigation
[#446 STEP 2] Tier 1 — idaptik blockers (10 bindings) #450
Description
Activity
- addedbindingsABI, FFI, WASM, and cross-language interop surfacesABI, FFI, WASM, and cross-language interop surfacestier-1AS bindings top-50 Tier 1 (idaptik blockers)AS bindings top-50 Tier 1 (idaptik blockers)
on May 30, 2026 - added 3 commits that reference this issue
on 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
AS extern AJV v8 binding 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:
init → ajv_new + ajv_compile(level_schema) runtime → for each level: ajv_validate + (if !ok) ajv_errors_jsonThe 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 ref
Custom 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 keyword
Async compile (for
$refresolution) — for distributed schemas with HTTP-loaded$refs:ajv.compileAsync(schema)— Promise
Human-readable errors:
ajv.errorsText(errors, opts)— formatted error string (versus the JSON dump fromajv_errors_json)
Estimate (if/when broader use lands)
- Multi-schema registry: 4 externs + 4 codegen entries
- Custom format/keyword: 2 externs (registering native AS lambdas as format/keyword callbacks needs the same opaque-Json-handler pattern as
pixiContainerOn/messagePortOnMessage) - Async compile: 1 extern with
/ { Async }effect row - errorsText: 1 extern
That'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
- Leave row ci: Bump erlef/setup-beam from 1.17.5 to 1.24.0 #10 at
◑ partialwith the audit-result note that the consumer-complete-but-narrow state is intentional. - Open expansion sub-issues only when a specific estate consumer surfaces a need (a2ml custom keyword work would be the natural trigger).
Refs #446 (Tier 1 umbrella),
stdlib/Ajv.affine.- added 3 commits that reference this issue
on May 31, 2026 - addedmeta:campaignCoordinated multi-repo push with a defined end stateCoordinated multi-repo push with a defined end stateand removed
on Aug 26, 2026 - addedpriority: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 upfeeds: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 there
on Sep 30, 2026
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
Acceptance
Refs hyperpolymath/affinescript#446(orPart of #446 — Tier 1)tier-1label (label may need creating)Notes
The DOM binding (item 7) is blocked on affinescript#255 (wasm-codegen
for-in/whilebug); that's tracked separately.