Changelog

Generated from the commit history at release time. The narrative history through 1.0.5 is in CHANGES.rst.

4.1.1 (2026-09-11)

Bug Fixes

  • mibdump: remove the built-in MIB borrowers, all of which are 404 (533c361)

4.1.0 (2026-09-11)

Features

  • corpus: let a manifest declare what the corpus is, not only where it comes from (f712c4b), closes #263

  • corpus: stage the jsondoc a projection needs instead of asking the caller to (8f4cac8), closes #262

  • patches: generate a MIB’s repair as a patch instead of making it at runtime (ee01ccc)

Bug Fixes

  • corpus: publish only what compiled, in every artifact (e6489d1), closes #269

4.1.0-rc.2 (2026-09-11)

Features

  • corpus: let a manifest declare what the corpus is, not only where it comes from (f712c4b), closes #263

  • corpus: stage the jsondoc a projection needs instead of asking the caller to (8f4cac8), closes #262

Bug Fixes

  • corpus: publish only what compiled, in every artifact (e6489d1), closes #269

4.1.0-rc.1 (2026-09-11)

Features

  • patches: generate a MIB’s repair as a patch instead of making it at runtime (ee01ccc)

4.0.0 (2026-09-10)

⚠ BREAKING CHANGES

  • patches: readers implement fetch_data() rather than get_data(); a subclass overriding get_data() still works but skips patching. Patching is on by default – mibdump –no-mib-patches turns it off, –mib-patch-source replaces the bundled set, and AbstractReader.usePatches/patchSet are the library equivalents. pysmi/mibs/asn1 in the source tree now holds the published text for the twelve patched modules; the wheel is unchanged.

Closes #185.

Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com

  • mibs: pysmi.mibs.behavior() is gone and generated modules no longer carry a spliced runtime-behavior tail. Consumers relying on that tail must apply their own behavior at load time, as pysnmp now does. PYSNMP-USM-MIB is no longer in PySnmpCodeGen.baseMibs, so a StubSearcher built from it no longer reports that module as up to date.

Features

Bug Fixes

  • ci: keep the behavior fragments out of mypy’s file list and name the codegen by its module (7dd4952)

  • codegen: set the encoding a UTF-8 DISPLAY-HINT states (58a3e3f)

  • corpus: report a damaged corpus rather than raising sqlite3 out of validate (93c40cf)

  • mibs: re-seed the objects a behavior fragment’s class attribute built (6d91544), closes #236

  • tests: do not name a directory “we?ird” on a platform that forbids it (d325e5f), closes #235 #235

Code Refactoring

4.0.0-rc.4 (2026-09-10)

Corrected. The notes generated for this release announced a breaking reader API — fetch_data(), AbstractReader.usePatches/patchSet, mibdump --no-mib-patches/--mib-patch-source — that the tag does not contain. That API was added and then withdrawn within the same pull request, and only the first commit’s BREAKING CHANGE: footer reached the generator. Nothing in 4.0.0-rc.4 breaks a caller of 4.0.0-rc.3. See #254.

The 4.0.0 major is still warranted by 4.0.0-rc.1, which removed pysmi.mibs.behavior().

Changes

  • patches: apply the twelve MIB repairs when a distribution is built rather than when the bundle is refreshed (8e22340, 84bb507). The source tree now holds each publisher’s text verbatim and the diffs live in scripts/mib-patches/, so a refresh diffs against the publisher and what pysmi repairs is a diff of its own. hatch_build.py applies them into the distribution, whose pysmi/mibs/asn1/ is byte-identical to rc.3’s. Neither scripts/patches.py nor the diffs are installed. Closes #185.

  • corpus: conformance vectors now cover every column the DDL declares, and the schema version is pinned so a schema change cannot land without the vectors moving with it (c97f985). Closes #251.

4.0.0-rc.3 (2026-09-10)

Features

  • corpus: publish the precedence rule as vectors both projects run (26f0262), closes #248

3.1.0 (2026-09-10)

Features

Bug Fixes

  • corpus: keep core.db opt-in, key the corpus cache, count nodes once (a12187c)

4.0.0-rc.2 (2026-09-09)

Features

  • codegen: declare the pysnmp API the generator emits (fe233aa)

