Change:
SHOULD be made to avoid assigning the corresponding value to an unrelated operation. <del> New registrations are advised to provide the following information: </del> <ins> In addition to common fields as described in iana-policy, permanent registrations in this registry MUST include the following fields: </ins> A symbolic name for the setting.  Specifying a setting name is optional. <del> The 62-bit code assigned to the setting. </del> <ins> The value of the setting unless otherwise indicated.  A default SHOULD be the most restrictive possible value. </ins> <del> An optional reference to a specification that describes the use of the setting. The value of the setting unless otherwise indicated.  SHOULD be the most restrictive possible value. The entries in the following table are registered by this document. </del> <ins> The entries in iana-setting-table are registered by this document. </ins> Additionally, each code of the format "0x1f * N + 0x21" for integer values of N (that is, "0x21", "0x40", ..., through "0x3FFFFFFFFFFFFFFE") MUST NOT be assigned by IANA. <del> 11.4. </del> <ins> 11.2.3. </ins> This document establishes a registry for HTTP/3 error codes.  The <del> "HTTP/3 Error Code" registry manages a 62-bit space.  The "HTTP/3 Error Code" registry operates under the "Expert Review" policy RFC8126. </del> <ins> "HTTP/3 Error Code" registry manages a 62-bit space.  This registry follows the QUIC registry policy; see iana-policy.  Permanent registrations in this registry are assigned using the Specification Required policy RFC8126, except for values between 0x00 and 0x3f (in hexadecimal; inclusive), which are assigned using Standards Action or IESG Approval as defined in Section 4.9 and 4.10 of RFC8126. </ins> Registrations for error codes are required to include a description of the error code.  An expert reviewer is advised to examine new registrations for possible duplication with existing error codes. Use of existing registrations is to be encouraged, but not mandated. <del> New registrations are advised to provide the following information: </del> <ins> In addition to common fields as described in iana-policy, permanent registrations in this registry MUST include the following fields: </ins> A name for the error code.  Specifying an error code name is optional. <del> The 62-bit error code value. A brief description of the error code semantics, longer if no detailed specification is provided. </del> <ins> A brief description of the error code semantics. </ins> <del> An optional reference for a specification that defines the error code. The entries in the following table are registered by this document. </del> <ins> The entries in the iana-error-table are registered by this document. </ins> <del> 11.5. </del> <ins> 11.2.4. </ins> This document establishes a registry for HTTP/3 unidirectional stream types.  The "HTTP/3 Stream Type" registry governs a 62-bit space. <del> This space is split into three spaces that are governed by different policies.  Values between "0x00" and 0x3f (in hexadecimal) are assigned via the Standards Action or IESG Review policies RFC8126. Values from "0x40" to "0x3fff" operate on the Specification Required policy RFC8126.  All other values are assigned to Private Use RFC8126. </del> <ins> This registry follows the QUIC registry policy; see iana-policy. Permanent registrations in this registry are assigned using the Specification Required policy RFC8126, except for values between 0x00 and 0x3f (in hexadecimal; inclusive), which are assigned using Standards Action or IESG Approval as defined in Section 4.9 and 4.10 of RFC8126. </ins> <del> New entries in this registry require the following information: </del> <ins> In addition to common fields as described in iana-policy, permanent registrations in this registry MUST include the following fields: </ins> A name or label for the stream type. <del> The 62-bit code assigned to the stream type. A reference to a specification that includes a description of the stream type, including the layout semantics of its payload. </del> Which endpoint on a connection may initiate a stream of this type. Values are "Client", "Server", or "Both". <ins> Specifications for permanent registrations MUST include a description of the stream type, including the layout semantics of the stream contents. </ins> The entries in the following table are registered by this document. Additionally, each code of the format "0x1f * N + 0x21" for integer

Discussion:
This overhauls the system for IANA registries to use a unified scheme that allows provisional registration. This seems pretty complicated in terms of nailing down all the corner cases, but it is fairly simple in practice: Provisional registration is easy, it only requires that the requester provide contact information and (ideally) the codepoint they want. They could provide more, but at their discretion. Permanent registration requires that you fill out the fields. Experts are required for both, but only really to prevent spam. We have a few more requirements for permanent registrations of frame types, but that is more for the purposes of advice, because sending an new frame leads to protocol errors if you haven't agreed to that in the past. I've sketched out a strawman for a codepoint reclamation process. That advises that experts try to find some use of the codepoint. There is a date on registrations that can guide the selection of codepoints to reclaim, but these can be updated any time by anyone who wants to keep the registration "live". I wanted to sketch this out for transport first, but I intend to update this PR with changes to the HTTP draft if these policies are agreeable.
Could contact information be replaced with a domain name. There is much abuse of contact information and domain names can have private contact information? Also, maintaining an email address is harder over time. I realize the field contact field doesn't say email, but that is sort of implied.
You can specify this so that IANA collects the information and thus can follow up if needed, but where the registry does not display this information. I understand that the authors of RFC 8126 are working on a bis that will make this much more common, if not the default. You can also split the contact information from the change controller, if you want to have, say Joe be the contact but Example Corp be the change controller. There's also a presumption that if the change controller is gone that the change controller for the entire registry (usually the IESG) can make a determination of what to do in the case that a change is needed. For many registries this amounts to "do nothing" since there is no scarcity of code points. In the case of scarcity, that's how you get re-use when the change controllers are gone.

