Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Introduce section on blocking changes #29

Merged
merged 38 commits into from
Nov 18, 2020
Merged
Changes from 1 commit
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
263b29a
Introduce section on blocking changes
codehag Jul 31, 2020
3587898
addreess wording concerns and merge stage 1 blockers with stage 2/3
codehag Aug 4, 2020
91fcf67
Update index.html
codehag Aug 27, 2020
75e4631
Update index.html
codehag Aug 27, 2020
e260466
Update index.html
codehag Aug 27, 2020
c88e182
Update index.html
codehag Aug 27, 2020
6795215
Update index.html
codehag Aug 27, 2020
21f59c2
address dan's comments
codehag Sep 7, 2020
c8a0b7d
address leo's comments
codehag Sep 7, 2020
5a3e3c1
address wycats concerns
codehag Sep 7, 2020
8871ee6
Update index.html
codehag Sep 8, 2020
437f4ab
Update index.html
codehag Sep 8, 2020
56841d9
Update index.html
codehag Sep 8, 2020
bd84701
Update index.html
codehag Sep 8, 2020
3c01005
Update index.html
codehag Sep 8, 2020
4771d7e
Update index.html
codehag Sep 8, 2020
83e3dab
Update index.html
codehag Sep 8, 2020
d53f436
Update index.html
codehag Sep 8, 2020
a7338fd
Update index.html
codehag Sep 8, 2020
d82a42d
Update index.html
codehag Sep 8, 2020
fd25155
Update index.html
codehag Sep 8, 2020
82332ad
Update index.html
codehag Sep 8, 2020
4cd8844
Update index.html
codehag Sep 8, 2020
21d8ce4
address dan's comments
codehag Sep 8, 2020
d9b4de9
Update index.html
codehag Sep 8, 2020
17ba2dd
remove 'well-stated' wording and just use 'reason' as it is clearer
codehag Sep 14, 2020
7402d6f
Update index.html
codehag Sep 16, 2020
bbb0549
address shu and waldemar's feedback
codehag Sep 20, 2020
b479c20
Merge branch 'process-changes-blocking' of https://github.com/codehag…
codehag Sep 20, 2020
6977d16
Update index.html
codehag Sep 21, 2020
758a2bd
try to reframe and split into sections
codehag Sep 21, 2020
d6b44d8
Merge branch 'process-changes-blocking' of https://github.com/codehag…
codehag Sep 21, 2020
d6448de
rearrange and remove unnecessary lines
codehag Sep 21, 2020
ef6e2f5
remove redundant sentence
codehag Sep 25, 2020
cfbf570
edit down full text
codehag Nov 4, 2020
7891363
try to consolidate text further
codehag Nov 6, 2020
4d752a2
address grammatical concern and wording (typically -> sometimes)
codehag Nov 14, 2020
86556ac
remove green boxes
codehag Nov 18, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 26 additions & 0 deletions index.html
Original file line number Diff line number Diff line change
Expand Up @@ -173,6 +173,32 @@ <h2>Calls for implementation and feedback</h2>

<p>When an addition is accepted at the “candidate” (stage 3) maturity level, the committee is signifying that it believes design work is complete and further refinement will require implementation experience, significant usage and external feedback.

<h2>Blocking Advancement</h2>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I very much don't like this phrased as "blocking" - we don't block in TC39, we simply may not provide consensus. The onus is and should be conceptually on the champion to persuade the committee to explicitly assent, not on committee members to "block".

What about:

Suggested change
<h2>Blocking Advancement</h2>
<h2>Withholding Consensus for Advancement</h2>

Copy link
Contributor Author

@codehag codehag Aug 4, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We use the phrases "I am not blocking" and "are you blocking?". We don't say "are you withholding consensus" nor do we adequately ask the room for consensus. We use the mechanism of silence, which is not the same, especially not in a large room where silence is the default.

I think this is a problematic part of our process, but in the interest of writing what we do down, I (weakly) think we should write our current process rather than the ideal. I am fine with going with your suggestion bar my concerns that this doesn't accurately reflect our process or the language we use.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think I sort of resolved this but please check if it fits for you.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I agree with @codehag here, the existing practice is clearly asking for blocks?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Historically, we asked for consensus for advancement. However, we've changed to asking if anyone objects to consensus in order to ensure everyone feels comfortable speaking up.

