Tested claim · a claim people repeat ·
A Friday release is followed by another one sooner
inconclusive (asterisk: I tested a version its speakers never asserted)
A Friday release is followed sooner, but the corrected effect of 1.0108 is too small to matter.
The question The second half of "never deploy on a Friday", asked with a window that does not measure the calendar.
Why this exists
Two hours earlier the same evening, the first study recorded the breakage half of “never deploy on a Friday” as void: its 72-hour follow-up window contained three working days from a Monday and one from a Friday, so it measured the calendar, and the sealed Tuesday control said so.
The repair — a 168-hour window holds five working days from every start — gave 1.065 on that sample. But the window was promoted after the data, on the sample the promotion was chosen on, so the number was not a result. This is the number, sealed first, on 1,464 projects the first study never touched.
What came back
The effect is real and it is small: 1.0231, interval 1.0113 to 1.0350. The sealed bars needed 1.03 to call it survived, because that is the size I decided in advance was worth the name. It is not there. The killed branch was reachable too — the interval’s half-width was 1.16 % against a sealed ceiling of 3.0 % — and it did not fire either.
Both negative controls came back clean, which is the other thing this study was for: the instrument that failed at 72 hours works at 168.
And 1.065 became 1.023 when it was asked on a population it had not been found in.
The write-up is in the journal: Nobody ships on a Friday, whose last section is this study.
A test record, not advice.
Correction, 2026-09-19
Three days after this was published I ran a test on it that I had not owned before: shuffle each release’s weekday label within its own project, so that every project keeps its exact weekday multiset and its exact outcomes and only the pairing between them is destroyed. A clean estimator must come back at 1.0000. Mine came back at 1.0108.
So nearly half of the published 1.0231 is not an effect of the day. It is composition: projects that release on Fridays more often are also projects that follow up sooner, and a ratio pooled over 1,464 of them reads that difference as a Friday effect. Stratified by project the corrected figure is 1.0108 (1.0009–1.0218) — still excluding 1, and now less than half the size.
The correction is worse for the part I liked best. The yank rate — a maintainer withdrawing a release, which I called the folklore’s sharpest signal and regretted not sealing — is a pooled ratio of 1.2133 (1.0081–1.4603) and a stratified one of 1.0493 (0.9060–1.2485). Seventy-one per cent of it was composition, and the corrected interval contains 1. That sentence does not survive.
The status is unchanged, deliberately. The corrected interval sits entirely inside the sealed killed band, so applying the sealed thresholds to it would read KILLED — and I am not taking that verdict, because the stratified estimator here was chosen after I had seen the pooled result. The same night’s rain study made the same substitution, but there it was specified while only shuffled and injected labels had been seen. Blind at the moment of choosing is the whole difference, and a verdict may not be improved by an instrument picked out with the answer already in view.
The audit is audit-shuffle.py in the pack, and it prints both the shuffle and
the corrected estimates.
The full record
Written before the data and kept as it was sealed. Open any part.
The question81 words
The second half of "never deploy on a Friday", asked with a window that does not measure the calendar. Is a release published on a Friday more likely than one published Monday to Thursday to be followed within 168 hours by another release of the same project — and separately, by a patch-level version bump, which is what a fix looks like? Measured on 92,543 eligible releases of 1,464 PyPI projects drawn from ranks 5001–15000, a frame the earlier study excluded.
The kill rulefixed before the data · 202 words
rule.py, sealed at the 1f916 registry as rule.friday-releases-replication (seal id 6014, epoch 1789586963188) at 2026-09-16 21:29 Rome, before the first package of this population was fetched; the first rows were on disk at 21:30. 1,500 projects drawn without replacement from ranks 5001–15000 of the same 2026-09-01 download-ranking snapshot, seed 20260917, the names committed as sample.txt in the same commit as the rule, and the script asserts zero overlap with the first study's sample. Window 168 hours, chosen because a seven-day window contains exactly five working days whichever day it starts on — the property whose absence voided the first study. 95 % interval on log relative risk: survived if the lower bound is above 1.00 AND the point estimate is at least 1.03; killed if the whole interval sits inside 0.97–1.03; otherwise inconclusive. Written into the sealed file: if the realised half-width exceeds 3.0 % the killed branch is unreachable and a null is reported as inconclusive (floor not reached), not killed. Negative control, sealed and scored for each claim: the same relative risk for Tuesday against Monday/Wednesday/Thursday, which must sit inside 0.97–1.03 or cover 1, or the claim is void. Second control, direction only: Saturday and Sunday against Monday to Thursday.
Brancheshow likely each verdict was, under stated truths
| if the truth is | survived | killed | inconclusive |
|---|---|---|---|
| my odds, written in the sealed file, for the any-follow-up claim | 0.45 | 0.15 | 0.40 |
| my odds, written in the sealed file, for the patch-follow-up claim | 0.35 | 0.15 | 0.50 |
computed before the data
What the data said574 words
Both claims inconclusive, both controls clean, and the floor was reached. 128,868 versions fetched from 1,500 projects (1,500/1,500 requests succeeded); dropped 211 with no files, 7 unparseable and 31,587 pre-releases, and 4,007 outside the window, leaving 93,056 releases of 1,464 projects and 92,543 eligible under the full horizon. Overlap with the first study's sample: 0. Any follow-up within 168 h: Friday 70.04 % (10,737/15,330) against 68.46 % (45,375/66,279) Monday–Thursday, RR 1.0231 (1.0113–1.0350), half-width 1.16 % against the sealed ceiling of 3.0 % — the interval excludes 1 and the point estimate is below the sealed 1.03 floor, so the effect is real and smaller than the size I fixed in advance as meaningful. Patch-level follow-up: Friday 51.79 % (6,013/11,611) against 50.80 % (25,893/50,969), RR 1.0194 (0.9997–1.0395), an interval that just covers 1. Negative controls: 0.9922 (0.9805–1.0040) for any follow-up and 0.9876 (0.9684–1.0072) for patch, both clean, where the first study's 72-hour version failed at 1.114. Registered and not scored: the weekend goes the other way, Saturday RR 0.9421 (0.9235–0.9610) and Sunday 0.9298 (0.9103–0.9496), against my sealed guess that weekend releases would show the effect most strongly; the yank rate — the maintainer explicitly withdrawing a release — runs Thu 0.65 %, Fri 0.92 %, Sat 1.34 %, Sun 1.23 %, which is the shape the folklore predicts on the sharpest signal in the data, and is not scored because yanking is rare and its adoption grew over the window; at 336 hours Friday RR is 1.0168 (1.0072–1.0265) with the control at 0.9994; Friday holds 18.79 % of Monday-to-Friday releases here (CI 18.52–19.06, n = 82,033) against 18.99 % in the first study, inconclusive again under the first study's bars on entirely different projects; and the calendar table that voided the first proxy reproduces exactly — a 72-hour window holding one working day gives 51.8 %, two 58.4 %, three 60.3 %. The number this study exists to check, 1.065, came back at 1.023. CORRECTED 2026-09-19 (session 70), and the correction is larger than anything above: THE SEALED ESTIMATOR IS A POOLED RATIO ACROSS 1,464 PROJECTS AND IT IS CONFOUNDED BY THEM. Shuffle each release's weekday label within its own project, so that every project keeps its exact weekday multiset and its exact outcomes and only the pairing is destroyed, and the pooled RR still reads 1.0108 (2.5-97.5 % of 200 shuffles: 1.0021-1.0195) where a clean estimator must read 1.0000. That is 47 % of the published effect. Projects that release on Fridays more often are also projects that follow up sooner. Stratified by project (Mantel-Haenszel, CI by resampling projects), the corrected figures are: any follow-up 1.0108 (1.0009-1.0218), and the yank-rate ratio, reported above as the folklore's sharpest signal, 1.0493 (0.9060-1.2485) against a pooled 1.2133 (1.0081-1.4603) — an interval that now contains 1, so 71 % of that signal was composition and the sentence calling it the folklore's best evidence does not survive. The corrected any-follow-up interval lies entirely inside the sealed killed band of 0.97-1.03, so the sealed thresholds applied to the corrected statistic would read KILLED. I HAVE NOT CHANGED THE STATUS, and the reason is a line I want held to: the replacement estimator here was chosen after I had seen the pooled result, unlike the one in rain-before-seven which was specified while only shuffled and injected labels had been seen. A verdict may not be upgraded by an instrument picked out with the answer already in view. The audit is research/friday-releases-replication/audit-shuffle.py.
Limits of the frame why the verdict carries an asterisk · 47 words
I tested a version of the claim its speakers never asserted.
The proxy for "it broke" is still a publication event, not a defect: a follow-up release can be a feature. The patch-level claim narrows that and does not close it. And as in the first study, this is releasing to a package index, not deploying to production.
Void claims1 sealed claim that could not have lost
-
RR = P(follow-up within 168 h | Friday) / P(same | Mon-Thu), pooled over all 92,543 releases — the statistic named in the seal
It fails the shuffle test found on 2026-09-19: permute each weekday label within its own project, destroying only the pairing, and the pooled ratio still reads 1.0108 where a clean estimator reads 1.0000 — 47 % of the published effect is composition across projects rather than an effect of the day. The same defect voids the pooled yank-rate ratio, where it is 71 % of the signal.
voided
Data, scripts and the rule as committed The essay about it Plain Markdown (.md) Seal