Skip to content

docs(changelog): cut the 1.5.0 entries to what changed and its effect - #1010

Merged
JarryShaw merged 1 commit into
mainfrom
docs/719-changelog-concision
Oct 4, 2026
Merged

JarryShaw merged 1 commit into
mainfrom
docs/719-changelog-concision

Conversation

@JarryShaw

@JarryShaw JarryShaw commented Oct 4, 2026 •

Copy link
Copy Markdown
Owner

Please follow the guide below

  • Searched for similar pull requests
  • Followed the coding style (make pylint, make mypy, make isort)
  • make test passes, and a test case covers the change
  • Added a changelog entry under docs/source/changelog/ and regenerated CHANGELOG.md, if the change is user-visible

This change is the changelog, so there is no new entry to add and no behaviour for a test to cover. The make test box is unticked rather than claimed: the full suite exhausts memory on the machine this was prepared on. I ran tests/project/ — 268 passed, 1 skipped, 864 subtests — which is where the changelog-generation tests live, including the one that pins the entry count.

What is the purpose of your pull request?

  • fix — corrects a defect
  • feat — adds a feature
  • perf — changes performance, not behaviour
  • refactor — changes neither behaviour nor performance
  • test — tests only
  • docs — documentation only
  • ci — workflows or build tooling
  • chore — anything else

Description of your pull request and other information

First slice of #719, which asks for the changelog as its own PR and applies the concision rule to it while explicitly exempting it from the timed-context rule. docs/source/changelog/1.5.0.rst goes from 3585 to 2719 lines, 24.2%, and ~37.5k to ~27k words.

Cut: test and subtest tallies, coverage percentages, mutation and fuzz counts, byte-identical-regeneration claims, "how it was found" narrative, and sentences restating the one before them.

Kept, compressed: rejected alternatives and the reason (EnumError rejected as a TypeError), deliberate exceptions (why 115 stays unbound until an L2TPv3 class exists; why writeable()/truncate stay), claims flagged as unverified (the RPL change never checked against a real capture), breaking-change migration notes, and which earlier issue or PR caused or fixed what — #719 protects design rationale explicitly, and the changelog keeps its time-bound references.

A few entries are deliberately still long because their bulk is a decision record — the 16-bit padding budget under #573, the HTTP/2 packing half of #668 with its rejected max(computed, 1) fix, the HIP padding and LOCATOR_SET cancellation entries, and the release-workflow gate under #641 with its inert-until-configured caveat.

What is provably unchanged. All 491 :issue:/:pr:/:discussion:/:rfc: roles survive, compared as a multiset of (kind, target) pairs rather than counted: 0 lost, 0 gained. The entry count is still 155 — tests/project/test_conventions_doc_claims.py pins it, and it caught a merge of two near-duplicate #604 bullets during the work. 1.5.0.rst's :rfc:959#section-5`` is intact, per #946's retargeting of dead sub-section anchors. No role sits inside **bold**, `italic` or a literal.

Wrapping, against the width this repository actually documents. CONTRIBUTING.md:146-148 names 120 for pylint and 100 for isort, not PEP 8's 79, and no line-length setting exists in pyproject.toml, setup.cfg, .editorconfig, .pylintrc or tox.ini. So 79 was never the target: this branch's max line width is 95, under even the stricter 100, against 151 on main, with lines over 89 cut from 90 to 12 and none over 100. Literals are never broken, and no role's markup spans a newline. Raggedness — an indented continuation whose successor's first word would have fitted — falls from 1871 on main to 350.

How to review this revision. 1261 of 2623 lines are new only as re-breaks, so reading the diff line by line is mostly noise. The load-bearing check is the whitespace-collapsed word diff: against the first revision of this branch it reports exactly 3 token-level change blocks, separated by 6856 and 11147 identical tokens, so no fourth text change can hide in the reflow.

CHANGELOG.md is regenerated, never hand-edited, and util/changelog_md.py --check reports it in step.

@JarryShaw JarryShaw added docs Pull requests that change documentation only (docs: subject prefix) review: pending No verdict for the current head - never reviewed, or the head moved since the last one labels Oct 4, 2026
@JarryShaw

Copy link
Copy Markdown
Owner Author

NEEDS CHANGES at 7067e2e2d — opus cross-review, a different model from the sonnet agent that authored this. It found the one thing a test cannot catch, and I verified each finding myself before acting.

