docs(changelog,protocols): credit the registry-leak fixes to the right layer - #1009
Conversation
dea7eaa to
f113c5d
Compare
|
NEEDS CHANGES at 1. A fifth site, which this change would have made wrong. 2. A width claim of mine that was false. Also took its style note and dropped the mannered "there" from the What it confirmed by its own derivation, from the issues' and PRs' bodies rather than from my summary: #425's body states outright that #421 covered the One residual imprecision it recorded and did not ask me to change: describing #425/#428 as "the option, chunk and block registries" is the issue title's shorthand and under-describes the sixteen registries #428 shipped, while this same change leans on that broader scope to justify keeping the HTTP/2 and PCAP-NG citations. It matches existing house wording, so I left it. It did not build the docs, so the rendered appearance of the three-item aside at |
|
Any updates? |
|
CI is clean at Where things stand:
So the label stays I will post the verdict here as soon as it lands. If you would rather not wait on it, the diff is six files of prose with CI green and the round-1 findings already addressed — but I would not call it ready over my own signature until something has looked at the fixes. |
…t layer * Three separate registry-leak defects were fixed at three layers -- :issue:`421`/:pr:`426` for next-layer dispatch, :issue:`425`/:pr:`428` for the option, chunk and block registries, :issue:`555`/:pr:`560` at the schema layer. Four sites credited the wrong pair. * `1.5.0.rst:540` named :issue:`425`/:pr:`428` as the fix "at this layer" in a passage about next-layer dispatch; it now names all three. * `schema/schema.py` twice called #421 and #425 jointly "the protocol-layer ``__proto__`` family"; #425 is the option, chunk and block family. Two test docstrings carried the same conflation, and one called #421/#425/#428 the schema-layer form, which is #555. * `protocol.py`'s "are all that same defect" overstated its clause: the three fixed registries retaining a lookup *miss*, where the sentence is about a memoised *resolved class* going stale under reload. * `corekit/sentinels.py` cited that note, by those three issue numbers, as evidence that reload staleness is tracked. Narrowing the note would have made the two contradict, so the pointer now names what the note argues. * Regenerated `CHANGELOG.md`. tests/project/ 268 passed / 864 subtests; tests/protocols/schema/ test_enum_schema_registry_unit.py and tests/protocols/ test_dispatch_default_resolution_unit.py 16 passed; tests/protocols/misc/test_pcapng_unit.py 93 passed / 1773 subtests.
f113c5d to
a280156
Compare
|
GOOD TO GO — opus delta re-review, a different model from the sonnet agent that authored this. Both round-1 findings are properly fixed and neither fix introduced anything. On the On the reflow it proved render-identity instead of assuming it — folding whitespace over the whole docstring from both commits gives byte-identical text, so the mid-sentence break after "cover" changes nothing. And it swept for further sites by a method that does not depend on the issue numbers, since the numbers are what missed Two bookkeeping corrections it made to my own notes, both verified and both mine. That second one was wrong in the commit message, which said "both edited test files". I have amended the message to carry the accurate per-file numbers. The new head is |
|
Ready to merge at The Unpublished and unmerged, awaiting you. |
Please follow the guide below
make pylint,make mypy,make isort)make testpasses, and a test case covers the changedocs/source/changelog/and regeneratedCHANGELOG.md, if the change is user-visibleThis is a prose-accuracy change with no behaviour to cover by a new test, so the
make testbox is left unticked rather than claimed: the full suite exhausts memory on the machine this was prepared on. I rantests/project/(268 passed, 1 skipped, 864 subtests), the files covering the edited docstrings (416 passed, 16 skipped, 658 subtests), andtests/protocols/misc/test_pcapng_unit.py(93 passed, 1 skipped, 1773 subtests). CI's matrix is the authority on the rest.What is the purpose of your pull request?
fix— corrects a defectfeat— adds a featureperf— changes performance, not behaviourrefactor— changes neither behaviour nor performancetest— tests onlydocs— documentation onlyci— workflows or build toolingchore— anything elseDescription of your pull request and other information
Part of #719. Three separate registry-leak defects were fixed at three different layers, and four places credited the wrong pair. Resolved against the API rather than inferred from context:
__proto__registryEnumSchemaregistries retain every looked-up codeThe corrections:
docs/source/changelog/1.5.0.rst:540named Option, chunk and block registries leak on lookup miss, the same way __proto__ did #425/protocols: stop option, chunk and block dispatch writing to shared registries #428 as the defect fixed "at this layer" in a passage whose own words are "next layer dispatch resolves a descriptor there on a per-frame path". It now names all three layers, matching whatprotocols/protocol.pyalready said correctly.protocols/schema/schema.py, twice, called Parsing a packet pollutes the shared __proto__ registry, so a later register_* warns about a protocol nobody registered #421 and Option, chunk and block registries leak on lookup miss, the same way __proto__ did #425 jointly "the protocol-layer__proto__family". Option, chunk and block registries leak on lookup miss, the same way __proto__ did #425 is the option, chunk and block family — a different registry set. Separated at both sites; the EnumSchema registries retain every looked-up code, so a lookup miss leaks and contaminates later parses #555 citation beside them was already right.tests/protocols/schema/test_enum_schema_registry_unit.pycarried the same conflation, andtests/protocols/misc/test_pcapng_unit.pycalled a per-namespaceOption.registry[ns][code]leak "the schema-layer form of the Parsing a packet pollutes the shared __proto__ registry, so a later register_* warns about a protocol nobody registered #421/Option, chunk and block registries leak on lookup miss, the same way __proto__ did #425/protocols: stop option, chunk and block dispatch writing to shared registries #428 defect" — the schema layer is EnumSchema registries retain every looked-up code, so a lookup miss leaks and contaminates later parses #555.protocols/protocol.pyended "…are all that same defect". That overstated the clause it attaches to: the three issues are about registries retaining a lookup miss, where the sentence is about a memoised resolved class going stale underimportlib.reload. Narrowed to name the shared property precisely. The rest of that passage, landed in docs(pep,tests): correct the checksum protocol count and the registry-leak lineage #1007, is untouched.Deliberately left as they are.
test_dispatch_default_resolution_unit.py:33and:140say "the #426/#428 symptom" in a next-layer-only test. That is accurate — the symptom is a laterregisterwarning about an entry no caller asked for, which both fixes share — and the file header already states the three-way split. Likewise1.5.0.rst:1605, which cites the pull requests without their issues, and the#425-as-defect-class citations in the HTTP/2, IPv6-extension, MH, PCAP-NG and SCTP tests, since #428 covered all sixteen registries per its own description.corekit/sentinels.pyis in the diff for a reason worth stating. It cited_lookup_next_layer's docstring note, by those three issue numbers, as the evidence that reload staleness is a tracked defect class. Narrowing that note to say the three are a retention defect "of a lookup miss rather than of a resolved class" would have made the two texts contradict each other — a contradiction this change would have introduced, since onmainthey agreed (both wrong, by this change's own thesis). The pointer now names what the note actually argues, and the reload-staleness evidence rests ontest_no_stale_class_survives_a_module_reload, which pins exactly that.CHANGELOG.mdis regenerated andutil/changelog_md.py --checkreports it in step. No role sits inside**bold**,*italic*or a literal, which renders as literal text with no Sphinx warning. Added lines are at most 74 characters, within every block they sit in.