Skip to content

ci: Bump actions/github-script from 7.0.1 to 8.0.0 - #5

Merged
hyperpolymath merged 1 commit into
mainfrom
dependabot/github_actions/actions/github-script-8.0.0
Apr 2, 2026
Merged

ci: Bump actions/github-script from 7.0.1 to 8.0.0#5
hyperpolymath merged 1 commit into
mainfrom
dependabot/github_actions/actions/github-script-8.0.0

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Mar 21, 2026

Copy link
Copy Markdown
Contributor

Bumps actions/github-script from 7.0.1 to 8.0.0.

Release notes

Sourced from actions/github-script's releases.

v8.0.0

What's Changed

⚠️ Minimum Compatible Runner Version

v2.327.1
Release Notes

Make sure your runner is updated to this version or newer to use this release.

New Contributors

Full Changelog: actions/github-script@v7.1.0...v8.0.0

v7.1.0

What's Changed

New Contributors

Full Changelog: actions/github-script@v7...v7.1.0

Commits
  • ed59741 Merge pull request #653 from actions/sneha-krip/readme-for-v8
  • 2dc352e Bold minimum Actions Runner version in README
  • 01e118c Update README for Node 24 runtime requirements
  • 8b222ac Apply suggestion from @​salmanmkc
  • adc0eea README for updating actions/github-script from v7 to v8
  • 20fe497 Merge pull request #637 from actions/node24
  • e7b7f22 update licenses
  • 2c81ba0 Update Node.js version support to 24.x
  • f28e40c Merge pull request #610 from actions/nebuk89-patch-1
  • 1ae9958 Update README.md
  • Additional commits viewable in compare view

Dependabot compatibility score

Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


Dependabot commands and options

