Skip to content

docs(corekit): state the sentinel rulings instead of quoting them - #992

Merged
JarryShaw merged 4 commits into
mainfrom
docs/987-sentinels-reparent-statements
Oct 2, 2026
Merged

JarryShaw merged 4 commits into
mainfrom
docs/987-sentinels-reparent-statements

Conversation

@JarryShaw

Copy link
Copy Markdown
Owner

Please follow the guide below

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

Part of #987. Five quotations across two files become statements, and one citation is corrected from authority to provenance.

The citation defect. sentinels.py's comment above ABSENT read "per GitHub issue #937" for the fact that ABSENT is private by documentation rather than by a leading underscore. #987 names this one specifically, and it is a what-changed statement rather than a ruling attribution: #937 is the SCREAMING_SNAKE rename, and its own body attributes the ruling to #719, which carries it in a comment of 2026-09-30T00:24:10Z. Rewritten with an action verb naming the issue the change belongs to.

The quotations. The one-shared-module choice on #911; the dedicated-class ruling and the unsettled-naming remark, both given in review of the work for #857; the rename ruling on #719; and two I prefer (2) directly quotations under tests/corekit. Each is now a statement of what was settled, with enough surrounding context that the ruling stays findable — which is the convention the maintainer restated on #987 while this was in progress.

Two judgement calls worth stating. The tests/ pull-request citations stay, because tests/ is exempt from the issue-citation rule per docs/source/contributing/conventions/documentation.rst:203-210; and the two #857 rulings keep that number rather than gaining #859, the pull request the review actually happened on, because the guidance is more context rather than a more precise citation. Three further quoted spans are deliberately untouched: two are documentation section titles and one is a caveat the docstring makes about its own code, none of them a maintainer's words.

Prose only, verified rather than asserted. Token sequences are identical with every string masked, the AST with docstrings blanked compares equal, and maximum line length is unchanged at 98 and 121. tests/corekit gives 400 passed, 16 skipped, 658 subtests.

@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 test Pull requests that add or correct tests (test: subject prefix) labels Oct 2, 2026
@JarryShaw

Copy link
Copy Markdown
Owner Author

NEEDS CHANGES at 9c8dc365c — opus cross-review. sentinels.py is clean and every claim about it verified; the blocker is in the test file.

Six maintainer quotations still survive in tests/corekit/test_enum_lookup_reparent_930_unit.py — at :29, :31-32, :32-33, :66, :467-468 and :469. The worst is the last group: paragraph 2 of InheritedQuietnessTests's docstring was converted at :452-456 while paragraph 4's quotations fifteen lines below were not, so one __doc__ now shows both forms.

The cause is a count in this issue that is wrong, and a pass that implemented the list instead of measuring. #987 says there are "two further" I prefer (2) directly quotations in this file. There are three — git show origin/main:… | grep -n 'prefer (2)' gives lines 33, 202 and 454. The pull request converted 202 and 454 exactly as listed, and :33 survived. That is the failure docs/source/contributing/conventions/documentation.rst:224 names: re-derive a count, never copy one. I have corrected the figure in this issue's body.

One reading worth recording, because it would otherwise be used to dismiss this. The tests/ exemption does not cover quotations. The conventions page carries two separate rules in its "Paraphrasing a Ruling" section — do not quote the owner verbatim, which has no carve-out, and name the issue rather than the pull request, which is what the changelog-and-tests/ exemption attaches to. I checked the page directly. So the #940 and #935 pull-request citations stay exactly as they are, and only the quoted wording changes.

Also found: a length filter is what hid :469, a two-character quotation. The re-scan after the fix is required to use no minimum length.

Verified otherwise, and the citation fix came out better than I credited it. sentinels.py carries zero surviving maintainer quotations; the three left-alone spans are correctly classified — two documentation section titles and the docstring quoting its own caveat. The #937-to-#719 correction is right in both directions, and the quotation it removed rendered a symbol that never existed in this tree, which the docstring contradicted two lines above. The hedge at the unsettled-naming site was not hardened — the replacement explicitly denies a settled rule. Prose-only reproduced exactly: 271 and 2800 tokens, sequences identical, ASTs equal with docstrings blanked, every differing string token a docstring, no assertion touched, line length 98 and 121 unchanged, and no :role: target introduced. tests/corekit 400 passed / 16 skipped / 658 subtests.

Fix dispatched. Label stays review: pending until the new head has a verdict.