Certainly some folks have started wording their request as "does anyone block", but I don't think that reflects the spirit of the process document, historical behavior, or a universal agreement on the form of these things in the committee. In particular, I think the important part is that the default is that nothing advances, so when things don't advance, nobody is necessarily "blocking" or "obstructing progress".

Copy link
Contributor

@syg syg Aug 4, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I disagree, I don't think the default velocity of proposals themselves is relevant at all to this section. This section is describing what might stop something from advancing when advancement is asked for. When advancement is asked for, the default is that unless someone speaks up, we assume consensus. With that default, "withholding consensus" is a mystification of what's actively being asked: does anyone block. It'd do us a disservice to describe surfacing blocking concerns with a new term-of-art sounding language that we have not historically used.


<p>During the discussion of a proposal, at any stage, any aspect may be discussed, including those outside of the scope of its current stage. A proposal’s advancement may be blocked, however the committee does not have a concept of a rejected proposal.</p>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Suggested change
<p>During the discussion of a proposal, at any stage, any aspect may be discussed, including those outside of the scope of its current stage. A proposal’s advancement may be blocked, however the committee does not have a concept of a rejected proposal.</p>
<p>During the discussion of a proposal, at any stage, any aspect may be discussed, including those outside of the scope of its current stage. A proposal’s advancement may not have consensus, however the committee does not have a concept of a rejected proposal.</p>

also this isn't entirely true; the committee has rejected proposals - see https://github.com/tc39/proposals/blob/master/inactive-proposals.md for the ones labelled "rejected".

Copy link
Contributor Author

@codehag codehag Aug 4, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

How do we draw the line between withdrawn, stalled and rejected? We do not identify in the notes that these proposals are rejected. They are recorded as having something along the lines of "not confident that all issues can be addressed" and "Some members of the committee are strongly opposed to this particular syntax change" or simply as "no advance". It looks like the entries in the inactive proposals list are opinionated rather than reflecting the notes. It would be more accurate to say that these are stalled, or withdrawn. We should probably be more strict in how we record things in the inactive proposals document.

The closest we have to a rejection is this one which was blocked as "Adding new features, in new browsers, to fix features in old browsers, is not what we should be doing." -- We could say that this is a rejection, but by a single person, not from the committee as a whole. As such, this could equally be seen as not having consensus as per the last comment. We have had similar blocks in the past that eventually changed. I would say that it would be more accurate to update "inactive proposals" to correctly reflect the notes in question.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's also possible the notes aren't accurate there; for example, I was quite explicitly told that Error.isError was rejected when presenting it - I marked "withdrawn" since there was an alternative path to reach my goals. Similarly, Set/Map toJSON was also rejected.

In general, I think a lack of consensus for stage 1, when there's no path forward for the committee to want to spend further time on it, feels like "rejected" is the right word to me.


<p>To block the advancement of a proposal, a reason must be given and it must be discussed in committee. If no reason is given, the block is void for vagueness. If a delegate needs more time to consider aspects of a proposal, they may request a delay on the decision, or allow conditional advancement.</p>

<p>Conditional advancement is time limited, giving the person raising the block time to discuss with the champions and authors about their concerns. If a proposal has conditional advancement, and issue is opened on the proposal’s repository. If the issue is resolved, the proposal automatically reaches the next stage without further discussion by the committee. If the issue cannot be resolved, the proposal does not advance.</p>

<p>Blockers need to be well described and recorded within the committee, so that in future meetings and future proposals we can learn from failed proposals, and have a good record of why they failed.</p>

<p>Regardless of stage, the following types of blockers require the committee to reach consensus in order for the block to be valid: Blockers without a given reason, Blockers which have been discussed at length by the committee and were resolved.</p>

