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
Three single-session Stage D items grouped into one commit:
(1) INT-01 follow-up (Refs #178): `Mod::fn(x)` in value-expression
position. lib/parser.mly adds one production —
`upper_ident COLONCOLON lower_ident` → `ExprField(ExprVar Mod,
lower_ident)`, the same AST shape `Mod.fn` already produces.
Disambiguated from the existing `Type::Variant` rule by token
class (lower vs upper). No resolver change required:
Resolve.lower_qualified_value_paths handles both `.` and `::`
syntaxes identically because the lowering pattern-matches on
the ExprField shape, not on the source separator.
Two new fixtures + two alcotest cases pin both
`use Mod; Mod::fn(x)` and `use Mod as M; M::fn(x)`. The
ledger note "Mod::fn(x) in expression position is a parse
error … `::` reserved for Type::Variant" is now closed.
(2) BUG-005 deferred regression test landed. The original
[[closed-bug]] record had `regression-test-status = "deferred —
fixture needs a known-unknown function name in a WasmGC compile
path"`. test_gc_unbound_function_loud_fail does exactly that:
parses `fn main() -> Int { return totally_undefined_callee(42); }`,
feeds it directly to Codegen_gc.generate_gc_module (no resolve
step), asserts the emitted error contains the unknown name —
which UnboundFunction's format string includes verbatim. A
regression to silent drop+null would fail this gate.
(3) docs/STDLIB-EXTERN-AUDIT.adoc — triage of all 135 `extern fn`
+ 24 `extern type` across 11 stdlib files into 4 classes
(built-in / typed-boundary-bridge / adapter-Deno / adapter-
Node) with per-row status and unblock condition. STDLIB-04
ledger entry now points here; implementation PRs close one
row at a time, audit doc is the canonical long-tail roadmap.
STATE.a2ml: stage-d-batch-2026-05-23 session note recorded;
BUG-005 regression-test-status flipped from "deferred" to "landed
2026-05-23".
Not yet verified locally (no OCaml toolchain in remote env).
Parser change is low-risk: single production, no Menhir conflict
delta expected — `upper_ident COLONCOLON lower_ident` is
unambiguous against the prior `upper_ident COLONCOLON upper_ident`
rule by token class. CI is the verification surface.
Refs #178, Refs STDLIB-04
drift-flag = "STALE as of 2026-05-23 PM: this file's [components]/[features]/[project-context] still predate landed PRs since 2026-05-19. It MIRRORS, it does not LEAD. Authoritative sources by topic — readiness: docs/CAPABILITY-MATRIX.adoc; spine + AS↔typed-wasm contract: docs/ECOSYSTEM.adoc; coordination ledger / critical path: docs/TECH-DEBT.adoc; test taxonomy + PR-level gates: docs/standards/TESTING.adoc (added 2026-05-23); panic-attack SOP: docs/standards/PANIC-ATTACK.adoc (added 2026-05-23). Gate baseline: CAPABILITY-MATRIX records 260/260 at 2026-05-19 reconstruction; subsequent borrow-checker work has lifted it (#240 → 263, return-escape → 271/274, &mut surface → 278/281). The exact live number for any given commit comes from `dune runtest --force` — do not hard-code it here. (DOC-05, issue #176.)"
11
+
stage-d-batch-2026-05-23 = "INT-01 ::-in-value-expr + BUG-005 deferred fixture + STDLIB-04 audit. (1) INT-01 follow-up: lib/parser.mly line ~835 — added `upper_ident COLONCOLON lower_ident` production emitting `ExprField(ExprVar Mod, lower_ident)`, the same AST shape `Mod.fn` already produces. Disambiguated from the line-above `Type::Variant` rule by lower_ident vs upper_ident. No resolver change required: Resolve.lower_qualified_value_paths handles both `.` and `::` syntaxes identically because the lowering pattern-matches on the ExprField shape, not the source separator. test/e2e/fixtures/cross_caller_qualified_colon{,_alias}.affine + 2 alcotest cases in qualified_value_tests pin both `use Mod; Mod::fn(x)` and `use Mod as M; M::fn(x)`. The remaining INT-01 'parser gap, not resolver' note in the ledger is now closed. (2) BUG-005 deferred regression test landed (test/test_e2e.ml, wasm_gc_loud_fail_tests): `fn main() -> Int { return totally_undefined_callee(42); }` is fed directly to Codegen_gc.generate_gc_module (no resolve step) and the emitted error must contain the unknown name — which UnboundFunction's format string includes verbatim. Closes the deferred-status entry on the [[closed-bug]] BUG-005 record. (3) docs/STDLIB-EXTERN-AUDIT.adoc — full triage of 135 extern fn + 24 extern type across 11 stdlib files into 4 classes (built-in / typed-boundary-bridge / adapter-Deno / adapter-Node); per-row status (done/partial/stub-only) and unblock condition for each module. STDLIB-04's ledger entry now points here. Implementation PRs close one row at a time; the audit doc is the canonical roadmap, not STATE.a2ml. (4) Not yet verified locally — no OCaml toolchain in this remote execution environment. CI is the verification surface; parser change is low-risk (single production, no Menhir conflict — `upper_ident COLONCOLON lower_ident` is unambiguous against the prior `upper_ident COLONCOLON upper_ident` rule by token class)."
11
12
hygiene-uplift-2026-05-23 = "TEST + BENCH + COVERAGE + PANIC-ATTACK SOPs LANDED. (1) docs/standards/TESTING.adoc — authoritative test taxonomy (alcotest unit / alcotest E2E / fixture / golden / smoke / microbench), PR-level expectations, deferred-regression-test protocol. Replaces the stale docs/guides/TESTING-REPORT.adoc (2025-12-29 snapshot, 47/27 pass rate, contradicted by live gate since early 2026); retired in-place with redirect to CAPABILITY-MATRIX + standards/TESTING. (2) bench/ scaffold — dune stanza under @bench alias, 4 phase microbenches (lex/parse/typecheck+quantity/codegen-wasm) over 3 shared fixtures (tiny_arith, medium_struct_match, larger_enum). just bench / just bench-record recipes. CI job `bench-visibility` uploads bench-output.log as artifact. Visibility-only — no merge-blocking threshold. (3) bisect_ppx coverage wiring — added as with-test depend in dune-project + affinescript.opam. just coverage recipe (HTML to _coverage/, gitignored). CI job `coverage-visibility` uploads _coverage as artifact + summary to step output. Visibility-only — no enforced floor. (4) docs/standards/PANIC-ATTACK.adoc — SOP for the estate compliance scanner. Disposition vocabulary (fix/accept/suppress/defer); standing-suppression record format; cross-refs to MAINTENANCE-CHECKLIST. .github/workflows/panic-attack.yml: weekly Sunday 03:00 UTC cron + workflow_dispatch, installs panic-attacker via cargo from road-skate/features/panic-attacker, uploads log as artifact. (5) docs/README.adoc + NAVIGATION.adoc updated — standards/ now lists TESTING + PANIC-ATTACK; guides/TESTING-REPORT marked RETIRED. (6) .gitignore — added /_coverage/, bisect*.coverage, /bench-runs/."
12
13
session-note-2026-05-20-pm = "POST-#303 CATCH-UP: #297/#300/#301/#302/#304 + repos-monorepo retirement decision. (1) PR #300 MERGED (sha 8110548) — closed #297. lib/version.ml single source of truth + release.yml sed-bake step. Binary --version self-reports 0.1.1 now. (2) PR #304 OPENED for #301 (repo-wide PMPL→MPL-2.0 SPDX surface sweep, Option 3 of the three in the issue): 673 files / +1127 −711 / 1116 SPDX headers flipped / code generators emit MPL-2.0 / .machine_readable license fields reconciled / dune-project (license …) reconciled from stale MIT-OR-AGPL → MPL-2.0 / affinescript.opam regenerated → license: \"MPL-2.0\" / LICENSES/LICENSE-MPL-2.0 added (canonical Mozilla 373-line text) / root LICENSE narrative preserved unchanged (PMPL still narrated as preferred + MPL-2.0 fallback explanation intact) / vendored sister-repo subtrees (road-skate/ + affinescript-vite/) explicitly excluded. Verification: 295/295 dune tests + 6/6 shim tests + binary 0.1.1 + grep for residual PMPL SPDX → empty (excl. vendored). Side-effect noted in PR body: pre-existing dune-project symlink-to-.build/dune-project got broken by sed atomic-rename; both files now real-file content-identical. (3) Issue #302 CLOSED — owner confirmed GitLab+Bitbucket mirroring is intentionally off; Codeberg + Radicle are the active forges. (4) repos-monorepo RETIREMENT decided: snapshot tarred (23MB gzip / 144MB extracted / 23,970 entries / canonical origin/main shallow-clone / .git excluded) to /mnt/c/Users/USER/Downloads/repos-monorepo-snapshot-2026-05-20.tar.gz; owner-upload-to-Google-Drive then `gh repo delete hyperpolymath/repos-monorepo --yes`. repos-monorepo#9 (nested casket-ssg coherence) becomes moot post-delete since the aggregator that would have carried it is gone — standalone hyperpolymath/casket-ssg already merged casket-ssg#8 + has its own instant-sync.yml for forge propagation. (5) DOC/MEMORY: this session-note + the TECH-DEBT.adoc INT-04 update (mentioned #297/#300 + #301/#304) are part of follow-up PR to #303. The 4 earlier-saved reference memories (macos-13 retired, gitbot Refs-auto-close, estate mirror state, JSR publish recipe) all still apply unchanged."
13
14
session-note-2026-05-20 = "INT-10 / #282 CLOSURE + JSR PUBLISH + ESTATE macos-13 SWEEP + DOC/MEMORY HARDENING. (1) ISSUE #282 ACTUALLY-DELIVERED end-to-end. PRs that landed today: #291 (partial pins.js fill for linux-x64 + macos-arm64, shim 0.1.1 — bridging before macos-x64 leg landed); #292 (release.yml: retired macos-13 GH-hosted runner → macos-15-intel — root cause of v0.1.0 macos-x64 leg sitting queued ~10h, traced to actions/runner-images#13046/#13402/#13634 'macos-13 fully unsupported since 2025-12-04'); v0.1.1 tag cut, full 3-platform release (linux-x64/macos-arm64/macos-x64) + SHA256SUMS published; #293 (delete 4 orphan .res files + the affine-res ReScript-bindings package — same precedent as packages/affine-ts/ removal 2026-05-11, fixed the recurring governance Language/anti-pattern check failure on every PR); #294 (release.yml checksums job: pass --repo \"$GITHUB_REPOSITORY\" so `gh release download` doesn't probe a missing .git — bug hidden on v0.1.0 by the macos-13 stall that pre-empted the checksums leg); #295 (final shim closure: pins.js VERSION→v0.1.1, all 3 sha256 fields filled, shim @hyperpolymath/affinescript 0.1.1→0.1.2, SHIM_SPEC bumped lock-step in tools/affinescript-lsp/src/compiler.rs); #298 (cross-runtime refactor: Deno/Bun/Node detection at module load + helper layer for hostOs/hostArch/envGet/readBytes/writeBytes/mkdirRecursive/chmodExec/spawnInherit/thisIsMain — was Deno-only — plus mod.d.ts + triple-slash reference so JSR fast-check finds the types and emits no warning; .claude/CLAUDE.md gained Runtime Exemptions section as the carve-out from the estate-wide Bun/Node ban); #299 (relicense the JSR shim package only — packages/affinescript-cli/{deno.json + 4 SPDX headers} — from MPL-2.0 to MPL-2.0 because JSR validates against the SPDX list and `MPL-2.0` isn't on it; wider repo PMPL→MPL-2.0 deliberately deferred — #301). (2) JSR FIRST-TIME PUBLISH RECIPE walked: claim scope @hyperpolymath → create package record (jsr.io/new — dry-run won't catch this) → link trusted GitHub repo at package or scope settings (OIDC actorNotAuthorized otherwise — dry-run won't catch this either) → SPDX licence → mod.d.ts + triple-slash → cross-runtime tickbox. publish-jsr.yml workflow (manual workflow_dispatch); 6 dispatched runs today before all gates aligned (~7:33 UTC). Verified live: https://jsr.io/@hyperpolymath/affinescript 200; meta.json `latest: 0.1.2`. Real fetch+verify+exec smoke against the v0.1.1 release ran green on linux-x64 (resolveCompiler → SHA-verify → cache → exec `--version`). (3) ESTATE macos-13 SWEEP — sole non-affinescript first-party hits: `casket-ssg#8` (release.yml: `runner: macos-13` → `runner: macos-15-intel`, merged) + `proven#29` (zig-ffi.yml: `os: macos-13` → `os: macos-15-intel`, merged) + `repos-monorepo#9` (nested casket-ssg copy in boj-cartridges/polystack/poly-ssg/casket-ssg/.github/workflows/release.yml — still open as of writing, coherence-only since instant-sync.yml in each repo independently propagates). gh search code confirmed only 3 distinct first-party repo hits across the 360-repo active estate. (4) DISCOVERED — GitLab + Bitbucket mirrors NOT operating: empirical inspection of mirror.yml runs on affinescript / casket-ssg / repos-monorepo all `completed/skipped`; `GITLAB_MIRROR_ENABLED` / `BITBUCKET_MIRROR_ENABLED` repo vars unset; `GITLAB_TOKEN` / `BITBUCKET_TOKEN` secrets absent (only FARM_DISPATCH_TOKEN present); gitlab.com probes 302, bitbucket.org probes 404. repos-monorepo DOES have CODEBERG_MIRROR_ENABLED + RADICLE_MIRROR_ENABLED set → active forges are Codeberg + Radicle + whatever `.git-private-farm` fans out to. Filed as open question: #302. (5) FOLLOW-UPS: #297 (version-string drift — bin/main.ml/lib/repl.ml/lib/lsp_server.ml/lib/onnx_codegen.ml/dune-project all hardcoded `0.1.0` even on the v0.1.1 binary; fix PR #300 introduces lib/version.ml single-source-of-truth + release.yml sed-bake step on every tag); #301 (wider PMPL→MPL-2.0 estate-relicense decision needed); #302 (mirror status — intentional-off or unfinished-setup). (6) DOCUMENTATION: this file (a session-note); docs/PACKAGING.adoc (status table for all 3 JSR-publishable packages + first-publish-gotchas section); docs/TECH-DEBT.adoc (INT-04 / INT-10 lines updated to reflect actual publish). Memory: reference_macos_13_runner_retired.md, reference_estate_gitbot_auto_closes_on_refs.md, reference_estate_mirror_state_2026_05_20.md, reference_jsr_publish_recipe.md all saved + indexed in MEMORY_STANDING.md."
@@ -201,7 +202,7 @@ indirect calls. This was placeholder behaviour that produced wrong code rather
201
202
than failing loudly.
202
203
"""
203
204
fix = "Both fallback arms replaced with explicit CodegenError. Direct-call miss → Error (UnboundFunction id.name). Indirect/higher-order callee → Error (UnsupportedFeature \"indirect / higher-order call in WasmGC backend (call_ref not yet implemented)\"). New UnboundFunction variant added to codegen_error and format_codegen_error. commit b58178a."
204
-
regression-test-status = "deferred — fixture needs a known-unknown function name in a WasmGC compile path"
205
+
regression-test-status = "landed 2026-05-23 — test/test_e2e.ml `test_gc_unbound_function_loud_fail` in `wasm_gc_loud_fail_tests`. Parses `fn main() -> Int { return totally_undefined_callee(42); }`, feeds it directly to Codegen_gc.generate_gc_module (no resolve step), asserts the emitted error message contains 'totally_undefined_callee' — which UnboundFunction's format string includes verbatim. Pins the explicit-error path so a regression to silent drop+null would fail the gate."
205
206
206
207
# ─── Deferred upgrade: bring .machine_readable/ to current standards ──────────
207
208
# AffineScript predates most of the current hyperpolymath .machine_readable/
0 commit comments