4.0.0-rc.1 (2026-09-09)

⚠ BREAKING CHANGES

  • mibs: pysmi.mibs.behavior() is gone and generated modules no longer carry a spliced runtime-behavior tail. Consumers relying on that tail must apply their own behavior at load time, as pysnmp now does. PYSNMP-USM-MIB is no longer in PySnmpCodeGen.baseMibs, so a StubSearcher built from it no longer reports that module as up to date.

Code Refactoring

3.1.0-rc.4 (2026-09-09)

Features

  • mibs: give snmpEngineTime the elapsed-seconds read RFC 3411 describes (7a8e948), closes #236 #231

3.1.0-rc.3 (2026-09-09)

Bug Fixes

  • mibs: re-seed the objects a behavior fragment’s class attribute built (6d91544), closes #236

3.1.0-rc.2 (2026-09-09)

Features

Bug Fixes

  • corpus: report a damaged corpus rather than raising sqlite3 out of validate (93c40cf)

  • tests: do not name a directory “we?ird” on a platform that forbids it (d325e5f), closes #235 #235

3.1.0-rc.1 (2026-09-09)

Features

Bug Fixes

  • ci: keep the behavior fragments out of mypy’s file list and name the codegen by its module (7dd4952)

  • codegen: set the encoding a UTF-8 DISPLAY-HINT states (58a3e3f)

  • corpus: keep core.db opt-in, key the corpus cache, count nodes once (a12187c)

3.0.0 (2026-09-09)

⚠ BREAKING CHANGES

  • mibs: the wheel carries 210 ASN.1 modules and 207 precompiled pysnmp modules where it carried 485 and 484. A caller compiling a module that imports one of the 275 now resolves it from its own –mib-source instead of from the bundle. pysmi.mibs.manifest() still names all 485; pysmi.mibs.bundled() is the set an install actually supplies.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com Claude-Session: https://claude.ai/code/session_018PviAP7g1mTiiSDn4fRQsq

  • compiler: a failed MIB no longer suppresses the output of unrelated MIBs compiled in the same call; they are written. mibdump –ignore-errors no longer changes which modules are written – it now suppresses the non-zero exit status instead. A caller that relied on an all-or-nothing batch should compile one module per call.

Refs #182.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com Claude-Session: https://claude.ai/code/session_01EBV5NVv7NB6R1Wx9vRypt6

  • codegen: generated pysnmp modules no longer test mibBuilder.version before calling setStatus, setProductRelease, setRevisionsDescriptions or setObjects(append=True), and they now call setReference() on ObjectGroup, NotificationGroup and ModuleCompliance. Loading one requires a pysnmp that implements those setters: pysnmplib 6.0.0rc5 or later, or pysnmp 7.x. A pysnmp 4.4.x runtime, which the removed branches existed for, is no longer supported – recompile against a supported release rather than loading newly generated modules into it.

Closes #194. Refs pysnmp/pysnmp#197.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com Claude-Session: https://claude.ai/code/session_01EBV5NVv7NB6R1Wx9vRypt6

  • compiler: mibdump --repair-imports is replaced by mibdump --strict-imports. The repair it used to request is now what happens; the new flag asks for the old strict behaviour, which is what a caller validating a MIB rather than consuming one wants. Programmatically, repairImports=False is the same opt-out and is unchanged. A repair is never silent: every one is listed on the “Repaired MIBs” line of the report and recorded in the symbol table under _symtable_repaired.