Ted
I did that intentionally, mostly just to avoid the wordy reference. I'm happy to defer to you on that. (Julian can say "told you so" again if he likes :)
We have nice registration policies for everything, but that doesn't serve for experimentation very well, because those experiments can clobber each other. See also RFC 6648. The proposal here is to allow for permanent registrations (under the same rules we have now), but to allow FCFS provisional registrations so that we avoid collisions when people start experiments that could be widely deployed. We should also encourage people to choose random values rather than sequential ones.
Does resolve this?
As of , transport parameter identifiers are 16bit integers, with a registry where uses the is reserved for experimentation While keeping Specification Required makes sense for a good chunk of the registry space, I think there will be many experiments that are conducted before a full specification is written (some already exist today and I expect there to be many many more once the protocol is standardized). However, those experiments only have 256 values to play with, and that is bound to cause collisions and headaches down the road. I think the simplest solution to this problem is to use variable length integers for transport parameter identifiers. The TLS presentation language doesn't support them but since we already use VLIs for the values of several transport parameters we're no longer bound by the TLS presentation language. I think there was also support for doing this when it was discussed on , but that issue was closed when the values were changed to VLI with , without changing the identifiers. I'm happy to write the PR if this issue gathers support.
You aren't the first to suggest this one. Let's make sure we at least discuss this directly. We did discuss this in the context of the issues that you cite and decided not to, but that was never the central question. From our perspective, this isn't a significant change to code.
The same for us, too. Am I understanding correctly that the concern here is that extensions of TLS structures tend to use uint16_t as their type identifiers, and that the reusable parser might be constrained to that design pattern?
I thought that this might be the case originally, but it turns out that the blob for transport parameters is generated by QUIC code in mostly all of the cases I have seen.

If there is someone out there who is relying on passing a TLS stack a structured grammar and letting the TLS stack perform serialization, then we might want to just leave this alone.
Thank you for the clarification. We do use the TLS stack to encode / decode the transport parameters, therefore we do want see the TLS grammar-based design being preserved. The reason we do not mind the extension type being a varint is because our codec is flexible enough to handle that. URL
We should definitely do something to increase the number of experimentation codepoints from 256. Changing to a varint sounds good. If not, then we should allocate more of the space(ie: [0xf000 - 0xffff]) to experiments.
I agree with NAME and I don't think we need to go varint here, that seems like a bit of an overkill. How about reserving 4096 codepoints for spec required, and leaving the rest (2^16 - 2^12 = 61440) for experimentation: [0x0000 - 0x0fff] uses the RFC8128 Specification Required policy [0x1000 - 0xffff] is reserved for experimentation
Apart from the fact that we want to limit changes at this stage, are there arguments against going varint here? It feels pretty odd that many transport parameters are TLVs where T and L are 16bit and V is varint.
I don't have much of an argument here besides the general principle that we shouldn't provide more flexibility than is necessary. I don't think it's odd that T is fixed-length while the V is varint, FWIW. If no implementations are bothered by the change to varint, then it's a bit of a bikeshed. Let's see if other implementers are bothered.
Split in two ? what the same size ? Don't forget there is also GREASE TP now
From looking at all the integer fields in QUICv1, it looks like at this point everything is a varint except the versions, packet numbers, connection ID lengths (which all have valid reasons for their lengths), and the transport parameter identifier and transport parameter lengths. Switching transport parameters to QUIC format (as opposed to TLS presentation language) feels fitting to me, saves bytes on the wire, and will facilitate innovation down the road.

I'm happy to make transport parameter identifier a varint. NAME Are you(implicitly) suggesting that transport parameter lengths should be varint as well?
I think so, yes. If we're changing implementations might as well make both changes at once (assuming no one wants one of them to be varint but not the other).
I'd be opposed to changing the transport parameter lengths to varints, as that means departure from the TLS notation that we use for defining TPs. It's very different from changing the IDs to varints, which is just changing the type of a particular variable. IIRC, we discussed if we should switch to a different notation, and decided to go with the TLS-based design. At least I have built (or maintained) code based on that.
I agree with Kazuho here: splitting it in half would make plenty of room
I'm in favor of the change that NAME is suggesting in . There's no reason for us to use TLS presentation language, if anything, it just makes the spec harder to read for people who are unfamiliar with the TLS presentation language (if I remember correctly, this came up multiple times on issues here and / or on Slack).
Remember the experience with the X-Options in SMTP or HTML? Do we really want to replicate that?
Discussed in Cupertino. NAME to open a new Editorial issue to only replace the TLS syntax with something easier to understand. NAME to also do a Design PR to shuffle the assigned ranges in the registry.
As discussed in Cupertino, I have closed previous PR and replaced it with: editorial-only PR IANA policy PR
I think that the RFC 6648 lessons need to be considered carefully here. I think that it would be better to use a combination of random selection and provisional registration as a means of handling experiments. Random selection means that we end up colliding with very low probability; provisional registration ensures that registrations are protected. Making the private use space larger does neither. I would prefer to instead remove the private use space completely.
In lots of places, you reference {{iana-policy}} for things that aren't actually described there -- it just contains a pointer to the QUIC spec for the policy. It might be better to point directly to the QUIC spec in those places.

(Though given that the section number in QUIC could potentially change, it's also a reasonable argument that we want to have one place to update.) Just want to make sure that's intentional, rather than a copy-paste of the policy from the QUIC registries.