Skip to content

chore(docs): centralise changelog entries for unreleased versions - #2483

Open
JarryShaw wants to merge 49 commits into
mainfrom
chore/2449-centralize-changelog
Open

JarryShaw wants to merge 49 commits into
mainfrom
chore/2449-centralize-changelog

Conversation

@JarryShaw

@JarryShaw JarryShaw commented Oct 31, 2026 •

Copy link
Copy Markdown
Owner

Please follow the guide below

  • Searched for similar pull requests
  • Followed the coding style
  • make test passes, and a test case covers the change (tests/project/test_pr_template_commit_types_1102_unit.py and tests/project/test_python_versions_update_1660.py run)
  • Described the user-visible change below and left its changelog entry to the maintainer (N/A)

What is the purpose of your pull request?

  • chore — anything else

Description of your pull request and other information

Closes #2449

Feature PRs no longer add entries under docs/source/changelog/ or to CHANGELOG.md; the maintainer writes them centrally. CONTRIBUTING.md says so, and this PR also rewords the template's changelog box to match (not deferred). util/update_python_versions.py and its test follow the new box wording. No runtime code or release content changed.

@JarryShaw JarryShaw added chore Maintenance work: tooling, repo hygiene, no library behaviour change review: running A cross-review is in flight against the current head - no verdict yet labels Oct 31, 2026
@JarryShaw JarryShaw moved this to In review in PyPCAPKit Oct 31, 2026
@JarryShaw

Copy link
Copy Markdown
Owner Author

NEEDS CHANGES (Sonnet, 30953ed00). CONTRIBUTING.md change is correct and contained; no code, release content or counts changed.

  • .github/PULL_REQUEST_TEMPLATE.md still tells contributors to add an entry and regenerate CHANGELOG.md, and links to the section this PR rewrites. Reword it in this PR, with util/update_python_versions.py (~L1301) and tests/project/test_python_versions_update_1660.py (~L879), which pin the current wording.
  • If the template is instead deferred, the body must say so and Closes #2449 becomes Refs #2449.
  • Non-blocking: "Feature pull requests" (L61) is narrower than L28; "Open" (L61) is undefined; L28 is 125 columns.

@JarryShaw JarryShaw added review: needs-changes Cross-review at the current head says changes are required; see the verdict comment and removed review: running A cross-review is in flight against the current head - no verdict yet labels Oct 31, 2026
@JarryShaw
JarryShaw force-pushed the chore/2449-centralize-changelog branch from 30953ed to 4f2af68 Compare October 31, 2026 02:09
@JarryShaw JarryShaw added review: running A cross-review is in flight against the current head - no verdict yet and removed review: needs-changes Cross-review at the current head says changes are required; see the verdict comment labels Oct 31, 2026
@JarryShaw

Copy link
Copy Markdown
Owner Author

NEEDS CHANGES (Sonnet, 4f2af68ee). Regex and pinned test verified; no code changed.

  • CONTRIBUTING.md ~L69 is 102 columns. Break before "the" so line 70 starts "the .rst entry, then regenerates:".
  • PULL_REQUEST_TEMPLATE.md ~L10: "described … above" should say "below" (the description is below the checklist); update test_python_versions_update_1660.py ~L879 to match.
  • Non-blocking: "Feature branches" (CONTRIBUTING ~L64), "docs-only" in the body (the diff touches util/ and tests/), "open versions" in the title.

@JarryShaw JarryShaw added review: needs-changes Cross-review at the current head says changes are required; see the verdict comment and removed review: running A cross-review is in flight against the current head - no verdict yet labels Oct 31, 2026
Pull requests for user-visible changes each adding a bullet to the unreleased
version's changelog file conflict on every merge. CONTRIBUTING.md now says the
maintainer writes those entries centrally, and that such PRs leave the file out
of the diff. The PR template's changelog box and the generator that annotates
it follow the same rule.

