Adversarial review of the improvement round of 27 September 2026: the site, the reader journeys, and the content outside the four rewritten pieces
Findings
This is the second review of the round, alongside notes/R-0012.md, which reviews the four rewritten pieces. Its scope is the site (commit 38fb3ca and the templates after it), the reader journeys on the built site, and every reader- or agent-facing document outside those four pieces, judged against each package's Done-when list. The reviewer read the whole site diff and the test file, ran npm ci, npm test and npm run build, built again with PATH_PREFIX=/lighthouse/, built the old commit f5a0021 in a worktree and diffed its legacy pages against the new build, served site/_site and drove it with Chromium through Playwright at 390 and 1280 pixels in light and dark schemes (screenshots in the scratchpad's shots-review/), and read the content files against harbour/README.md, charter.md and the LH010 record's figures as R-0011 confirmed them.
The verdict is that the round can be released, with the four site fixes below made and one About sentence corrected. The site builds cleanly, every internal link on the checked pages resolves (including under a path prefix), legacy study, note and document pages render as before apart from the intended navigation changes, and the content says the same thing at the same certainty across the front page, the investigation page, programme.md, AGENTS.md and the current account. What was wrong was small: listings could not show that a piece had received a "Later evidence" notice, a piece with neither header nor byline would have been dated by its last edit, a mistyped header date would have crashed the build, and two listing ledes still described the short form as a cut of the piece after AGENTS.md made it a standalone brief.
A. The site
| Checked | Result |
|---|---|
npm ci, npm test, npm run build |
13 tests passed as found, 15 after this review's additions; the build writes 93 files (94 with R-0012.md); the only warnings are two pre-existing unresolved links in notes/R-0003.md |
| Date parsing | headerDate, longDate and formatDate all work in UTC, so a published day cannot shift with the build machine's zone; the byline *D Month YYYY · Lighthouse* and the _..._ form both parse; a long-form published: 27 September 2026 is not read (site/README.md says YYYY-MM-DD) and falls through to the byline, which is acceptable. Fixed: published: 2026-13-45 produced an Invalid Date and toISOString threw; headerDate now returns null for it and the byline is used |
| Publication date fallback | Fixed: a piece with no header and no byline took dates.get(rel), the newest commit touching the file, so an edit would have moved its publication date, the very confusion Package 3 is meant to end. pieceInfo now takes the day the file was added to git. No current piece relies on the fallback (every one has published:), so nothing rendered changes; a test with a two-commit temporary repository covers it |
| Sort stability | byPublished orders by publication time, then the day added, then path, so ties are deterministic; the pairing by basename does not depend on which form has a header (the fixture's legacy pair has none, the updated pair has a header on the full piece only, and a third case, header on the short form only, follows the same code path) |
| Drafts | Left out of Latest and of a group's twin when the twin is a draft; labelled in listings and on the investigation page; a draft's own summary reaches only its own meta description. At c2e47d9 the synthesis and the latest piece were drafts, so Latest led with the superseded fixes-that-said-so and omitted the current account; R-0012's release in the working tree resolves that, and the rebuilt Latest now leads with the synthesis |
| Header detection | A first line such as Note: something is not a header (one field, not a piece key); a piece's header ends at the blank line; the fields are never shown as a record's facts. Two consecutive key: value lines before the title would still be taken as a header, as they always were for records; every piece opens with a header or # Title, so this is a note |
| Notices | Only blockquotes opening with bold "Correction" or "Later evidence" become notices, and only in the six pieces that carry them; no record, note or document page gained one. Fixed: their dates now count as the piece's latest update, so /articles/ and Latest show "Later evidence 27 September 2026" on fixes-that-said-so and what-moves-a-pin (and "Corrected" for a correction), where before a returning visitor saw only "Published" |
| Escaping | Nunjucks autoescapes titles, summaries, attention and the meta description; markdown-it runs with html: false, so header values, revision sentences and the investigation's question cannot carry raw HTML; the aria labels in html.js are constants |
| PATH_PREFIX | Built with PATH_PREFIX=/lighthouse/: every href and src on the home page, a piece, the pieces index, the investigation page and About is under /lighthouse/, including the figure links the transform adds and the favicon; site.css has no root-relative url() |
| Legacy pages | Diffed against a build of f5a0021: studies/LH004, LH010, notes/R-0005, charter, sources, the studies and notes indexes differ only in the strap (now from site.json), the Investigations link, About pointing at about.md, the footer's Observations and Operating manual links, and content the round changed (programme.md, the new REPLAY.md and LH011 entries) |
| Keyboard | The first Tab on every checked page reaches "Skip to the text", and focus is visible |
B. Reader journeys, on the built site at 390 and 1280 pixels, light and dark
- First visit, /. One entry point: the question as a heading, a four-sentence lede, "Read the account, or its short form", and the investigation. "Current focus" says what is resting and why, and what comes next, in the same words as programme.md's checkpoint. Nothing else competes; the observation catalogue is one link away on observations.md.
- Returning visit, /articles/. Pieces are ordered by publication date with editorial summaries; a draft is tagged; a piece with a
reviseditem or a dated notice now says "Revised" or "Later evidence" with the date, and file edits are not shown at all for pieces, so an edit cannot be mistaken for a publication. - Arriving on an older piece. On /articles/what-moves-a-pin/ the byline is followed by "Part of Where does a software update go? · Current account: ... · Short form", then the Later evidence notice linking pins-move-over-weeks and the latest reading, and before the colophon a pager with Previous and Next in the investigation's order. On /articles/pins-move-over-weeks/ the pager leads on to fixes-that-said-so, whose notice leads to the latest reading, whose opening links back to fixes-that-said-so and whose pager leads back; the route works in both directions. The short forms carry the same context among short forms, with a "Full piece" link.
- /investigations/software-updates/. Attention ("Active") is set beside the sentence that it says where Lighthouse is looking, not whether anything is proven, and "Where the evidence stands" gives the firmness of each finding separately; the relationships (extended, branched, revised, narrowed) are in the narrative and the six changes of direction are listed.
- /about/. Written to a visitor, with the charter, Harbour, who does the work, how it is checked, who holds direction, the operating manual and the programme linked, and the correction channel is the repository's issues, which are the queue the work runs from (issue #12 exists and is open).
- At 390 pixels no page scrolls horizontally; the context line wraps, the pager stacks, and the notice keeps its tint in dark mode. The only console error is the Google Fonts request failing at the sandbox proxy's certificate, which is this environment and not the site.
C. Content outside the four pieces
- Consistency. The front page, "Current focus", the investigation page's "Where the evidence stands", programme.md's LH010 answer, AGENTS.md's "Current understanding" and the synthesis all say: pooled it leans towards the notes, library by library it cannot be told, the clock moves it most, not settled; the fast half rests on one release of one library; nothing reaches a run. No superseded phrase ("no faster", "mostly goes away", "came from a few libraries", the old title) survives as a current claim: "1.7 times" appears only as the fourteen-library figure it is, qualified where it appears; the old fixes-that-said-so colophon line was rewritten with its own dated correction, and the what-moves-a-pin and pins-move-over-weeks update lines still describe their follow-ups correctly.
- observations.md carries the old README's catalogue paragraph and table verbatim, with two additions: the sixth and seventh readings are now links, since "above" no longer applied. The README's "That is the whole map" sentence went with it.
- about.md against harbour/README.md and charter.md. The keeper, the three things that wait for a person, the shared interest and the calibration role all match. Fixed: "hands each one to an AI agent" implied Harbour dispatches Lighthouse's tasks, while harbour/README.md says no consumer polls the hosted workspace and a session does the work itself; the sentence now says so.
- AGENTS.md. 1,970 words against 2,293 at f5a0021 (the close-out's "down from 2,387" is measured from 497d4ff, its grounding commit). "Where things stand" gives the investigation, the current account, the open question, the changed claims and where the evidence is; the reading assignment is that section, the investigation page and programme.md's Next. The credential rule, the three things that wait for a person and review before release are all present. Fixed: "a draft until its review" on the current account, which R-0012's release makes false.
- programme.md. The checkpoint compares the three options the brief asks for, names the choice and the literature check, and the later-evidence lines under LH007, LH008 and LH009 match the records (pyjwt's NVD time 18 days earlier; 4 of 102 within a day of the advisory).
- studies/LH011/brief.md. Fixed before any outcome: the question, what the writer already knows (LH005's and LH007's figures, and that boto3 releases daily), the population and its rule, the release as observation and the project as unit, the sources, day 0 as the UTC upload day with the hours left recorded, the at-or-newer share as the primary measure and why, the CI flag's missingness rule (only installers whose source shows the flag is sent), the gap rule for days, the reporting convention for "as a rule", the overlap with LH005, LH007 and LH008 to LH010, the ceiling in dollars, queries, rows and requests, the stopping condition with the first amendment to be committed before any per-version count is read, and what would leave it inconclusive. It is committed in c2e47d9, before collection.
- notes/closeout-2026-09-27-improvement-round.md. What was learned, what changed, what remains uncertain and the next question are there; the spend line is the coordinator's to fill and is labelled so. Its sentence that the synthesis is "awaiting review" and "to become" the current account is true of 497d4ff and will be stale on release; the coordinator should update it with the spend.
- .claude/skills/drive/SKILL.md now asks for the close-out AGENTS.md describes. releases.md has the LH010 0.3 line; the four pieces' release line is the coordinator's.
- House style: British English throughout; no em or en dash by code point in any changed reader file, template or note, including this one.
Problems in the four pieces, for the other reviewer
- articles/where-software-updates-go.md, "Did the fix's own notes matter?": "
[The current account](the-lead-was-a-few-libraries.md)explains the two ways of counting" (the coordinator changed it to "The latest reading" before release) calls the latest reading the current account, which the investigation page and AGENTS.md reserve for the synthesis itself; "the latest reading" would match the rest of the site. - The same piece's summary says "why it moved when it did is still unsettled", where the body says no record gives a reason (unknown) and that whether the notes matter is unsettled; the short form's summary repeats the phrase. A small imprecision, not a wrong claim.
- Two figures the reviewer could not trace to a table in the time given and did not check: "leave out ... tornado, gitpython and aiohttp, and the lead shrinks to 1.7 against 1.6" and "no other release of the library came within four weeks of it on either side". Every other figure read against programme.md and R-0011 agreed.
What the review could not check
- The four pieces' figures beyond the comparison above; that is R-0012's work.
- The LH011 brief's ClickPy table names and the installers' flag rules: no query was run and no source distribution read, as the brief itself requires before collection.
- Reader feedback: the journeys were walked by this agent, not by a reader.
- The review's own cost: priced by the coordinator from the transcript.
Changes made by the reviewer
- site/lib/repo.js:
headerDaterejects an invalid date;pieceInfotakes the day a file was added for the git fallback, andnoticeDatesmakes a dated Correction or Later evidence notice the piece's latest update, withrevisedLabel. - site/_includes/piece-dates.njk and page.njk: the update label ("Revised", "Corrected", "Later evidence") in listings and the provenance line.
- site/_includes/index-articles.njk and index-short.njk: the ledes no longer call the short form a cut of the piece.
- site/test/repo.test.js: two tests, for notices as updates and the malformed date, and for the git fallback with a two-commit repository.
- site/README.md: the two rules above, in "What the site reads".
- about.md: the Harbour sentence, as above.
- AGENTS.md: "a draft until its review" removed from the current account.
- Nothing under studies/, the four pieces, the notices, the investigation page, programme.md or the close-out was changed.
Verdict against the packages
- Package 1. Done. The replay, the traceable clocks and notes states, the matching certainty across the public and agent-facing statements, the notices on the older pieces and the recoverable earlier editions were confirmed in R-0011 and are consistent with everything this review read; the site now surfaces the notices in listings.
- Package 2. Done, subject to R-0012 for the prose: the synthesis, its brief, the latest piece and About exist as finished prose with checked links, About speaks to a visitor with the manual one link away, and the corrected finding is stated at one certainty everywhere.
- Package 3. Done, with the four site fixes above. A first-time visitor has one starting point and the current focus; a returning visitor can tell a new piece and a substantive update from a file edit; every piece in the investigation leads to its context and the current account, with brief and full forms linked; the revision route works both ways; existing URLs, provenance, records and the catalogue remain reachable; the site builds and the navigation works at both viewports in both schemes.
- Package 4. Done. A session can find the current account and the evidence from AGENTS.md's first section; no superseded conclusion is restated as settled; LH011's brief fixes its question, evidence boundary and stopping condition before collection and is committed; the writing and review instructions point at the two worked examples and keep uncertainty; the next question is chosen for a stated reason at a recorded checkpoint, and the close-out gives the round its end once the coordinator fills the spend and refreshes its "awaiting review" sentence.
From notes/R-0013.md in the repository, last changed 27 September 2026.