diff --git a/README.md b/README.md index 0f9e32d..a5dc9b4 100644 --- a/README.md +++ b/README.md @@ -1,40 +1,36 @@ # TC39 - How We Work -Ecma International's TC39 is the standards committee which defines ECMAScript (JavaScript). This repository is intended to provide documentation into how TC39 works. - -This repository is an early work in progress! +Ecma International's TC39 is the committee which defines ECMAScript (JavaScript) and related standards. This repository provides documentation into how TC39 works. For an introduction to getting involved in TC39, see [CONTRIBUTING.md](https://github.com/tc39/ecma262/blob/HEAD/CONTRIBUTING.md). -## Table of Contents - -- Meta - - [Introduction and Table of Contents for this repo (this file)](README.md) - - [List of suggested additions for this repo](TODO.md) - -- Proposals - - [Championing a proposal at TC39](champion.md) - - [How to write a good explainer](explainer.md) - - [How to make a Pull Request against the ECMAScript specification](pr.md) - - [Presenting a Proposal to TC39](presenting.md) - - [Reading a proposal draft](how-to-read.md) - - [How to give helpful feedback](feedback.md) - - [Stage 3 Proposal Reviews](stage-3-review.md) - - [How to experiment with a proposal before Stage 4](experiment.md) - - [Implementing and shipping TC39 proposals](implement.md) - -- Meetings - - [How to host a TC39 meeting](host.md) - - [How to participate in meetings](how-to-participate-in-meetings.md) - - [How to take notes](how-to-take-notes.md) - - [How to run an online meeting](call.md) - -- Admin - - [Becoming a TC39 delegate](join-tc39.md) - - [Becoming a TC39 invited expert](invited-expert.md) - - [TC39 management](management.md) - - [TC39 and IP](ip.md) - -- Other - - [Archival of TC39 materials](archival.md) - - [Glossary and Considerations](terminology.md) +## Proposals + +- [Championing a proposal at TC39](champion.md) +- [How to write a good explainer](explainer.md) +- [How to make a Pull Request against the ECMAScript specification](pr.md) +- [Presenting a Proposal to TC39](presenting.md) +- [Reading a proposal draft](how-to-read.md) +- [How to give helpful feedback](feedback.md) +- [Stage 3 Proposal Reviews](stage-3-review.md) +- [How to experiment with a proposal before Stage 4](experiment.md) +- [Implementing and shipping TC39 proposals](implement.md) + +## Meetings + +- [How to host a TC39 meeting](host.md) +- [How to participate in meetings](how-to-participate-in-meetings.md) +- [How to take notes](how-to-take-notes.md) +- [How to run an online meeting](call.md) + +## Admin + +- [Becoming a TC39 delegate](join-tc39.md) +- [Becoming a TC39 invited expert](invited-expert.md) +- [TC39 management](management.md) +- [TC39 and IP](ip.md) + +## Other + +- [Archival of TC39 materials](archival.md) +- [Glossary and Considerations](terminology.md) diff --git a/host.md b/host.md index 1196248..42b760d 100644 --- a/host.md +++ b/host.md @@ -1,36 +1,142 @@ -# How to Host a TC39 Meeting +# How to Host an In-Person TC39 Meeting -TC39 hosts six meetings per year. Three meetings are virtual and three are in-person. If you want to host a meeting, here's what is required: +TC39 hosts six plenary meetings per-year that all permit remote participation. +Ordinarily three meetings are fully remote and three are in-person, a.k.a. _"hybrid"_. +This document describes how to host an in-person meeting. -## Prior to the Meeting +## FAQ -1. Secure a meeting room and [catering](#meeting-food). -1. Note the meeting logistics in the TC39 Reflector -- address, where to park, how to get in, contact details, etc. -1. At least 2 weeks prior to the meeting, the Chair Group will post an attendance survey to the Reflector to determine an approximate attendee count. -1. Send the contacts to your registration desk so credentials can be printed early. -1. Remove any NDA signing requirements. This may be as simple as informing reception that NDAs are not required. -1. Reserve a restaurant for the social gathering. The day is flexible (either day 1 or day 2), and costs are shared with Ecma. Note that it is hard to actually get a room for 30+ people so getting started early is recommended. +### What does it take to host a TC39 meeting? -## During the Meeting +Full details are below. +The big ticket items you need budget for, and access to, are: -1. Give a short presentation on the facilities - where to find the bathroom, how to use the WiFi, etc. +- A room that can seat ~35 people for three days that has a large display to show slides and the video call. +- High quality internet, speakers, and microphones for the video call +- Catering for breakfast and lunch over the three days +- One social dinner outing for all attendees -### Meeting Layout +### How do I volunteer to host a TC39 meeting? -1. A single-layered circle or square is ideal. Lecture-style seating is discouraged. -1. Power must be available at all seats. -1. There must be an area for attendees to step away for phone calls or meetings. +Contact [the Chair Group](TC39Chairs@ecma-international.org) who will be happy to talk through the requirements. -### Meeting Food +It's wise to do this at least one year before you might consider holding the event, but don't let that hold you back volunteering at any time. +It takes time to build the schedule of in-person meetings, and usually the limiting factor is lack of volunteer hosts. +So the Chair Group are likely to be very grateful for your interest. -1. Breakfast begins when people are filing in (typically 30-60 minutes prior to the meeting start). -1. Lunch begins at around 12:00pm. -1. Coffee & tea should be available throughout the day. -1. Drinks & snacks (snacks are optional but encouraged - the afternoon break at approximately 3pm is a hungry time) -1. Please be sensitive to dietary requirements. Vegan is required. Gathering dietary requirements via Reflector is encouraged. +## Requirements -### Meeting Technology +### Timing -1. A video conferencing system (e.g. WebEx, Zoom, etc.) is required. Please ensure the system is in working order and you know how to use it. -1. Whiteboards and markers -1. Provide nametags/placards that are ideally visible to other seated delegates. This helps note takers and new members. Pre-printed ones are not necessary. Attendees can fill out their own. +Meetings are three days in the middle of the week (Tuesday, Wednesday, Thursday) to permit Monday and Friday as travel days. +The date must be committed and advertised to committee at least four months in advance, ideally longer. + +A standard schedule is: + +- 09:00 Attendees begin arriving and having breakfast +- 10:00 Formal meeting begins +- 12:00 Lunch hour begins +- 13:00 Formal meeting resumes +- 14:50 A 20-min mid-afternoon break with snacks +- 15:10 Formal meeting resumes +- 17:00 Formal meeting ends +- 18:00 All attendees have exited + +The final day (Thursday) finishes one hour earlier than this. + +### Location + +There are no hard requirements on meeting locations other than it achieving sufficient interest from potential attendees. +The Chair Group measure this using Interest Surveys that happen 3-4 months ahead of the meeting. + +We generally aim to cover the three geographies over a year: AMER, APAC, EMEA. +We aim to be accessible so proximity to an international airport helps. +Delegates appreciate venues that are close to accomodation and public transport. + +### Building Access + +- It is **essential** that guests can gain access to the meeting without being forced or asked to sign an NDA. +- Any requirements for building access must be communicated to the Chairs as early as possible. + - Requiring Photo ID is reasonable and should be advertised at least one month before the meeting. +- Ideally the check-in area should be close to the meeting room and the process should not involve needing to block on waiting for a host chaperone. + +### The Meeting Room + +- The meeting room must be for the exclusive use of TC39 over the three days and be reasonably quiet. +- There must be seating with desks for at least 35 people. +- The ideal seating layout is a three-sided U-shaped arrangement where everyone can see each other and the main display. +Other arrangements, such as lecture-style rows of seats are possible but discouraged. +- Power must be available at all seats. +- WiFi must be fast and reliable. +- There must be an area outside the room for attendees to step away for phone calls or meetings. +- Ideally there are nametags/placards at each desk visible to other attendees. + - These need not be pre-printed - attendees can write their own. + +### Audio-Visual + +We will have many people participate in the meeting remotely. +It is critical that we give these people the best possible experience so that their experience is not degraded compared to in-person attendees. +This means the AV equipment and video conferencing system must be high quality. +If internet connectivity were to fail, the meeting would need to be suspended. + +- There must be one person assigned to resolve AV issues if they arise at any time. + - It is ideal if they are an AV professional but it is not required. +- There must be at least one large main display visible to everyone for slides, etc. + - Ideally there would be two large displays: one for slides, one for showing video for remote participants. +- There must be at least 8 individual high-quality low-latency microphones and they must have a mute function. + - Ideally there would be a ratio of at least one handheld microphone for every three attendees. + - Bluetooth is discouraged. + - Ideally each seat would have a dedicated wired podium-style microphone but this is not essential. + - Hand-held microphones are preferred to lapel microphones as they are easier to share and pass around. + - Ambient whole-room microphones are not acceptable because they capture side-conversations and make it hard for remote participants to hear clearly. +- There must be amplification of in-room speakers when they use the microphone. +- The host is encouraged to provide video conferencing using Zoom or Google Meet. + - Ideally the room has at least one rear-facing camera near the front that can provide a view of all the participants. + - We encourage a tech-check to be held on the Monday immediately prior to the meeting to verify the full AV setup works. +- Whiteboards and marker pens are optional. + +### Food & Drink + +- Tea and coffee should be available throughout the day. +- Breakfast and Lunch must be provided for all attendees. +- Breakfast usually starts at 09:15. + - Most people will arrive around 09:30. + - Food does not need to be cleared when the meeting starts - it is fine to leave food out for latecomers. +- Lunch is usually at 12:00. + - The lunch location should be on-site to minimize any travel time. + - It is important this is held in an area that is reasonably exclusive to permit delegates to easily talk in smaller groups. + - Shared cafeterias are discouraged unless a designated area can be secured. +- Vegan/vegetarian options must be available. +- Individual's dietary requirements are collected on the registration form. + - Chairs will relay this information to the host two weeks before the meeting. + +### Social Dinner + +- On one evening the host will arrange a social dinner at a nearby restaurant. + - It is usually Wednesday but could be Tuesday. +- Make sure you reserve the restaurant well ahead of time. It is hard to get a room for 30+ people so getting started early is recommended. +- Ecma will share half of the cost. + - Please liase with [the TC39 Secretary](samina@ecma-international.org) to discuss this. + +### Community Event + +- We try to meet with the local JavaScript community on one evening. + - It is usually Thursday but other days, including Monday, are possible. +- Hosts are free to create their own event, but usually it is easiest for them to seek out a local Meetup group who have a pre-existing list of members. + - You are welcome to host it at the same location as the meeting or to have it somewhere reasonably close, e.g. <30 mins travel time. +- TC39 Delegates are usually happy to give talks. +- Often we end with a Q&A panel taking questions from a moderator or the audience. +- Feel free to be creative. Delegates also enjoy hearing talks from the community. +- Recording/streaming of the event is possible so long as that is communicated in advance and individuals who do not wish to be captured can opt-out. + +## Timeline of Events + +This is the general timeline of events leading up to the meeting. + +1. Potential hosts reach out to the chairs for early discussions. +1. The host books the meeting room and confirm you have budget secured. +1. The chairs will announce the meeting, normally as part of the annual schedule. +1. 3-4 months before the meeting the Chairs will conduct an Interest Survey to determine go/no-go. +1. 3 months before the meeting the host should pass all meeting logistics to the chairs so they can update the TC39 Reflector meeting post, e.g. address, where to park, how to get in, contact details, entrance criteria, etc. +1. 2 weeks before the meeting the Chairs will relay the registered attendee list including dietary requirements to the host so that they know how many people to expect. Send the contacts to your registration desk so credentials can be printed ahead of the meeting. +1. On the meeting day the host should be prepared to give a short presentation on the facilities, e.g. where to find the bathroom, how to use the WiFi, etc. diff --git a/management.md b/management.md index 230c1b7..4c6afc6 100644 --- a/management.md +++ b/management.md @@ -6,42 +6,96 @@ Although TC39 is a flat, consensus-based group, there are some particular organi ### Who is involved -TC39 co-chairs: Aki Braun (@gesa), Brian Terlson (@bterlson), Yulia Startsev (@codehag) +TC39 co-chairs: Chris de Almeida ([@ctcpip](https://github.com/ctcpip)), Rob Palmer ([@robpalme](https://github.com/robpalme)), Ujjwal Sharma ([@ryzokuken](https://github.com/ryzokuken)) #### How the chair group is chosen -Each year, the chair group is elected by the committee delegates towards the end of each year. The process is historically by consensus, but there may be a formal vote. If you are interested in being in the chair group, propose yourself for the role by the September meeting. +The chair group is elected by the committee delegates towards the end of each year. The process is historically by consensus, but there may be a formal vote. If you are interested in being in the chair group, propose yourself for the role by the September meeting. See the [Ecma Rules](https://www.ecma-international.org/memento/EcmaRules.htm), section 6.2 for formal rules regarding the chair group. -### What the group does +### What the chair group does #### Running meetings -The chair group runs the actual TC39 meetings. This involves +The chair group runs the actual TC39 meetings. This involves: -- Finalizing the agenda and arranging items during the meeting to meet committee requirements +- Finalizing the agenda and scheduling topics according to priority and constraints +- Rearranging topics during the meeting as needed - Administering the TCQ queue tool and calling on the next person to speak -- Maintaining committee decorum, including starting meetings on time, administering the timebox, and setting breaks +- Maintaining committee decorum, including starting meetings on time and adhering to timeboxes +- Calling for consensus and noting dissent +- Supervising [note-taking](./how-to-take-notes.md), topic conclusions, and summaries + +##### Facilitators + +The chair group is joined by facilitators, elected yearly, who help run the meetings as necessary. Facilitators: Justin Ridgewell ([@jridgewell](https://github.com/jridgewell)), Yulia Startsev ([@codehag](https://github.com/codehag)), Brian Terlson ([@bterlson](https://github.com/bterlson)) ##### How to help -- Make your agenda modifications, including slide links, schedule constraints, and priority ordering, ahead of the start of the TC39 meeting. -- Help develop communication tools like TCQ -- get in contact with Brian Terlson for next steps -- When contributing to committee discussion, use the queue tool to get in line to speak. Other interruptions should be limited strictly to clarifying questions. +- Make your agenda modifications, including slide links, schedule constraints, and priority ordering, ahead of agenda deadline of the TC39 meeting. +- When contributing to committee discussion, use the TCQ queue tool to get in line to speak. Interruptions should be limited strictly to points of order. +- Help with [note-taking](./how-to-take-notes.md) +- Help develop communication tools like [TCQ](https://github.com/bterlson/tcq) -- get in contact with [Brian Terlson](https://github.com/bterlson) for next steps - If you want to get involved in meeting organization further, contact a member of the chair group. -#### Organizing meeting locations +#### Organizing hybrid meeting locations Every year, the chair group organizes meeting locations for the following year. Meetings are organized within the following guidelines: - Dates: Meetings are generally held Tuesday-Thursday of the last week of odd-numbered months. On top of that formula, adjustments can be made to avoid holidays and conflicting events which are important to delegates, and to accommodate the requirements of meeting hosts. It is best to publish the meeting dates internally to committee members as soon as possible, to allow delegates to plan around the dates. -- Locations: TC39 traditionally holds some meetings each year in some in the western North America (including in the SF Bay Area and Seattle), eastern North America, and one meeting in Europe. Meeting location preferences of delegates should be reassessed each year to take into account changes in committee composition. +- Locations: TC39 traditionally holds some meetings each year in North America, Europe, and Asia. Meeting location preferences of delegates are reassessed each year to take into account changes in committee composition. - Hosts: TC39 meetings are often hosted at member organization offices, but there is no restriction for this. The chair group finds meeting hosts by asking around in committee for who wants to host a meeting, within date and location requirements. ##### How to help -The chair group would like help in all aspects of meeting planning. Contact Daniel Ehrenberg () if you're interested in getting involved. +The chair group would like help in all aspects of meeting planning. Contact the [chair group](#chair-group) if you're interested in getting involved. + +See also: [How to Host a Hybrid TC39 Meeting](./host.md) + +#### Coordinating with Ecma + +- Preparing the chairs' report to Ecma +- Representing the committee at GA and ExeCom meetings +- Nominating TC39 members for [Ecma Awards](https://ecma-international.org/ecma-fellow-awards-and-ecma-recognition-awards) + +##### How to help + +Contact the [chair group](#chair-group) to suggest nominees for Ecma Awards. + +#### Coordinating with other standards bodies, consortiums and community advocacy + +Liaise with other bodies including but not limited to: + +- Ecma + - TC53 + - TC54 +- IEEE +- IETF +- ISO +- Linux Foundation + - OpenJS Foundation + - OpenSSF +- Unicode Consortium +- W3C +- WHATWG + +Respond to non-CoC concerns being raised in public spaces such as [GitHub](https://github.com/tc39), [Discourse](https://es.discourse.group/), and [Matrix](./matrix-guide.md) + +#### Administering committee membership + +- Onboarding [delegates](./join-tc39.md) +- Assessing proposed [invited experts](./invited-expert.md) + +#### Maintaining documentation on committee processes and policies + +Like this document! + +#### Maintaining the TC39 calendar + +#### Archiving and BCDR controls + +In coordination with Ecma, backup and [archival of TC39 assets](./archival.md) #### Administrating chat rooms @@ -59,9 +113,7 @@ Moderation actions include muting a user, kicking them from a room, banning them ### Who is involved -Editor group for ES2019: Brian Terlson (@bterlson), Jordan Harband (@ljharb), Bradley Farias (@bmeck) - -Co-editors for ES2020: Jordan Harband (@ljharb), Kevin Smith (@zenparsing) +Editors: Shu-yu Guo ([@syg](https://github.com/syg)), Michael Ficarra ([@michaelficarra](https://github.com/michaelficarra)), Kevin Gibbons ([@bakkot](https://github.com/bakkot)) ### What the group does @@ -73,7 +125,7 @@ The editor group is responsible for being the final decision-maker on what lands #### Produce annual specification versions -Each year, a branch of the ECMA-262 specification is made, around late January/February, to be that year's ES20xx specification. The editor group produces this branch. Editorial changes or critical fixes are sometimes backported to this branch. After the IP opt-out period is complete, the specification is finalized and sent to the ECMA GA for ratification. +Each year, a branch of the ECMA-262 specification is made, around late January/February, to be that year's ES20xx specification. The editor group produces this branch. Editorial changes or critical fixes are sometimes backported to this branch. After the IP opt-out period is complete, the specification is finalized and sent to the Ecma GA for ratification. ### How to get involved @@ -81,6 +133,17 @@ Each year, a branch of the ECMA-262 specification is made, around late January/F - Contact an editor to join in on editor group meetings if you are a TC39 delegate - Join the editor group, which is selected by TC39 annually. +## ECMA-402 editor group + +### Who is involved + +Editors: Richard Gibson ([@gibson042](https://github.com/gibson042)), Ujjwal Sharma ([@ryzokuken](https://github.com/ryzokuken)) + +### How to get involved + +- Review PRs in the [ecma402 repository](https://github.com/tc39/ecma402/pulls) +- Join the editor group, which is selected by TC39 annually. + ## Code of Conduct Committee ### Who is involved @@ -93,4 +156,4 @@ The Code of Conduct (CoC) Committee is responsible for responding to conduct rep ### How to get involved -The CoC Committee is elected annually, in the November TC39 meeting. We're always looking for help from inside or outside of the group; please contact one of [the members](https://tc39.es/code-of-conduct/#code-of-conduct-committee) for more information. +The CoC Committee is elected by the committee delegates towards the end of each year and is always looking for help; please contact one of [the members](https://tc39.es/code-of-conduct/#code-of-conduct-committee) for more information. diff --git a/terminology.md b/terminology.md index d6d1ba4..5285ce3 100644 --- a/terminology.md +++ b/terminology.md @@ -452,6 +452,62 @@ Another example is whether an ECMAScript source file will be executed as a scrip [Import map proposal](https://github.com/WICG/import-maps#supplying-out-of-band-metadata-for-each-module) +## Override mistake + +### Definition + +> [!NOTE] +> [There is no universal consensus that this is a mistake](https://github.com/tc39/ecma262/pull/1307#issuecomment-421094561). + +Override mistake is the behavior that ECMAScript throws a TypeError (in the strict mode) for code `O[K] = ...` when `K` is a non-writable property in the prototype of `O`. + +This behavior brings compatibility issues in the ecosystem when any properties are non-writable, including when [the language adds new built-in non-writable properties to existing prototypes](https://github.com/tc39/proposal-iterator-helpers/issues/115) and when [the runtime or code on the page freezes built-ins](https://github.com/tc39/proposal-iterator-helpers/issues/286). + +### Example + +```js +'use strict'; +// environment +Object.freeze(Error.prototype); + +// an es5 library +function MyError() { + Error.call(this); + this.name = 'MyError'; +} +Object.setPrototypeOf(MyError.prototype, Error.prototype); +// TypeError: name is readonly +new MyError; +``` + +### References + +Prior efforts trying to change this: [Normative: Make non-writable prototype properties not prevent assigning to instance](https://github.com/tc39/ecma262/pull/1320) + +Some real-world examples: + +- [tc39/proposal-iterator-helpers: Web compat: The %Symbol.toStringTag% property on %Iterator.prototype% needs to be writable](https://github.com/tc39/proposal-iterator-helpers/issues/115) +- [tc39/proposal-iterator-helpers: Web incompatibility discovered in theathletic.com](https://github.com/tc39/proposal-iterator-helpers/issues/286) +- [Tracking issue for getting 3rd party packages more SES friendly](https://github.com/endojs/endo/issues/576) (some of the reports are related) + +## Hierarchy of Constituencies + +### Definition + +The idea that when differing perspectives come into conflict, our decisions ought to prioritize them in the following (descending) order: + +1. End users +2. JavaScript authors +3. JavaScript engine implementers +4. ECMAScript specification authors +5. Theoretical purity + +While this is not an explicitly adopted goal of TC39, it is a common standards concept which delegates often refer to. + +### References + +[HTML Design Principles](https://www.w3.org/TR/html-design-principles/#priority-of-constituencies) + ## Contributing to This Document Here are some tips and ideas for adding a [new definition](#definition-template) to this document.