trishul-snmp

v0.2.0 Implementation Prep

Last updated: 2026-05-08

This document is the implementation-readiness plan for trishul-snmp 0.2.0. It is intentionally pre-code and pre-release. Current shipped API documentation remains in Python API, CLI Reference, and Architecture.


1. Target outcome

0.2.0 should expand tsnmp from a polling-only SNMPv2c manager runtime into a broader runtime package with:

This remains a pragmatic runtime expansion, not a full agent platform and not an SNMPv3 release.


2. Scope boundary

In scope:

Out of scope:


3. Issue map and dependency order

Order Issue Focus Notes
1 #2 Foundation and metadata retention Mandatory first slice.
2 #4 Outbound trap/inform send APIs Lowest-risk feature slice after foundation.
3 #3 Inbound listener/server transport Reuses the same wire and transport work.
4 #5 Notification event/render/decode/CLI tooling Follows once send/listen primitives exist.
5 #6 Narrow responder/simulator layer Depends on inbound/server transport.
track #7 Umbrella tracker Mirrors milestone progress.

Recommended coding order:

  1. #2
  2. #4
  3. #3
  4. #5
  5. #6

#4 and #3 can overlap after #2, but send-side support is the cleaner first feature slice.


4. Implementation rules


5. Preferred package evolution

The current top-level shape is sound. 0.2.0 should extend it rather than replace it.

Area Likely files touched Expected change
Public exports trishul_snmp/__init__.py, trishul_snmp/types.py Export new notification/listener/responder models once stable.
MIB metadata trishul_snmp/mib/models.py, trishul_snmp/mib/registry.py, trishul_snmp/mib/render.py Retain description, retain notification members, add notification-aware render helpers.
Bundle loading trishul_snmp/mib/loader.py Stay backward-compatible with older module JSON.
Wire codec trishul_snmp/wire/pdu.py, trishul_snmp/wire/message.py Add SNMPv2-TRAP and INFORM-REQUEST support without forking codec paths.
UDP transport trishul_snmp/transport/udp.py, trishul_snmp/transport/dispatcher.py Keep connected client path, add bound receive/server path, reuse request correlation where practical.
New notification API trishul_snmp/notify/ Outbound notifier, listener API, and notification event helpers.
New responder API trishul_snmp/responder/ Narrow read-only simulator/responder layer.
CLI trishul_snmp/cli/main.py, trishul_snmp/cli/common.py, trishul_snmp/cli/output.py Add notification commands only after Python API shape is stable.
Tests tests/ Add dedicated notification/listener/responder coverage and reuse loopback UDP fixtures.

Preferred new package names:

Avoid introducing a broad core/ or utils/ package unless the shared code is already large enough to justify it.


6. Public API targets to code against

These are the recommended names to lock before feature code starts:

Recommended API direction:

Recommended behavior defaults:


7. Milestone-by-milestone coding slices

7.1 #2 Foundation and metadata retention

Primary code touch points:

Required outcomes:

Do not do in this slice:

7.2 #4 Outbound trap/inform send

Primary code touch points:

Required outcomes:

7.3 #3 Inbound listener/server transport

Primary code touch points:

Required outcomes:

7.4 #5 Notification event/render/decode/CLI tooling

Primary code touch points:

Required outcomes:

7.5 #6 Narrow read-only responder/simulator

Primary code touch points:

Required outcomes:

Do not do in this slice:


8. Test plan

Recommended new coverage layout:

Also extend:

Minimum acceptance coverage:


9. Decisions to lock before coding starts

These should be treated as pre-implementation decisions, not late cleanups:

  1. Use notify/ and responder/ as the new top-level packages.
  2. Use V2cNotifier, V2cNotificationListener, and V2cResponder as the public class names.
  3. Keep listener delivery async iterator-first.
  4. Keep responder scope explicitly read-only and simulator-oriented.
  5. Keep compiled JSON as the only enrichment input. No raw MIB ingestion work enters 0.2.0.
  6. Keep bundle changes additive and optional. Notification correctness must not depend on sidecars.
  7. Keep CLI work secondary to the Python package API.

10. Release bar for 0.2.0

0.2.0 should not ship unless all of the following are true:


11. First implementation chat starting point

Start with #2 only.

That first coding slice should:

If that lands cleanly, move next to #4 rather than trying to open send, listen, render, and responder work in parallel.