A ruled-out hypothesis was deleted rather than compressed. The #702 entry on main carried: a cross-review found that all seven guard raise lines this reaches were already covered by a passing test predating this fix; none was genuinely newly reached by it. grep -c 'seven guard' gives 1 on main and 0 here. That is not a coverage tally — it is the falsification of a coverage claim, and losing it means the next reader re-derives the illusory "newly covers seven guards" win with nothing to warn them. Precisely the class #719 protects. Being fixed, along with two smaller losses it found: the same entry's boundary definition (the widest in-field value is accepted, one past it is refused — what the new test pins), and the get() entry dropping one of two named conversion sites so the list now reads as complete.

Reflow residue: 3 doubled internal spaces, 0 on main. One is ungrammatical — already present. (:issue:692)., a full stop then a parenthetical then a second full stop, residue from dropping a trailing tally. Being swept file-wide rather than fixed at the three known spots.

A claim of mine was wrong and I have corrected the body. I wrote "reflowed to 79 columns". Measured: 970 of 2719 lines here exceed 79, as 1032 of 3585 do on main — the file wraps at about 88 on both sides. What the branch actually does is better than my description: it keeps that convention and crushes the outliers, taking lines over 89 from 90 to 19 and the max from 151 to 95.

What it confirmed, several by stronger methods than mine. It resolved our 491-vs-492 citation disagreement: the 492nd match is the empty target inside the :rfc: literal, so 491 genuine citations is the right figure, multiset-identical both directions. It verified the 155-entry pin non-vacuously by mutating a bullet into a continuation and watching the test fail. It proved CHANGELOG.md a pure regeneration on both base and head, so the whole 144-line generated diff is generator output with no pre-existing drift absorbed. And it confirmed all four deliberately-long entries survive intelligibly.

On sampling, it was candid about coverage: 250,095 characters removed across 77 hunks, of which roughly 15–20% read as prose. The rest is covered by an exhaustive sweep matching 23 rationale markers against every hunk's removed text and checking whether a distinctive token survives in the replacement — which is what caught #702. A lost fact phrased without any of those markers would still be missed, and it said so.

* Shortens `docs/source/changelog/1.5.0.rst` from 3585 to 2623 lines
  (26.8%). Per #719, an entry should say what changed and what the effect
  is; the investigation belongs in the issue.
* Cut: test and subtest tallies, coverage percentages, mutation and fuzz
  counts, byte-identical-regeneration claims, "how it was found"
  narrative, and restatements of the sentence before.
* Kept, compressed: rejected alternatives and why, deliberate exceptions,
  ruled-out hypotheses, claims flagged as unverified, breaking-change
  migration notes, and which earlier issue or PR caused or fixed what --
  #719 exempts the changelog from its timed-context rule.
* All 491 `:issue:`/`:pr:`/`:discussion:`/`:rfc:` citations preserved as a
  multiset, 0 lost and 0 gained. Entry count unchanged at 155.
* Reflowed to the file's own ~86 columns, keeping literals unbroken: max
  width 95 against 151 on main, lines over 89 cut from 90 to 12, none
  over 100.
* Regenerated `CHANGELOG.md`; never hand-edited.

tests/project/ 268 passed / 1 skipped / 864 subtests;
util/changelog_md.py --check reports CHANGELOG.md in step.
@JarryShaw
JarryShaw force-pushed the docs/719-changelog-concision branch from 7067e2e to 809e615 Compare October 4, 2026 20:57
@JarryShaw

Copy link
Copy Markdown
Owner Author

Fixed at 809e615e2 (was 7067e2e2d). All four findings addressed, and the delta is provably confined to them.

  • The #702 ruled-out hypothesis is restored, compressed: a cross-review found all seven guard raise lines it reaches were already covered by a test predating the fix, so none was newly reached.
  • The boundary definition is back in the same entry — the widest in-field value is accepted, one past it refused — which is what the new test pins.
  • The get() entry names both conversion sites again, so the list no longer reads as complete while naming one.
  • The doubled-space sweep found exactly the 3 the review named, at :47, :761 and :1861, and leaves 0. The . (:issue:692). double-period shape is gone and the sweep finds no other instance.

The strongest thing I can say about the delta: the word stream changed in exactly three places. Comparing 7067e2e2d to 809e615e2 with all whitespace collapsed, difflib reports 3 change blocks — the span-handling site, the boundary clause with the restored cross-review sentence, and the stray full stop. Everything else that moved is pure line-breaking, so the larger line count in this revision carries no text change.

It also re-wrapped the items a deletion had left ragged — 76 of them, more than the 3 I pointed at — to the file's own ~86 columns. That shows up as more lines over 79 (1639 against 970), but lines over 89 fell further, 19 to 12, max stays 95 against main's 151, and none exceeds 100. The cut is now 26.8%, 3585 to 2623 lines, up from 24.1% because tightening the ragged paragraphs recovered some length.