Features

  • codegen: canonical form and content hash over the module model (965e559), closes #190 #191 #180

  • codegen: target the loader contract instead of inferring it (bd5db61), closes pysnmp/pysnmp#133 pysnmp/pysnmp#197

  • compiler: repair a forced missing import by default, and drop 9 patches (c091932), closes #185 #185

  • compiler: swap sources on a live compiler, keeping the parse cache (cf1ce44), closes #181

  • corpus: build a corpus from many source namespaces, deterministically (138d99c), closes pysnmp/pysnmp#196 #183 #182

  • corpus: let a namespace be resolved against without being published (beffff6), closes #182

  • mibdump: –build-all compiles every module the sources hold (9d92921)

  • mibdump: –emit writes every format from one read of the sources (27c5711)

  • mibs: bundle IPSEC-ISAKMP-IKE-DOI-TC from the draft that defines it (185d962), closes #212 #212

  • mibs: bundle sFlow.org’s SFLOW-MIB, not RFC 3176’s (cad444e)

  • mibs: bundle the 119 RFC MIB modules the bundle was still missing (f44d363), closes #212 #212

  • mibs: bundle the SMIv1 compatibility shims (ed27c8c), closes #161

  • mibs: bundle the standards modules from pysnmp/mibs src/standard (b18f6e9), closes #187

  • mibs: hold the 275 bundled modules nothing in the corpus imports (32042ea)

  • parser: tolerate an OBJECT-TYPE descriptor that starts upper case (51a689b)

  • pysnmp: state the MODULE-IDENTITY revision as a constant in emitted modules (4ef57ca), closes pysnmp/pysnmp#198

  • reader: ask a source what MIB modules it holds (ee42ca3)

Bug Fixes

  • build: stop generating the three modules that cannot be generated (95d56fe), closes pysnmp/pysnmp#198 pysnmp/pysnmp#198 #196

  • cache: identify a parser by its dialect, not just its class (1141971), closes #181

  • cache: size the in-memory parse cache above a real source set (95ceadc)

  • compiler: make comment stripping string-aware, and apply it to the inventory (d0f12fa), closes pysnmp/pysnmp#198

  • compiler: omit only the failed MIB and what imports it (472d6c8)

  • compiler: the newest revision decides every name, not only bundled ones (86304df)

  • corpus: keep the docs build and Windows green (bf06c16), closes #182

  • jsondoc: emit a module whose symbol is spelled like a Python keyword (dd7e2d9), closes #225

  • jsondoc: keep AGENT-CAPABILITIES variations when texts are off (e5d67a2), closes #196 #198 #190 pysnmp/pysnmp#198 pysnmp/pysnmp#198 #186

  • jsondoc: suppress prose and nothing else when texts are off (e9f74e2), closes #191 #192 #190 #190 #191 #192

  • mibinfo: refuse a revision stamp that is not a date (349d7e3), closes #185

  • mibs: keep the three patches that were correcting more than an import (d992cf9)

  • mibs: make DSA-MIB and RDBMS-MIB load, by naming the module their symbols are in (bf2008c), closes #199

  • pysnmp: carry LAST-UPDATED in the revision constant, not the newest REVISION (73f4202), closes pysnmp/pysnmp#198

  • schema: declare agentcapabilities, and make the schema itself valid (54f85b1), closes #190

  • schema: require status on agentcapabilities, and list it as a class (126bf58)

  • tests: fail when a bundled module compiles to nothing (62cedd6), closes #203

  • writer: create the temporary file with the mode a new file gets (9ff800b), closes #227 #227

  • writer: store a module anyone can read, not only the user who built it (33943bf), closes #182

3.0.0-rc.8 (2026-09-08)

Bug Fixes

  • writer: store a module anyone can read, not only the user who built it (33943bf), closes #182

3.0.0-rc.7 (2026-09-08)

Features

Bug Fixes

  • corpus: keep the docs build and Windows green (bf06c16), closes #182

  • jsondoc: emit a module whose symbol is spelled like a Python keyword (dd7e2d9), closes #225

3.0.0-rc.6 (2026-09-08)

Bug Fixes

  • mibs: make DSA-MIB and RDBMS-MIB load, by naming the module their symbols are in (bf2008c), closes #199

3.0.0-rc.5 (2026-09-08)

⚠ BREAKING CHANGES

  • mibs: the wheel carries 210 ASN.1 modules and 207 precompiled pysnmp modules where it carried 485 and 484. A caller compiling a module that imports one of the 275 now resolves it from its own –mib-source instead of from the bundle. pysmi.mibs.manifest() still names all 485; pysmi.mibs.bundled() is the set an install actually supplies.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com Claude-Session: https://claude.ai/code/session_018PviAP7g1mTiiSDn4fRQsq

Features

  • mibdump: –build-all compiles every module the sources hold (9d92921)

  • mibs: hold the 275 bundled modules nothing in the corpus imports (32042ea)

  • reader: ask a source what MIB modules it holds (ee42ca3)

