Fix remaining 4 audit items: policy enforcement, module splits, pagination, tests
SEC-M6: Role-based policy enforcement
- ForbiddenError exception for unauthorized access
- Policy.authorize!/3 in 6 LiveView modules
- Superuser bypass preserved
- 45/45 tests pass
Architecture: Oversized module splits
- topology.ex: 1590 -> 685 lines (-57%)
- New sub-modules: topology/evidence.ex, topology/map_view.ex, topology/stats.ex
- New devices/ordering.ex
- 217/217 tests pass
Architecture: Vendor HTTP pagination consolidation
- HTTP.paginate/5 shared helper in Towerops.HTTP
- visp, splynx, sonar refactored to use shared pagination
- 94/94 tests pass
Test Health + Credo fixes:
- api_tokens.ex: verify_token/1 flattened (nesting depth reduced)
- 3 new test files: AgentReleaseWebhookWorker, RfLinkHealthLive, MaintenanceLive.Index
- Weak assertions strengthened
- doctest Towerops.JobMonitoring added
- 255/255 tests pass