You can trigger Dependabot actions by commenting on this PR:

  • @dependabot rebase will rebase this PR
  • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
  • @dependabot show <dependency name> ignore conditions will show all of the ignore conditions of the specified dependency
  • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
  • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps [actions/github-script](https://github.com/actions/github-script) from 7.0.1 to 8.0.0.
- [Release notes](https://github.com/actions/github-script/releases)
- [Commits](actions/github-script@60a0d83...ed59741)

---
updated-dependencies:
- dependency-name: actions/github-script
  dependency-version: 8.0.0
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
@dependabot @github

dependabot Bot commented on behalf of github Mar 21, 2026

Copy link
Copy Markdown
Contributor Author

Labels

The following labels could not be found: dependencies, github-actions. Please create them before Dependabot can add them to a pull request.

Please fix the above issues or remove invalid values from dependabot.yml.

@hyperpolymath
hyperpolymath merged commit a8fec41 into main Apr 2, 2026
16 of 22 checks passed
@dependabot
dependabot Bot deleted the dependabot/github_actions/actions/github-script-8.0.0 branch April 2, 2026 23:30
hyperpolymath added a commit that referenced this pull request May 28, 2026
closes #426) (#428)

## Summary

Closes #426. Two small surgical fixes that resolve the 3 pre-existing
test failures blocking PR auto-merges on main.

### Fix 1 — Walker `Js.Exn` catch-arm detection (resolves 1 test)

`tools/res-to-affine/walker.ml` — drop the `node.children = []`
constraint from the fallback in `detect_untyped_exception`.
tree-sitter-rescript parses `Js.Exn.Error(_)` in a catch-arm as a
compound node (constructor pattern with the `(_)` payload as a child),
so the leaf-only check skipped it.

The pre-existing 32-char text length cap is a sufficient guardrail —
`Js.Exn.Error(_)` is 15 chars and the enclosing try/match expressions
exceed the cap. Dedupe handles same-line duplicates.

**Test**: `walker-phase2c-parity #2 untyped-exception` `[OK]` (was
FAIL).

### Fix 2 — vscode E2E false-positive (resolves 2 tests)

`packages/affine-vscode/mod.js` — rewrite the manual-wiring example in
the header doc comment. The previous text contained literal
`require(\"@hyperpolymath/affine-vscode\")` and
`require(\"vscode-languageclient/node\")` strings as illustrative code;
once `mod.js` is embedded at compile time (per #380), the E2E codegen
tests' substring-based `contains` helper false-positived on those
comment strings.

New wording uses named placeholders (`loadShim()` / `loadAdapter()` /
`loadVscode()` / `loadLanguageClient()`) plus an explanatory note saying
the literal `require(...)` strings are intentionally omitted so the E2E
assertions don't false-positive.

**Tests**:
- `E2E Node-CJS Codegen #4 --vscode-extension-adapter-override` `[OK]`
(was FAIL)
- `E2E Node-CJS Codegen #5 --vscode-extension-no-lc` `[OK]` (was FAIL)

## Verification (local)

```bash
# walker
dune build tools/res-to-affine/test/test_walker.exe
./_build/default/tools/res-to-affine/test/test_walker.exe
# Test Successful — 7 tests run, 0 failures

# vscode E2E
./_build/default/test/test_main.exe test \"E2E Node-CJS Codegen\"
# All [OK]
```

## Test plan

- [ ] CI \`build\` job (was failing) → green
- [ ] CI \`coverage-visibility\` job → green
- [ ] No regression on other vscode/walker tests

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request May 28, 2026
…431)

## Summary

Re-lands the AS-side `wasmCall` surface (extern + test fixtures +
roadmap row flip) that PR #419 originally bundled. #419 was closed as
"superseded by #422", but #422 only carried the motion binding — the
host-side codegen (`__as_wasmCall` + lowering-table entry) is present on
`main` while the AS-side pieces are missing.

Flips `docs/bindings-roadmap.adoc` row #5 from `◐ host-side; AS-side ○`
to `● usable (Option A landed)`.

- `stdlib/Deno.affine`: new `pub extern fn wasmCall(exports:
WasmExports, name: String, args: [Float]) -> Float` with docstring +
`wasmInstance → wasmCall` worked example.
- `tests/codegen-deno/wasm_call.{affine,harness.mjs}`: round-trip
harness over a 41-byte inline wasm module exporting `add(i32, i32) ->
i32` (4 assertions).
- `docs/bindings-roadmap.adoc`: row #5 status `◐` → `●`; cross-cutting
§2 observation rewritten "LANDED".

Closes bindings roadmap #5. Closes #414 (host-side via #422, AS-side via
this PR).

## Test plan

- [x] `affinescript check stdlib/Deno.affine` → Type checking passed.
- [x] `affinescript check tests/codegen-deno/wasm_call.affine` → Type
checking passed.
- [ ] `tools/run_codegen_deno_tests.sh` (gated on Actions budget —
admin-merge per estate policy).

Out of GH Actions budget; admin-merging on clean local verify per estate
policy (see MEMORY.md `session-2026-05-27-estate-sweep-1254-prs`).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request May 28, 2026
#415) (#433)

## Summary

Closes #415. Idaptik PR #107 hit this directly: `use prelude::{Option,
Some, None}` failed under `affinescript check` when invoked from a
directory that wasn't the affinescript repo root, because the loader's
default config only knew about `./stdlib` and the `AFFINESCRIPT_STDLIB`
env var. The workaround was a local `enum UndoResult { ... }`.

Replaces the hard-coded `./stdlib` default with `discover_stdlib`, which
tries in order:

| # | Path | Status |
|---|---|---|
| 1 | `$AFFINESCRIPT_STDLIB` | unchanged — explicit operator override |
| 2 | `./stdlib` | unchanged — in-repo dev |
| 3 | walk up from CWD looking for `stdlib/prelude.affine` | **NEW** —
catches sub-directory invocations |
| 4 | `<binary_dir>/../share/affinescript/stdlib/` | **NEW** — XDG-style
installed location |
| 5 | `$HOME/.local/share/affinescript/stdlib/` | **NEW** — user-local
install |

Falls back to `./stdlib` (preserves historical `ModuleNotFound` error)
if nothing matches.

## Verification (local)

| Scenario | Result |
|---|---|
| in-repo root | `./stdlib` resolves (unchanged) |
| in-repo sub-dir | walk-up finds it (NEW) |
| bare `/tmp/` dir, after `cp -r stdlib ~/.local/share/affinescript/` |
user-share finds it (NEW) |

## What this PR does NOT do

The literal `use stdlib::Option` parser syntax mentioned in #415's body
is a parse error in current grammar (multi-segment `stdlib::` prefix not
accepted). That's a grammar change deferred as follow-up. The practical
`Done when` criterion — `affinescript check` succeeds with `use
prelude::{Option, Some, None}` from any directory — is met by this PR.

## Roadmap updates

- stdlib roadmap #5 (cross-file `use` resolvability) `◑` → `●`
(follow-up doc PR to flip the row)
- #6 (Prelude Option reach) and #10 (exhaustive imported-enum match)
remain `◑` — they depend on the pattern-compiler change rather than the
loader fix.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request May 28, 2026
#5) (#427)

Closes #415. Stdlib roadmap item #5 (`docs/stdlib-roadmap.adoc`).

## TL;DR

The original framing of stdlib #5 was *"cross-file \`use\` resolvability
from standalone check"*. Reproducing the bug turned up something
different: cross-module \`use\` **already works** (both \`use
Deno::{Json}\` and \`use prelude::*\` resolve fine from a standalone
single-file check).

What actually trips users is **discoverability** — prelude is NOT
auto-opened (deliberate, per issue #138), and the error when an
unimported \`Some\` is referenced was a raw OCaml record dump with no
hint about the fix.

## Before / after

**Before:**
\`\`\`
Resolution error: (Resolve.UndefinedVariable
   { Ast.name = "Some";
     span = { Span.start_pos = { Span.line = 1; col = 37; ... }; ... }
     })
\`\`\`

**After:**
\`\`\`
Resolution error: undefined value: \`Some\`
  hint: \`Some\` is defined in \`stdlib/prelude.affine\` — add
\`use prelude::{Some};\` (or \`use prelude::*;\`) at the top of the
file.
\`\`\`

## Files

| File | Change |
|---|---|
| \`lib/face.ml\` | Canonical face: replace \`show_resolve_error\` dump
with full per-error-class formatter; add \`prelude_hint\` for
UndefinedVariable + UndefinedType |
| \`lib/typecheck.ml\` | Add same \`prelude_hint\` on
\`UnboundVariable\` (typecheck-time path; fires for match arms whose
constructor reference the resolver missed) |

## What this does NOT do

- Does NOT auto-import prelude (that would revert issue #138 which
intentionally removed the band-aid)
- Does NOT change resolve behaviour at all — only the error message
- Does NOT touch the other faces (Python / Js / Pseudocode / Lucid /
Cafe) — they already had their own formatted hints; just Canonical was
raw-dumping

## Test plan

- [x] codegen-deno suite: 7/7 harnesses green (no behaviour change)
- [x] Manual: idaptik PR #107's case (missing \`Some\`) now shows the
hint
- [x] Manual: non-prelude names (e.g. \`nonexistentFn\`) still get a
clean error with NO inappropriate prelude hint
- [x] \`dune build bin/main.exe\` clean
- [x] \`dune build @runtest\` — 340/342 pass; the 2 failures are
pre-existing E2E Node-CJS Codegen baseline flakes (CLAUDE.md
"Known-failing baseline checks"), unchanged by this PR

## Follow-ups

Once this lands, a follow-up PR updates \`docs/stdlib-roadmap.adoc\` row
#5 status \`◑\` partial → \`●\` usable (kept out of this PR so the diff
stays focused on the diagnostic itself).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request May 28, 2026
## Summary

Adds an MVP `@pixi/ui` binding (`stdlib/PixiUI.affine` + Deno-ESM
codegen lowerings) so idaptik's HUD + menu layer
(`src/bindings/PixiUI.res`) can move off ReScript. Follows the pattern
proven by wasmCall (#422) / motion (#422 bundle) / Pixi (#429 open).

Row #3 in `docs/bindings-roadmap.adoc` moves `○` -> `◐` scaffold.

## Surface

- 5 opaque host types: `Button`, `FancyButton`, `Slider`, `Switch`,
`Container` (re-declared opaque so this module can be consumed without a
hard dependency on `stdlib/Pixi.affine`).
- 11 extern fns: ctor + primary event-callback registrar + zero-cost
`AsContainer` upcast for each component.
- 11 `__as_pixiUi*` runtime helpers + `deno_builtins` table entries in
`lib/codegen_deno.ml`.
- Consumer sets `globalThis.__as_pixi_ui = PixiUI` once at module-init.

## Deferred (follow-ups)

- `Input` (text-entry + focus + value)
- `ScrollBox` (scroll position + viewport)
- Full event surface (onHover / onOut / onDown / onUp)
- FancyButton textures-per-state, Slider min/max/step accessors

## Test plan

- [x] `dune build bin/main.exe` clean
- [x] `bash tools/run_codegen_deno_tests.sh` — 9/9 harnesses green (was
8/8; +pixiui_smoke with 17 assertions)
- [x] All new files MPL-2.0 SPDX; no `.as` / AGPL / PMPL
- [ ] Hypatia security scan: no new findings (delta-only — pre-existing
baselines ignored per repo CLAUDE.md)

Note: pre-existing flaky E2E Node-CJS Codegen tests #4/#5 unrelated.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request May 28, 2026
…#4 → ●) (#436)

## Summary

Promotes bindings roadmap row #4 (motion) from `◐ scaffold` to `●
usable` by landing the four deferred surfaces flagged in
`docs/bindings-roadmap.adoc`:

- `motionAnimateMini` — lightweight variant of animate (no autoplay, no
built-in thenable).
- `motionTween` — one-shot interpolation between explicit `from`/`to`
values.
- `motionSpring` — physics-based spring animation
(stiffness/damping/mass).
- `motionEase` + opaque `Easing` type — easing-function constructor by
canonical motion name.

## Changes

- `stdlib/Motion.affine`: 4 new `extern fn` declarations + the new
`extern type Easing` opaque carrier; module docstring updated to reflect
the now-comprehensive surface.
- `lib/codegen_deno.ml`: 4 new runtime helpers (`__as_motionAnimateMini`
/ `__as_motionTween` / `__as_motionSpring` / `__as_motionEase`) inserted
right after `__as_motionCancel` in the prelude; 4 matching
lowering-table entries inserted after `b "motionCancel"`. Each helper
resolves the host method on `globalThis.__as_motion` lazily, so partial
mocks still work for the rest of the surface.
- `tests/codegen-deno/motion_smoke.{affine,harness.mjs}`: extended in
place with `smokeAnimateMini` / `smokeTween` / `smokeSpring` /
`smokeEase` wrappers + arg-routing and return-value assertions for every
new extern (the original animate + cancel assertions are preserved).
- `docs/bindings-roadmap.adoc`: row #4 status `◐ scaffold` → `● usable`;
rationale lists the full extern surface, calls out the smoke fixture,
and notes the remaining (out-of-scope-for-●) follow-ups (typed keyframe
shapes, typed transform-property surface, migration to a dedicated
`affinescript-motion` package).

## Test plan

- [x] `dune build bin/main.exe` clean.
- [x] `bash tools/run_codegen_deno_tests.sh` — all 8 harnesses pass,
including the extended `motion_smoke` with 4 new wrappers and full
ease/spring/tween/animateMini coverage.
- [ ] CI green on the standard PR matrix.

## Notes for reviewers

- Diff localised to the motion-specific regions of `lib/codegen_deno.ml`
to keep rebase-against-bindings-#2/#3 trivial.
- The pre-existing E2E Node-CJS Codegen tests #4/#5 are known flakes
(unrelated to this PR).

Closes part of bindings roadmap #4.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request May 28, 2026
Adds stdlib/PixiSound.affine — an opaque `Sound` extern type plus
`pixiSoundFrom` / `play` / `stop` / `pause` / `resume` / `setVolume`
/ `setLoop`, the surface idaptik's `src/bindings/PixiSound.res`
consumes for BGM + SFX. Lowers on the Deno-ESM backend to
`globalThis.__as_pixi_sound`, which the consumer (or its host
wrapper) populates with `@pixi/sound`'s `Sound` named export
once at module-init time. Pattern matches the Motion binding
(#4, PR #422) and the WASM-exports binding (#5, also in #422).

Test fixture: tests/codegen-deno/pixisound_smoke.{affine,harness.mjs}.
The harness installs a MockSound class at globalThis.__as_pixi_sound,
drives each smoke wrapper, and asserts URL pass-through, transport
call counts, and volume/loop field updates.

Roadmap row #2 in docs/bindings-roadmap.adoc moves from `○` to
`◐` scaffold with the initial surface + follow-up list
(`Sound.add` for multi-source registry, sprite atlases, async load,
`pauseAll` / `stopAll` / `resumeAll`, `sound` singleton filter
pipeline).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request May 28, 2026
## Summary
- Adds `stdlib/PixiSound.affine` — opaque `Sound` extern type plus
`pixiSoundFrom` / `play` / `stop` / `pause` / `resume` / `setVolume` /
`setLoop`, the surface idaptik's `src/bindings/PixiSound.res` consumes
for BGM + SFX.
- Lowers on the Deno-ESM backend to `globalThis.__as_pixi_sound`, which
the consumer (or its host wrapper) populates with `@pixi/sound`'s
`Sound` named export at module-init time. Pattern matches the Motion
binding (#4, PR #422) and the WASM-exports binding (#5, also #422).
- Test fixture `tests/codegen-deno/pixisound_smoke.{affine,harness.mjs}`
with a `MockSound` class — asserts URL pass-through, transport call
counts, and volume/loop field updates.
- Roadmap row #2 moves from `○` to `◐` scaffold; follow-ups (`Sound.add`
multi-source registry, sprite atlases, async load with onload Promise,
`pauseAll` / `stopAll` / `resumeAll`, `sound` singleton filter pipeline)
enumerated.

This is bindings #2 in `docs/bindings-roadmap.adoc` Tier 1 — required
for the idaptik `.res → .affine` migration.

## Test plan
- [x] `dune build bin/main.exe` clean
- [x] `bash tools/run_codegen_deno_tests.sh` — all 9 fixtures (including
new `pixisound_smoke`) green
- [ ] CI: codegen-deno suite green
- [ ] CI: known-flaky E2E Node-CJS Codegen tests #4/#5 — pre-existing,
ignore unless codegen-deno suite fails

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request May 28, 2026
#440)

Adds the generic Option A surface from bindings #5: a single extern that
lowers to `exports[name](...args)` on the --deno-esm backend, with
Number coercion so i32/i64/f32/f64 returns all coerce to Float at the
AffineScript boundary.

This is the smallest-scope / highest-leverage Tier-1 binding item — it
unblocks idaptik vm/wasm (740 LoC) and every future WASM-host
integration. Typed per-Zig-fn shims can layer on top per-consumer where
typing discipline outweighs the generic surface's flexibility.

Surface:

    pub extern fn wasmCall(
      exports: WasmExports,
      name: String,
      args: [Float]
    ) -> Float;

Lowering (lib/codegen_deno.ml):

    __as_wasmCall(exports, name, args)
      = Number(exports[name](...(args || [])))

Test fixture tests/codegen-deno/wasm_call.{affine,harness.mjs} exercises
the round-trip with a 41-byte hand-built wasm module exporting add(i32,
i32) -> i32; all 7 codegen-deno harnesses pass.

Closes #414. Updates docs/bindings-roadmap.adoc row #5 status ◐ → ● and
points the rationale at this PR.

Signed-off-by: Jonathan D.A. Jewell <6759885+hyperpolymath@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request May 30, 2026
…closes #455) (#467)

## Summary

Tier 1 #5 of the AS bindings top-50 roadmap (#446). Owner's
[#455-decided](#455 (comment))
**Option B**: generic \`wasm_export_call(exports, name, args:
[WasmValue]) -> WasmValue\` with \`WasmValue\` as a tagged scalar
carrier covering all four wasm numeric kinds (i32, i64, f32, f64).

## Encoding decision

\`WasmValue\` lands as an OPAQUE \`pub extern type\` rather than a true
AS sum type. Rationale: the JS interop boundary needs a hand-written
marshaller pairing \`wv_i32(42) -> { kind: "i32", v: 42 }\` with the
export-call dispatch \`__as_wasm_export_call(exports, name, args)\`.
Mirrors the existing \`WasmExports\` opaque pattern.

A true sum-type variant on top of this opaque base ships in a follow-up
once \`json.affine\`-style tagged-variant codegen lands for the Deno-ESM
backend. Per #455 "weaker static safety acknowledged trade-off; typed
wrappers will land as a follow-up sub-issue once usage patterns
crystallise."

## What this PR ships

### \`stdlib/Deno.affine\` (+87 lines)

- \`pub extern type WasmValue\`
- Constructors: \`wv_i32\` / \`wv_i64\` / \`wv_f32\` / \`wv_f64\`
- Accessors: \`wv_as_int\` / \`wv_as_float\` / \`wv_kind\`
- \`wasm_export_call(exports, name, args: [WasmValue]) -> WasmValue\`
- Worked example: \`addI32ViaWasm(bytes, a, b)\` in the docstring

### \`lib/codegen_deno.ml\` (+47 lines)

- JS prelude: 8 \`__as_wv_*\` / \`__as_wasm_export_call\` helpers
- \`deno_builtins\` dispatch table: 8 entries
- BigInt for i64 (preserves precision beyond 2^53); \`Math.fround\` for
f32
- Return wraps as f64 by default (lossless for any numeric); i64 returns
detected via \`typeof result === "bigint"\` and wrapped as i64

## What's deferred (per #455 implementation-scope breakdown)

Each independently shippable now that the Deno.affine surface is in
place; will file follow-up tracking issues after merge:

- Zig FFI implementation for the native backend
- Idris2 ABI pattern doc (Zig=APIs/FFIs, Idris2=ABIs convention)
- \`examples/wasm-exports-demo.affine\` end-to-end demo
- Smoke-test through the Zig FFI

## Owner-directive compliance

- Adds 8 externs in the WebAssembly section adjacent to existing
\`wasmCall\`.
- Adds 8 codegen dispatch entries in the existing \`let () = ...\`
block.
- Pure additive change; no existing surface modified.
- Owner Option B confirmed in #455 comment 2026-05-30 13:18Z.

## Test plan

- [ ] CI build job (\`opam exec -- dune build\`) green
- [ ] CI \`dune runtest\` green
- [ ] CI \`tools/run_codegen_deno_tests.sh\` green (existing wasm tests
stay unaffected)
- [ ] Manual smoke: load a tiny wasm module emitting an \`add(i32, i32)
-> i32\` export; call via \`wasm_export_call\` with \`[wv_i32(2),
wv_i32(3)]\`; verify \`wv_as_int(result)\` returns 5. Defer to follow-up
PR with example file + harness.

## Refs

- closes #455 (Tier 1 #5, scope: Deno.affine + JS codegen)
- #446 — AS bindings top-50 umbrella
- \`stdlib/Deno.affine:155-176\` — existing \`wasmCall\` /
\`wasmInstance\` surface for context

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
hyperpolymath pushed a commit that referenced this pull request May 30, 2026
…la links

Both sibling roadmap docs carried the same stale
'(TBD — opened alongside this PR)' placeholders for umbrella tracker
and per-tier/track child issues. Those umbrellas now exist, so the
placeholders were stale per each doc's 'do not let the table drift'
rule:

- stdlib-roadmap.adoc -> umbrella #412; lazy child model (stdlib #N);
  filed so far: #415 (stdlib #5, cross-file use; closed)
- alib-roadmap.adoc   -> umbrella #413; lazy child model (alib #N);
  filed so far: #416 (alib #10, alib.affine module; closed)

Reflects each campaign's actual lazy child-issue model (open issues as
work starts; do not seed all up front), distinct from the newer
bindings campaign (#446) which pre-files per-tier issues.
hyperpolymath pushed a commit that referenced this pull request May 31, 2026
…la links

Both sibling roadmap docs carried the same stale
'(TBD — opened alongside this PR)' placeholders for umbrella tracker
and per-tier/track child issues. Those umbrellas now exist, so the
placeholders were stale per each doc's 'do not let the table drift'
rule:

- stdlib-roadmap.adoc -> umbrella #412; lazy child model (stdlib #N);
  filed so far: #415 (stdlib #5, cross-file use; closed)
- alib-roadmap.adoc   -> umbrella #413; lazy child model (alib #N);
  filed so far: #416 (alib #10, alib.affine module; closed)

Reflects each campaign's actual lazy child-issue model (open issues as
work starts; do not seed all up front), distinct from the newer
bindings campaign (#446) which pre-files per-tier issues.
hyperpolymath pushed a commit that referenced this pull request May 31, 2026
…la links

Both sibling roadmap docs carried the same stale
'(TBD — opened alongside this PR)' placeholders for umbrella tracker
and per-tier/track child issues. Those umbrellas now exist, so the
placeholders were stale per each doc's 'do not let the table drift'
rule:

- stdlib-roadmap.adoc -> umbrella #412; lazy child model (stdlib #N);
  filed so far: #415 (stdlib #5, cross-file use; closed)
- alib-roadmap.adoc   -> umbrella #413; lazy child model (alib #N);
  filed so far: #416 (alib #10, alib.affine module; closed)

Reflects each campaign's actual lazy child-issue model (open issues as
work starts; do not seed all up front), distinct from the newer
bindings campaign (#446) which pre-files per-tier issues.
hyperpolymath pushed a commit that referenced this pull request Jun 4, 2026
…d components + orchestrator

A nextgen-languages-evangelist that automates the AffineScript-migration
pipeline (triage -> weak-points -> boundary-proof -> parity), composing five
components, each trialed host-native this session:

- echo-boundary (#1/#2): encoding table -> lossless/controlled-loss verdict +
  GENERATED, agda-typechecked EchoEncodingFaithfulness proof (exit 0).
- affine-parity (#2/#3): generic differential-parity runner; SecurityRank 78/78,
  Kernel_IO main()=6.
- affine-migratability (#4): .res triage; reproduces Compute=MIGRATABLE,
  IO=STRING-GATED, Quantum=EFFECT-GATED.
- affine-assail (#5): .affine weak-point scanner; flags SecurityRank's clamp
  (PA-AFF-001) at HIGH. Reference impl for the panic-attack gap.
- deno-esm-spike (#3): proves the .affine -> Deno-ESM TypeScript-0 path WORKS
  (5/5 driver checks, zero TS).
- evangelist: orchestrator; emits one readiness report (verified end-to-end).

Trial components are Deno (runnable now under the github-only firewall;
hypatia-allow pragma'd); production target is Rust/AffineScript per policy.

https://claude.ai/code/session_01WoKhFQePiRsAj7aqnxbG8s
hyperpolymath added a commit that referenced this pull request Jun 5, 2026
…ks 1–5) (#533)

## What this is

Your "make 1–5 into trialable tools / components for a
nextgen-languages-evangelist" — done. Rather than five one-off fixes,
this seeds a **nextgen-languages-evangelist**: a toolkit that automates
the AffineScript-migration pipeline (triage → weak-points →
boundary-proof → parity) this session ran by hand. **Every component was
run and verified here** against the github-only firewall.

Staged under `proposals/nextgen-evangelist/` (writes stayed
affinescript-only). Builds on the merged #531 (proof) and #532
(migration + guide).

## The five components (each maps to an ask) — all trialed

| Component | Ask | Trial result (this session) |
|---|---|---|
| **echo-boundary** | #1 #2 | encoding table → LOSSLESS/CONTROLLED-LOSS
verdict + **generates & agda-typechecks** an `EchoEncodingFaithfulness`
proof (`{Open:0..Strong:3}`→LOSSLESS; `+{OOB:0}`→CONTROLLED LOSS; both
exit 0) |
| **affine-parity** | #2 #3 | generic differential-parity runner —
SecurityRank **78/78**, Kernel_IO `main()=6`, wrong-oracle negative
exits 1 |
| **affine-migratability** | #4 | `.res` triage — reproduces
Compute=MIGRATABLE, IO=STRING-GATED, Quantum=EFFECT-GATED (3/3) |
| **affine-assail** | #5 | `.affine` weak-point scanner — flags
SecurityRank's clamp `PA-AFF-001` at HIGH; reference impl for the
panic-attack gap |
| **deno-esm-spike** | #3 | **TS-0 path WORKS** — `.affine`→Deno-ESM
named exports, 5/5 driver checks, zero TypeScript |
| **evangelist** | all | orchestrator — emits one readiness report
(below) |

## Verified end-to-end (orchestrator output on the demo target)

```
① migratability:  Kernel_Compute → MIGRATABLE NOW   Kernel_IO → STRING-GATED   Kernel_Quantum → EFFECT-GATED
② weak points:    SecurityRank.affine → 1 (PA-AFF-001)   Kernel_IO.affine → 5
③ boundary proof: SecurityRank → LOSSLESS  (generated Agda, exit 0)
④ parity:         SecurityRank → 78/78 pass
```

The toolkit even surfaces a coherent story automatically: **assail
flags** SecurityRank's undeclared clamp, while **echo-boundary**
certifies the in-band table as LOSSLESS *and* the same table-with-clamp
as CONTROLLED LOSS — so it both flags the hazard and lets you discharge
it (the `@boundary` obligation from #532's toolchain proposal).

## Honest caveats

- Trial components are **Deno** (immediate runnability under the
firewall; each carries the sanctioned `hypatia: allow` pragma).
Production should be **Rust or AffineScript** per estate policy —
flagged, your call.
- `affine-parity` covers the **scalar i32 ABI**; array/string params
(the `[len:i32 LE][utf8]` + `__affine_alloc` convention) are a
follow-on.
- `deno-esm` works for pure functions; struct→`export class` + `extern
fn` lowering documented but not yet trialed (the prelude is ~440 lines).

Draft for review. Eventual home: a dedicated evangelist repo or under
`hyperpolymath/nextgen-languages` — your call.

https://claude.ai/code/session_01WoKhFQePiRsAj7aqnxbG8s

---
_Generated by [Claude
Code](https://claude.ai/code/session_01WoKhFQePiRsAj7aqnxbG8s)_

---------

Co-authored-by: Claude <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request Jun 11, 2026
#455 (Tier 1 #5) shipped the generic `wasm_export_call(exports, name,
args: [WasmValue]) -> WasmValue` surface; the inline smoke at
`tests/codegen-deno/wasm_call.{affine,harness.mjs}` covered the legacy
`wasmCall` only. A stand-alone, copy-paste-ready example was deferred
per the owner's #455 scope breakdown — this lands it.

`examples/wasm-exports-demo.affine` ships one driver per `WasmValue`
scalar kind so downstream consumers have a faithful 4-step template
(marshal -> call -> marshal-back -> cast) for each:

  - add_i32_via_wasm  (i32 + i32 -> i32)
  - add_i64_via_wasm  (i64 + i64 -> i64, BigInt at host boundary)
  - mul_f32_via_wasm  (f32 + f32 -> f32, Math.fround rounding)
  - mul_f64_via_wasm  (f64 + f64 -> f64, full precision)
  - dispatch_unknown  (wv_kind-driven runtime dispatch — the rare case)

`tests/codegen-deno/wasm_exports_demo.{affine,harness.mjs}` mirrors
the example surface and round-trips each driver through a hand-built
120-byte wasm module exporting all four scalar shapes — the harness
asserts both the raw module exports and the AS-side wrappers
match expectations at the appropriate precision (1e-5 for f32,
1e-12 for f64, exact for the integer paths including values past i32
range to exercise the i64 BigInt boundary).

`docs/bindings-roadmap.adoc` Tier-1 row 5 grows a `*Generic
export-call shipped #455*` clause + a pointer to the new example +
smoke-test so future readers find the canonical end-to-end demo.

375/375 dune tests + all codegen-deno harnesses green (was 374; +1
from examples/ auto-discovery).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Signed-off-by: hyperpolymath <6759885+hyperpolymath@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

1 participant