<p>Blocking criteria for reaching stage 1 are limited. Proposals which have fulfilled the acceptance criteria may not be blocked from reaching stage 1 unless there has been a very similar proposal that has already been through the process and has not advanced. In this case, the author(s) and champion(s) should be directed to the appropriate record of the previous proposal, so that they can revise their approach. The reason for this restricted ability to block is so that proposals have the necessary time to develop, and the committee has the necessary time to consider them.</p>
Copy link
Contributor Author

@codehag codehag Jul 31, 2020

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@waldemarhorwat you had a comment here, that blocking criteria for stage 1 should not be limited. @bakkot had a similar, wider comment that blocking should not be too strictly defined.

My rationale here is, stage 1 acceptance signifies that "this is not a waste of the champion's/authors time" -- but also that it isn't at a point that the committee considers it a problem worth solving. Some issues may seem not very important at the moment, but could become more important as they are explored further. I think the problem with what I wrote here initially, is that it limits blocking to proposals that have been presented before. This is wrong, how about instead

Suggested change
<p>Blocking criteria for reaching stage 1 are limited. Proposals which have fulfilled the acceptance criteria may not be blocked from reaching stage 1 unless there has been a very similar proposal that has already been through the process and has not advanced. In this case, the author(s) and champion(s) should be directed to the appropriate record of the previous proposal, so that they can revise their approach. The reason for this restricted ability to block is so that proposals have the necessary time to develop, and the committee has the necessary time to consider them.</p>
<p>Blocking criteria for reaching stage 1 are limited. Proposals which have fulfilled the acceptance criteria may be blocked from reaching stage 1 if there are significant technical or foundational issues, or there has been a very similar proposal that has already been through the process and has not advanced for reasons that are not addressed in the new proposal. In the former case, the author(s) and champion(s) should have as an outcome the reason for the block. In the latter case, the author(s) and champion(s) should be directed to the appropriate record of the previous proposal, so that they can revise their approach. The reason for this restricted ability to block is so that proposals have the necessary time to develop, and the committee has the necessary time to consider them.</p>

This is why I was thinking that stage 1 blocking should be limited. I am open to discuss others ideas about this, this has been my model of it.

Additionally (and I may have overdone it) I am looking towards the "elide the process" clause from our document as a way to keep these "loose". So we should think of these blocking recommendations as "main path", and elide the process for exceptions. This was to @bakkot's comment regarding flexibility

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What is the problem we're trying to solve by making stage 1 blocking criteria more formal?

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I, and a number of other folks I've chatted with, don't agree with either the old or the new changes. Both are taking as a given that we should severely limit blocking criteria for stage 1. I don't see consensus that we should.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ok, based on this feedback, I will remove the text describing stage 1, and merge it with the "unlimited blocking" of stage 2 and stage 3.

The goal of writing this criteria was to communicate better the convention that we have at committee. We very rarely block at stage 1. I am not sure how to get it across, it seems to vary by proposal, but that could be done in a second iteration, if this becomes and issue. I am fine with stage 1 being unlimited.


<p>Blocking criteria for reaching stage 2 and 3 are not limited. Proposals which have fulfilled the acceptance criteria may be blocked from advancement for any well stated reason.</p>

<p>Blocking criteria for reaching stage 4 are limited. Proposals which have fulfilled the acceptance criteria may not be blocked from advancement unless the block is related to implementation experience or the block identifies an issue or information which has not previously been discussed by the committee. The reason stage 4 blocking is limited is to allow implementers to invest in implementations, and maintain the significance of stage 3 in the process.</p>
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+1


<h2>Reverting to Earlier Stages</h2>

<p>At any point in the process, a proposal may be downgraded in its stage in the case that a well stated blocker identifies an earlier stage issue that was not considered. This process requires an issue to be raised, and committee consensus to downgrade to a more appropriate stage.</p>

<h2>Scope of responsibility for Champions</h2>

<p>Champions are trusted to resolve smaller issues on their own without reference to the committee. Such issues are `nits` and can be raised at committee or as issues on github. Examples of `nits` are issues of taste such as naming.</p>

<h2>Test262 tests</h2>

<p>During stage 3, <a href="https://github.com/tc39/test262">test262</a> tests should be authored and submitted via pull request. Once it has been appropriately reviewed, it should be merged to aid implementors in providing the feedback expected during this stage.
Expand Down