Skip to content
AsHyAmS
Network state observed every site read A snapshot, not live telemetry.

Updateschanged

l3i stable 2.0.0 → 2.0.2

Published by l3i. release migration artifacts

Channel stable

  • changed: stable head 2.0.0 → 2.0.2

stable: Artifacts

  • changed: Artifact crate size 2377858 bytes → 2394884 bytes

Releases

  • added: Release 2.0.2stable, available, dated 2026-10-12 by its publisher
  • added: Release 2.0.1stable, available, dated 2026-10-12 by its publisher

Publisher's notes for 2.0.2 stable

A natively lowered `@dream/intern` lookup no longer reads a slot table the pool has freed, and the `@dream/data` definitions say what a span's `kind` is.

Fixed

  • Interning a key a pool already held, through the binder, while the pool sat at its load limit (12, 24, 48 ... identities) grew the slot table before looking the key up, and did not tell native code the table had moved, because the pool's length had not changed. Until the next new key, a lowered pool:find or pool:intern on an annotated dream_intern_Pool read the freed table: wrong tokens, nil for a key the pool held. A pool now looks a key up first and grows only to add one, so a key it holds moves nothing. Unannotated pools were never affected.
  • The @dream/data definitions gave gather, scatter and add a kind: dream_data_Kind parameter, the union of receiver classes, where the runtime takes the layout string every other span takes; and they typed a span's kind as the eight bare kinds, so the documented strided form ("f32@16+12") was a type error under --!strict. A span's kind is now a dream_data_Layout, dream_data_ElementKind | string, in every signature, and the strict-script gate that checks the definitions against the runtime covers @dream/data, which it had left out.
  • data.fill's description said the value converts as buffer.write<kind> converts. It is written as every data-plane write is: a number, truncated toward zero and wrapped to the width, saturating first beyond 2^63. The description says so now; the behaviour is unchanged.

Migration

Nothing to change. A pool annotated dream_intern_Pool that also receives keys through unannotated code was the exposed case, and is correct after an upgrade. A strict script that cast a strided layout to pass it to @dream/data can drop the cast.

Written by the publisher and shown verbatim, rendered through a sanitizer.

Publisher's notes for 2.0.1 stable

A sink or slice statement may open a function body, and the `@dream/luau` definitions declare the record pattern nodes the tree has carried since 2.0.0.

Fixed

  • A statement that begins with a sink or a slice (into(out)[for x in xs => x], grid[2:3][1][1] = 5) failed to compile as the first statement of a function body, with Expected identifier when parsing expression, got ';': the lowering separated it from a statement that was not there. A body's first statement now gets no separator, whatever the header ends with, and where a return type ends is decided by Luau's parser, not estimated.
  • The @dream/luau definitions did not declare StatLocalPattern, PatternRecord, PatternField or PatternIdentifier, and typed ExprFunction.args and ComprehensionGenerator.bindings as lists of dream_luau_Local although a record pattern can stand in either. They are declared now, dream_luau_StatLocalPattern is a member of dream_luau_Stat, and a slot that may hold a pattern is a dream_luau_Binding, dream_luau_Local | dream_luau_PatternRecord.

Migration

A strict script that reads name off an element of ExprFunction.args or of a generator's bindings refines it by kind first, "Local" or "PatternRecord". Nothing changes at run time.

Written by the publisher and shown verbatim, rendered through a sanitizer.