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.
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.
In scope:
GET, GET_NEXT, and GET_BULKOut of scope:
SETtsnmppysnmp compatibility shims| 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:
#2#4#3#5#6#4 and #3 can overlap after #2, but send-side support is the cleaner
first feature slice.
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:
notify/ for outbound send and inbound notification listeningresponder/ for the narrow simulator/read-only responderAvoid introducing a broad core/ or utils/ package unless the shared code is
already large enough to justify it.
These are the recommended names to lock before feature code starts:
V2cNotifierV2cNotificationListenerNotificationEventV2cResponderRecommended API direction:
send_trap(...)send_inform(...)Recommended behavior defaults:
send_trap() is fire-and-forgetsend_inform() waits for a matching response or timeout#2 Foundation and metadata retentionPrimary code touch points:
trishul_snmp/mib/models.pytrishul_snmp/mib/registry.pytrishul_snmp/mib/render.pytrishul_snmp/manager/operations.pytrishul_snmp/transport/dispatcher.pyRequired outcomes:
description: str | None on normalized objects and notificationsmembers: tuple[str, ...] | NoneDo not do in this slice:
#4 Outbound trap/inform sendPrimary code touch points:
trishul_snmp/wire/pdu.pytrishul_snmp/wire/message.pytrishul_snmp/transport/dispatcher.pytrishul_snmp/notify/Required outcomes:
#3 Inbound listener/server transportPrimary code touch points:
trishul_snmp/transport/udp.pytrishul_snmp/notify/Required outcomes:
#5 Notification event/render/decode/CLI toolingPrimary code touch points:
trishul_snmp/types.py or trishul_snmp/notify/events.pytrishul_snmp/mib/render.pytrishul_snmp/cli/main.pytrishul_snmp/cli/output.pyRequired outcomes:
#6 Narrow read-only responder/simulatorPrimary code touch points:
trishul_snmp/responder/transport/tests/test_udp_integration.pyRequired outcomes:
GET, GET_NEXT, and GET_BULKDo not do in this slice:
SETRecommended new coverage layout:
tests/test_notification_wire.pytests/test_notification_send.pytests/test_notification_listener.pytests/test_notification_render.pytests/test_responder.pyAlso extend:
tests/test_bundle_loading.py for backward-compatible metadata retentiontests/test_udp_integration.py for shared loopback transport coveragetests/test_cli.py and tests/test_cli_output.py for notification commandsMinimum acceptance coverage:
GET, GET_NEXT, and GET_BULKThese should be treated as pre-implementation decisions, not late cleanups:
notify/ and responder/ as the new top-level packages.V2cNotifier, V2cNotificationListener, and V2cResponder as the public class names.0.2.0.0.2.00.2.0 should not ship unless all of the following are true:
GET, GET_NEXT, and GET_BULKStart 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.