@JarryShaw JarryShaw added review: needs-changes Cross-review at the current head says changes are required; see the verdict comment and removed review: pending No verdict for the current head - never reviewed, or the head moved since the last one labels Oct 2, 2026
JarryShaw added a commit that referenced this pull request Oct 2, 2026
The cross-review on #992 found six maintainer quotations surviving in
tests/corekit/test_enum_lookup_reparent_930_unit.py, one pair inside the very
docstring whose second paragraph the first pass had already converted -- so a
single __doc__ showed both forms fifteen lines apart.

The first pass implemented #987's remainder list rather than measuring. That
list said two "I prefer (2) directly" quotations; grep over main gives three,
at lines 33, 202 and 454, and only the last two were converted. The issue body
is corrected, and the scan this time sets no minimum span length -- one of the
six was two characters long and a length filter is what hid it.

- The #935 lean and the two #940 quotations at :29-33 become one statement of
  what each settled, keeping the pull-request citation.
- #933's reversal is paraphrased differently at the two sites that draw on it,
  because they make different points: the module docstring takes what the
  ruling settled, while the class docstring takes why an earlier revision of
  this file had pinned the opposite.
- The prose said the follow-up came four minutes after the first answer. The
  comments are 21:32:21Z and 21:37:17Z, so 4m56s; now "a few minutes later",
  which is what the evidence carries.

The pull-request citations stay. tests/ is exempt from the name-the-issue rule
per docs/source/contributing/conventions/documentation.rst:203, but that
exemption does not reach the no-verbatim rule at :184, which has no carve-out.

Prose only: token sequences identical with strings masked, both differing
string tokens are docstrings, the AST with docstrings blanked compares equal,
and maximum line length stays 121. A re-scan finds zero maintainer quotations.
@JarryShaw
JarryShaw force-pushed the docs/987-sentinels-reparent-statements branch from 9c8dc36 to b47b9b4 Compare October 2, 2026 17:35
@JarryShaw

Copy link
Copy Markdown
Owner Author

Fixed and pushed as b47b9b435, rebased onto main at bd3294e52. All six quotations converted; a re-scan with no minimum span length finds zero maintainer quotations left in the file.

The two #933 sites got different paraphrases rather than one copied twice, which is the right call and not what I asked for: the module docstring states what the ruling settled, while the class docstring states why an earlier revision of this file had pinned the opposite. They were drawing different points from the same comment.

It also found a factual error beyond its brief, which I verified: the prose said the follow-up ruling came four minutes after the first answer. The comments are 21:32:21Z and 21:37:17Z — 4m56s. Now "a few minutes later", which is what the evidence actually carries rather than a precision it cannot.

Verified by me rather than relayed: token sequences identical with every string masked, both differing string tokens are docstrings, the AST with docstrings blanked compares equal, maximum line length stays 121, and no assertion depended on any of the quoted text. The #940 and #935 pull-request citations are untouched.

Label back to review: pending; a fresh cross-review is running against b47b9b435.

@JarryShaw JarryShaw added review: pending No verdict for the current head - never reviewed, or the head moved since the last one and removed review: needs-changes Cross-review at the current head says changes are required; see the verdict comment labels Oct 2, 2026
@JarryShaw

Copy link
Copy Markdown
Owner Author

GOOD TO GO at b47b9b435 — opus cross-review, round 2, no blocking finding. I am holding the label at review: pending anyway, because two of its three non-blocking findings are about the prose being inaccurate, and in a pull request whose purpose is prose accuracy I would rather fix those than ship them. Both are dispatched.

The two #933 sites describe the same event incompatibly. :67 says the owner reversed an earlier answer; :470 says he clarified. A reversal is a change of mind and a clarification is not, so this is a difference of fact rather than of the two sites' different jobs. One verb at both sites.

The class docstring dissolves a fact into a perception. It says the first answer "was read as keeping them loud … on the strength of that reading". I verified why that is wrong: #933's body pre-labels its own option 2 as a refusal — line 15 reads 2. **No** — a get_all miss is a genuine failure the caller should see loudly. The bare answer selected a numbered option that already meant keep-loud, so reading it that way was the only reading the question admitted, not a reader's latitude. main's wording was the more accurate claim. Note this is the inverse of the failure this series keeps hitting — not a hedge hardened into a fact, but a fact softened into an impression. Both are accuracy defects and this one shifts the error onto the reader.

Also going in: "five minutes later" restored in place of "a few minutes", since 4m56s rounds to five and this file is otherwise precise about numbers.