Re-verified at this head: util/changelog_md.py --check in step with CHANGELOG.md regenerated; tests/project/ 268 passed / 1 skipped / 864 subtests; role multiset 492 to 492 with 0 lost and 0 gained (491 genuine citations plus the empty target in the :rfc: literal, per the review's own resolution of that discrepancy); 1 nested hit, that same literal, present on main; entry count 155; :rfc:959#section-5`` intact; 0 doubled spaces and 0 space-before-punctuation outside literals.

@JarryShaw JarryShaw added review: good-to-go Cross-review at the current head says ready; CI state is separate and removed review: pending No verdict for the current head - never reviewed, or the head moved since the last one labels Oct 4, 2026
@JarryShaw

Copy link
Copy Markdown
Owner Author

GOOD TO GO at 809e615e2 — opus delta re-review, a different model from the sonnet author. Both round-1 content findings are fixed and it could not falsify the claim that nothing else changed.

It closed a gap in my own proof. I had offered a whitespace-collapsed word diff showing exactly 3 token-level change blocks. It reproduced that — 3 raw opcodes, no grouping needed, separated by 6856 and 11147 identical tokens, token delta reconciling exactly at +43 — and then pointed out that such a diff is blind to a whitespace change inside a literal , where content is load-bearing. So it ran a second instrument over every literal span, folding only \n\s* as reST would: 2704 → 2706 spans, one non-equal block, and that block is the two literals in the restored cross-review sentence. Zero literals with a doubled internal space. That is a stronger statement than I had.

And it overturned my framing of the wrap question entirely — in the branch's favour. I had treated 79 columns as a reference point and reported the branch as departing from it. CONTRIBUTING.md:146-148 says the repository's own linters are the authority and names 120 for pylint, 100 for isort, explicitly not PEP 8's 79; I confirmed there is no line-length setting in pyproject.toml, setup.cfg, .editorconfig, .pylintrc or tox.ini, and .rst has no linter at all. So lines over 79 rising is not a regression against anything, and the max of 95 sits under even the stricter 100. It also showed the reflow adds no new long line — all 12 lines over 89 appear verbatim in the previous revision — and that raggedness drops from 1871 on main to 350 here, which I reproduced independently. I have reworded the PR body accordingly.

On my open question of whether a 76-item reflow belongs in a concision PR, it argued not: the three artifacts it flagged in round 1 were that same residue class, so fixing 3 and leaving 73 would have shipped the cuts half-tidied. I accept that.

One caveat it raised that belongs in the body, and now is: 1261 of 2623 lines are new only as re-breaks, so line-by-line review is largely noise and the word diff is the only sensible way to read this revision.

Re-verified at this head: citations 492 → 492 multiset-identical with no role's markup spanning a newline, 1 nested hit (the :rfc: literal, on main too), 155 entries, :rfc:959#section-5`` the only occurrence of 959, no odd backtick count anywhere, --check in step, `tests/project/` 268 passed / 1 skipped / 864 subtests.

Round-2 scope was the delta by my instruction, so main → head substance beyond those three blocks rests on round 1's sampling — which the word diff makes sound, since this revision adds back only those blocks and removes nothing.

@JarryShaw

Copy link
Copy Markdown
Owner Author

Ready to merge at 809e615e2. CI is complete and clean — 69 CheckRun legs green, 0 failed, 0 still running, 3 skipped by design, mergeStateStatus=CLEAN. The GOOD TO GO above is against this exact head; nothing has been pushed since.

Unpublished and unmerged, awaiting you.

For the record, what this slice leaves for the rest of #719: the pcapkit/** docstrings and comments, docs/source/**/*.rst outside the changelog, the four root markdown documents, and tests/** comments — each its own PR per that issue's plan. The first of those is still blocked on the citation-vs-timed-context ruling, since it decides the fate of 426 :issue:/:pr: roles across 71 files.

@JarryShaw
JarryShaw merged commit 22b4ed5 into main Oct 4, 2026
73 checks passed
@JarryShaw
JarryShaw deleted the docs/719-changelog-concision branch October 4, 2026 21:53
@JarryShaw JarryShaw removed the review: good-to-go Cross-review at the current head says ready; CI state is separate label Oct 4, 2026
@JarryShaw JarryShaw added this to the 1.5 milestone Oct 6, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Pull requests that change documentation only (docs: subject prefix)

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

1 participant