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
{{ message }}
Repository navigation
[Repo] Effect-row v1 name list: define IO/Async/Partial/Throws[E]/Mut early #59
Pin a v1 effect-name list (even if incomplete) so real migration can begin. AI.a2ml names "effect tracking" as in-scope; the concrete effect names aren't pinned, which blocks real translation.
Real translation needed (from one .res file: Main.res)
{IO} — standard
{Async} — promise-equivalent, suspend semantics
{Partial} — short-circuit failure (? operator on Result)
{Throws[E]} — typed exception (separate from Partial because it carries a type)
{Mut} — internal mutation (vs ambient global)
Plus eventually: {Random}, {Time}, {Net}
Pinning all six in v1 unblocks real translation. The effect-handler design (out-of-scope per AI.a2ml) doesn't have to be solved first; effect tracking alone gives most of the value.
Source observation
The pilot's Main.affine and Boot.affine use /{IO, Async} and would have used /{Partial} for ?-on-Result. Without pinned names every contributor invents their own.
Filed from idaptik Wave 3 pilot. See LESSONS.md and PILOT.md. Idaptik commit hyperpolymath/idaptik@aef38db.
Effects are tracked, not enforced at the body level by deliberate migration-stance decision (tracking alone delivers most of the value; strict checking/handlers explicitly deferred to a later stage).
Closed on owner approval (joint close, 2026-05-18).
Deliberately deferred (not regressions — consistent with this issue's own scope): accumulation of IO/Async from call sites, and effect handler design — out of scope per AI.a2ml. Async-extern ABI is tracked separately in #103. Future effect sources plug into the accumulate→subsume path #207 established.
affinescript#463 unblocked non-ASCII string emit in Deno-ESM (Unicode escapes, not octal).
affinescript#421 put stdlib/json on the Zig-FFI rails (hpm-json-rsr).
What this means for the gap tracked in this ticket:
The codegen pattern is now a known repeatable shape: declare in stdlib/*.affine → wire in deno_builtins table + prelude → smoke-test in tests/codegen-deno/*.
This ticket remains open as a tracked gap; no new mass-port is being kicked off from this post.
Surfacing status so the broader picture stays accurate as more sub-tickets / dependent campaigns reference it.
Activity
fix(effects): pin v1 effect-row registry + reject unknown names (#196)
fix(parser): braced /{E1, E2} return-position effect row (Refs #59) (#…
refactor(effects): rename stdlib io/state/exn→IO/Mut/Throws, retire a…
feat(effects): thread parametric Throws[E] type argument (Refs #59) (#…
hyperpolymath commentedon May 18, 2026
Closing — effect-row v1 name list defined and enforced (STAGE-B).
The v1 effect registry is shipped and enforcing on
main:Effects are tracked, not enforced at the body level by deliberate migration-stance decision (tracking alone delivers most of the value; strict checking/handlers explicitly deferred to a later stage).
Closed on owner approval (joint close, 2026-05-18).
feat(effects): infer Partial from catch-less try/?; check vs declared…
hyperpolymath commentedon May 18, 2026
Closing as delivered. The v1 effect-row goal — pin the names so migration can begin; effect tracking, not handling — is complete:
IO/Async/Partial/Throws/Mut+ reservedRandom/Time/Net), reject unknown names/{E1, E2}return-position rowsio/state/exn→ canonicalIO/Mut/Throws; legacy aliases retiredThrows[E]type argument threaded (distinct under unification)try/?⇒Partial; explicitly-declared rows enforced (inferred ⊆ declared); undeclared rows permissive (tracking-only v1). SPEC §3.4 + tests (gate 257/257).Deliberately deferred (not regressions — consistent with this issue's own scope): accumulation of
IO/Asyncfrom call sites, and effect handler design — out of scope per AI.a2ml. Async-extern ABI is tracked separately in #103. Future effect sources plug into the accumulate→subsume path #207 established.Closing per joint-close agreement.
docs(effects): re-land v1 SPEC rule + effect.ml comment fix (Refs #59) (
hyperpolymath commentedon Jun 1, 2026
Status update — AS stdlib codegen pattern now established (2026-06-01) 📌
For ticket coordinators / anyone tracking this gap:
lib/codegen_deno.ml. Tests live intests/codegen-deno/*.What this means for the gap tracked in this ticket:
stdlib/*.affine→ wire indeno_builtinstable + prelude → smoke-test intests/codegen-deno/*.🤖 Cross-estate AS-status sweep on 2026-06-01.