Repository navigation
PyPCAPKit v1.5.0b14
Pre-release
Pre-release
·
405 commits
to main
since this release
What's Changed
💥 Breaking Changes
- fix(foundation): make register_mh_extension take schema keyword-only (#516) by @JarryShaw in #526
- fix(corekit): reject a bool where a maker converts an address itself (#508) by @JarryShaw in #539
- feat(foundation): make subclass registration opt-in for Engine, Reassembly, TraceFlow and Dumper (#514) by @JarryShaw in #547
- fix(foundation): rename Engine's registry keyword to
engine, which works on Python 3.10 (#514) by @JarryShaw in #557 - fix(corekit): stop a malformed TCP SACK's exception type depending on sys.modules state (#525) by @JarryShaw in #562
- fix(link,internet): reject a bool at the four remaining maker call sites (#540) by @JarryShaw in #568
- fix(tcp): set MPTCP.subtype on construction, fix MP_CAPABLE's length/rkey (#566, #567) by @JarryShaw in #579
- fix(ipv6-route): size the RPL fixed area at 4 octets per RFC 6554 (#564) by @JarryShaw in #590
- fix(l2tp): refuse a version nibble other than 2, and settle what IP protocol 115 is (#548) by @JarryShaw in #589
- fix(hopopt,ipv6-opts): size the ILNP nonce with a real ceiling, not a floored one (#601) by @JarryShaw in #607
- fix(corekit): pad a short field read on the tail, not the head (#604) by @JarryShaw in #621
- fix(hip): size the SOLUTION parameter as two whole-octet fields (#608) by @JarryShaw in #629
- fix(corekit): keep SeekableReader's buffer content when truncating it (#622) by @JarryShaw in #633
- fix(tcp): seed
TCP.read's flag accumulator withEnum_Flags(0), not a no-op cast (#616) by @JarryShaw in #634 - fix(pcap):
Frame.lenis the on-wire length,cap_lenthe captured one (#618) by @JarryShaw in #635 - fix(foundation): close the input stream pcapkit opened, not the caller's (#610) by @JarryShaw in #636
- fix(protocol): refuse a construction keyword no signature declares (#617) by @JarryShaw in #640
- fix(corekit): keep SeekableReader's position bookkeeping in step (#643, #644) by @JarryShaw in #663
- fix(hip): PUZZLE and SOLUTION builders must stop inventing wire-format values (#653, #654, #655) by @JarryShaw in #665
- fix(httpv2): restore END_STREAM on rebuild, and seed the parsed flag accumulator as
Flags(#652, #650) by @JarryShaw in #669 - fix(dumpkit): a nameless flag member no longer renders as
Type::None [0](#648) by @JarryShaw in #670 - fix(hip): pad HIP parameters to the record length RFC 7401 gives, not the contents (#651) by @JarryShaw in #664
- fix(pcapng): bound an option's payload to the area its block declares (#594) by @JarryShaw in #676
- fix(const): give the six unguarded registries the same bare-ValueError guard by @JarryShaw in #677
- fix(corekit): refuse truncate on a reader that reports itself unwritable (#645) by @JarryShaw in #680
- fix(pcapng): keep the captured octets every packet block declares (#646) by @JarryShaw in #683
- fix(httpv2): keep the payload an unpadded DATA/HEADERS/PUSH_PROMISE declares by @JarryShaw in #691
- fix(pcapng): stop a negative length reaching a read on a truncated capture (#678) by @JarryShaw in #699
- fix(hip): correct R1_COUNTER's counter width and LOCATOR_SET's Length unit (#672) (#679) by @JarryShaw in #696
- fix(corekit): resolve an unassigned enum value instead of raising aenum's ValueError (#701) by @JarryShaw in #706
- feat(reg)!: split AppType into per-transport registries, dropping the portless rows by @JarryShaw in #754
- fix(reg)!: reject an out-of-range port in AppType.get, and claim each span by transport by @JarryShaw in #764
- fix(fields): fall through to the bounded pseudo-member instead of minting (#575) by @JarryShaw in #771
- fix(const): refuse a multi-bit proto in AppType._dispatch rather than resolving it LSB-first (#759) by @JarryShaw in #783
- feat(corekit,schema,utilities)!: enforce @Final at runtime on Info and Schema (#778) by @JarryShaw in #788
- fix(fields): raise ProtocolError, not struct.error, on a negative resolved field length by @JarryShaw in #811
- feat(reg)!: retype AppType.proto to its own transport, and give register_apptype varargs (#806) by @JarryShaw in #815
- fix(reg)!: drop TransportProtocol's IntFlag base now that nothing composes by @JarryShaw in #836
- fix(vendor): stop get() minting; missing fixed for 21 of 105 (#775) by @JarryShaw in #838
- fix(toolkit): key pyshark link-type resolution on frame.encap_type by @JarryShaw in #850
- fix(ipx): order Socket.missing range branches narrowest-first by @JarryShaw in #847
- fix(reg): emit tcpdump legacy link-type names after current ones by @JarryShaw in #848
- ci: rebuild engine-tests as a Python × engine matrix with three cell outcomes by @JarryShaw in #849
- feat(corekit): add EnumRegistry base for const registries, convert 5 (#775) by @JarryShaw in #855
- refactor(const,vendor): move the generated const-enum template onto EnumRegistry (#775) by @JarryShaw in #858
- fix(corekit): make EnumRegistry.get's no-default marker an identity sentinel (#857) by @JarryShaw in #859
- refactor(const,vendor): apply the mint/unmint criterion ruling to 82 registries (#775) by @JarryShaw in #861
- fix(const,vendor): Old Xerox ethertype range shadowed by IEEE802.3 range by @JarryShaw in #865
- fix(corekit): stop EnumRegistry.get's default from minting by @JarryShaw in #868
- fix(const,vendor): bring 8 bespoke registries onto EnumRegistry, stop them minting by @JarryShaw in #869
- fix(const,vendor): give Method's registered members their str payload (#870) by @JarryShaw in #871
- fix(const,vendor): bring the AppType family onto EnumRegistry, stop it minting (#860) by @JarryShaw in #874
- refactor(vendor,pcapng): generate TLSKeyLabel from the RFC 9850 IANA registry by @JarryShaw in #890
- fix(const,vendor): make Method.get case-sensitive, per RFC 9110 (#896) by @JarryShaw in #907
- fix(ipv6): parse unrecognised extension headers generically (#891) by @JarryShaw in #904
- fix(corekit): export the sentinel objects, not their types by @JarryShaw in #916
- ci(deps): narrow the all extra to core addons, add a dev extra (#910) by @JarryShaw in #914
- refactor(ipv6): rename IPv6_GenericExt to IPv6_Ext and make it the shared base (#917) by @JarryShaw in #924
- refactor(corekit): house all four sentinels in one shared module (#911) by @JarryShaw in #922
- fix(vendor): source ExtensionHeader from the extension-header registry, not the protocol-numbers flag (#925) by @JarryShaw in #926
- fix(corekit,utilities): raise pcapkit exceptions from EnumLookup.get, in stdlib Enum's shape (#923) by @JarryShaw in #927
- refactor(corekit,protocols): normalise the four sentinel objects to SCREAMING_SNAKE (#937) by @JarryShaw in #939
- fix(foundation): declare the engine-typed slots as EngineBase, not Engine by @JarryShaw in #1023
- fix(foundation): name the base class the registrar guard actually checks by @JarryShaw in #1020
- fix(protocols): let Application carry an undissected remainder (#719) by @JarryShaw in #1030
- feat(protocols)!: move OSPF and RARP to the application layer (#719) by @JarryShaw in #1031
- fix(tcp): parse all five MP_CAPABLE lengths of RFC 8684 (#1042) by @JarryShaw in #1048
- fix(protocols)!: rename OSPF_CrytographicAuthentication and group OSPF under the application layer by @JarryShaw in #1116
- fix(httpv2)!: frame Length counts the 9-octet header, so RFC 9113 frames are rejected by @JarryShaw in #1138
- fix(arp): non-IP protocol addresses pack as ASCII text, and hlen/plen are never checked by @JarryShaw in #1145
- fix(tcp): from_data reorders and re-pads TCP options by @JarryShaw in #1163
- fix(protocols): from_data keeps declared lengths on truncated captures by @JarryShaw in #1166
- fix(protocols): a payload layer parsed from a short stream rebuilds default-filled octets by @JarryShaw in #1171
- fix(l2tp): L2TPv2.from_data drops the L flag and the Length field by @JarryShaw in #1174
- fix(l2tpv2): correct the Type enum and L bit against RFC 2661 (#1175) by @JarryShaw in #1183
- fix(ipv6-opts): RPL option drops reserved flag bits on rebuild and rejects RFC 6553 sub-TLVs by @JarryShaw in #1201
- fix(link): ARP family rebuilds InARP/DRARP, any Ethernet hlen, and a ptype/plen mismatch by @JarryShaw in #1224
- fix(link)!: L2TPv2 drops the reserved flag bits on rebuild, and make() drops a lone ns or nr by @JarryShaw in #1226
- fix(sctp): chunk flags, reserved fields and final padding round-trip by @JarryShaw in #1253
- fix(tcp): MPTCP options round-trip byte-exactly (#1212-#1217, #1220) by @JarryShaw in #1254
- fix(ftp,httpv1): FTP and HTTP/1 lines do not rebuild byte for byte by @JarryShaw in #1301
- fix(ospf,ngap): keep the parsed OSPF Packet Length and refuse octets after the NGAP-PDU by @JarryShaw in #1304
- fix(dumpkit)!: output writers drop or corrupt what the packets carried by @JarryShaw in #1305
- fix(ipv6): IPv6 core headers rebuild byte-exactly (#1230, #1231, #1236, #1235) by @JarryShaw in #1307
- fix(ipv6-opts): rebuild HOPOPT and IPv6-Opts option areas byte-exactly by @JarryShaw in #1310
- fix(ipx,ah): IPX from_data raises struct.error; AH reserved field written back as zero by @JarryShaw in #1338
- fix(hip): rebuild parsed packets byte-exactly (Header Length, no parameters, PUZZLE lifetime, reserved bits) by @JarryShaw in #1342
- fix(httpv2): HTTP/2 frames lose octets on rebuild (#1242-#1248, #1251) by @JarryShaw in #1341
- fix(ipv4): rebuild option areas, route slots, timestamps and reserved bits byte-exactly by @JarryShaw in #1344
- fix(mh): keep zero-length PadN, reserved fields and BU/BA flag bits on rebuild by @JarryShaw in #1345
- fix(corekit): IPv4InterfaceField keeps non-netmask masks; OrderedMultiDict deepcopy keeps order by @JarryShaw in #1346
- fix(ftp,httpv1): keep the raw command case, HTTP/1 whitespace and field octets, and parse whole multi-line FTP replies by @JarryShaw in #1347
- fix(tcp)!: reserved bits, post-EOOL octets and the UTO granularity round-trip (#1211, #1218, #1219) by @JarryShaw in #1348
- fix(hip): Locator flags drop the seven bits other than Preferred on rebuild by @JarryShaw in #1367
- fix(pcapng): rebuilt blocks keep their lengths and padding (#1276, #1279, #1280, #1282, #1283, #1284) by @JarryShaw in #1373
- fix(pcapng): blocks and options rebuild as parsed (#1272, #1273, #1277, #1278, #1281, #1286) by @JarryShaw in #1378
- fix(ipv4)!: the TS option zeroes the timestamp slots beyond the pointer on rebuild (#1349) by @JarryShaw in #1390
- fix(protocols)!: a declared length running past the data is accepted and zero-filled on rebuild by @JarryShaw in #1398
- fix(ipv4)!: TS and SEC options do not rebuild byte for byte (#1391, #1392, #1393) by @JarryShaw in #1399
- fix(ipv6)!: a CALIPSO option loses its trailing pad and shrinks its length on rebuild (#1403) by @JarryShaw in #1407
- fix(ipv4,tcp)!: a header length declared past the data zero-fills on rebuild; TS make() rejects string address keys (#1402, #1404) by @JarryShaw in #1411
- fix(pcapng)!: PCAP-NG round-trip follow-ups (#1382, #1383, #1384, #1401, #1405, #1406) by @JarryShaw in #1412
- fix(hip): three BitField namespaces leave reserved bits unnamed, so they rebuild as zero by @JarryShaw in #1419
- fix(pcapng)!: keep malformed journal entries and short packet blocks as captured (#1413, #1414) by @JarryShaw in #1420
- fix(mh): keep the reserved bits of 24 BitField flag namespaces on rebuild by @JarryShaw in #1421
- fix(pcapng)!: keep an SHB or IDB shorter than its fixed fields as captured (#1422) by @JarryShaw in #1425
- fix(ipv4,ipv6)!: keep the octets past Total Length or Payload Length as captured (#1209) by @JarryShaw in #1431
- fix(ipx)!: keep the octets past the IPX Length field as captured (#1433) by @JarryShaw in #1435
- fix(corekit)!: non-zero padding octets are zeroed on rebuild (#1223) by @JarryShaw in #1436
- fix(mh)!: keep the reserved octets MH PaddingField sites capture (#1437) by @JarryShaw in #1442
- fix(ipv6)!: an extension header parsed with extension=True cannot rebuild from its own info (#1446) by @JarryShaw in #1449
- fix(l2tpv2,ospf)!: keep the octets past the Length field as captured (#1455) by @JarryShaw in #1460
- fix(hip)!: parse and keep the two fixed header bits (#1459) by @JarryShaw in #1462
- fix(corekit)!: to_dict() returns an InfoDict, so a repeated IPv6 extension header survives the dict rebuild (#1453) by @JarryShaw in #1466
- fix(udp)!: keep the octets past the UDP Length field as captured (#1461) by @JarryShaw in #1467
- fix(sctp)!: keep the octets after the last whole chunk as captured (#1468) by @JarryShaw in #1472
- fix(pcap,pcapng)!: a cut PCAP header or PCAP-NG block rebuilds as captured (#1470) by @JarryShaw in #1475
- fix(ipv6)!: rebuild a cut extension header chain byte-exact (#1471, #1473) by @JarryShaw in #1476
- refactor(corekit)!: Info.to_dict() returns an OrderedMultiDict; add MultiInfo and OrderedMultiInfo (#1484) by @JarryShaw in #1523
- refactor(corekit)!: move the byte-order field helpers into corekit (#1711) by @JarryShaw in #1715
- refactor(corekit)!: move decorators into corekit (#1735) by @JarryShaw in #1737
- feat(utilities)!: one config module for the tunable limits (#1726) by @JarryShaw in #1743
- refactor!: drop the surviving re-exports of moved names (#1744) by @JarryShaw in #1754
- fix(protocols)!: keep pack() from rewriting the instance it is called on (#1769) by @JarryShaw in #1791
- fix(protocols)!: pad two octets with one PadN, not two Pad1 (#1793) by @JarryShaw in #1812
- fix(const)!: name LLACode codes 0 and 2 as RFC 5568 does (#1848) by @JarryShaw in #1872
- fix(protocols)!: make NTPTimestamp and PMIPv6Timestamp Info classes (#1886) by @JarryShaw in #1887
- fix(foundation): close only an owned input on leaving the with block (#1999) by @JarryShaw in #2000
- fix(protocols): find the payload by protocol name and follow IPv6 next headers, not key order (#2003) by @JarryShaw in #2014
✨ Features
- feat(protocols): opt-in code= registration with enum-type inference for Protocol/ProtocolBase by @JarryShaw in #570
- feat(util): have bump_version.py keep CITATION.cff in step with the bump by @JarryShaw in #625
- feat(reg): expose AppType aliases in repr/str and allow registering them per transport (#807) by @JarryShaw in #837
- docs(changelog): summarise each release with a link to its full entry (#900) by @JarryShaw in #909
- feat(changelog): cite issues, PRs and discussions with Sphinx roles by @JarryShaw in #1008
- feat(engines): type the third-party engine packages with local stubs (#1878) by @JarryShaw in #1882
🐛 Fixes
- fix(vendor): retire the IPX socket scrape, its data source is gone (#507) by @JarryShaw in #511
- fix(foundation): let register_extractor_* accept pcapkit's own built-in classes by @JarryShaw in #523
- fix(vendor): send a descriptive User-Agent and retarget the dead pcapng draft by @JarryShaw in #524
- fix(protocols): repair all entries that name nothing, and guard the class by @JarryShaw in #527
- fix(mh): count a CGA extension's 4-octet header in its reported length by @JarryShaw in #528
- fix(vendor): make the handover_initiate_status crawler reachable (release blocker for
make vendor) by @JarryShaw in #531 - fix(tcp): enforce the SACK length rule its docstring already promised (#519) by @JarryShaw in #535
- fix(protocols): let from_data rebuild a parsed packet by @JarryShaw in #536
- fix(vendor): end the manual-intervention wait when nobody can answer it (#522) by @JarryShaw in #542
- fix(ipv4): terminate the SEC bitmap, reject its terminator bit, and narrow SID to 16 bits by @JarryShaw in #543
- fix(exports): export the 23 public attributes their package all omitted (#533) by @JarryShaw in #544
- fix(corekit): reject a signed= that contradicts a field's fixed sign (#545) by @JarryShaw in #549
- fix(ipv4): three defects in the IPv4 option schemas (#552) by @JarryShaw in #559
- fix(schema): read the MPTCP option length from bit 8, not bit 1 (#553) by @JarryShaw in #558
- fix(schema): stop EnumSchema.registry from retaining a lookup miss (#555) by @JarryShaw in #560
- fix(hip,ipv6-route): stop dropping the ENCRYPTED IV and RPL's pack-time cast (#556) by @JarryShaw in #561
- fix(tcp): give MPTCP real kind/length fields, repairing pack and parse by @JarryShaw in #565
- fix(corekit): bound FieldBase.unpack's rjust() padding to a sane ceiling (#554) by @JarryShaw in #569
- fix(tcp): correct MPTCP option length arithmetic at all six #576 sites by @JarryShaw in #585
- fix(corekit): bound the total zero padding a parse may synthesise (#573) by @JarryShaw in #593
- fix(changelog-md): cite a line the entry has, and accept an anchored :rfc: role (#588, #592) by @JarryShaw in #595
- fix(tcp): resolve the connection flags before building the options (#587) by @JarryShaw in #597
- fix(corekit): recompute _need_process from the width in force, not once from the placeholder (#591) by @JarryShaw in #598
- fix(corekit): size the width repair with a real ceiling, not a floored one (#599) by @JarryShaw in #600
- fix(const): normalise the key get() looks up, and honour its documented default (#582, #583, #584) by @JarryShaw in #596
- fix(generators): spell TCP_BASE's keys the way TCP.make declares them (#602) by @JarryShaw in #609
- fix(pcap): seed the frame byte order under the key the reader consults (#605) by @JarryShaw in #614
- fix(license): start the copyright term at 2017, and drop the end year by @JarryShaw in #630
- fix(packaging): ship CITATION.cff in the source distribution by @JarryShaw in #631
- fix(mh): stop the four flag enums recursing on any non-member value (#623) by @JarryShaw in #632
- fix: import three names used only in string annotations, and correct a false packaging claim (#642) by @JarryShaw in #666
- fix(tcp): drop the doubled separator from four MPTCP error messages (#649) by @JarryShaw in #671
- fix(foundation): give
no_eofa way to stop, so extract() returns (#620) by @JarryShaw in #639 - fix(registry): report the protocol-name collision register_protocol hid (#675) by @JarryShaw in #681
- fix(registry): report the silent schema overwrites, and name what the code-keyed registrars displaced by @JarryShaw in #695
- fix(registry): disambiguate register_protocol's overwrite warning when two classes share a repr by @JarryShaw in #711
- fix(pcapng): bound the skip after a journal binary field to one octet by @JarryShaw in #722
- fix(hip): register R1CounterParameter under HIPv1's code 128 too by @JarryShaw in #721
- fix(pcapng): walk the journal entry instead of splitting it on b'\n\n' by @JarryShaw in #728
- fix(registry): add register_protocol's identity guard to sibling registrars by @JarryShaw in #726
- fix(vendor): derive each crawler's const/ path from vendor/'s own root by @JarryShaw in #741
- fix(foundation): add the #718 identity guard to the five registrars it missed by @JarryShaw in #742
- fix(toolkit): parse PyPCAPFile's dotted-decimal IPv4 text, not packed bytes by @JarryShaw in #747
- fix(engines): un-hexlify pypcapfile frames before decoding them by @JarryShaw in #748
- fix(lint): reach every const/vendor init.py in isort and drop five stale pylint flags by @JarryShaw in #773
- fix(reg): cast TransportProtocol.undefined so mypy infers its own type by @JarryShaw in #777
- fix(dumpkit): escape mapping keys for the plist writer (#772) by @JarryShaw in #784
- fix(http): reach _guess_version's HTTP/2 arm, and resolve PayloadField names by @JarryShaw in #789
- fix: strip a systemd journal entry's own block padding, not its data by @JarryShaw in #795
- fix(http): check the buffer's length, not just the declared one, in HTTP/2's frame guard by @JarryShaw in #802
- fix(vendor): pass regex flags as flags=, not positional count (#796) by @JarryShaw in #813
- fix(http): identify the HTTP version before parsing, not by trial and error (#800) by @JarryShaw in #814
- fix(tcp): repoint TCP:80/8080 at the HTTP version proxy (#682) by @JarryShaw in #821
- fix(fields): distinguish a malformed template from a negative length in FieldBase.length by @JarryShaw in #827
- fix(fields): raise ProtocolError for a NumberField negative resolved length (#828) by @JarryShaw in #829
- fix(corekit): raise ProtocolError for a NumberField negative bit_length (#831) by @JarryShaw in #834
- fix(reg,corekit): retype the registry NULL sentinel and raise ProtocolError from ModuleDescriptor.klass by @JarryShaw in #835
- fix(vendor): make the LinkType legacy-sink rule value-aware by @JarryShaw in #854
- fix(corekit): fall EnumRegistry.get() back to a str key's value (#860) by @JarryShaw in #863
- fix(const,vendor): return the unregistered member instead of re-entering missing (#866) by @JarryShaw in #867
- fix(vendor): make main() exit non-zero when any crawler target raises (#872) by @JarryShaw in #873
- fix(vendor): pin except BaseException and correct a false docstring clause by @JarryShaw in #876
- fix(const,vendor): stop EtherType and Socket minting on an unrecognised value by @JarryShaw in #878
- fix(pcapng): repoint TLSKeyLabel at RFC 9850, add ECH_SECRET/ECH_CONFIG by @JarryShaw in #883
- fix(mh): stop the four RFC-inline helper enums from minting on unassigned bytes by @JarryShaw in #889
- ci(release): gate tag/pypi/conda on their own evidence, not the v* tag by @JarryShaw in #905
- fix(ngap): source ProcedureCode/ProtocolIE from pycrate, stop the shared -1 mint (#880) by @JarryShaw in #899
- fix(const): value-lookup in Method.get, so BASELINE-CONTROL/VERSION-CONTROL resolve (#908) by @JarryShaw in #915
- fix(const,vendor,docs): audit registry case sensitivity, fold FEATCode.get (#903) by @JarryShaw in #913
- fix(corekit): reparent the unblocked non-registry enums onto EnumLookup (#877) by @JarryShaw in #921
- fix(protocols): widen the two kept get overrides in mh.py to accept default by @JarryShaw in #940
- fix(utilities): stop truncating every traceback for a loud BaseError by @JarryShaw in #983
- fix(foundation): raise RegistryError, not a leaked TypeError, for a non-class by @JarryShaw in #1025
- fix(protocols): raise RegistryError for a non-class in seven register guards (#1026) by @JarryShaw in #1028
- fix(foundation): warn once when an extraction engine is unavailable (#1045) by @JarryShaw in #1046
- fix(pcapng): name the Name Resolution Block in its guard messages (#1038) by @JarryShaw in #1047
- fix(httpv1): accept HTTP/1 messages with no header fields (#1041) by @JarryShaw in #1049
- fix(httpv1): rebuild a message whose body is empty (#1050) by @JarryShaw in #1054
- fix(corekit): ProtoChain.add returns stale protocols/aliases by @JarryShaw in #1107
- fix(toolkit): pypcapfile tcp_reassembly sets last one past the segment by @JarryShaw in #1108
- fix(ipv6): _read_ip_hextet slices include the version nibble by @JarryShaw in #1109
- fix(mh): Message ID option always writes and reads a zero fraction by @JarryShaw in #1110
- fix(hip): HIP_CIPHER warns at six Cipher IDs although RFC 7401 allows six by @JarryShaw in #1111
- fix(pcap): _make_magic ignores nanosecond with explicit endian flags; _read_protos ignores size by @JarryShaw in #1112
- fix(foundation): Extractor.output message, make_name registry pollution, scapy engine _offmt by @JarryShaw in #1113
- fix(tcp): NS flag is written by make() but never parsed by @JarryShaw in #1114
- fix(protocols): _make_data returns keys make() does not accept (Frame ts_src, L2TPv2 prio) by @JarryShaw in #1115
- fix(protocols): Quick-Start option readers use schema.func, which exists only under TYPE_CHECKING by @JarryShaw in #1117
- fix(all): pcapkit.all lists OSPF on the Link Layer line by @JarryShaw in #1129
- fix(ethernet): _make_data turns MAC addresses into ASCII hex text by @JarryShaw in #1130
- fix(tcp): User Timeout maker writes length=3; RFC 5482 requires 4 by @JarryShaw in #1131
- fix(protocols): ARP and PCAP-NG pack MAC addresses as ASCII hex text by @JarryShaw in #1137
- fix(hip): HOST_ID packs DI-Type/DI-Length as 4 octets where RFC 7401 has one 16-bit word by @JarryShaw in #1132
- fix(tcp): Quick-Start Response reader reads a stray octet; maker fails below 40 kbps by @JarryShaw in #1135
- fix(all): pcapkit.all.all omits names its packages export by @JarryShaw in #1142
- fix(pcap): Header.pack() writes the same magic for every endian/nanosecond setting; _make_data returns magic_number by @JarryShaw in #1143
- fix(httpv2): SETTINGS ListField reads past the last pair and warns 'packet length < 0' by @JarryShaw in #1146
- fix(pcap): Frame.from_data cannot be called — it has no way to pass num and header by @JarryShaw in #1147
- fix(foundation): restore record_header as the shared global-header step for third-party engines by @JarryShaw in #1149
- fix(http): tighten HTTP/2 version guessing so arbitrary binary is not taken for a DATA frame by @JarryShaw in #1153
- fix(corekit): a length-less SchemaField passes -1 to its schema, so every list item warns 'packet length < 0' by @JarryShaw in #1157
- fix(dumpkit): JSON output for test.pcapng does not parse by @JarryShaw in #1158
- fix(pcap): a lone lilendian/bigendian flag is ignored by Header._make_magic by @JarryShaw in #1159
- fix(hip): HIPv2-only parameters are accepted inside HIPv1 packets by @JarryShaw in #1160
- fix(http): HTTP.from_data raises 'invalid HTTP version: 0' by @JarryShaw in #1162
- fix(extraction): extraction with format='pcap' fails (#1127) by @JarryShaw in #1164
- fix(dumpkit): pcap output drops the input's snaplen, thiszone and sigfigs (#1165) by @JarryShaw in #1168
- fix(protocols): a capture cut inside the IPv4 header rebuilds with a fabricated UDP header by @JarryShaw in #1169
- fix(protocols): understated length_hint and an unguarded next-layer import still fabricate octets by @JarryShaw in #1176
- fix(ipv6-ext): raise the fallback length hint to the RFC 8200 minimum (#1178) by @JarryShaw in #1181
- fix(ipv6): keep the extension-header chain in from_data rebuilds (#1177) by @JarryShaw in #1182
- fix(ipv6-opts): rebuild every MPL seed-id kind from its parsed value (#1185) by @JarryShaw in #1187
- fix(hip): from_data no longer reads alias before _info is set (#1184) by @JarryShaw in #1188
- fix(hip): make() without parameters writes Header Length 0, below the RFC 7401 minimum of 4 by @JarryShaw in #1191
- fix(ipv6-opts): _make_opt_smf_dpd overwrites the parsed DPD mode, so H-DPD rebuilds as I-DPD by @JarryShaw in #1192
- fix(ipv6-opts): SMF_DPD H-DPD with an empty hav raises IndexError instead of ProtocolError by @JarryShaw in #1194
- fix(schema): SMF_DPD option at the end of the header raises TypeError from smf_i_dpd_id_len by @JarryShaw in #1197
- fix(ipv6-opts): RPL option 0x23 raises AttributeError in _read_opt_unassigned by @JarryShaw in #1198
- fix(protocols): make() rejects an enum member name given as str unless a namespace is passed by @JarryShaw in #1227
- fix(toolkit): scapy packet2dict dumps nested packets as {} and mutates its input by @JarryShaw in #1287
- fix(const): OptionType and Command register() round-trip through get() by @JarryShaw in #1311
- fix(corekit): from_dict(to_dict()) loses nested values, and Info.len counts hidden keys by @JarryShaw in #1334
- fix(corekit): signed NumberField decode, zero-length PayloadField, PCAP trailing bytes and empty Raw by @JarryShaw in #1331
- fix(toolkit): dpkt reassembly adapters build their data from dpkt's re-serialised bytes and mutate the packet by @JarryShaw in #1335
- fix(corekit): StringField is not lossless: guessed charset, U+FFFD substitution, and a character-count length by @JarryShaw in #1336
- fix(pcapng): constructed and rebuilt blocks round-trip (#1267, #1268, #1269, #1270, #1271) by @JarryShaw in #1339
- fix(protocol): raw items in a make() list build a packet; str enum names resolve per argument by @JarryShaw in #1352
- fix(const): the Quick-Start function enums reject 9-15, though the field is 4 bits wide by @JarryShaw in #1353
- fix(dumpkit): tree output raises on complex and is undocumented as lossy (#1266) by @JarryShaw in #1366
- fix(reassembly): IP reassembly reports only the octets it holds (truncated fragments, strict runs, zero-length datagrams) by @JarryShaw in #1368
- fix(const): OptionType.register_alias always raises 'not a registered OptionType' by @JarryShaw in #1369
- fix(traceflow): TCP flow labels are not unique, so a second flow with the same label truncates the first flow's file by @JarryShaw in #1371
- fix(schema): Schema.pack keeps option padding, SchemaField spans and iterated keys (#1289, #1291, #1292) by @JarryShaw in #1374
- fix(reassembly): TCP completion from per-buffer gaps, mod-2**32 sequence numbers, FIN waits for reordered data by @JarryShaw in #1375
- fix(registry): foundation registrars restore the built-in a name shipped with (#1363) by @JarryShaw in #1376
- fix(dpkt): extract(engine='dpkt') keeps a frame dpkt cannot parse instead of leaking AttributeError (#1351) by @JarryShaw in #1377
- fix(dumpkit): JSON output of DPKT/Scapy frames grows without bound and fills the disk by @JarryShaw in #1381
- fix(generators): make_samples builds fixtures from the shared checkout, not the tree it runs in by @JarryShaw in #1388
- fix(protocol): main is red, IPv4 make() with an unparsable raw item no longer raises the wrapped error by @JarryShaw in #1395
- fix(engines): the dpkt engine applies the first PCAP-NG interface's linktype and timestamp resolution to every frame by @JarryShaw in #1396
- fix(schema): a SchemaField's unread octets are lost through from_data, so a direct SchemaField rebuilds zero-filled by @JarryShaw in #1397
- fix(protocols): parser registrars warn only when the entry really changes (#1362) by @JarryShaw in #1400
- fix(ipv6): CALIPSO make() writes a corrupt length on overflow and raises raw errors for a bad pad by @JarryShaw in #1409
- fix(pcap): building a frame with snaplen 0 writes a record with no packet data (#1385) by @JarryShaw in #1410
- fix(registry): re-registering a stored ModuleDescriptor keeps it (#1364) by @JarryShaw in #1415
- fix(foundation): number pcapng blocks across the whole file, not per section (#1256) by @JarryShaw in #1426
- fix(generators): correct stale options.py comments and the code they justified (#1337) by @JarryShaw in #1427
- fix(pcapng): keep out-of-range if_tzone as captured and catch every fromtimestamp failure (#1340) by @JarryShaw in #1429
- fix(foundation): keep format='pcap' when an unavailable engine falls back to the default one (#1264) by @JarryShaw in #1430
- fix(ipv6): dissect a jumbogram's payload up to its Jumbo Payload Length (#1434) by @JarryShaw in #1440
- fix(pcapng): keep captured padding octets on rebuild (#1437) by @JarryShaw in #1441
- fix(const): resolve every three-digit FTP reply and HTTP status code (#1443) by @JarryShaw in #1444
- fix(dumpkit): write plist dates to whole seconds so plistlib reads them (#1448) by @JarryShaw in #1450
- fix(protocols): rebuild the payload from info.to_dict() in from_data (#1447) by @JarryShaw in #1452
- fix(ipv6-route): rebuild RPL source routes byte for byte (#1456, #1457) by @JarryShaw in #1463
- fix(schema): a header cut inside a fixed-width field rebuilds as captured (#1458, #1451) by @JarryShaw in #1465
- fix(ospf): rebuild cryptographic authentication from its dict form (#1464) by @JarryShaw in #1469
- fix(sctp): rebuild a last chunk short of its padding as captured (#1474) by @JarryShaw in #1477
- fix(sctp): accept a final parameter or cause short of its padding (#1479) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1481
- fix(sctp): rebuild a Host Name parameter without a NUL terminator as captured (#1482) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1483
- fix(corekit): give unnamed ListField, PayloadField and SchemaField a default name (#1491) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1493
- fix(corekit): an untyped ListField packs the bytes it unpacks (#1489) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1494
- fix(corekit): keep a BitField's unnamed bits as captured (#1487) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1495
- fix(corekit): finalise each non-final Info subclass on its own state (#1490) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1496
- fix(schema): finalise each non-final Schema subclass on its own state (#1498) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1499
- fix(extraction): accept a file object without a name as fin (#1506) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1509
- fix(corekit): keep a NumberField's bits outside bit_length as captured (#1488) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1497
- fix(protocols): restoring a registration puts back the shipped ModuleDescriptor (#1504) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1533
- fix(dumpkit): scale a PCAP trace record's fraction to the trace's resolution (#1500) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1529
- fix(engines): write real PCAP traces for dpkt and scapy (#1507) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1511
- fix(toolkit): accept tshark's True/False TCP flags in the pyshark trace (#1514) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1527
- fix(registry): unregistering a custom protocol removes its name from proto (#1505) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1530
- fix(protocols): dissect an IPv6 extension header behind a first fragment as without it (#1539) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1540
- fix(dumpkit): a PCAP trace writes the octets it has, not a truncated record's claimed length (#1541) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1543
- fix(corekit): copying or pickling a stream proxy no longer recurses (#1524) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1544
- fix(engines): the pyshark engine skips non-packet PCAP-NG blocks (#1515) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1531
- fix(engines): reset the scapy reader's interfaces at each PCAP-NG section (#1522) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1546
- fix(protocols): a later IPv6 fragment's data is raw, not an upper-layer header (#1545) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1552
- fix(protocols): an IPv4 Total Length of 0 is TSO, and one inside the header is bogus (#1547) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1554
- fix(toolkit): the pypcapfile engine warns that it leaves TCP over IPv6 out (#1513) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1535
- fix(toolkit): trace and reassemble a TCP segment whose header the snapshot cut (#1518) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1556
- fix(protocols): a next-layer hit resolves its descriptor instead of memoising the class (#1559) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1561
- fix(protocols): a later IPv4 fragment's data is raw, not an upper-layer header (#1553) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1562
- fix(engines): dpkt float timestamps, Simple Packet Blocks and raw-IP tracing (#1501, #1520, #1548) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1550
- fix(engines): take a scapy packet's link type and clock from its interface (#1503, #1517, #1549) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1563
- fix(reassembly): a TSO fragment's length is its captured length, and RCVBT covers the last block (#1555, #1565) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1564
- fix(engines): require scapy>=2.6.0 in the Scapy and dev extras (#1572) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1578
- fix(protocols): PCAPNG.register restores the shipped descriptor; a zero snaplen drops SPB padding (#1504, #1558) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1573
- fix(engines): the pypcapfile engine reads the PCAP records pypcapfile drops (#1512) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1569
- fix(toolkit): pypcapfile TCP reads past VLAN tags, warns of tunnels, skips later fragments and padding (#1537, #1576, #1577) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1575
- fix(reassembly): only the final fragment's partial block counts, and an oversized datagram never completes (#1566, #1567) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1582
- fix(protocols): drop the warnings of a next layer replaced by Raw (#1580) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1588
- fix(foundation): read every frame from a pipe or non-seekable stream (#1586) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1595
- fix(toolkit): the scapy adapters stop at the IP datagram's declared length (#1584) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1589
- fix(protocols): dissect LINKTYPE_RAW by version nibble; add the BSD loopback layer for LINKTYPE_NULL/LOOP (#1502, #1574) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1594
- fix(reassembly): a datagram too long for its length field never completes (#1585) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1598
- fix(toolkit): pypcapfile checks IPv4 and TCP headers as the default engine does (#1590, #1591, #1592, #1593, #1596, #1597) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1600
- fix(utilities): export hold_warnings in pcapkit.utilities.warnings.all (#1602) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1603
- fix(toolkit): key tunnelled TCP by the innermost IP header (#1581) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1605
- fix(protocols): bound the IPv6 extension-header chain at 32 headers (#1604) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1608
- fix(toolkit): pyshark skips partial TCP headers and traces first fragments (#1611, #1612) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1613
- fix(toolkit): dpkt and scapy check IPv4 headers as the default engine does (#1607) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1614
- fix(protocols): bound a frame's dissection at 64 layers (#1610) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1620
- fix(toolkit): dpkt reads SYN, FIN and RST from the flags octet whatever the NS bit (#1618) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1621
- fix(toolkit): dpkt hands IPv4 reassembly what the default engine does (#1615, #1616) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1622
- fix(toolkit): dpkt and scapy find TCP in IPv4 where the default engine does (#1606, #1617) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1624
- fix(protocols): rebuilding a frame cut at the extension-chain bound warns once (#1619) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1630
- fix(toolkit): scapy cuts 4in6 at each Payload Length and skips ICMP quotes (#1623, #1627) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1631
- fix(toolkit): a copied DecimalTimestamp keeps orig_len under _pydecimal (#1647) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1653
- fix(ci): tag and upload each Conda Update bump exactly once (#1632) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1641
- fix(toolkit): pyshark traces TCP behind an IPv4 extension header as the default engine does (#1625) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1642
- fix(toolkit): scapy reads IP and TCP only in layers the default engine dissects (#1635, #1636) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1652
- fix(toolkit): dpkt reads IPv6 in IPv4, and nothing behind MPLS or Cisco ISL (#1637, #1638, #1646) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1655
- fix(examples): retry the Wireshark sample downloads on 429, 5xx and timeouts (#1658) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1659
- fix(toolkit): dpkt walks IP layers off the octets as the default engine does (#1609, #1626, #1651, #1654) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1662
- fix(toolkit): scapy walks link types, layer bounds and IPv6 extension headers as the default engine does (#1609, #1626, #1650) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1663
- fix(ci): a merge racing Conda Update's push leaves the run green (#1649) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1669
- fix(toolkit): pyshark traces no TCP inside encapsulations the default engine leaves raw (#1639) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1670
- fix(vendor): render both IANA citation spellings as :rfc: roles (#1664) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1673
- fix(toolkit): the default engine reads TCP under an IPv6 header of Version 4 (#1666) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1675
- fix(ci): Conda Update keeps the release's name and notes when it uploads (#1657) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1678
- fix(toolkit): pypcapfile reads IP over loopback and raw-IP link types, up to the frame layer bound (#1609, #1667) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1682
- fix(toolkit): scapy reads nothing in a zero-length frame, and a hand-built packet off its octets (#1676) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1683
- fix(toolkit): pyshark reads frames to the 64-layer bound and past tshark's 802.1Q limit, and keys its fallback by the header (#1609, #1671) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1686
- fix(ci): Vendor Update commits the new modules a crawl adds (#1685) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1688
- fix(toolkit): dpkt and pypcapfile hand over the correctly rounded timestamp (#1668) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1690
- fix(corekit): read only a class's own annotations when building an Info constructor (#1692) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1702
- fix(const): give the AppType registry dict union only where dict has it (#1694) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1703
- fix(utilities): fall back to the default threading excepthook before Python 3.10 (#1691) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1701
- fix(protocols): reject a jumbogram RFC 2675 calls an error (#1687) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1713
- fix(corekit,utilities): unquote a StringField's bytes on Python 3.8 through compat.unquote (#1693) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1707
- fix(protocols): reject an IPv6 header whose Version is not 6 (#1680) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1723
- fix(corekit): decode as UTF-8 when a StringField's charset rejects 'replace' (#1706) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1728
- fix(engines): read each record whole through the scapy engine (#1717) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1733
- fix(tests): make two tests hold on free-threaded CPython 3.14t (#1731) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1734
- fix(protocols): export Protocol from pcapkit.protocols.protocol (#1770) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1778
- fix(vendor): make the public-API sweep cover pcapkit.vendor (#1772) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1779
- fix(corekit): resolve PortEnumField misses for any proto; restate its peek (#1774) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1781
- fix(protocols): export the L2TP data model from pcapkit.protocols.data.link (#1797) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1806
- fix(cli): make every help string match what the CLI does (#1796) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1810
- fix(protocols): re-export what each data and schema submodule exports (#1807) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1815
- fix(const): reject an out-of-range port in AppType.register (#1792) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1818
- fix(conda): vendor only the needed dependencies and ship their data files (#1814) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1821
- fix(const): make every registry's register reject what its get rejects (#1816) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1823
- fix(conda): build each macOS conda package on its own architecture (#1822) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1825
- fix(const): make Command.get reject a non-str key as Method.get does (#1824) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1826
- fix(conda): pin cryptography 48.0.1 on Intel macOS, which has no newer wheel (#1827) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1828
- fix(protocols): annotate the MPL option seed as int | IPv6Address (#1840) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1866
- fix(vendor): exit on one line without the vendor extra (#1850) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1875
- fix(vendor): make wrapped const comments render as written (#1846, #1847) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1871
- fix(corekit): quiet get's fallback over an out-of-range value (#1845) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1873
- fix(corekit): make every sentinel a singleton and give NO_VALUE a repr (#1841, #1842) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1876
- fix(foundation): keep a user's verbose callback on every engine (#1874) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1880
- fix(const): keep AppType/OptionType.register loud inside a quiet block (#1916) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1927
- fix(reassembly): bound TCP holes with a platform-independent open bound (#1959) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1965
- fix(corekit): let _py_abc cache its ABC lookups on sentinel types (#1960) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1966
- fix(corekit): copy SeekableReader's octets and feed MultiDict a dict, and gate GraalPy's limits (#1963) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1974
- fix(protocols): handle declared lengths above sys.maxsize as overruns (#1975) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1979
- fix(pcapng): cap a Decryption Secrets Block's secrets at its block (#1980) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1983
- fix(pcapng): cut an unknown, custom or journal block the file truncates (#1984) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1988
- fix(pcapng): warn on a malformed TLS key-log line instead of aborting (#1985) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1989
- fix(utilities): leave GraalPy's bootstrap frames out of the importer's level, and gate its remaining limits (#1963) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1996
- fix(foundation): back the abandoned-extraction close with weakref.finalize (#1997) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1998
- fix(pcapng): rebuild a ZigBee key off its fixed width as captured (#1986) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/2001
- fix(corekit): pack a bytearray into an s or p field on PyPy too (#2004) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/2007
- fix(corekit): refuse a non-bytes value for the c format on every engine (#2015) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/2018
♻️ Refactoring
- refactor: extract duplicated wire-unit arithmetic across mh/ipv6_route/hopopt/ipv6_opts by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/509
- refactor: import each *Base class under its own name, not the public one by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/750
- refactor(protocols): import ProtocolBase under its own name in the last 54 sites by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/752
- refactor(const): convert AppType's six %-style raises to f-strings (#792) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/797
- refactor(vendor): finish the %-to-f-string sweep on the four bespoke templates by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/803
- refactor(const): f-string the last three %-formatted repr methods (#804) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/817
- docs(http): fix three stale measurements in the guess_version fallback comment by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/826
- refactor(const,vendor): f-string the three remaining %-formatted repr methods by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/830
- test(const): key the manufactured-name exemption on the name shape, not on file paths by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/881
- refactor(enum): use auto() for the three StrEnum classes name.lower() matches by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/885
- refactor(corekit): give EnumRegistry a bare EnumLookup parent carrying get/get_all (#877) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/906
- docs: move the process pages out of the docs top level (#901) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/912
- refactor(const,protocols): reparent the last seven non-registry enums onto EnumLookup by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/932
- refactor(http): move test_start_line and its patterns into the http base module (#1519) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1525
- refactor(corekit): share one PortEnumField across TCP, UDP and SCTP (#1516) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1526
- refactor(corekit): move the stream proxy classes into corekit.io (#1516) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1521
- refactor(schema): share the IPv6-option and byte-order schema helpers (#1519) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1528
- refactor(corekit): merge the two DeferredPacket classes into corekit.packet (#1516) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1532
- refactor(interface): make the registry-entry helpers public in pcapkit.interface.registry (#1519) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1568
- refactor(toolkit): make tcp_segment and its result type public in toolkit.pcap (#1570) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1579
- refactor(toolkit): revert pyshark's agreement-only code (#1708) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1718
- refactor(toolkit): revert pypcapfile's agreement-only code (#1708) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1721
- refactor(toolkit): revert scapy's agreement-only code (#1708) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1724
- refactor(corekit,utilities): detect get_annotations, UnionType and dict reversal by version, not by probe (#1709) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1730
- refactor(toolkit): revert dpkt's agreement-only code (#1708) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1727
- refactor(vendor): keep the vendor variables in pcapkit.vendor (#1726) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1745
- refactor(protocols): one home per duplicated RFC-fixed constant (#1739) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1752
⚙️ CI & Build
- ci: feed the generated CHANGELOG.md to the release body, and gate its drift by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/529
- ci: wire the existing linters into CI as advisory checks by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/626
- ci(release): gate every publishing job on a deployment environment (#641) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/673
- ci(unit-tests): raise pytest job timeouts from 30 to 45 minutes by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/716
- ci(unit-tests): stop the integration job re-running the unit tier by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/727
- ci: parallelise pytest with xdist and drop 3.15 from the blocking matrix by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/725
- ci(gate-only): chain the push gate off Unit Tests instead of re-running it by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/731
- ci(release): key release notes on the real type labels, not just dependencies by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/735
- ci(unit-tests): install DPKT so the dpkt-gated tests actually run by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/737
- ci(unit-tests): install crypto, cli and NGAP for their gated tests by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/740
- ci(lint): make all three isort lines clean and repin lint.yml's counts by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/761
- ci: add a per-engine test job for Scapy, PyShark, PyPCAPFile and pcap-ct by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/755
- ci(deps): install the vendor extra on engine-tests, closing HAS_VENDOR_DEPS (#738) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/774
- test: gate test_isort_clean.py visibly and put isort on the test extra by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/786
- fix(test): gate the re.sub positional-flag DeprecationWarning test on Python 3.13 by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/820
- ci: give the pyshark engine real-capture coverage, and stop a fallback passing as a pass by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/846
- ci: add a single aggregate required-check job to unit-tests.yml by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/856
- ci(release): gate
tagongithub, document the release process by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/893 - docs(ci): document the GitHub Actions workflow graph by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/898
- ci(create-release): scope the cascade-guard comment to the publishing predecessors (#960) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/961
- ci(cron): say Saturday where the cron is Saturday-only (#964) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/965
- test(project): evaluate the release gates' if: expressions (#962) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/966
- test(project): tell == 'false' from != 'true' on an evidence output (#967) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/970
- ci(unit-tests): bound the apt install steps so a mirror stall cannot burn the job (#974) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/976
- ci(tests): add a plain-unittest leg to catch conftest-masked ordering defects by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/984
- docs(pcapkit,ci): cite the issue a defect belongs to, not the pull request (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/982
- ci(tests): run tests/vendor in the unittest-ordering job (#981, #985) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/988
- ci(unittest-ordering): shard the protocols leg into internet and the rest (#1029) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1032
- ci(release): run the full-suite gate only when a release will publish (#1052) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1053
- ci: sync the project board's Status from the state labels by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1057
- ci: bound unittest-leg reimport growth and add stall diagnostics (#1052) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1059
- ci(coverage): report test coverage from a workflow (#1063) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1064
- ci: cut queue pressure in unit-tests (#1052) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1055
- ci(project-status): stop a superseded sync from leaving a red check (#1066) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1071
- ci(unit-tests): widen the apt bounds so a slow mirror still installs tshark by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1309
- ci(unit-tests): coverage combine can silently miss a worker's data file, under-reporting a PR's coverage by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1389
- ci(unit-tests): save each xdist worker's coverage at session finish and keep the process log (#1423) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1424
- ci(unit-tests): cache the tshark .deb files and retry apt on a fallback mirror (#1432) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1438
- ci: weekly CI timing review and per-test timings from the unit legs (#1538) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1542
- ci: queue the ordering cells after the unit legs, run Engines 3.15 on main only, drop Engines (DPKT) (#1538) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1551
- ci(matrix): split Python into supported 3.11-3.15 and non-blocking KTLO 3.8-3.10 (#1633) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1645
- ci(release): Create Release tags and builds the commit its run was created for (#1634) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1656
- ci(python): add 3.7 as a KTLO leg (#1633) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1665
- ci(python): a failed KTLO leg exits 0 and reports a warning, so main stays green (#1672) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1679
- ci(vendor): commit a comment-only regeneration without bumping the version (#1674) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1684
- ci(python): declare the version tiers and the latest version in one file (#1660) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1677
- ci(python): a weekly job keeps the Python version tiers current and opens a PR (#1660) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1716
- ci(release): key a run with nothing to release on its own run id (#1705) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1722
- ci(python): run GraalPy and free-threaded CPython as experimental, non-blocking test legs (#1660) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1725
- ci(python): run round-trip sweeps on latest only, move experimental legs to their own workflow (#1732) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1742
- ci(python): move the KTLO legs into jobs nothing gating waits on (#1738) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1746
- ci(python): contain and sample the experimental legs so a lost runner becomes a warning (#1740) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1749
- ci(python): the version updater flags a job its update would empty (#1747) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1750
- ci(release): a push that releases nothing stays green when its version is tagged elsewhere (#1748) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1751
- ci(python): exit and replace a GraalPy worker whose heap is spent (#1753) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1755
- docs(ci): fix the review findings on the repo-files pass (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1838
- ci(conda): report a package pinned differently under one marker (#1852) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1865
- ci(release): drop fixed totals and conda-leg installs, smoke-test releases (#1849, #1854, #1855) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1868
- ci(vendor): test the regenerated tree before committing it (#1853) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1879
- ci(tests): start every resource-monitor sample on its own line (#1888) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1890
- ci(conda): move platform pins up and give them a review-by date (#1851) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1885
- ci(util): fetch with requests and poll memory with psutil in the scripts (#1894) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1896
- ci(experimental): cancel superseded runs on main (#1903) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1905
- ci(timing): budget the job reads and publish a cut-short report (#1930) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1931
- ci(release): count osx-arm64 in the Anaconda completeness check (#1922) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1932
- ci(experimental): skip or stop superseded runs instead of cancelling them (#1938) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1942
- ci(unit-tests): run platform-independent project pins once per push (#1954) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1956
- ci(unit-tests): assign every test module a tier and run each tier where it belongs (#1958) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1971
- ci: drop the third-party step after the deploy key and declare workflow permissions (#1968) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1970
- ci(experimental): count raised MemoryErrors, not mentions of one (#1962) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1972
- ci(unit-tests): cap the size of files tests write on every pytest step (#1969) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1973
- ci(unit-tests): run the whole suite on latest CPython (#1958) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1976
- ci: pin every action to a commit SHA and let Dependabot update them (#1968) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1981
- ci: name the secrets' environments on the cron jobs (#1968) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1993
- ci: make the readme static so Dependabot can build the editable install (#1968) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1994
- ci: move the repeated workflow shell into util scripts (#1967) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1995
- ci: share the cron gate and verdict head through one reusable workflow (#1967) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/2002
- ci: run actionlint in Lint (#1967) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/2011
- ci: run the GraalPy leg's tier in shards so no worker outlives its heap (#1963) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/2012
- fix(ci): let tshark read the checkout past Ubuntu 26.04's AppArmor profile (#2019) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/2021
- fix(ci): run GNU timeout in the experimental tests step on any image (#2020) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/2022
- ci: run the curated ALL tier on PyPy, split into separate pytest runs (#1958, #2005) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/2006
- ci: fix shellcheck findings and trim workflow comments (#1967) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/2023
- fix(ci): warn when --refresh-pins cannot move a pin (#2025) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/2026
- docs(ci): cite unit-tests.yml by step name, not line (#1967) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/2027
- ci: regenerate sample captures through util/regenerate_samples.py (#1967) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/2029
- ci: install through util/pip_install.py (#1967) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/2031
- fix(ci): warn when a pinned conda release has lost a wheel (#2028) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/2035
⚡ Performance
- perf(corekit): resolve a ModuleDescriptor through sys.modules, not import_module (#574) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/586
- perf: call field.copy() directly instead of copy.copy(self) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/733
- perf(reg): drop the per-member annotation and TransportProtocol.get() calls by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/769
- perf(const): load the TCP and UDP app-type registries on first use (#1538) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1560
📝 Documentation
- docs: set PCAPKIT_SPHINX before importing pcapkit, not after by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/520
- docs: add CHANGELOG.rst and render it in the Sphinx docs by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/521
- docs: mark the Type Stubs copies of four TypedDicts :no-index: by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/532
- docs(hopopt): cite RFC 8200 section 4.2 for the Opt Data Len sentence (#530) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/538
- docs: correct documentation that stated untrue things (#546) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/550
- docs: say in SECURITY.md that hostile captures are a live risk, not a closed one by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/611
- docs: repair the Code of Conduct's rendering and refresh CONTRIBUTING by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/613
- docs: add CITATION.cff and bring the copyright notice up to date by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/615
- docs: adopt Contributor Covenant 3.0 for the Code of Conduct by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/624
- docs(readme): trim to a landing page and convert to Markdown by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/619
- docs(github): review the non-workflow metadata under .github/ by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/637
- docs(changelog): correct the LICENSE history in the #630 entry by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/638
- docs(contributing): correct four statements the recent merges falsified by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/656
- docs(contributing): the
make vermintrap is the opposite of what was recorded by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/659 - docs: reconcile the Sphinx directives to the contract-versus-recipe tenet (#684) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/694
- fix(traceflow): qualify the bare
Type[Dumper]autodoc references (#709) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/712 - fix(docs): qualify the ambiguous Type refs in the foundation rst tree by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/714
- docs(tests): stop stating how many captures are committed (#700) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/703
- docs(foundation): cite the real class statement in the engine-check note by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/763
- docs: render #771's two unregistered-member helpers in numbers.rst (#780) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/781
- test: reword PcapngUnescapedKeyTests' claims that #784 falsified by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/790
- docs(pcapng): repoint the generator's stale journal-defect citation by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/793
- docs: add pcapkit.version entry and the missing corekit.enum page by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/919
- docs(conventions): harvest the settled rulings, correct the stale prose (#918) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/929
- docs(corekit): add the sentinels API page so conventions.rst references resolve (#934) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/936
- docs(protocols): cite the extension-header registry in ESP/AH, not protocol-numbers-1.csv by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/938
- docs(conventions,const): resolve part B's unresolved cross-references (#934) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/941
- docs(const,vendor): fix RFC anchor typos and missing section- prefixes by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/943
- docs(contributing): split conventions.rst into one file per anchor (#918) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/945
- docs: retarget every dead :rfc:
959sub-section anchor (#944) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/946 - docs(contributing): record the get-override rulings on the conventions page (#918) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/948
- docs(contributing): paraphrase the quoted rulings, and pin claims not wording (#949) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/951
- docs(changelog): shared 1.5.0 changelog — long-lived, merges last (#610, #616, #617, #618, #620) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/657
- docs: tighten demo.rst and the docs landing page (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/954
- docs(contributing): sweep pep.rst and testing.rst (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/955
- docs: cut timed context from the Sphinx prose and root docs (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/953
- docs(contributing): correct pep.rst's release gating description (#956) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/957
- docs(contributing): correct releasing.rst's cascade guard (#958) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/959
- docs(contributing): draw pep.rst's release-trigger chain as a Mermaid graph by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/963
- docs(contributing): sweep the conventions pages for accuracy and concision (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/968
- docs(contributing): heading casing per the #719 ruling by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/971
- docs(sphinx): caption the root toctrees, point the edit button at main (#719, #969) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/972
- docs(sphinx): hide the three root toctrees from the page body by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/975
- docs(contributing): record the documentation house rules (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/977
- docs(contributing): cite the issue, not the pull request, on the conventions pages (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/978
- docs(contributing): record the tests/ and changelog PR-citation exemptions by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/980
- docs(protocols): state the rulings behind mh, vendor and exceptions in our own words by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/991
- docs(corekit): state the sentinel rulings instead of quoting them by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/992
- docs(corekit): state the enum.py rulings as statements, not quotations by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/990
- docs(tests): state the rulings these tests cite instead of quoting them by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/993
- docs(tests): stop crediting the owner with wording he never wrote by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/994
- docs(const,vendor): state the generated files' rulings instead of quoting them by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/996
- docs(corekit,tests): state what the enum tiers actually declare and dispatch by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/997
- docs(sphinx): add opt-in issue, pr and discussion roles and convert the conventions pages by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/998
- docs(tests): stop calling pull requests issues in the const suites by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/999
- docs(corekit): convert bare citations to the issue role in corekit docstrings by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1000
- docs(sphinx): define the wikipedia and iana extlinks roles ahead of first use by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1001
- docs(foundation): convert bare citations to the issue role in docstrings by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1002
- docs(internet): convert bare citations to the issue role in docstrings by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1003
- docs(schema): convert bare citations to the issue role in docstrings by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1004
- docs(vendor,const): convert bare citations to the issue role in generators and generated files by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1005
- docs(tests): stop calling pull requests issues in test prose by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1006
- docs(pep,tests): correct the checksum protocol count and the registry-leak lineage by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1007
- docs(changelog,protocols): credit the registry-leak fixes to the right layer by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1009
- docs(changelog): cut the 1.5.0 entries to what changed and its effect by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1010
- docs: cut the root markdown documents to what a reader needs by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1011
- docs(contributing): cut the contributing pages and repair drifted line references by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1012
- docs: repair the top-level Sphinx pages and cut their timed context by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1014
- docs(foundation): correct the registrar contracts and cut timed context by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1015
- docs(utilities): drop the change-over-time narration from the small subtrees by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1017
- docs(const): state what missing actually does instead of claiming it mints by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1018
- docs(foundation): document the engine members on EngineBase, not Engine (#1024) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1027
- docs(protocols): tighten the transport-layer docstrings and cut timed context (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1034
- docs(protocols): tighten the internet-layer prose and cut timed context (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1035
- docs(protocols): tighten the internet-layer prose and correct stale claims (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1036
- docs(protocols): tighten misc protocol prose and correct the record docs (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1037
- docs(protocols): tighten application, link and root protocol prose (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1039
- docs(protocols): tighten the schema prose and cut timed context (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1040
- docs(autodoc): cut timed context from the non-protocol autodoc pages (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1043
- docs(protocols): repair the protocol pages and cut their restatement (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1044
- docs: tighten utilities, foundation, corekit, dumpkit and toolkit prose (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1051
- docs: close the #719 sweep's last three leftovers (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1056
- docs(tests): tighten the foundation and corekit test prose from the post-sweep merges (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1072
- docs(tests): tighten the protocols test prose from the post-sweep merges (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1073
- docs(contributing): tighten the prose from the post-sweep merges (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1075
- docs(tests): tighten the shared test-support prose from the post-sweep merges (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1074
- docs(protocols): second-round pass over the data-model prose (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1080
- docs(protocols): second-round pass over the internet-layer prose (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1081
- docs(protocols): second-round pass over the application-layer prose (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1082
- docs(protocols): second-round pass over the schema prose (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1083
- docs(foundation): second-round pass over the foundation prose (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1084
- docs: second-round pass over the remaining Sphinx pages and root docs (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1085
- docs(protocols): second-round pass over the link, misc, transport and root protocol prose (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1087
- docs(changelog): second-round concision pass over 1.5.0 (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1088
- docs(protocols): second-round pass over the protocol pages (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1086
- docs(corekit): second-round pass over corekit, dumpkit, toolkit, utilities and interface prose (#719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1089
- docs(protocols): Protocol docstring claims it is the base of all protocol families by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1106
- docs: prose sweep after the defect wave (schema-data) (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1179
- docs: prose sweep after the defect wave (protocols) (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1180
- docs: prose sweep after the defect wave (foundation-docs) (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1186
- docs(conventions): a test-coverage convention by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1225
- docs(engines): the dpkt engine silently drops PCAP-NG Simple Packet Blocks by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1370
- docs(sctp): a parsed Host Name may lack its null terminator by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1486
- docs(reassembly): a fragment after its datagram completes starts a new buffer (#1507) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1510
- docs(extraction): name only PyShark and PyPCAPFile for the PCAP trace warning (#1719) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1720
- docs(toolkit): drop agreement claims from adapter docstrings (#1708) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1741
- docs(protocols): version directives and accurate prose for the internet layer (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1760
- docs(protocols): sweep link and transport prose (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1761
- docs(corekit): version directives and render fixes (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1762
- docs(foundation): add 1.5.0 version directives and fix stale prose (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1763
- docs(tests): correct stale claims in test docstrings and comments (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1764
- docs(protocols): sweep application, misc and the protocol base (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1765
- docs(docs): sweep the Sphinx pages for stale claims, toctree order and markup (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1766
- docs(changelog): add the missing 1.5.0 entries and fix its markup (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1767
- docs(repo): correct stale claims and drop timed context in repo files (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1768
- docs(tests): second pass over tests outside tests/protocols (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1789
- docs(tests): second pass over tests/protocols (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1788
- docs(changelog): second pass over the 1.5.0 changelog (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1787
- docs(corekit): second pass over corekit, const and vendor (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1786
- docs(protocols): second pass over application, misc and the protocol base (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1785
- docs(protocols): second pass over link and transport (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1784
- docs(protocols): second pass over the IPv6 extension headers (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1783
- docs(protocols): second pass over HIP, IPv4, IPv6 and IPX (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1782
- docs(foundation): second pass over engines, toolkit and reassembly (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1777
- docs(conf): resolve the 36 ambiguous cross-references at their source by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1790
- docs(protocols): second whole-repo pass over internet (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1798
- docs(protocols): second whole-repo pass over link and transport (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1799
- docs(protocols): second whole-repo pass over application, misc and the protocol base (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1800
- docs(foundation): second whole-repo pass over foundation (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1801
- docs(docs): second whole-repo pass over the non-API docs and indexes (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1802
- docs(changelog): second whole-repo pass over the changelog (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1803
- docs(repo): second whole-repo pass over repo-level files (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1804
- docs(tests): second whole-repo pass over tests (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1805
- docs(corekit): second whole-repo pass over corekit, const and vendor (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1808
- docs: retire the counted numbers that tests and the python-versions updater pin (#1811) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1817
- docs: make the mermaid diagrams readable (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1819
- docs(changelog): third whole-repo pass over the changelog (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1829
- docs(repo): third whole-repo pass over the repository files (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1830
- docs(tests): third whole-repo pass over tests (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1831
- docs(docs): third whole-repo pass over the non-API docs (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1832
- docs(protocols): third whole-repo pass over link and transport (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1833
- docs(foundation): third whole-repo pass over foundation, toolkit, dumpkit, interface and utilities (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1834
- docs(protocols): third whole-repo pass over application, misc and the protocol base (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1835
- docs(protocols): third whole-repo pass over internet (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1836
- docs(corekit): third whole-repo pass over corekit, const and vendor (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1837
- docs: let autodoc resolve the HTTP/2 frame and engine class annotations (#1857) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1870
- docs(foundation): restore Extractor._vfunc's annotation (#1839) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1867
- docs(conf): build with sphinx-autodoc-typehints 3.15.0 (#1856) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1877
- docs(conf): fix class signatures, defaults, aenum names, table ids and viewcode's index (#1858, #1859, #1860, #1861, #1862, #1863) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1881
- docs(const): drop version directives from generated tables (#1884) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1895
- docs(protocols): fourth whole-repo pass over internet (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1907
- docs(protocols): fourth whole-repo pass over link and transport protocols (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1908
- docs(protocols): fourth whole-repo pass over application, misc and the protocol base (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1909
- docs(corekit): fourth whole-repo pass over corekit, const and vendor (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1910
- docs(docs): fourth whole-repo pass over the non-API docs (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1912
- docs(changelog): fourth whole-repo pass over the changelog (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1913
- docs(repo): fourth whole-repo pass over the repository files (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1914
- docs(tests): fourth whole-repo pass over tests (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1915
- docs(conf): resolve decorated overload aliases and qualify colliding third-party classes (#1917, #1918, #1920) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1929
- docs: date the excluded and Raw directives to the release that shipped them (#1933) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1934
- docs(const): document the get overrides instead of hiding them (#1921) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1935
- docs(foundation): fourth whole-repo pass over foundation, toolkit, dumpkit, interface and utilities (#1103) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1911
- docs: retarget or demote cross-references that cannot resolve (#1919, #1920) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1928
- docs: link inventory-less packages through rst_epilog substitutions (#1936) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1939
- docs(changelog): link the 1.5.0 entries to the API (#1941) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1943
- docs(const): link aenum through the epilog in the apptype and option_type templates (#1920) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1945
- docs: link library-internal references and document the missing public classes (#1940) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1946
- docs(contributing): spell out KTLO where it is defined and link its earlier mentions (#1950) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1951
- docs: link bare pcap module mentions to the PyPCAP/pcap-ct note (#1948) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1952
- docs(const): link the remaining internal references in the AppType and OptionType templates (#1947) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1953
- docs: add a glossary for terms with several meanings (#1949) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1955
🧹 Chores
- chore(examples): stop tracking the four rendered capture reports (#685) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/697
- chore: add isort to Pipfile's dev-packages so
make isortresolves it by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/812 - chore: generate pyshark's encap-type and filter-name maps from a util script by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/853
- chore(deps): add PyYAML to the test extra (#1076) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1078
- chore(github): add a release commit-type box to the PR template by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1105
- chore: drop stale build leftovers and move the examples' READMEs to Markdown (#1773) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1780
- chore: drop the MANIFEST.in lines that match nothing (#1794) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1813
- chore(protocols): drop the unused PAT_MAC_ADDR from ospf.py (#1844) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1864
- chore(corekit): spell the import-outside-toplevel pragma correctly (#1923) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1925
- chore: cite issues as #NNN in plain comments by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1982
🧪 Tests
- test: sort sample_path() calls into real source order in the tier guard by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/510
- test: pin the truncated-data half of the #431 short-read accommodation by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/578
- test: correct docstrings on the #572 truncated-option tests by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/580
- test(utilities,foundation): pin the quiet StreamEOFError convention and register_extractor_engine's keyword by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/577
- test(tcp): reach the MP_JOIN dispatchers through TCP(), not a hand-written _flags (#603) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/612
- test(tcp): expect the short-read padding on the tail, repairing
main(#604) (#621) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/627 - test(tcp): retarget the last assertion pinning the old padding side (#604) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/628
- fix(tests): restore sys.modules after a test installs a stand-in module (#660) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/662
- fix(tests): put sys.modules back after a test loads modules from source (#674) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/686
- fix(tests): keep a faked version and hand-bound stand-ins inside the test that made them (#687, #688) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/693
- fix(tests): derive the nameless-flag probe from each registry's own width (#702) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/705
- fix(tests): complete the warm-up list #693 left resting on someone else's imports by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/698
- test: map mypy in MODULE_PROVIDERS and name the module an unmapped lookup wanted by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/782
- test(const): fix the stale StrEnum docstring and rename EXCLUDED_STILL_BESPOKE by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/894
- test(prose): correct a stale PR state and two issue/PR mislabels by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/979
- test(vendor): re-resolve VendorRuntimeWarning fresh per generation (#985) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/986
- test: make the time_limit hang guard robust to slow runners (#1058) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1061
- test(project-status): make the workflow-injection guard fail closed (#1060) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1067
- test(project-status): guard shell: against expression injection (#1068) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1069
- test: re-import pcapkit only where isolation needs it (#1065) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1070
- test(project-status): guard container/services options and working-directory against expressions (#1077) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1079
- test(generators): HIP_TRANSFORM is generated into a HIPv2 packet although it is HIPv1-only by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1128
- test(generators): HTTP/2 sample frames are all written on stream 0 by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1161
- test(corekit): test_sentinel_exports_unit passes in the corekit unittest leg by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1386
- test(schema): every BitField namespace covers all of its bits by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1416
- test(generators): scale the option generator's per-case deadline by PCAPKIT_TEST_TIMEOUT_SCALE (#1428) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1439
- test: capture-driven parse→rebuild and dumper round trips (#1202) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1445
- test(protocols): edge-case round trips for every layer family (#1202) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1454
- test(integration): skip upstream-pinned PCAP-NG counts on a stand-in fixture (#1478) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1480
- test(corekit): field, schema and Info round trips (#1202) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1492
- test(foundation): reassembly, traceflow, engine and registry round trips (#1202) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1508
- test(foundation): retry a pyshark engine run once on a tshark crash (#1534) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1536
- test: keep the per-class pcapkit import in 12 classes that re-imported per test (#1538) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1557
- test(foundation): sequence the no_eof growing-file append on end of stream, not a timer (#1583) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1587
- test: run the 3.9+ and 3.10+ stdlib tests on every supported Python (#1695) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1697
- test(project): judge the tree against an isort whose verdict the test was written for (#1696) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1698
- test: spell test_base_class_contract's suffix strip so Python 3.8 runs it (#1699) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1700
- test: remove the cross-engine agreement tests from the shared modules (#1708) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1714
- test(tiers): keep the xdist probe out of recursive collection (#1756) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1757
- test(tiers): check for a leftover probe under the lock (#1758) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1759
- test: exercise option type 0x23 in the SMF_DPD truncation loop (#1771) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1776
- test: run the PCAP-NG JSON report test now that keys are escaped (#1795) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1809
- test(protocols): bound the #1428 deadline test so a lost alarm cannot hang the worker (#1889) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1891
- test(support): re-arm time_limit's alarm so a swallowed timeout cannot hang a worker (#1892) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1893
- test(project): keep the #1851 and #1878 tests green on the KTLO legs (#1898, #1899) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1900
- test(protocols): keep the #1889 spin's first raise inside its try (#1897) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1901
- test(project): close the gaps the merge-wave reviews left in the guard tests (#1902) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1904
- test(project): keep the #1634 scratch repositories' clones off auto-maintenance (#1906) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1926
- test(protocols): drop test_mh_unit's dead tracebacklimit cleanup (#1924) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1937
- test(tiers): make ALL a curated opt-in tier (#1958) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/1978
- test: give GraalPy's finaliser time to run after gc.collect (#1963) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/2010
- test: flush GraalPy's inline caches before checking a class is collectable (#1963) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/2013
- test: drive collect_until's late-finaliser test off a fake clock (#2016) by @JarryShaw in https://github.com/JarryShaw/PyPCAPKit/pull/2017
👒 Dependencies
- Scheduled weekly dependency update for week 38 by @pyup-bot in https://github.com/JarryShaw/PyPCAPKit/pull/581
- Scheduled weekly dependency update for week 40 by @pyup-bot in https://github.com/JarryShaw/PyPCAPKit/pull/1033
- Scheduled weekly dependency update for week 42 by @pyup-bot in https://github.com/JarryShaw/PyPCAPKit/pull/1944
- chore(deps): bump conda-incubator/setup-miniconda from 4.0.1 to 4.1.0 by @dependabot[bot] in https://github.com/JarryShaw/PyPCAPKit/pull/1990
- chore(deps): bump webfactory/ssh-agent from 0.9.1 to 0.10.0 by @dependabot[bot] in https://github.com/JarryShaw/PyPCAPKit/pull/1991
- chore(deps): bump softprops/action-gh-release from 3.0.2 to 3.0.3 by @dependabot[bot] in https://github.com/JarryShaw/PyPCAPKit/pull/1992
🏕 Changes
- Scheduled weekly dependency update for week 41 by @pyup-bot in https://github.com/JarryShaw/PyPCAPKit/pull/1629
Full Changelog: v1.5.0b3...v1.5.0b14