3.0.0-rc.4 (2026-09-08)

Features

  • mibs: bundle sFlow.org’s SFLOW-MIB, not RFC 3176’s (cad444e)

3.0.0-rc.3 (2026-09-08)

Features

  • mibdump: –emit writes every format from one read of the sources (27c5711)

  • mibs: bundle IPSEC-ISAKMP-IKE-DOI-TC from the draft that defines it (185d962), closes #212 #212

Bug Fixes

  • cache: size the in-memory parse cache above a real source set (95ceadc)

  • compiler: the newest revision decides every name, not only bundled ones (86304df)

3.0.0-rc.2 (2026-09-08)

Features

  • parser: tolerate an OBJECT-TYPE descriptor that starts upper case (51a689b)

3.0.0-rc.1 (2026-09-08)

⚠ BREAKING CHANGES

  • compiler: a failed MIB no longer suppresses the output of unrelated MIBs compiled in the same call; they are written. mibdump –ignore-errors no longer changes which modules are written – it now suppresses the non-zero exit status instead. A caller that relied on an all-or-nothing batch should compile one module per call.

Refs #182.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com Claude-Session: https://claude.ai/code/session_01EBV5NVv7NB6R1Wx9vRypt6

  • codegen: generated pysnmp modules no longer test mibBuilder.version before calling setStatus, setProductRelease, setRevisionsDescriptions or setObjects(append=True), and they now call setReference() on ObjectGroup, NotificationGroup and ModuleCompliance. Loading one requires a pysnmp that implements those setters: pysnmplib 6.0.0rc5 or later, or pysnmp 7.x. A pysnmp 4.4.x runtime, which the removed branches existed for, is no longer supported – recompile against a supported release rather than loading newly generated modules into it.

Closes #194. Refs pysnmp/pysnmp#197.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com Claude-Session: https://claude.ai/code/session_01EBV5NVv7NB6R1Wx9vRypt6

  • compiler: mibdump --repair-imports is replaced by mibdump --strict-imports. The repair it used to request is now what happens; the new flag asks for the old strict behaviour, which is what a caller validating a MIB rather than consuming one wants. Programmatically, repairImports=False is the same opt-out and is unchanged. A repair is never silent: every one is listed on the “Repaired MIBs” line of the report and recorded in the symbol table under _symtable_repaired.

Features

Bug Fixes

  • cache: identify a parser by its dialect, not just its class (1141971), closes #181

  • compiler: omit only the failed MIB and what imports it (472d6c8)

  • mibinfo: refuse a revision stamp that is not a date (349d7e3), closes #185

  • mibs: keep the three patches that were correcting more than an import (d992cf9)

2.4.0-rc.2 (2026-09-07)

Features

Bug Fixes

  • compiler: make comment stripping string-aware, and apply it to the inventory (d0f12fa), closes pysnmp/pysnmp#198

  • pysnmp: carry LAST-UPDATED in the revision constant, not the newest REVISION (73f4202), closes pysnmp/pysnmp#198

  • tests: fail when a bundled module compiles to nothing (62cedd6), closes #203

2.4.0-rc.1 (2026-09-07)

Features

  • codegen: canonical form and content hash over the module model (965e559), closes #190 #191 #180

  • mibs: bundle the SMIv1 compatibility shims (ed27c8c), closes #161

  • mibs: bundle the standards modules from pysnmp/mibs src/standard (b18f6e9), closes #187

Bug Fixes

2.3.0 (2026-09-06)

Features

  • mibs: ship the bundle manifest, and answer which module replaced a subtree (ea4bded), closes #174

Bug Fixes

  • mibs: drop the three withdrawn IPv6 modules nothing imports (c7c4fb7), closes #173

2.2.0-rc.3 (2026-09-07)

Features

  • codegen: canonical form and content hash over the module model (965e559), closes #190 #191 #180

  • mibs: bundle the SMIv1 compatibility shims (ed27c8c), closes #161

Bug Fixes

2.2.0 (2026-09-06)

