Release review of the synthesis of the software-update inquiry and its brief, and of version 2.0 of the announcement piece and its brief
Findings
This is the release gate for the synthesis of the whole software-update inquiry, its standalone brief, and the editorial rewrite (version 2.0) of the announcement piece and its brief. The reviewer read AGENTS.md and R-0011, the four drafts in full, versions 1.1 and 1.0 of the announcement piece and 1.1 of its brief from git, then the Answer and the tables of each of the seven records, and traced every number and every factual claim in the four drafts to a record's table or a released piece. Where a figure was not in any table as stated (the installer share of the new version's own downloads), the reviewer recomputed it from the retained data; the code and output are in this note. No number in the four drafts disagrees with a record. What must be fixed was three sentences in the synthesis (a release order, an over-broad "every reading", and an unqualified generalisation), each corrected with a small edit; the verdict is that all four can be released.
What was checked against what
| Claim in the drafts | Record | Result |
|---|---|---|
| mcp 1.27.0 published 14:48 UTC 2 April 2026; 3,201,463 downloads the next day, 48 per cent; 22 per cent on the release day; 45 to 71 per cent daily for three weeks; peak 12 April (alt text) | LH005 Answer and daily table (3 April 3,201,463, 48.1 per cent; 12 April 70.5 per cent; window to 22 April) | agrees |
| "about four in five of the new version's downloads came through one installer, uv"; lockfile tools took it far less | LH005 gives 78.6 per cent of all mcp downloads and 58.9 per cent of uv's as 1.27.0, not the share of 1.27.0's own downloads. Recomputed from data/clickpy_mcp_daily_by_installer_window.csv, version_class 1.27.0, 3 to 22 April: 94,095,825 downloads, uv 76,466,745 (81.3 per cent), pip 18.4, poetry 0.3; whole window 80.2 per cent | agrees; code below |
| 35,024 downloads of lean-lsp-mcp's releases against 109 million of 1.27.0 on the same days, "three in every ten thousand" | LH005: 35,024 of 109,023,441, 8 to 29 April, 0.03 per cent | agrees (0.032 per cent) |
| Nine projects fixed before reading; four of nine took the release in four weeks; seven of nine drawn from users of the new version, so not a rate; first exact pin six days after, own release within half an hour; the only second step; no other mcp release within four weeks either side; first seen holding it at 2.1 days | LH002 Answer, Findings (R04 at 49.5 hours; R03 at 6.2 days, 22 minutes before its release), Limits ("selected on uptake"), brief (1.26.0 on 24 January, 1.27.1 on 8 May; frame B has two members) | agrees, after one wording change (below) |
| agentcrew's images held 1.27.0 from 8 April, sixteen days before its lockfile; built from a range; 37 projects, seven with an image, six readable; registries keep no tag history | LH006 Answer (lockfile at 1.26.0 until 24 April; 5.5 days after the release; 7 of 37, 6 read) | agrees; "five projects' images" made "six" (below) |
| 1.28.0 of 16 June; 49 images from 13 image repositories by a rule fixed before any image was read; five of six open-range images in four weeks held it, first at 2.6 days; all 29 lockfile or pin images held their own version | LH007 Answer (20 lockfile and 9 exact-pin images) | agrees; "the library's next release" corrected (below) |
| Three advisories on the evening of 16 July; six of 13 first moves within 28 hours of the third; four of them Dependabot's | LH007 Answer (0.9 to 27.6 hours after 20:14 UTC; three under Dependabot's name and one merged from its branch) | agrees |
| 102 pins on four libraries; 73 moved by late September, typical about nineteen days; release's two days and advisory's week at about the same pace; four of 102 within a day after the advisory; about half bot-made or merged from a bot; 68 high or critical advisories against the top 200, late March to late August, fix on an earlier day in every one | LH008 Answer and Findings (median 18.7 days; 4.1 against 5.1 and 4.3; 22 bot commits and 16 merges of 73; the 68 were selected on a fixed version and the day-earlier fact is stated as an observation of all 68, not a filter) | agrees |
| 37 fixes behind the 68; 19 announced; eleven named advisories not yet published; pyjwt's changelog headed Security on 21 May naming an advisory published 25 days later; fourteen libraries, 1.7 times, same share before the advisory, two libraries carried much | LH009 Answer and Findings; data/fix_texts.csv (pyjwt CHANGELOG.rst dated 2026-05-21, "Security", GHSA-xgmm-8j9v-c9wx); LH008 events (advisory 15 June, 24.9 days) | agrees |
| Version 2.0's figures: 215 advisories, 43 libraries, 22 and 21, 13 without pairs (12 within 16 days), 30 libraries 18 and 12, 209 pairs, 142 moves, twelve reused fixes; pooled 2.3 (35; 1,522) against 1.6 (20; 1,273), 1.46, interval 0.52 to 3.96; medians 3.2 against 2.7, p 0.89; 36 and 43 per cent; nltk 691 days; without tornado, gitpython and aiohttp 1.7 against 1.6; days two to seven 0 (9 of 16) against 1.46 (8), pooled 3.3 (11) against 2.3 (5), 2.6 against 3.3 without aiohttp's words; earliest reviewed clock 3.3 against 1.3, p 0.47, pooled 3.4 against 1.4, 2.42, interval 1.00 to 4.90; 17 NVD-first events, up to 23 days; NVD clock 3.53, interval 1.44 to 6.86, p 0.47; notes restriction 3.2 against 2.5, p 0.87, pooled 2.3 against 1.4; strict 3.7 against 0.8, p 0.28; incidental 3.2 against 4.2; four within-library libraries; nine c-state fixes, four among the thirty; 36 comparisons, two p below 0.05, seven intervals excluding 1; 9 of 142 AI co-author lines; 196 of 221 clones, 1,114 requests; tornado's advisories one and two days after the release, before the window, the counted one at 23 days, one move before every advisory | LH010 version 0.3 Answer, Findings tables, header and data/reanalysis/comparisons.csv and library_rates.csv; each cell read directly. The 1.65 without the three libraries recomputed from library_rates.csv (23 moves over 1,391.6 repository-days) | agrees in every figure; the three libraries are the quickest among announced libraries with three or more moves, as version 2.0 now says and version 1.1 did not |
| Version 2.0 against version 1.1: meaning | Both say not settled; pooled lead under every reading; library by library not distinguishable; clocks chosen after outcomes; no negative claimed. Version 2.0 adds nothing that is not in the record and drops tornado and python-dotenv from the opening | one over-broad sentence tightened (below); otherwise no change of meaning |
The revised: line, "where version 1.0 had leaned against the notes" |
Version 1.0's title ("moved no faster ... to security fixes that said so") and closing ("turns that doubt against the notes"; "library by library, we cannot find one") | fair |
| Version 2.0's Corrections line | Lists the reordering, the new opening, the three additions from the record and the version 1.1 changes; commits f5a0021 and ec88e4a | accurate; one further addition named (below) |
| Provenance in both colophons | Sources with read times, who wrote, released and reviewed, R-0010 and R-0011 linked, AI co-author overlap, own reads, method sentence, version and date, Corrections, Full record; the brief points to the full piece and the record's sources | preserved from version 1.1 |
| Links, code points, house rules | Every relative link target exists; the only non-ASCII character in the four files is the byline's middle dot; British spellings; no study number, note number, commit or role outside the colophons | pass, after one link made plain (below) |
| The briefs' form | Each opens with a reader's question and one observation, gives the consequence and the main limit, and links the full account; 231 and 279 words | pass; the second is a little over the guide's "about 150 to 250" |
| The synthesis' opening | After two paragraphs a reader can say the question (where an update goes), the finding (about half of downloads within a day; pinned software over weeks; the notes question unsettled) and the limit (no record reaches a run) | pass |
| Ordinary distribution not read as propagation; what weakened | "This is ordinary software moving"; "nothing here shows AI systems spreading themselves"; the advisory burst seen once in one library and not recurring across four; the fourteen-library lead not seen library by library across thirty, the pooled lead too uncertain to call | accurate |
The reviewer's calculation for the installer share (Python 3, standard library), kept here as the record for that figure:
import csv, collections
rows = list(csv.DictReader(open('studies/LH005/data/clickpy_mcp_daily_by_installer_window.csv')))
tot = collections.Counter()
for r in rows:
if r['version_class'] == '1.27.0' and '2026-04-03' <= r['date'] <= '2026-04-22':
tot[r['installer']] += int(r['downloads'])
s = sum(tot.values())
print(s, [(k or '(blank)', v, round(100 * v / s, 1)) for k, v in tot.most_common(3)])
# 94095825 [('uv', 76466745, 81.3), ('pip', 17280928, 18.4), ('poetry', 267685, 0.3)]
Must fix, fixed
- "For the library's next release, 1.28.0 of 16 June" (synthesis). 1.27.1 (8 May) and 1.27.2 came between 1.27.0 and 1.28.0 (LH002's brief; LH010's events). Now "For a later release of the library".
- "the fixes that said so led under every reading we tried" (synthesis) and "under every way of counting we tried" (version 2.0, opening). True over the whole stretch from the release to the advisory under every clock, case set and grouping (18 ratios from 1.25 to 5.96), but in days two to seven with the incidental security words dropped the pooled ratio is below one under every clock (0.69 to 0.79; comparisons.csv), which version 2.0 itself reports as "2.6 against 3.3". Both sentences now say "under every clock and every reading of the notes we tried, counted over the whole stretch from the release to the advisory".
- "In the advisories we read, security fixes came out before their advisories" (synthesis, What held). True of LH008's 68 high or critical advisories as an observation; LH010's wider set had 227 reviewed advisories of which 12 did not have the fix a day earlier, and the 215 were selected on it. Now "In the high or critical advisories we read".
Should fix, fixed
- "nine of the silent fixes had no notes we could read at release" (synthesis), in a sentence about the thirty libraries, would be read as nine of their twelve silent ones; nine is of the 21 silent among the 43, four among the thirty. Now says so.
- "the first to choose that version outright did so six days after the release" (synthesis opening). A project new to GitHub already held it at 2.1 days; "outright" was carrying "moved its exact pin" and a cold reader cannot decode it. Now "the first seen to move to it did so six days after the release", which is LH002's "first move visible as a change".
- "follows five projects' images" (synthesis) against "six projects' images" in its own Methods line; LH006 read six, one of which held no mcp. Now six.
- nltk's clock (version 2.0). "had been named by a critical advisory published six days before the fix itself" is the record's clock, but the record says a record's fields are as read on 27 September and when it came to name the fix is not in the evidence. Now "was named, in the record as we read it, by".
- Version 2.0's Corrections line did not list that the three announced libraries left out of the pooled count are now described as the quickest among those with three or more moves (version 1.1 said "the three quickest", which by rate they are not: poetry and pypdf are quicker on one or two moves). Added.
- The brief's link
../short/fixes-that-said-so.mdresolved only by going up and back down; nowfixes-that-said-so.md. - "Awaiting review" and "awaits review" in the four colophons replaced by this review, and
status: draftbystatus: releasedin all four.
Notes, kept
- The synthesis' caption, "the new version was about half of the library's downloads before the first of the nine projects was seen to take it up": the first was seen on 4 April at 16:20, when the share had been 48 and 51 per cent for two days. Kept.
- The announcement brief runs to 279 words against a guide of about 150 to 250. Kept; nothing in it is padding, and the coordinator may cut the third paragraph's last sentence if the guide is to be strict.
- The synthesis says of the AI question that what AI systems leave behind "can set the next run in motion without a person choosing it". This is the charter's premise, not an observation of these readings, and the paragraph says the readings show no such thing. Kept as written.
- The lead piece's description of pyjwt ("a Python library that many websites use to check the signed tokens that keep people logged in") is the writer's, not from a record. Kept: it describes what the library is for.
What the review could not check
- The records themselves were taken as their reviews (R-0004 to R-0011) left them; no clone, registry, PyPI, ClickPy or OSV read was made now, as the dispatch asked. The reviewer's one recomputation is of a share from a retained table, not from a source.
- The two illustrations: their alt texts are byte-identical to the released pieces' (what-a-download-shows, pins-move-over-weeks), and the lead piece's to version 1.1's; the drawings were not re-read against the tables.
- Whether the earlier pieces the synthesis links carry every "Later evidence" notice they need is R-0011's finding, not re-done here.
- releases.md: the coordinator adds the line on release, as before.
- The review's own cost: priced by the coordinator from the transcript.
Changes made by the reviewer
- articles/where-software-updates-go.md: the six sentences in items 1 to 6 above; the colophon's review line;
status: released. - articles/short/where-software-updates-go.md: the colophon's review line;
status: released. - articles/the-lead-was-a-few-libraries.md: the opening's "every way of counting" sentence (item 2); the nltk sentence (item 7); the Corrections line (item 8); the version line (item 10);
status: released. - articles/short/the-lead-was-a-few-libraries.md: the link (item 9); the version line (item 10);
status: released. - Nothing under studies/, site/, investigations/, notes/ other than this file, README.md, AGENTS.md, programme.md, observations.md, about.md or releases.md was changed. The sentences replaced, for the record: "the first to choose that version outright did so six days after the release"; "For the library's next release, 1.28.0 of 16 June"; "follows five projects' images release by release"; "the fixes that said so led under every reading we tried"; "and nine of the silent fixes had no notes we could read at release"; "In the advisories we read, security fixes came out before their advisories"; "under every way of counting we tried"; "nltk's fix had been named by a critical advisory published six days before the fix itself".
Verdict
Nothing remains that must be fixed. The synthesis and its brief at version 1.0, and the announcement piece and its brief at version 2.0, can be released as they now stand; the coordinator commits and adds the releases.md line. A second agent's agreement is a review contribution, not independent confirmation; what this note adds is a trace of every figure in the four drafts to a record's table, one recomputation, and a reading of version 2.0 against version 1.1 for meaning. For the files this review was told not to edit: the same "under every reading" shorthand for the pooled lead, wherever it appears in a summary, should carry the same "from the release to the advisory" qualification, since the days-two-to-seven reading with the incidental grouping runs the other way.
From notes/R-0012.md in the repository, last changed 27 September 2026.