Refs #2449
@JarryShaw
JarryShaw force-pushed the chore/2449-centralize-changelog branch from 4f2af68 to a9db8a4 Compare October 31, 2026 02:21
@JarryShaw JarryShaw changed the title chore(docs): centralise changelog entries for open versions chore(docs): centralise changelog entries for unreleased versions Oct 31, 2026
@JarryShaw JarryShaw added review: running A cross-review is in flight against the current head - no verdict yet and removed review: needs-changes Cross-review at the current head says changes are required; see the verdict comment labels Oct 31, 2026
@github-actions

github-actions Bot commented Oct 31, 2026 •

Copy link
Copy Markdown
Contributor

Coverage: 94.45% (unit tier, Python 3.15, 3bd890f28, Unit Tests run success)

Package Statements Missed Branches Partial Cover
pcapkit (top level) 104 4 20 2 95.16%
pcapkit/const 20918 175 2908 156 98.57%
pcapkit/corekit 2889 76 928 37 96.83%
pcapkit/dumpkit 286 3 102 3 98.45%
pcapkit/foundation 3505 27 1216 32 98.75%
pcapkit/interface 138 4 52 3 96.32%
pcapkit/protocols 22785 155 5906 127 99.00%
pcapkit/toolkit 961 26 342 8 96.62%
pcapkit/utilities 559 7 150 5 98.31%
pcapkit/vendor 5590 2286 1280 214 55.75%

Per-file detail: the coverage-html artifact of this run.

@JarryShaw JarryShaw added review: pending No verdict for the current head - never reviewed, or the head moved since the last one review: good-to-go Cross-review at the current head says ready; CI state is separate and removed review: running A cross-review is in flight against the current head - no verdict yet review: pending No verdict for the current head - never reviewed, or the head moved since the last one labels Oct 31, 2026
@JarryShaw

Copy link
Copy Markdown
Owner Author

Local-only commit 30953ed forks from 4ca3f30 and is redundant with origin a9db8a4 (rebase onto origin is empty). Nothing to push. Local commit to be dropped.

@JarryShaw

JarryShaw commented Oct 31, 2026 •

Copy link
Copy Markdown
Owner Author

Add to convention and session/sweep memo: upon each release, amend inline or post updates in thread to the PEP's Discussion post. PEP doc is source of truth but aim to keep the Discussion also up-to-date.

@JarryShaw

Copy link
Copy Markdown
Owner Author

Ruling reconciled: upon each release, amend pep.rst inline and update Discussion #106 ("PyPCAPKit Enhancement Proposals") to match -- the page stays authoritative. Documented in process.rst (20f39eb73) and in the sweep memo.

@JarryShaw

Copy link
Copy Markdown
Owner Author

Owner ruling (2026-11-01), paraphrased: changelog entries are consolidated in this PR and stripped from the open feature PRs, so they stop conflicting. The ruling named #2383, which is a merged HIP fix, so I've taken it to mean this PR (it implements #2449's practice). Say so if that's wrong.

In flight on this branch: merge current main, add #2509's Radiotap entry, and reconcile the 1.6.0 entries this merge wave left stale. When that is pushed, the label resets to review: pending and a fresh review runs.

- add entries for the user-visible changes merged since 1.5.1 that had
  none: LinuxSLL, ICMP/ICMPv6, IGMP, TLS/DTLS, SSLv2, DTLS reassembly,
  IP_Pseudo, the IPv6 extension-header walk and the IPv6_Ext id() and
  membership fixes
- add the Radiotap entry from #2509
- drop the FRAD, Netlink and GRE entries' stale "remain Raw" and
  "tracked separately" notes, and cite each entry's own PR and issue
