Newsgroups: php.internals Path: news.php.net Xref: news.php.net php.internals:128638 X-Original-To: internals@lists.php.net Delivered-To: internals@lists.php.net Received: from php-smtp4.php.net (php-smtp4.php.net [45.112.84.5]) by lists.php.net (Postfix) with ESMTPS id B2BAA1A00BC for ; Thu, 4 Sep 2025 18:17:54 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=php.net; s=mail; t=1757009785; bh=Rtt8Qu52LXAP7+teE7U5ChoRK7grgsSsWmEMsnM+uWE=; h=Date:From:To:Cc:In-Reply-To:References:Subject:From; b=nVPqyyLZAGLWj+za2h7/LpDj0/OLOTGf4fEranOWt7S4V8+yEa4bV6rrmXKmwATX/ SZRR5gyBRytGgoW/VwIPv0TXRjYnL5WRu8Y9a5GaWEcZpQXCKYrJAMhV0MMpAXDnuQ 2ygIO+MJQQy9JMuZptOfJmtg8U1ioyWvRxSNvz/FWcC7T5mfCbikyasAvMDK4cF3dB fKVNe68WP5PCtopdpQNky8lLIEQ9S+7MoPMtTqpqR307ZNbopGG41++kyKplGWY/Ub iIXvWGN7ZEq1VJ87vZ4aWIzotKlShodFz9E7PG3o4XE7WSvsjmllNPS2IqGBK+Ysv7 KZo1C4W41z3qg== Received: from php-smtp4.php.net (localhost [127.0.0.1]) by php-smtp4.php.net (Postfix) with ESMTP id 1B5D01801DF for ; Thu, 4 Sep 2025 18:16:24 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 4.0.1 (2024-03-25) on php-smtp4.php.net X-Spam-Level: X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,DMARC_MISSING,HTML_MESSAGE, RCVD_IN_DNSWL_LOW,SPF_HELO_PASS,SPF_PASS autolearn=no autolearn_force=no version=4.0.1 X-Spam-Virus: No X-Envelope-From: Received: from fout-a2-smtp.messagingengine.com (fout-a2-smtp.messagingengine.com [103.168.172.145]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by php-smtp4.php.net (Postfix) with ESMTPS for ; Thu, 4 Sep 2025 18:16:23 +0000 (UTC) Received: from phl-compute-05.internal (phl-compute-05.internal [10.202.2.45]) by mailfout.phl.internal (Postfix) with ESMTP id B1A50EC0340; Thu, 4 Sep 2025 14:17:51 -0400 (EDT) Received: from phl-imap-05 ([10.202.2.95]) by phl-compute-05.internal (MEProxy); Thu, 04 Sep 2025 14:17:51 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bottled.codes; h=cc:cc:content-type:content-type:date:date:from:from :in-reply-to:in-reply-to:message-id:mime-version:references :reply-to:subject:subject:to:to; s=fm2; t=1757009871; x= 1757096271; bh=Rtt8Qu52LXAP7+teE7U5ChoRK7grgsSsWmEMsnM+uWE=; b=b aCrBwtv7jbWzmsh88URqAa1j/p23s+sJ1cKEX6RZePFl3/itOFTDFvJbmAMDcgHs hxSUwdkjTIbUO54fAQRs21SPQkh/A7QOYXl/2IrJHKaXXCJBtjYhLyXBm0H3F+al mKKRjLBTo+3ocAUzli89iLhPccgU6k4VFwWjCM2fqLIsLsFF+QJ/2DGv5tvjWeJ1 IJp6OtTA98VXl1G9+HyzsgBBTW6rRXb1LwL/1YrlGzVcKT1E1vWe2AEE5Gjkc2Ew SmvxjU+ff0/cLFtvY+9sAPEwWLUqAc/IvekqeY65MgdfWW65VdkLx/hhWBg6Bkk/ sfxv5gvJpHFcRmmFYAayA== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:cc:content-type:content-type:date:date :feedback-id:feedback-id:from:from:in-reply-to:in-reply-to :message-id:mime-version:references:reply-to:subject:subject:to :to:x-me-proxy:x-me-sender:x-me-sender:x-sasl-enc; s=fm1; t= 1757009871; x=1757096271; bh=Rtt8Qu52LXAP7+teE7U5ChoRK7grgsSsWmE MsnM+uWE=; b=kj17593FultK05sIHMnPd22DKApR6RlZrWzQsyRFMIpdV8FBbXt 2lLAhQZP+xTWEVDbvVDOiHYhRgRQH8pOu77OM7iynR5tb63cWrrabGvgyl2M2rL+ S17pF5i1G4RIALJTaB9eO51EW1DcmQmT9h1fhbnV1PFvwJgdC7BEpergOQkOoRtd E+XasLXUE4OWDKP4aXe7EPIiNuD2t0DFOAw1WVRpuI0PvaG9EezbVq2ndZoBcFJB 8OTg11biHdXX0GfQGNaPYf7k4icdXubEV5gRfl1nsBIZQeDkL9pTSwCQKsY7aW8g BdyXvRznPYVeju7Sfan6tl2dqiae58UdTGw== X-ME-Sender: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgeeffedrtdeggdeijeduucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfurfetoffkrfgpnffqhgenuceurghi lhhouhhtmecufedttdenucesvcftvggtihhpihgvnhhtshculddquddttddmnecujfgurh epofggfffhvfevkfgjfhfutgesrgdtreerredtjeenucfhrhhomhepfdftohgsucfnrghn uggvrhhsfdcuoehrohgssegsohhtthhlvggurdgtohguvghsqeenucggtffrrghtthgvrh hnpeeiueethedvvdefjefhgfeiheelheehtdfhfeekjefflefgvedvkeduteejjedttden ucevlhhushhtvghrufhiiigvpedtnecurfgrrhgrmhepmhgrihhlfhhrohhmpehrohgsse gsohhtthhlvggurdgtohguvghspdhnsggprhgtphhtthhopeefpdhmohguvgepshhmthhp ohhuthdprhgtphhtthhopehtihhmsegsrghsthgvlhhsthhurdgsvgdprhgtphhtthhope hlrghrrhihsehgrghrfhhivghlughtvggthhdrtghomhdprhgtphhtthhopehinhhtvghr nhgrlhhssehlihhsthhsrdhphhhprdhnvght X-ME-Proxy: Feedback-ID: ifab94697:Fastmail Received: by mailuser.phl.internal (Postfix, from userid 501) id 366FE182007E; Thu, 4 Sep 2025 14:17:51 -0400 (EDT) X-Mailer: MessagingEngine.com Webmail Interface Precedence: list list-help: list-post: List-Id: x-ms-reactions: disallow MIME-Version: 1.0 X-ThreadId: AyNXb5nLmdzs Date: Thu, 04 Sep 2025 20:17:30 +0200 To: =?UTF-8?Q?Tim_D=C3=BCsterhus?= Cc: "Larry Garfield" , "php internals" Message-ID: <73866cf1-6ac9-4e30-9273-0634cea43352@app.fastmail.com> In-Reply-To: <7ab7580d355569eed3d69aec92dacd4c@bastelstu.be> References: <53cdbf5b-7c6e-4ba1-9987-332634cab527@bastelstu.be> <4624748F-0C62-4E3C-81D0-5CDC56FEC55F@nicksdot.dev> <68c44ae3-8e1b-419d-9c30-906b9c2d5a81@app.fastmail.com> <0f32efec-b6c9-4ec0-96bf-297da722aaf1@bastelstu.be> <7ab7580d355569eed3d69aec92dacd4c@bastelstu.be> Subject: Re: [PHP-DEV] [RFC] Clarify discussion and voting period rules Content-Type: multipart/alternative; boundary=47af7c0f1b3b430eab6484b7810ab03c From: rob@bottled.codes ("Rob Landers") --47af7c0f1b3b430eab6484b7810ab03c Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On Thu, Sep 4, 2025, at 15:48, Tim D=C3=BCsterhus wrote: > Hi >=20 > Am 2025-09-04 00:07, schrieb Rob Landers: > > I=E2=80=99m still trying to understand the problem this language is = solving,=20 > > can you help me out here? It is incredibly precise and detailed, but=20 > > gets into over-specification, IMHO. Traditionally, PHP policy has=20 > > leaned towards principle and illustrative examples over exact=20 > > prescriptions. Is this intended to shift away from that approach? >=20 > The language is trying to solve ambiguity. The current phrasing of the=20 > policy is full of words like =E2=80=9Cmaybe=E2=80=9D, =E2=80=9Cmight=E2= =80=9D, =E2=80=9Cshould=E2=80=9D, which leave=20 > room for interpretation. As I have mentioned in my reply to Thomas, a=20 > (formal) policy is intended to to allow cut discussion short in cases = of=20 > disagreement by allowing someone to point towards the policy and say:=20 > =E2=80=9CThe policy we agreed on *clearly* specifies that X, but this = rule was=20 > violated. I object with proceeding until this violation is resolved.=E2= =80=9D.=20 > It should not possible for the other side to =E2=80=9Cwell actually it= could=20 > also mean Y=E2=80=9D, because they disagree. As an example the current= policy=20 > states: >=20 > > There'd be a minimum of 2 weeks between when an RFC that touches the=20 > > language is brought up on this list and when it's voted on is requir= ed.=20 > > Other RFCs might use a smaller timeframe, but it should be at least = a=20 > > week. >=20 > Specifically =E2=80=9COther RFCs=E2=80=9D (i.e. RFCs that do not touch= the language,=20 > which is not actually defined) =E2=80=9Cmight=E2=80=9D (this probably = should read =E2=80=9Cmay=E2=80=9D)=20 > use a =E2=80=9Csmaller timeframe=E2=80=9D that =E2=80=9Cshould be at l= east a week=E2=80=9D (i.e. it may=20 > also be 2 hours). In other words, that policy is completely useless to=20 > resolve any cases of disagreement, since it allows basically anything. So, someone could create an RFC, saying "Jo ElePHant, III" is "President= of PHP", set the voting period for exactly one minute, vote on it thems= elves, and close the vote, and whomever "Jo ElePHant, III" is, would hav= e to be the President of PHP before the announcement email is even deliv= ered to the entire list? Somehow I doubt this would actually fly, despite "maybe, technically", b= eing within the rules. > > Further, how will this be enforced? Currently, if I understand=20 > > correctly, this is generally enforced by the CoC and it doesn=E2=80=99= t seem=20 > > equipped to deal with "your vote ended 1 hour too early" type=20 > > situations. >=20 > This is a good point that indeed should be written down in some way. I=20 > generally expect everyone to act in good faith, i.e. to only violate t= he=20 > policy by accident and to immediately remediate any issues once made=20 > aware of the mistake. Violations of the cooldown period should general= ly=20 > be recognized when pre-announcing the vote and the RFC author should=20 > then acknowledge the violation in a reply, wait a little more and then=20 > pre-announce the vote at a later point. Violations of the=20 > pre-announcement period should be recognized when starting the vote an= d=20 > the RFC author should then acknowledge the violation, cancel the vote=20 > and restart it after a new pre-announcement (with a new title to clear=20 > out any votes). The Wiki tracks the time of voting, so any votes cast=20 > after the voting period has ended would be ignored (which would only=20 > really matter in cases of close votes). I think the more you make a policy pedantic, the easier it is to play pe= dantic games. I had a couple of hours to sit on the train and think thro= ugh some loopholes in the current proposed text: 1. The 336 hours is oddly specifc. It also begs the question: "what abo= ut leap seconds?" Could someone cause an entire revote simply by pointin= g out that the vote closed one second earlier than 336 hours because one= of those hours had one less second? Does it matter? Perhaps saying "~33= 6 hours" to drive the intent home without saying "exactly" that amount o= f time? 2. Just about any change could be construed as an "obvious typo" or "ed= itorializing" A stronger definition could be "any change that clarifies = but does not alter the meaning (e.g. "frrm" -> "from" but not "form" -> = "from"), while changes that affect APIs, semantics, or options are never= typos". Even then, someone could just create a stub and simply argue th= at all their edits are clarifying the stub... so this one will be tricky. 3. Forbidding starting/ending on Dec 17->Jan 10 will probably backfire.= It would behoove someone to schedule a voting start on Dec 16, so that = it would end on Jan 11. Albeit, that is longer than 2 weeks, but it's sh= orter than waiting until Jan 11 to start a vote... arguably, this is pro= bably worse than what the rule intends to solve. If the concern is holid= ay churn (heh, uninitentional rhyming), it might be better to forbid *st= arting* during that period, but let existing votes play out as normal (a= nd maybe picking a sooner date). 4. The official start and threading is ambiguous. For example, I can ad= d a coauthor on my RFC. Then "announce" the RFC by both authors but only= have discussions in the later thread. I could move to a vote after two = weeks, no matter what is happening in another "unofficial" thread. 5. It says that you can't add or change a voting widget, but you can re= move them freely without triggering a vote reset. 6. It might be a good idea to add "all durations are measured in UTC ca= lendar time, ignoring leap seconds". One could argue that announcing the= vote at 11:59:59 Monday and starting the vote at 00:00:01 Wednesday wou= ld satisfy the 2 day/48 hour rule by arguing time zone shenanigans. 7. If a vote ends at 15:09, does it actually ends at 15:09:00, or will = votes be accepted until 15:09:59.99? 8. vote extension hack: can someone change a vote end-date after the vo= te has already started? Thus if the results are unfavorible, can I simpl= y just extend the voting period until I get the results I want, literall= y increasing it by 24 hours every day until it passes by simply stating = "I am still on holiday"? >=20 > If the RFC author follows through with a vote, despite being in=20 > violation of the rules and being made aware of it, the result of the=20 > vote would be void. I'd say that if no one points out the violation=20 > after a =E2=80=9Creasonable period of time=E2=80=9D has passed, the vi= olation is=20 > considered to not have occurred (i.e. it should not be possible to voi= d=20 > a vote at day 13 of the voting period). >=20 > Best regards > Tim D=C3=BCsterhus >=20 The new rules could allow some creative people to bypass the cooldown pe= riod altogether: 1. Someone could create an empty RFC, and announce it. Then "clarify" a= nd "editorialize" the RFC (easier to do with a coauthor to back you up) = minutes before the two weeks elapse, then call a vote, with most people = having long dismissed the empty RFC as junk. 2. You could simply create a v2 of an RFC minutes/days after the failed= vote and go straight to a vote; claiming the cooldown started from the = original RFC. My point, hopefully, is that the more specific you are, the more wiggle = room people actually have both to attack and defend. At the end of the d= ay, this is a people problem, not a policy problem. It's one thing to cl= arify, but another to specify. =E2=80=94 Rob --47af7c0f1b3b430eab6484b7810ab03c Content-Type: text/html; charset=utf-8 Content-Transfer-Encoding: quoted-printable
On Thu, Sep = 4, 2025, at 15:48, Tim D=C3=BCsterhus wrote:
Hi

Am 2025-09-04 = 00:07, schrieb Rob Landers:
> I=E2=80=99m still trying to u= nderstand the problem this language is solving, 
> can= you help me out here? It is incredibly precise and detailed, but <= /div>
> gets into over-specification, IMHO. Traditionally, PHP po= licy has 
> leaned towards principle and illustrative = examples over exact 
> prescriptions. Is this intended= to shift away from that approach?

The language= is trying to solve ambiguity. The current phrasing of the 
policy is full of words like =E2=80=9Cmaybe=E2=80=9D, =E2=80=9Cmight=E2= =80=9D, =E2=80=9Cshould=E2=80=9D, which leave 
room for i= nterpretation. As I have mentioned in my reply to Thomas, a 
<= div>(formal) policy is intended to to allow cut discussion short in case= s of 
disagreement by allowing someone to point towards t= he policy and say: 
=E2=80=9CThe policy we agreed on *cle= arly* specifies that X, but this rule was 
violated. I ob= ject with proceeding until this violation is resolved.=E2=80=9D. 
It should not possible for the other side to =E2=80=9Cwell actu= ally it could 
also mean Y=E2=80=9D, because they disagre= e. As an example the current policy 
states:
> There'd be a minimum of 2 weeks between when an RFC th= at touches the 
> language is brought up on this list = and when it's voted on is required. 
> Other RFCs migh= t use a smaller timeframe, but it should be at least a 
&= gt; week.

Specifically =E2=80=9COther RFCs=E2=80= =9D (i.e. RFCs that do not touch the language, 
which is = not actually defined) =E2=80=9Cmight=E2=80=9D (this probably should read= =E2=80=9Cmay=E2=80=9D) 
use a =E2=80=9Csmaller timeframe= =E2=80=9D that =E2=80=9Cshould be at least a week=E2=80=9D (i.e. it may&= nbsp;
also be 2 hours). In other words, that policy is complet= ely useless to 
resolve any cases of disagreement, since = it allows basically anything.

So, = someone could create an RFC, saying "Jo ElePHant, III" is "President of = PHP", set the voting period for exactly one minute, vote on it themselve= s, and close the vote, and whomever "Jo ElePHant, III" is, would have to= be the President of PHP before the announcement email is even delivered= to the entire list?

Somehow I doubt this would= actually fly, despite "maybe, technically", being within the rules.

>= ; Further, how will this be enforced? Currently, if I understand 
> correctly, this is generally enforced by the CoC and it do= esn=E2=80=99t seem 
> equipped to deal with "your vote= ended 1 hour too early" type 
> situations.

This is a good point that indeed should be written down = in some way. I 
generally expect everyone to act in good = faith, i.e. to only violate the 
policy by accident and t= o immediately remediate any issues once made 
aware of th= e mistake. Violations of the cooldown period should generally 
be recognized when pre-announcing the vote and the RFC author shou= ld 
then acknowledge the violation in a reply, wait a lit= tle more and then 
pre-announce the vote at a later point= . Violations of the 
pre-announcement period should be re= cognized when starting the vote and 
the RFC author shoul= d then acknowledge the violation, cancel the vote 
and re= start it after a new pre-announcement (with a new title to clear 
out any votes). The Wiki tracks the time of voting, so any vote= s cast 
after the voting period has ended would be ignore= d (which would only 
really matter in cases of close vote= s).

I think the more you make a po= licy pedantic, the easier it is to play pedantic games. I had a couple o= f hours to sit on the train and think through some loopholes in the curr= ent proposed text:

  1. The 336 hours is oddly sp= ecifc. It also begs the question: "what about leap seconds?" Could someo= ne cause an entire revote simply by pointing out that the vote closed on= e second earlier than 336 hours because one of those hours had one less = second? Does it matter? Perhaps saying "~336 hours" to drive the intent = home without saying "exactly" that amount of time?
  2. Just about an= y change could be construed as an "obvious typo" or "editorializing" A s= tronger definition could be "any change that clarifies but does not alte= r the meaning (e.g. "frrm" -> "from" but not "form" -> "from"), wh= ile changes that affect APIs, semantics, or options are never typos". Ev= en then, someone could just create a stub and simply argue that all thei= r edits are clarifying the stub... so this one will be tricky.
  3. F= orbidding starting/ending on Dec 17->Jan 10 will probably backfire. I= t would behoove someone to schedule a voting start on Dec 16, so that it= would end on Jan 11. Albeit, that is longer than 2 weeks, but it's shor= ter than waiting until Jan 11 to start a vote... arguably, this is proba= bly worse than what the rule intends to solve. If the concern is holiday= churn (heh, uninitentional rhyming), it might be better to forbid = starting during that period, but let existing votes play out as n= ormal (and maybe picking a sooner date).
  4. The official start and = threading is ambiguous. For example, I can add a coauthor on my RFC. The= n "announce" the RFC by both authors but only have discussions in the la= ter thread. I could move to a vote after two weeks, no matter what is ha= ppening in another "unofficial" thread.
  5. It says that you can't a= dd or change a voting widget, but you can remove them freely without tri= ggering a vote reset.
  6. It might be a good idea to add "all durati= ons are measured in UTC calendar time, ignoring leap seconds". One could= argue that announcing the vote at 11:59:59 Monday and starting the vote= at 00:00:01 Wednesday would satisfy the 2 day/48 hour rule by arguing t= ime zone shenanigans.
  7. If a vote ends at 15:09, does it actually = ends at 15:09:00, or will votes be accepted until 15:09:59.99?
  8. v= ote extension hack: can someone change a vote end-date after the vote ha= s already started? Thus if the results are unfavorible, can I simply jus= t extend the voting period until I get the results I want, literally inc= reasing it by 24 hours every day until it passes by simply stating "I am= still on holiday"?


If the RFC author follows thr= ough with a vote, despite being in 
violation of the rule= s and being made aware of it, the result of the 
vote wou= ld be void. I'd say that if no one points out the violation 
<= div>after a =E2=80=9Creasonable period of time=E2=80=9D has passed, the = violation is 
considered to not have occurred (i.e. it sh= ould not be possible to void 
a vote at day 13 of the vot= ing period).

Best regards
Tim D=C3=BC= sterhus


The new rul= es could allow some creative people to bypass the cooldown period altoge= ther:
  1. Someone could create an empty RFC, and announce it. T= hen "clarify" and "editorialize" the RFC (easier to do with a coauthor t= o back you up) minutes before the two weeks elapse, then call a vote, wi= th most people having long dismissed the empty RFC as junk.
  2. You = could simply create a v2 of an RFC minutes/days after the failed vote an= d go straight to a vote; claiming the cooldown started from the original= RFC.
My point, hopefully, is that the more specific you a= re, the more wiggle room people actually have both to attack and defend.= At the end of the day, this is a people problem, not a policy problem. = It's one thing to clarify, but another to specify.

<= div id=3D"sig121229152">=E2=80=94 Rob --47af7c0f1b3b430eab6484b7810ab03c--