One correction to my own brief, which the review caught. I told the worker that :38's "Backport support for original codes" quotes a deleted docstring. The two overrides are gone, but the phrase is not — it survives in mh.py's own prose at :593 and :713, and as a live docstring in ten generated const/vendor files. Leaving it alone was right for a better reason than I gave, and converting it in isolation would have created a cross-file divergence.

Verified otherwise, with the scan this time independent of any count: four passes plus a search for thirteen known maintainer utterances and for emphasis-wrapped quote spans — zero hits, and exactly the two legitimate survivors. Prose-only reproduced exactly (271 and 2800 tokens, sequences identical, ASTs equal with docstrings blanked), all six differing string tokens are docstrings, no :role: target introduced at all rather than merely none dangling, the #: comment change confirmed separately via COMMENT token counts, and no assertion depends on any former wording. The #935/#940 compression preserved the hedge, and the (2) disambiguation is load-bearing — #935's own option 2 was something else entirely.

Part of #987. Five quotations across two files become statements, and one
citation is corrected from authority to provenance.

sentinels.py's comment above ABSENT read "per GitHub issue #937" for the fact
that ABSENT is private by documentation rather than by underscore. That is a
what-changed statement, not a ruling attribution: #937 is the SCREAMING_SNAKE
rename, and its own body attributes the ruling to #719, which carries it. Now
written with an action verb naming the issue the change belongs to.

- Module docstring: the one-shared-module choice on #911 stated rather than
  quoted, naming what it was chosen over.
- NoDefaultType: the dedicated-class ruling and the unsettled-naming remark,
  both given in review of the work for #857, stated as what they settled.
- AbsentType: the rename ruling on #719 stated, including that documenting
  ABSENT as private replaces the underscore.
- tests/corekit: two "I prefer (2) directly" quotations become statements. The
  pull-request citations stay, since tests/ is exempt from the issue-citation
  rule per docs/source/contributing/conventions/documentation.rst:203-210, and
  the wording matches what landed for the same ruling in #991.

Three other quoted spans are left alone deliberately: two are documentation
section titles and one is a caveat the docstring makes about the code, none of
them a maintainer's words.

Prose only: token sequences identical with strings masked in both files, the
AST with docstrings blanked compares equal, and maximum line length is
unchanged at 98 and 121.
The cross-review on #992 found six maintainer quotations surviving in
tests/corekit/test_enum_lookup_reparent_930_unit.py, one pair inside the very
docstring whose second paragraph the first pass had already converted -- so a
single __doc__ showed both forms fifteen lines apart.

The first pass implemented #987's remainder list rather than measuring. That
list said two "I prefer (2) directly" quotations; grep over main gives three,
at lines 33, 202 and 454, and only the last two were converted. The issue body
is corrected, and the scan this time sets no minimum span length -- one of the
six was two characters long and a length filter is what hid it.

- The #935 lean and the two #940 quotations at :29-33 become one statement of
  what each settled, keeping the pull-request citation.
- #933's reversal is paraphrased differently at the two sites that draw on it,
  because they make different points: the module docstring takes what the
  ruling settled, while the class docstring takes why an earlier revision of
  this file had pinned the opposite.
- The prose said the follow-up came four minutes after the first answer. The
  comments are 21:32:21Z and 21:37:17Z, so 4m56s; now "a few minutes later",
  which is what the evidence carries.

The pull-request citations stay. tests/ is exempt from the name-the-issue rule
per docs/source/contributing/conventions/documentation.rst:203, but that
exemption does not reach the no-verbatim rule at :184, which has no carve-out.

Prose only: token sequences identical with strings masked, both differing
string tokens are docstrings, the AST with docstrings blanked compares equal,
and maximum line length stays 121. A re-scan finds zero maintainer quotations.
Round 2's review found two accuracy defects in the paraphrases this pull
request had just written, and they pull in opposite directions from the one
this issue usually catches.

The class docstring said the owner's first answer "was read as keeping them
loud", and that an earlier revision pinned loud "on the strength of that
reading". That dissolves a fact into a perception and puts the error on the
reader. #933's body pre-labels its own option 2 as a refusal -- a get_all miss
being a genuine failure the caller should see loudly -- so the bare answer
selected a numbered option that already meant keep-loud. There was no other
reading available.

- The first answer is now stated as a bare refusal selecting the issue's own
  numbered option, with the file's earlier revision pinning loud on that basis.