- record the centralised-changelog rule this PR introduces
- regenerate CHANGELOG.md; util/changelog_md.py --check passes
- Breaking: FrameRecord is an Info and TLSKeyLog.entries a TLSKeyLogEntries
  data model, not dicts (#2734); a new entry with 1.5.1's behaviour, and
  pickles checked loading both ways.
- Fixed: MH's CGA Parameters maker builds a data model's raw extension and a
  schema without public_key_test (#2732), into the makers' Fixed entry.
- Fixed: a capture cut inside or in front of an option area reads as a short
  read in MH, HOPOPT and IPv6-Opts, and an odd item list raises ProtocolError
  (#2731, ab7be2f, which the merge of 07ceaf7 also brings in); the
  short-read ruling into the conventions entry.
- Old values measured against v1.5.1.
- CHANGELOG.md regenerated; util/changelog_md.py --check passes.


- Breaking: a short CALIPSO, SMF_DPD or MPL Opt Data Len raises ProtocolError,
  where 1.5.x raised FieldValueError, and a cut after the type octet reads
  short (#2737), a new entry; AppType.__registries__ is an Info, into the
  #2734 entry (#2735).
- Changed: const packages import their enumerations lazily through
  pcapkit.utilities.lazy.lazy_exports (#2735); the docs extra pins
  sphinx-autodoc-typehints 3.17.4 (#2742), as 1.5.0 recorded its pin.
- Fixed: the dumps keep a field renamed for clashing with an Info builtin
  name (#2736).
- Folded: the GraalPy leg's timeout and shards into the CI-legs entry
  (#2741); the #2735 and #2737 rulings into the conventions entry.
- No entry for the docs-only #2744 and #2746.
- 1.6.0's :func:`bytes` role is :class:`bytes`, so the changelog pages build
  with no nitpicky warning. Old values measured against v1.5.1.
- CHANGELOG.md regenerated; util/changelog_md.py --check passes.
@JarryShaw

Copy link
Copy Markdown
Owner Author

Folds 20 and 21 pushed: e331c1a8d → e915af74d. This includes merges of main at 07ceaf7c1 and at dea098b15.

#2735's entry names pcapkit.utilities.lazy as main has it today. A later fold renames it once #2748 merges.

- Fixed: a layer rebuilt by from_data reports its payload's messages once,
  where 1.5.x logged them twice, and IPv4 and the frame-end layers record a
  cut as their own short read (#2738), a new entry; old values measured
  against v1.5.1.
- Folded into unreleased entries (#2738): a standalone IGMPv3 Report sized
  by its record count, into the IGMP entry; the recorded cuts' TRUNCATED
  status, TSO IPv4 and ICMPv4 included, into the checksum entry; ListField's
  count, into its zero-fill entry; the quiet rebuilt payload, into the
  conventions entry.
- #2748: pcapkit.utilities.lazy becomes pcapkit.utilities.importlib in the
  lazy-import and conventions entries; the old name appears nowhere.
- No entry for the direct-pushed 21ec0a6, which has no pull request or
  issue to cite.
- CHANGELOG.md regenerated; util/changelog_md.py --check passes.
@JarryShaw

Copy link
Copy Markdown
Owner Author

Fold 22 pushed: e915af74d → fb64180eb, merging main at f45c82b5d. It adds a Fixed entry for #2738, folds #2738 into the IGMP, checksum, ListField and conventions entries, and renames utilities.lazy to utilities.importlib in the #2735 entry. changelog_md.py --check and the changelog tests pass, and the changelog pages build with no nitpicky warning.

JarryShaw added a commit that referenced this pull request Nov 3, 2026
The output of codemod-v2.py on 05e1137, with no hand edits.

- protocols/<layer>/<proto>.py and its schema/ and data/ modules become
  protocols/<layer>/<proto>/{protocol,schema,data}.py; each package
  __init__ exports its class alone, eagerly.
- The TLS record data models SSL reads move from tls/data.py to a new
  ssl/data.py, as pieces the family shares; tls/data.py keeps TLS.
- The schema/ and data/ trees and their aggregations go, with no alias:
  schema/schema.py is protocols/schema.py, data/data.py and data/protocol.py
  merge into protocols/data.py, and ipv6_option merges into ipv6_ext.schema.
- ProtocolBase.__init_subclass__ finds a class's schema and data in its own
  package and imports Raw's on demand.
- Imports, ModuleDescriptor strings, docs targets, paths and test specs are
  rewritten; released changelogs get every role target, 1.6.0 stays with
  #2483.
- versionremoved records every name v1.5.1 shipped that no longer resolves
  at its old path, read from the tag by a new util/shipped_names.py into a
  checked-in fixture; a re-export points at its defining module, and the
  address patterns #2614 removed unrecorded get their note too.
- The 1744 test gains TestShippedNames, which fails on any such name left
  unrecorded; tests that walked or pinned the old trees follow the new
  layout, two that pinned only the aggregations are deleted, and a new test
  pins the layout.

All modules import, protocol models are unchanged, every unittest leg and
project guard passes, and a non-editable docs build is warning-free.
JarryShaw added a commit that referenced this pull request Nov 4, 2026
The output of codemod-v2.py on 05e1137, with no hand edits.

- protocols/<layer>/<proto>.py and its schema/ and data/ modules become
  protocols/<layer>/<proto>/{protocol,schema,data}.py; each package
  __init__ exports its class alone, eagerly, and binds each public class
  its schema and data modules define as Schema_<name> and Data_<name>,
  outside __all__, in a block per role under a "# Header Schemas" or
  "# Data Models" heading whose isort: split keeps isort sorting each block
  in place, as ruled in review of #2753; protocol-family-grouping.rst shows
  the layout and the doc-claims test pins every __init__ to it.
- The TLS record data models SSL reads move from tls/data.py to a new
  ssl/data.py, as pieces the family shares; tls/data.py keeps TLS.
- The schema/ and data/ trees and their aggregations go, with no alias:
  schema/schema.py is protocols/schema.py, data/data.py and data/protocol.py
  merge into protocols/data.py, and ipv6_option merges into ipv6_ext.schema.
- ProtocolBase.__init_subclass__ finds a class's schema and data in its own
  package and imports Raw's on demand.
- Imports, ModuleDescriptor strings, docs targets, paths and test specs are
  rewritten; released changelogs get every role target, 1.6.0 stays with
  #2483.
- versionremoved records every name v1.5.1 shipped that no longer resolves
  at its old path, read from the tag by a new util/shipped_names.py into a
  checked-in fixture; a re-export points at its defining module, and the
  address patterns #2614 removed unrecorded get their note too.
- The 1744 test gains TestShippedNames, which fails on any such name left
  unrecorded; test_public_api leaves the ruled aliases out of its unlisted
  names; tests that walked or pinned the old trees follow the new layout,
  two that pinned only the aggregations are deleted, and a new test pins
  the layout and the aliases.

All modules import, protocol models are unchanged, every unittest leg and
project guard passes, and a non-editable docs build is warning-free.
JarryShaw added a commit that referenced this pull request Nov 4, 2026
The output of codemod-v2.py on 4f62f52, with no hand edits.

- protocols/<layer>/<proto>.py and its schema/ and data/ modules become
  protocols/<layer>/<proto>/{protocol,schema,data}.py; each package
  __init__ exports its class alone, eagerly, and binds each public class
  its schema and data modules define as Schema_<name> and Data_<name>,
  outside __all__, in a block per role under a "# Header Schemas" or
  "# Data Models" heading, as ruled in review of #2753. A [tool.isort]
  section in pyproject.toml keeps isort off these files, filter_files
  included; protocol-family-grouping.rst shows the layout and the
  doc-claims test pins every __init__ to it.
- The TLS record data models SSL reads move from tls/data.py to a new
  ssl/data.py, as pieces the family shares; tls/data.py keeps TLS.
- The schema/ and data/ trees and their aggregations go, with no alias:
  schema/schema.py is protocols/schema.py, data/data.py and data/protocol.py
  merge into protocols/data.py, and ipv6_option merges into ipv6_ext.schema.
- ProtocolBase.__init_subclass__ finds a class's schema and data in its own
  package and imports Raw's on demand.
- Imports, ModuleDescriptor strings, docs targets, paths and test specs are
  rewritten; released changelogs get every role target, 1.6.0 stays with
  #2483.
- versionremoved records every name v1.5.1 shipped that no longer resolves
  at its old path, read from the tag by a new util/shipped_names.py into a
  checked-in fixture; a re-export points at its defining module, and the
  address patterns #2614 removed unrecorded get their note too.
- The 1744 test gains TestShippedNames, which fails on any such name left
  unrecorded; test_public_api leaves the ruled aliases out of its unlisted
  names; tests that walked or pinned the old trees follow the new layout,
  two that pinned only the aggregations are deleted, and a new test pins
  the layout and the aliases.

All modules import, protocol models are unchanged, every unittest leg and
project guard passes, and a non-editable docs build is warning-free.
JarryShaw added a commit that referenced this pull request Nov 4, 2026
… into one package (#2534) (#2753)

The output of codemod-v2.py on 4f62f52, with no hand edits.

- protocols/<layer>/<proto>.py and its schema/ and data/ modules become
  protocols/<layer>/<proto>/{protocol,schema,data}.py; each package
  __init__ exports its class alone, eagerly, and binds each public class
  its schema and data modules define as Schema_<name> and Data_<name>,
  outside __all__, in a block per role under a "# Header Schemas" or
  "# Data Models" heading, as ruled in review of #2753. A [tool.isort]
  section in pyproject.toml keeps isort off these files, filter_files
  included; protocol-family-grouping.rst shows the layout and the
  doc-claims test pins every __init__ to it.
- The TLS record data models SSL reads move from tls/data.py to a new
  ssl/data.py, as pieces the family shares; tls/data.py keeps TLS.
- The schema/ and data/ trees and their aggregations go, with no alias:
  schema/schema.py is protocols/schema.py, data/data.py and data/protocol.py
  merge into protocols/data.py, and ipv6_option merges into ipv6_ext.schema.
- ProtocolBase.__init_subclass__ finds a class's schema and data in its own
  package and imports Raw's on demand.
- Imports, ModuleDescriptor strings, docs targets, paths and test specs are
  rewritten; released changelogs get every role target, 1.6.0 stays with
  #2483.
- versionremoved records every name v1.5.1 shipped that no longer resolves
  at its old path, read from the tag by a new util/shipped_names.py into a
  checked-in fixture; a re-export points at its defining module, and the
  address patterns #2614 removed unrecorded get their note too.
- The 1744 test gains TestShippedNames, which fails on any such name left
  unrecorded; test_public_api leaves the ruled aliases out of its unlisted
  names; tests that walked or pinned the old trees follow the new layout,
  two that pinned only the aggregations are deleted, and a new test pins
  the layout and the aliases.

All modules import, protocol models are unchanged, every unittest leg and
project guard passes, and a non-editable docs build is warning-free.
# Conflicts:
#	docs/source/changelog/1.5.0.rst
- Breaking: each protocol is a package of protocol, schema and data modules,
  the pcapkit.protocols.schema and .data trees and their aggregate exports
  removed with no alias, and a 1.5.x data model pickle fails to load (#2753),
  a new entry with the 1.5.1 imports and pickle measured.
- 1.6.0's pcapkit.protocols role targets point at the package modules; the
  aggregator export claims of unreleased entries, the NoPayload and FrameRecord
  pickle claims and the TLSKeyLogEntries alias follow the layout.
- CI: the LATEST tier's own job and the Coverage merge (#2754) and the
  ordering leg's halved rest of tests/protocols (21ec0a6, #2751), into the
  CI-legs entry; the package ruling into the conventions entry.
- No entry for the test-only #2752.
- The merge keeps #2483's class names in 1.5.0's conflicting roles under
  #2753's package paths.
- CHANGELOG.md regenerated; util/changelog_md.py --check passes.
@JarryShaw

Copy link
Copy Markdown
Owner Author

Fold 23 pushed: fb64180eb → 3bd890f28. It merges main at 1b4f9703e and resolves the 1.5.0.rst conflict, keeping the current class names under the new package paths.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

chore Maintenance work: tooling, repo hygiene, no library behaviour change review: good-to-go Cross-review at the current head says ready; CI state is separate

Projects

Status: In review

Development

Successfully merging this pull request may close these issues.

chore(docs): centralize 1.6.0 changelog updates in one place, not per-feature-PR

1 participant