Features

  • mibdump: write out the base MIBs a JSON tree needs to stand alone (d37c274)

  • mibs: bundle the standard MIB set, each pinned to its publisher (4533c62), closes #161

  • mibs: compile the bundled MIBs into pysnmp modules at build time (47e9891)

  • mibs: report where the pysnmp/mibs mirror disagrees with the bundle (a7c4853), closes pysnmp/mibs#345

  • say which rule picked a MIB, and let –mib-source outrank the bundle (b2b1448), closes #155

Bug Fixes

  • let a module compiled from a fallback copy report as compiled (26b1927), closes #157 #155

  • mibdump: report the base MIBs a run may write, not the ones it did (01309b1)

  • mibs: bundle IANA-GBOND-TC-MIB, and make verify catch what hid it (a2d077c), closes pysnmp/mibs#343

  • mibs: keep git’s line-ending filters off the bundled MIB bytes (f6741ce)

  • mibs: track IEEE 802.1 at its current revision, not a pinned file (579da07)

  • name the copy that actually parsed, under the name it parsed as (f211f0d), closes #155

  • reader: report an over-long MIB name as missing, not a crash (82699fe), closes #163

  • report the resolved copy on runs that recompile nothing (25e1e8e), closes #156 #155

2.2.0-rc.2 (2026-09-06)

Features

  • mibdump: write out the base MIBs a JSON tree needs to stand alone (d37c274)

  • mibs: bundle the standard MIB set, each pinned to its publisher (4533c62), closes #161

  • mibs: compile the bundled MIBs into pysnmp modules at build time (47e9891)

  • mibs: report where the pysnmp/mibs mirror disagrees with the bundle (a7c4853), closes pysnmp/mibs#345

Bug Fixes

  • mibdump: report the base MIBs a run may write, not the ones it did (01309b1)

  • mibs: bundle IANA-GBOND-TC-MIB, and make verify catch what hid it (a2d077c), closes pysnmp/mibs#343

  • mibs: keep git’s line-ending filters off the bundled MIB bytes (f6741ce)

  • mibs: track IEEE 802.1 at its current revision, not a pinned file (579da07)

  • reader: report an over-long MIB name as missing, not a crash (82699fe), closes #163

2.2.0-rc.1 (2026-09-06)

Features

  • say which rule picked a MIB, and let –mib-source outrank the bundle (b2b1448), closes #155

Bug Fixes

  • ci: publish docs from a branch, not a detached HEAD (8ff1ecc)

  • ci: publish docs from a branch, not a detached HEAD (212f083)

  • let a module compiled from a fallback copy report as compiled (26b1927), closes #157 #155

  • name the copy that actually parsed, under the name it parsed as (f211f0d), closes #155

  • report the resolved copy on runs that recompile nothing (25e1e8e), closes #156 #155

2.1.0 (2026-09-06)

Features

  • bundle every base MIB a code generator names (9f1137a)

  • bundle the standard MIBs real product MIBs import (983a61a)

  • define source precedence, and let it be checked (28bd6bf), closes #133

  • repair missing IMPORTS for SMIv2 base symbols behind –repair-imports (c20d753), closes #61

  • repair SNMPv2-MIB symbols that no SMIv1 MIB also defines (94ce1ef)

Bug Fixes

  • release: give the changelog a title semantic-release owns (32d800a)

  • take the superseded MIBs from their RFC, not the mirror (29350cf)

  • validate a DEFVAL against the object’s own SYNTAX before emitting it (b6fac5a), closes #134

2.1.0-rc.3 (2026-09-06)

Bug Fixes

  • ci: publish docs from a branch, not a detached HEAD (212f083)

2.1.0-rc.2 (2026-09-06)

Bug Fixes

  • release: give the changelog a title semantic-release owns (32d800a)

2.1.0-rc.1 (2026-09-05)

Features

  • bundle every base MIB a code generator names (9f1137a)

  • bundle the standard MIBs real product MIBs import (983a61a)

  • define source precedence, and let it be checked (28bd6bf), closes #133

  • repair missing IMPORTS for SMIv2 base symbols behind –repair-imports (c20d753), closes #61

  • repair SNMPv2-MIB symbols that no SMIv1 MIB also defines (94ce1ef)

Bug Fixes

  • take the superseded MIBs from their RFC, not the mirror (29350cf)

  • validate a DEFVAL against the object’s own SYNTAX before emitting it (b6fac5a), closes #134