- The two sites described the same event incompatibly, one as a reversal and
  one as a clarification. "I meant" may say something about intent, but intent
  is not recoverable from the thread; the effect on the recorded ruling was a
  reversal, and #933's own recording comment leads with that word. Both sites
  now say reversed.
- "a few minutes later" becomes "five minutes later". 21:32:21Z to 21:37:17Z
  is 4m56s, and this file is otherwise precise about numbers.
- The redundancy comparison preceded the ruling and the 20-call-site check did
  not, so the two are no longer described as one measurement. The call-site
  timing is left neutral because the thread does not settle it.

Prose only: token sequences identical with strings masked, both differing
string tokens are docstrings, the AST with docstrings blanked compares equal,
and maximum line length stays 121.
@JarryShaw
JarryShaw force-pushed the docs/987-sentinels-reparent-statements branch from b47b9b4 to 9a1779e Compare October 2, 2026 17:46
@JarryShaw

Copy link
Copy Markdown
Owner Author

Fixed and pushed as 9a1779e95, rebased onto main at 52167e331 now that #991 has merged.

Both accuracy defects are out. The first answer on #933 is stated as what it was — a bare refusal selecting the issue's own numbered option for keeping them loud — rather than as something that "was read as" keeping them loud, and the file no longer calls the same event a reversal in one place and a clarification in another. The worker settled the verb on evidence rather than preference: intent is not recoverable from the thread, whereas the effect on the recorded ruling is, and #933's own recording comment leads with that word.

"five minutes later" restored, and the two measurements separated — the redundancy comparison preceded the ruling, the 20-call-site check did not, and its timing is left neutral because the thread does not settle it. That last restraint is right: the alternative was inventing an order to make the sentence read better.

Verified by me: clarified now appears nowhere in the file, token sequences identical with every string masked, both differing string tokens are docstrings, the AST with docstrings blanked compares equal, maximum line length stays 121. The worker also reported catching itself pushing a line to 179 characters mid-edit and fixing it before finishing — worth noting because that is the kind of thing a silent pass hides.

Label stays review: pending; a fresh cross-review is running against 9a1779e95.

@JarryShaw

Copy link
Copy Markdown
Owner Author

NEEDS CHANGES at 9a1779e95 — opus cross-review, round 3. One blocking defect, and it landed exactly where I asked the review to push hardest.

:40 asserts an ordering the thread contradicts, and it replaced a sentence that was true. Round 3 split one measurement sentence into two and wrote "Checked when acting on it" for the 20-call-site grep, on the reasoning that the thread does not settle whether that grep preceded the ruling. That reasoning is right about the ruling boundary — but the sentence asserts the acting boundary, and there the thread is airtight. I verified the sequence on #940 myself:

  • 01:57:57Z the grep is promised, unconditionally, to be reported before anything is touched
  • 02:00:58Z the ruling lands, three minutes later
  • 02:01:29Z a single comment carries both the 20-call-site result and the announcement that the rewrite is being dispatched

Result and dispatch in one comment, so the check provably preceded the acting — and that holds on both branches of the remaining ambiguity. The base text had said "Measured before acting on that final ruling" as one sentence covering both halves, which was accurate for both. Splitting them was the right instinct, since the alias comparison is provably pre-ruling while the grep is only provably pre-acting; the new wording just made the second half false. The fix is one word, keeping the split.

Two things the review settled that I had flagged as risks, and both came back against me:

The over-correction risk on the #933 refusal does not materialise, and the evidence is stronger than the fix claimed. #933's body poses a direct yes/no question and labels its branches 1. **Yes** and 2. **No**; the owner's entire first answer was the word No. — the literal label of option 2, not merely something aligned with it. The docstring attributes the structure to the issue's own numbered option and keeps "bare refusal", so the reader still knows the answer carried no reasoning. Right division, no over-claim.

"Reversed" is not merely defensible but required. Calling it a clarification would imply the first answer was unclear or misread — which is the exact defect round 3 had just removed, since the answer was determinate. So "clarified" would have reintroduced it two paragraphs later.

Also non-blocking and going in with the one-word fix: :43 is 107 characters where its paragraph otherwise wraps at 73-91 — residue of a 179-character line caught mid-edit that came back under the limit without the paragraph being re-flowed. "Maximum line length unchanged" is true and hides it, which is why it is worth fixing now.

Verified otherwise: 271 and 2800 tokens, sequences identical, ASTs equal with docstrings blanked, and every differing string token checked as a docstring on both sides rather than only at head — zero non-docstring string differences, so nothing moved that could change behaviour. The scan found exactly the two legitimate survivors and no third. Rebase clean, three commits, nothing arrived from main.

@JarryShaw JarryShaw added review: needs-changes Cross-review at the current head says changes are required; see the verdict comment and removed review: pending No verdict for the current head - never reviewed, or the head moved since the last one labels Oct 2, 2026
Round 3's review found the previous round had replaced a true sentence with a
false one. Splitting the two measurements was right -- the alias comparison is
provably pre-ruling, the 20-call-site grep only provably pre-acting -- but
"Checked when acting on it" asserts an ordering #940 contradicts:

- 01:57:57Z the grep is promised, unconditionally, to be reported before
  anything is touched;
- 02:00:58Z the ruling lands;
- 02:01:29Z one comment carries both the grep's result and the announcement
  that the rewrite is being dispatched.

Result and dispatch in the same comment, so the check preceded the acting on
every reading: if the grep ran in the three-minute wait it was before the
ruling too, and if it ran in the following 31 seconds it still preceded the
dispatch. The base text had said "Measured before acting on that final ruling"
across both halves, which was accurate for both.

- "when acting on it" becomes "before acting on it", keeping the split.
- Re-flow the paragraph at 91 columns. One line had been left at 107 where its
  neighbours run 73-91, the residue of a 179-character line caught mid-edit
  that came back under the limit without the paragraph being re-wrapped. Lines
  over 95 characters go from two to one, and the survivor is pre-existing.

Prose only: token sequences identical with strings masked, both differing
string tokens are docstrings, the AST with docstrings blanked compares equal,
and maximum line length stays 121.
@JarryShaw

Copy link
Copy Markdown
Owner Author

Fixed and pushed as f01e8625a — a fast-forward this time, no force needed.

The word is corrected to "before acting on it", keeping the split the previous round had introduced, and the 107-character line is gone: lines over 95 characters go from two to one, and the survivor is pre-existing and untouched. Verified by me at [(43, 107), (90, 121)] before and [(90, 121)] after.

Prose-only re-checked by me: 2800 tokens identical with strings masked, the AST with docstrings blanked compares equal, both differing string tokens are docstrings.

This round is a good illustration of why the verdict is worth more than the diff. The blocking defect was introduced by the previous round's fix, which had been dispatched to improve accuracy and did improve it in two places while quietly breaking a third — and the sentence it broke had been correct on main all along. The review that caught it was briefed to attack that exact item, which is the only reason a one-word error in a 2800-token file surfaced.

Label stays review: needs-changes until the new head has its own verdict; a round-4 review is running against f01e8625a.

JarryShaw added a commit that referenced this pull request Oct 2, 2026
Round 3's review found the parenthetical this pull request added asserting the
opposite of what #842 says, and that instruction was mine. #842 carries two
AppType exceptions, not one: the issue body has the routing exception, and
comment 5852772329 answers whether the generic register_alias requires an
existing member with "always, unless AppType and the concrete enumerations
need to call it on non-existing members". That unless is a carve-out on
exactly the question the parenthetical said the issue was not about.

main's text was lossy by omission -- it carried the first half of that sentence
and dropped the unless. The parenthetical turned the omission into a positive
false claim, which is worse, and is the third way this pull request has lost
the same qualifier: round 1 invented an exception no registry implements,
round 2 flattened a modal into a universal, round 3 denied the hedge existed.

- The passage now states what #842 settled and what it left open, then answers
  the open part from behaviour: AppType's override requires the port to carry a
  member of that registry already. It names the concrete enumerations too,
  which the comment does and my instruction had dropped.
- "stricter still" is gone rather than qualified. The base tests membership in
  _value2member_map_ and AppType tests __registry__.getlist(port), so it was
  never a strengthening of one predicate.
- Two untouched lines said every generated enumeration under pcapkit.const
  inherits from EnumRegistry, which the sentence added last round contradicts.
  Both now say registry: the three closed sets are generated and inherit
  EnumLookup, so "generated" was no escape hatch.
- The paragraph is re-flowed to 75-82 columns. The edit had left a 52-column
  line whose successor fit, the same defect #992 was sent back for.

Prose only, at the strictest setting: 753 tokens identical with no exclusions
at all and only strings masked, both differing string tokens are docstrings,
the AST with docstrings blanked compares equal, maximum line length stays 96.
The four enum test files: 130 passed, 112 subtests.
@JarryShaw

