Skip to content

ci: pin aeb past the orchestrator token wall, and Aether 0.684.0 with it - #147

Merged
nicolas-maman merged 5 commits into
mainfrom
ci/pin-aether-0681-aeb-orchestrator
Sep 18, 2026
Merged

nicolas-maman merged 5 commits into
mainfrom
ci/pin-aether-0681-aeb-orchestrator

Conversation

@nicolas-maman

Copy link
Copy Markdown
Contributor

Why

#140 adds one .build.ae and both desktop legs die in Phase 1:

error: source file exceeds maximum token limit (50000 tokens)
aeb-link: FATAL — failed to compile the fan-out orchestrator

The orchestrator is a single generated main file and aetherc lexes a main file into a fixed 50,000-token array. Measured with the lexer over this tree's node list under aeb v0.297's generator: main = 49,412 tokens, #140 = 49,770 (plus the root node). The tree was one node from the wall, and the error names no file because the file is aeb's.

What

  • AEB_REF9bfd8e88 (aeb main after gen-orchestrator: emit the per-node bookkeeping once, not per node aeb#15, which emits the per-node bookkeeping once: same 138 nodes, 49,770 → 7,227 tokens). A SHA until a tag is cut; install.sh takes one.
  • AETHER_REFv0.681.0, forced rather than chosen: every aeb since v0.302 compiles its own aeb-main against bldr, which imports std.zip (0.667), std.strarr (0.675) and calls os.arch() (0.681), so make install of that aeb needs it on PATH. Scanned the 0.646–0.681 notes: additive stdlib, a 4.5× faster type-check, @c_callback emitted weak, -fPIC on --emit=lib objects. No grammar or removed-API change this tree touches.

The matrix on this PR is the verification. If it is red on something the bump exposes, the fallback is a backport branch of aeb v0.297 carrying only the generator fix.

Compiler side: aether-lang-dev/aether#2059 asks for the main-file cap to be heap-allocated like the module one.

The fan-out orchestrator is one generated main file, and aetherc lexes a
main file into a fixed 50,000-token array. aeb v0.297's generator spent
~360 tokens per node, so this tree's 137 nodes sat at 49,412 and the
138th (#140, tests/min_size) failed the whole fan-out with "source file
exceeds maximum token limit" naming no file. aeb main (9bfd8e88, aeb#15)
emits the per-node bookkeeping once; the same tree is 7,227 tokens.

Every aeb since v0.302 compiles its own aeb-main against bldr, which
needs std.zip (0.667), std.strarr (0.675) and os.arch() (0.681), so the
Aether pin moves to 0.681.0 in the same commit. Nothing in the
0.646-0.681 notes removes or changes anything this tree uses; the
matrix on this commit is the verification.
…lide with std.audio

Under Aether 0.681 a local function whose name matches an imported C
symbol is E1001: audio_position_ms / audio_duration_ms are std.audio's
own externs. Renamed; nothing outside lis_audio.ae called them.
@nicolas-maman

Copy link
Copy Markdown
Contributor Author

Both desktop legs are red on this, and the cause is upstream, not this tree: Aether 0.667's E0200 ("block setter called as a node builder") discriminates by "the callee's module also defines a builder", and ui/module.ae has four builders beside ~50 _ctx-first containers, so every ui.vstack(10) { … } is rejected. The fan-out log ci.sh prints hides it (60 make: *** … Error 1 lines eat the grep budget); reproduced locally with a 0.681 build.

Fix is aether-lang-dev/aether#2060 — the rule also requires the callee to yield no value, which is what separates a container (returns the handle its block runs inside) from a setter. With that build, all 260 .ae sources here type-check. This PR moves AETHER_REF to the release carrying it once cut. Also pushed the one genuine 0.681 casualty: LisMusic's audio_position_ms/audio_duration_ms collided with std.audio's (E1001); renamed.

Under the parallel scheduler every failing node costs one
'make: *** [bldr.mk:N: label] Error 1', printed before aeb's per-node
'FAILED (see <log>)' dump. A change that broke every node (the 0.681
bump) filled the 60-line budget with make lines and the actual compiler
diagnostic never reached the CI log.
0.667-0.682 reject every ui.vstack(10) { } in every app: E0200
discriminated a block setter from a container by 'the module also
defines a builder', and ui/module.ae has four builders beside ~50
_ctx-first containers. aether#2060 (in 0.683.0) also requires the
callee to yield no value. All 260 .ae sources here type-check under it.
@nicolas-maman nicolas-maman changed the title ci: pin aeb past the orchestrator token wall, and Aether 0.681.0 with it ci: pin aeb past the orchestrator token wall, and Aether 0.683.0 with it Sep 18, 2026
@nicolas-maman

Copy link
Copy Markdown
Contributor Author

aether#2060 merged and shipped in 0.683.0 (assets published). AETHER_REF is now v0.683.0; the matrix on this push is the verdict.

@nicolas-maman

Copy link
Copy Markdown
Contributor Author

macOS leg under 0.683.0: table_demo aborts at startup (Abort trap: 6). Reproduced natively on Windows (STATUS_HEAP_CORRUPTION) and root-caused with gdb: the table's cell callback returns string.from_int(p.kb) on one path and p.name (a literal) on the other; since 0.682 (#2054) the caller _table_invoke_cell -> string owns and frees the result, but the closure was typed void* by its first return site so its literal was never copied out — free("zoe"). 0.651 merely leaked. Compiler fix: aether-lang-dev/aether#2070 (any string-typed return site makes the closure a string closure). With that build table_demo runs here and renders its cells. This PR moves to the release carrying it.

Under 0.682-0.683 table_demo aborts at startup on macOS and Linux:
the table cell callback returns string.from_int(p.kb) on one path and
p.name on the other, was typed by its first return (ptr) and so never
copied the literal out, while its -> string caller (owning since
#2054) freed it. aether#2070, in 0.684.0, makes any string-typed
return site classify the closure as string-returning.
@nicolas-maman nicolas-maman changed the title ci: pin aeb past the orchestrator token wall, and Aether 0.683.0 with it ci: pin aeb past the orchestrator token wall, and Aether 0.684.0 with it Sep 18, 2026
@nicolas-maman

Copy link
Copy Markdown
Contributor Author

aether#2070 shipped in 0.684.0; AETHER_REF moved to v0.684.0. Matrix running.

@nicolas-maman
nicolas-maman merged commit 1546081 into main Sep 18, 2026
3 checks passed
@nicolas-maman
nicolas-maman deleted the ci/pin-aether-0681-aeb-orchestrator branch September 18, 2026 09:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant