03:03
<rbuckton>
Apologies, I added a late-breaking constraint in https://github.com/tc39/agendas/blob/9f358facee2c51c8d2a17bae4edcb8b4837d70aa/2026/01.md but must have misclicked in the mobile web ui as it committed directly rather than creating a PR.
14:52
<Rob Palmer>
The sign-in form is now posted on the Reflector. Plenary begins in 6 mins!
15:14
<Aki>
šŸ‘‹šŸ» attendees: volunteering as a note-taker is relatively low effort, please do take a "shift" (as long or as little as you're comfortable). All that is required is to keep an eye on the transcription and make edits/fixes if errors come up.
15:15
<Aki>
also report back to #temporaldeadzone:matrix.org any funny homophones or otherwise amusing typos
15:22
<Rob Palmer>
reference material: ArkTS (is on the agenda for a link to the slides)
15:23
<Aki>
https://github.com/tc39/agendas/blob/main/2026/Basic%20ArkTS%201117%20-%20ext%20-%20simplified.pdf
15:29
<saminahusain>
my train arrives in Zurich at 17:41, so I will drop off, and join again after the lunch break.
15:29
<saminahusain>
was my audio OK?
15:29
<Aki>
downright impressive for train wifi
15:30
<Aki>
Congratulations bakkot ! (?)
15:32
<bakkot>
thanks, looking forward to having time off for a while
15:32
<bakkot>
honestly kind of expecting to do more not less committee work, but we'll see what happens
15:43
<nicolo-ribaudo>
I changed the notes template to be Conclusion/Summary/Title rather than Title/Conclusion/Summary, since that's most of the times what we need to copy&paste
15:43
<nicolo-ribaudo>
Please don't revert it!
15:51
<Michael Ficarra>
I'm pretty shocked that GraalJS has a Temporal implementation already
15:51
<Michael Ficarra>
while their implementation is generally very good, they often lag behind modern features by a year or more
15:51
<Michael Ficarra>
maybe in this case it's more that the browsers have been slow to implement than that Graal has been fast
15:52
<Aki>
people are hungry for temporal
15:52
<nicolo-ribaudo>
Everybody is just asking for more time
16:42
<ljharb>
(ļ¾‰ā—•ćƒ®ā—•)ノ*:・゚✧ https://tc39.es/ecma404/
16:44
<bakkot>
glorious
16:47
<Michael Ficarra>
I will mourn this proposal. It was a good proposal. I sometimes have a need for it myself. But I will not champion this proposal.
16:48
<bakkot>
same
16:48
<bakkot>
though I've been kind of trying to imagine a way to do it without new syntax
16:48
<bakkot>
I feel like it should be doable with a Generator.prototype method
16:48
<bakkot>
but haven't thought hard about it yet
16:51
<ljharb>
hax (HE Shi-Jun): any objection to withdrawing function.sent? if we're keeping it active, it'd be great to see it at the next plenary
16:52
<Caio Lima>

Regarding the option 3 on deferred re-exports, I'm worried by this behavior of throwing for optional re-exports when they are accessed if the module was not evaluated by other path. There are a couple of things I'm worried here:

  1. The first point is that it will throw a runtime error only when namespace is accessed, and this can be caused by changes from library side, which will make adoption quite unsafe. I can see production code breaking because of this.
  2. Second is the behavior of not throwing if it was loaded by other path, because it will insert some complexity to understand why some imports throws and others don't. This will require some analysis from dependency graph and make it hard to debug.
17:03
<Zb Tenerowicz (ZTZ/naugtur)>
It will end up creating race conditions.
17:21
<hax (HE Shi-Jun)>
ljharb: I recall mentioning my plans regarding function.sent in the previous Stage 2 proposals review, but for some reason, I can't find the record in tc39 notes repo now. However, the idea at the time was to explore whether decorators could serve as a alternative solution in this problem space once decorators land and the function decorator proposal advances. Given the current status of the decorator-related proposals, I have no immediate plans to update function.sent.
17:21
<ljharb>
ah ok gotcha, i'd missed that update. are you ok with withdrawing it for now, and it can be restored in the future if decorators doesn't work out?
17:39
<hax (HE Shi-Jun)>
ljharb: I found the record: https://github.com/tc39/notes/blob/59c6f56131851169e62051b7f292453e73cd0e92/meetings/2024-06/june-11.md?plain=1#L1037 . And I dont like to withdraw it, but perhaps downgrading to Stage 1 would be appropriate, as the specific form of the solution might no longer be a meta property, but rather another syntactic form or a decorator-based API.
18:03
<ptomato>
is there a link to the import sync slides?
18:06
<hax (HE Shi-Jun)>
ljharb: I checked the notes and saw that the topic of withdrawal has already been discussed. Unfortunately, I wasn't present because my home network has been very unstable this week, and Matrix has been intermittently disconnected as well. I’m afraid I won’t be able to join the video conference for this afternoon’s meeting either—I’ll only be able to follow via the notes. However, if it’s convenient, please help clarify during the meeting that this proposal was actually updated in 2022 (though the last presented time wasn’t updated on the tc39/proposals page), and it was also presented during the 2024 proposal review, so it isn’t a case of ā€œno activity in over a decade.ā€ šŸ˜‚
18:13
<bakkot>
import.sync feels a lot like the "synchronously unwrap a promise" proposals which occasionally come up and which many people strongly object to, just specialized to a specific kind of promise (i.e., those which are returned by dynamic import)
18:13
<bakkot>
it is not totally clear to me what rule justifies allowing one but not the other
18:17
<Michael Ficarra>
does import.meta work in scripts?
18:17
<ljharb>
no, they weren't imported
18:17
<Michael Ficarra>
what's it do?
18:17
<ljharb>
syntax error iirc
18:18
<ljharb>
my position isn't some arbitrary "all import.foo must work in Scripts" tbc, it's "we should bend over backwards to avoid adding something to the language that doesn't work in all supported parse goals"
18:18
<Michael Ficarra>
ah, you're right
18:18
<Zb Tenerowicz (ZTZ/naugtur)>
@bakkot:matrix.org: is not unwrapping a promise, it's synchronously executing a module that has its source text synchronously available for whatever reason
18:19
<nicolo-ribaudo>
import defer detects deadlocks and throws, this could reuse the same infrastructure
18:30
<nicolo-ribaudo>

The example I mentioned:

import { didRunPromiseQueue } from "./async-check.js";
import { x } from "./tla.js";
console.log(x, didRunPromiseQueue);
// async-check.js
let didRunPromiseQueue = false;
Promise.resolve().then(() => didRunPromiseQueue = true);
// tla.js
await null;
export const x = 1;

If tla.js was already evaluated, it will synchronously log x synchronously right after running async-check.js, without introducing an artificial await.

18:31
<nicolo-ribaudo>
While if tla.js still needs to be evaluated, it will only log asynchronously (after didRunPromiseQueue becomes true)
18:40
<Zb Tenerowicz (ZTZ/naugtur)>
Would import.sync cause regular import * from to also become sync? If import.sync was to bevome an equivalent of require(esm) in node.js it would be the current behavior
18:42
<ptomato>
I'd appreciate it if someone could tag me out as a notetaker after this item
18:42
<nicolo-ribaudo>
What does it mean for import * from to be sync?
18:43
<Zb Tenerowicz (ZTZ/naugtur)>
I'm not sure. Let's consider that part of the question
18:47
<Michael Ficarra>
nit: we clearly wouldn't want to ToIntegerOrInfinity the limit because that converts non-numbers using ToNumber, which goes against our normative convention
18:48
<Michael Ficarra>
also that's a completely unnecessary level of detail for a proposal going for stage 1 (and even 2)
18:52
<nicolo-ribaudo>
I recommend explicitly keeping defining what stack frames are outside of the proposal scope
18:52
<nicolo-ribaudo>
But what exact validation we do on the number yes no need to worry about that now
18:54
<Zb Tenerowicz (ZTZ/naugtur)>
Hermes (the engine behind React Native) is also emulating a subset of the non-standard Error stack mechanics from V8
18:56
<Michael Ficarra>
I don't understand MM's comment. This proposal is going for Stage 1 before the next proposal is presented. If the comments apply to both, shouldn't we hear them now?
18:59
<nicolo-ribaudo>
Maybe the limit of 0 should not be allowed
18:59
<nicolo-ribaudo>
So you always have some idea of where to start looking
19:17
<Michael Ficarra>
another related proposal: https://github.com/tc39/proposal-function-implementation-hiding
19:24
<ljharb>
TIL that DOMException lacks a cause
19:24
<ljharb>
that should really be merged
19:26
<Chengzhong Wu>
https://github.com/whatwg/webidl/pull/1179 was blocked due to difference on the property on the error prototype or an error instance
19:26
<Lea Verou>
ljharb: it does not inherit from Error either… https://webidl.spec.whatwg.org/#idl-DOMException
19:26
<ljharb>
oof, i guess it has the slot but doesn't inherit from it
19:27
<Lea Verou>
The entire existence of DOMException is a wart in the platform :(
19:27
<Andreu Botella>
its prototype is Error.prototype: https://webidl.spec.whatwg.org/#js-exceptions
19:27
<Andreu Botella>
it just can't be represented in WebIDL
19:28
<ljharb>
new DOMException() instanceof Error checks out
19:28
<Lea Verou>
Andreu Botella: not in the browser implementation at least… Object.getPrototypeOf(DOMException) === Function.prototype… (edit: same in Node)
19:28
<ljharb>
that's still ES5-style inheritance tho, just not class-style
19:28
<ljharb>
(sounds like web idl is a wart too, if it can't represent the web's programming language properly)
19:29
<ljharb>
so i guess DOMExceptions inherit from Error.prototype, but the DOMException constructor doesn't inherit from Error
19:29
<ljharb>
would it break anything to make it do so?
19:30
<Lea Verou>
Oooh, that's true, Object.getPrototypeOf(DOMException.prototype) === Error.prototype. How weird.
19:31
<Lea Verou>
The question is not just whether it would actually break anything, but also whether people can be convinced to check…
19:33
<Lea Verou>
Turns out there is an issue already: https://github.com/whatwg/webidl/issues/1107
19:36
<ljharb>
wait so Error.captureStackTrace(x) only exists so users didn't have to do x.stack = new Error().stack?
19:40
<Lea Verou>
Yeah that is pretty ...weird
19:40
<Lea Verou>
ljharb: Here's the background: https://github.com/tc39/proposal-error-capturestacktrace
19:48
<Steve Hicks>
ljharb: Specifically what needs to be updated w.r.t. GitHub teams?
19:49
<ljharb>
look over the list of members, and make sure everyone on the list is still employed at your company and still wants to participate; and that nobody who wants to participate is missing
19:51
<Steve Hicks>
Are you talking about https://github.com/orgs/tc39/people or https://github.com/tc39/notes/blob/main/delegates.txt or something else?
19:51
<Andreu Botella>
https://github.com/orgs/tc39/teams/delegates/teams i think
19:52
<Steve Hicks>
Gotcha, thanks!
20:08
<ljharb>
sorry yes, the link andreu provided :-) thank you!
20:43
<Chris de Almeida>
who was helping with notes during the second session aside from PFC ?
21:02
<Andreu Botella>
i helped at various times, but not continuously
21:14
<ljharb>
i'm confused, when did import.sync get stage 2?
21:14
<ljharb>
did i zone out and miss consensus on it? i'd made it pretty clear i had a potentially blocking concern; did that get resolved?
21:26
<ptomato>
Ben Allen, and Caio Lima took over from me when I rotated out
22:25
<Aki>

Thank you, everyone, for your summaries and conclusions so far. Right now, I am still looking for the following:

  • bakkot just a very brief summary of the 262 update
  • chipmorningstar I wrote a one-sentence summary, please review and edit if needed
  • Chris de Almeida summary and/or conclusion for Withdrawing Intl.UnitFormat
  • guybedford Import Sync for Stage 2 slides were not linked in the agenda, also need summary of presentation/conversation and to record any decisions or conclusions
  • Ruben Error option limit & Error option framesAbove are both missing slides, summaries, and conclusions