Copy link
Copy Markdown
Owner Author

GOOD TO GO at f01e8625a — opus cross-review, round 4. No blocking finding, and it answered the question I set it by disagreeing with me.

I asked whether "before acting on it" now claims less than the record supports, since the sentence deliberately avoids saying "before the ruling". It does not, and the evidence runs the other way: the grep is promised in the future tense at 01:57:57Z — to be reported before anything is touched — which is positive evidence it had not yet run at that point. So the record's only bound is the interval from 01:57:57Z to 02:01:29Z, and that interval straddles the 02:00:58Z ruling. "Before the ruling" would therefore be an over-claim, and the 31-second gap between ruling and dispatch is an inference about timing rather than a timestamp a docstring may assert. The hedge is load-bearing, not padding.

It also confirmed the self-report does not help: the "all measured before you ruled" phrase governs the paragraph it opens, and the 20-call-site result sits in the next one.

The re-flow changed exactly one word in the entire module docstring. I verified that independently: 1189 words before and after, a single diff opcode, when → before. Nothing else in the re-wrapped region moved. Lines over 95 characters went from [(43, 107), (90, 121)] to [(90, 121)], and that survivor is byte-identical to main — an assertion transcript inside a docstring that cannot be broken without misquoting the output.

Also verified: no literal or role split across a line break, checked by regex and by parsing the paragraph through docutils — every literal came through as one node, and render diagnostics are 42 on both sides. Prose-only on both files against both the previous head and main, with every differing string token confirmed a docstring on both sides. Four commits, nothing arrived from main. Exactly the two sanctioned quote spans survive, scanned with no minimum length and including curly quotes.

One thing recorded for a later pass rather than fixed here: :634 claims no call site in this tree ever passed get a non-int, non-str key, where the #940 evidence covers the 20 call sites of the two overrides. That is a wider claim than the thread establishes, and it anchors much the same check to a third moment. It is byte-identical to main, so neither this round nor any commit in this pull request touched it — it belongs to #719's prose sweep.

Labelling review: good-to-go. Unpublished and unmerged — yours to merge.

@JarryShaw JarryShaw added review: good-to-go Cross-review at the current head says ready; CI state is separate and removed review: needs-changes Cross-review at the current head says changes are required; see the verdict comment labels Oct 2, 2026
@JarryShaw
JarryShaw merged commit 11c0c21 into main Oct 2, 2026
73 checks passed
@JarryShaw
JarryShaw deleted the docs/987-sentinels-reparent-statements branch October 2, 2026 18:28
JarryShaw added a commit that referenced this pull request Oct 2, 2026
Round 3's review found the parenthetical this pull request added asserting the
opposite of what #842 says, and that instruction was mine. #842 carries two
AppType exceptions, not one: the issue body has the routing exception, and
comment 5852772329 answers whether the generic register_alias requires an
existing member with "always, unless AppType and the concrete enumerations
need to call it on non-existing members". That unless is a carve-out on
exactly the question the parenthetical said the issue was not about.

main's text was lossy by omission -- it carried the first half of that sentence
and dropped the unless. The parenthetical turned the omission into a positive
false claim, which is worse, and is the third way this pull request has lost
the same qualifier: round 1 invented an exception no registry implements,
round 2 flattened a modal into a universal, round 3 denied the hedge existed.

- The passage now states what #842 settled and what it left open, then answers
  the open part from behaviour: AppType's override requires the port to carry a
  member of that registry already. It names the concrete enumerations too,
  which the comment does and my instruction had dropped.
- "stricter still" is gone rather than qualified. The base tests membership in
  _value2member_map_ and AppType tests __registry__.getlist(port), so it was
  never a strengthening of one predicate.
- Two untouched lines said every generated enumeration under pcapkit.const
  inherits from EnumRegistry, which the sentence added last round contradicts.
  Both now say registry: the three closed sets are generated and inherit
  EnumLookup, so "generated" was no escape hatch.
- The paragraph is re-flowed to 75-82 columns. The edit had left a 52-column
  line whose successor fit, the same defect #992 was sent back for.

Prose only, at the strictest setting: 753 tokens identical with no exclusions
at all and only strings masked, both differing string tokens are docstrings,
the AST with docstrings blanked compares equal, maximum line length stays 96.
The four enum test files: 130 passed, 112 subtests.
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) test Pull requests that add or correct tests (test: subject prefix)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant