Commit Graph
5403 Commits
Author SHA1 Message Date
Malte Ubl 44729131df Merge base branch 2026-10-26 05:35:27 -07:00
Malte Ubl 55b20ab200 Merge base branch 2026-10-26 05:35:23 -07:00
Malte Ubl 80b5fdeb54 Merge base branch 2026-10-26 05:35:21 -07:00
Malte Ubl ffff3bfc19 Merge base branch
# Conflicts:
#	tests/harness/node-island.test.ts
2026-10-26 05:35:15 -07:00
Malte Ubl bcef522b73 Merge base branch 2026-10-26 05:34:58 -07:00
Malte Ubl f2fe256f45 Merge base branch 2026-10-26 05:34:57 -07:00
Malte Ubl 99753193aa Merge base branch 2026-10-26 05:34:56 -07:00
Malte Ubl 797650db73 Merge base branch 2026-10-26 05:34:56 -07:00
Malte UblandClaude Opus 5.5 91b437c090 Keep path-mapped island declarations out of the module graph
A re-export from an island package that tsconfig `paths` maps to its
installed directory pushed the package's declaration file into the module
order, so the lowering compiled the declarations' own imports (SC2013 in
the package's .d.mts). Such a re-export now adds no module edge; the
lowering reports the island boundary as for any island re-export.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 05:34:47 -07:00
Malte UblandClaude Opus 5.5 637d78bb67 Load island packages that tsconfig paths map to their directory
A monorepo can pin one copy of a package with a tsconfig `paths` entry
that names its installed directory. Its import then resolves as a project
import to the package's declarations, so when the package runs in a Node
island, preflight refused it as types-only (SC1010) and the lowering
skipped it as a project module, leaving its bindings unlowered (SC2013).
Both now treat it as the island import it is: typed by its declarations,
loaded in Node.

Corpus 6839 imports an ESM island package through such a mapping and uses
its interfaces and generic aliases from typed code.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-26 05:34:47 -07:00
Chris Tate 3ed13f4c4b Fix CI on the island stack 2026-10-26 03:59:57 -05:00
Chris Tate 90f94e7bc5 Merge ni/i9-recorded-deferral 2026-10-26 02:41:06 -05:00
Chris Tate a035fce3fd Merge ni/i8-exit and apply the security fix 2026-10-26 02:13:55 -05:00
Chris Tate f0b6e362a4 Expect the word-segments pilot to segment in its Node island 2026-10-26 02:05:06 -05:00
Chris Tate d90577d5eb Expect the word-segments pilot to segment in its Node island 2026-10-26 02:05:01 -05:00
Chris Tate 9d147f7531 Expect the word-segments pilot to segment in its Node island 2026-10-26 02:04:56 -05:00
Chris Tate e5792bd554 Expect the word-segments pilot to segment in its Node island 2026-10-26 02:04:51 -05:00
Chris Tate 9e3fee8654 Expect the word-segments pilot to segment in its Node island 2026-10-26 02:04:46 -05:00
Chris Tate 214cb122a7 Expect the word-segments pilot to segment in its Node island 2026-10-26 02:04:41 -05:00
Chris Tate ba01821d08 Expect the word-segments pilot to segment in its Node island 2026-10-26 02:04:36 -05:00
Chris Tate 6242ebdc56 Merge ni/i7-routing 2026-10-26 01:05:40 -05:00
Chris Tate 98ed422405 Merge ni/i6-subclasses and cascade ES-module routing 2026-10-26 01:00:45 -05:00
Chris Tate 43ab19095c Merge ni/i5-shared-modules 2026-10-25 23:50:19 -05:00
Chris Tate efca230de9 Merge ni/i4-deferred and apply parity and security fixes 2026-10-25 22:26:54 -05:00
Chris Tate ec6db73f6b Merge ni/i3-exports 2026-10-25 22:15:54 -05:00
Chris Tate 8a71a20e32 Merge ni/i2-handles 2026-10-25 21:39:21 -05:00
Chris Tate 28b76f7b25 Merge ni/i1-stack-bound 2026-10-25 21:08:37 -05:00
Malte Ubl f661d0f520 Merge base branch 2026-10-25 18:38:31 -07:00
Malte Ubl 8cde53d7cf Merge base branch 2026-10-25 18:38:30 -07:00
Malte Ubl 68eda2ec95 Merge base branch 2026-10-25 18:38:30 -07:00
Malte UblandClaude Opus 5.5 7687cf2d26 Type island packages from their declarations in failed builds and generics
When a native build failed and the packages it compiled with runtime fences
then failed as islands too, the native build's diagnostics were reported.
That build types those packages from their JavaScript, where declared-only
types (interfaces, `Static<T>`-style aliases) are `any`, so typed user code
reported cascades the island build does not have (a schema library's `TSchema`).
The island build's errors are reported instead.

In a generic function instance over island types (`<T extends TSchema>`),
a `T` value bound to dyn now crosses into the island the way `any` does,
instead of being refused as a native object.

Corpus 6829 types user code with an island package's interfaces, generic
aliases and a generic function; node-island.test.ts pins the reported
diagnostics of a failed build.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 18:38:29 -07:00
Chris Tate c9116749c1 Merge ni/3-hosted-loop 2026-10-25 20:18:43 -05:00
Chris Tate 1a2eb52016 Start nested Node entries below the frames a fiber switch left live
A host callback marks where it runs on Node's stack, and a call into
Node.js from a fiber starts below that mark. Runtime code the callback
runs may go deeper on Node's stack before it starts or resumes a fiber,
and those frames stay live while the fiber runs: a call into Node.js
from the fiber overwrote them. scr_switch now reports where it leaves
Node's stack, and the mark moves down to it for the rest of the
callback.

6823 runs a timer callback 200 frames deep that starts an async
function calling into Node.js before its first await.
2026-10-25 19:54:03 -05:00
Chris Tate c46faa93b2 Merge base branch 2026-10-25 19:32:26 -05:00
Chris Tate c3ac3f6882 Merge main 2026-10-25 18:52:38 -05:00
Chris Tate 56099ae21c Erase lambdas that implement a generic method through their context (#2274) 2026-10-25 18:07:47 -05:00
Chris Tate 9067f06c02 Cache the zone offset at UTC midnights for local-time conversions (#2272) 2026-10-25 18:01:58 -05:00
Chris Tate 68151efd37 Name new corpus programs instead of numbering them (#2270) 2026-10-25 17:54:47 -05:00
Chris Tate 27c00f6577 util: runtime format strings, inspect.custom and colors, untyped promisify (#1911) 2026-10-25 17:46:31 -05:00
Chris Tate b63dc67f9e Let boxable function arms ride a checked-dynamic union (#2269) 2026-10-25 17:44:23 -05:00
Chris Tate fad9cbdf57 Keep U+11A7 after a Hangul LV syllable in NFC and NFKC (#2266) 2026-10-25 17:31:45 -05:00
Chris Tate d33b083a3b Cache the zone offset at UTC midnights for local-time conversions
Local setters and the field constructor convert a local time value to
UTC by bracketing it with the zone offset a day before and after, then
checking the candidate instants: three to five localtime(3) calls per
conversion. In glibc each call takes the zone lock and, for dates past
the zone file's last transition, parses the zone's rule string again.

The offsets now come from a per-thread cache of offsets at UTC midnights:
a day whose two midnights agree has that offset throughout, given at
most one transition per day, which the conversion already assumes. A
day with a transition still asks localtime for the instant. A change of
process.env.TZ clears the cache.
2026-10-25 17:30:44 -05:00
Malte UblandClaude Opus 5.5 1733a4c84b Name new corpus programs instead of numbering them
Parallel changes kept taking the same next corpus number (6992 twice, the
Node island programs renumbered several times). The harness never needed
the numbers: it discovers every entry by glob, and 818 programs already
have descriptive names. AGENTS.md now makes a name, without a number, the
convention for new programs and keeps the numbered ones as they are.

The two scripts that sampled programs by number skipped named programs.
They now key a named program by a stable hash of its name, so they sample
it at the same rate; the numbered programs they pick are unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 15:17:09 -07:00
Chris Tate 8be991aeca Skip worker cancellation polls in short loops inside another loop (#2261) 2026-10-25 17:14:42 -05:00
Chris Tate 67c38b5361 Keep the whole union of an optional parameter that reaches a recursive placeholder (#2241) 2026-10-25 17:10:27 -05:00
Chris Tate 48e87d342f Run the linker job directly for host Linux links with lld (#2253) 2026-10-25 17:05:57 -05:00
Chris Tate f1a69d9bb0 Probe hashed number-key maps without normalizing integer keys (#2264) 2026-10-25 17:03:41 -05:00
Malte UblandClaude Opus 5.5 3375304945 Erase lambdas that implement a generic method through their context
A lambda with no type parameters of its own, contextually typed by a
generic signature (`send: (m) => …` for an interface's `send<T>(m:
Message<T>): string`), takes that signature's type parameters: its
parameter is `Message<T>`. A generic lambda written with its own type
parameters already lowers once, erased, with them bound to `unknown`, but
this one tried to map `Message<T>` with `T` unbound and was refused
(SC2009).

It now lowers the same way, erased, binding the contextual signature's
type parameters to `unknown`. Parameters bound in the enclosing scope
keep their bindings.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 15:02:24 -07:00
Malte UblandClaude Opus 5.5 605e312e78 Let boxable function arms ride a checked-dynamic union
A union with a checked-dynamic arm (`unknown`, fetch's AbortSignal)
maps to the checked-dynamic value when every other arm is one the
checked-dynamic tree holds faithfully. Function arms were excluded, so
`Progress | AbortSignal | undefined` was refused (SC2009).

The tree boxes a function whose parameters check in and whose result
converts out by reference (canBoxFuncIntoDyn), and `typeof x ===
"function"` narrows it back out to the typed function. Such arms now
join the collapse. The corpus program checks calls, identity (`===`
against the original), and the other arm's members against Node.

pi's SessionManager.listAll takes `onProgressOrSignal?: SessionListProgress
| AbortSignal`. The refusal rejected the whole SessionManager class.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 15:02:19 -07:00
Chris Tate 5f76d41a71 Keep U+11A7 after a Hangul LV syllable in NFC and NFKC
libunicode composes an LV syllable with U+11A7 as if it were a trailing
consonant (U+11A8..U+11C2), which drops it: "가ᆧ".normalize()
gave "가" where Node gives "가ᆧ". U+11A7 is a class-0 vowel
that composes with nothing, so for the composing forms the code points
between occurrences of it normalize on their own and it is kept as it
is. The guard sits in front of the vendored library (scr_unicode_normalize),
for String.prototype.normalize and the NFC step of IDNA mapping.

8009-normalize-hangul-jungseong-o-yae prints the code points of all four
forms for U+11A7 after LV and LVT syllables, conjoining jamo, other
starters and combining marks.
2026-10-25 16:57:11 -05:00