Skip to content

Changelog

1.0.2 (2026-07-20)

Bug Fixes

  • deps: update dependency meraki to v4.3.1 (#665) (b81e8a5)
  • mr: add serial to shared device_lookup so per-device metrics don't collapse (afe2562), closes #669

1.0.1 (2026-07-14)

Bug Fixes

  • ci: create api-drift label before upserting the drift tracking issue (2c72cfb)
  • deps: update dependency meraki to v4 (#655) (94ec491)

1.0.0 (2026-07-03)

⚠ BREAKING CHANGES

  • scheduler: de-tier the dispatch layer — per-collector group-clocked loops
  • scheduler: #617 wave 2 — endpoint-group gating across all fetch sites
  • core: per-family cardinality budgets — alarm on breach, stop deleting live series
  • config: config-surface hardening, startup validation & single-org contract
  • clients: ID-only numeric series + meraki_client_info join, capped & expiration-tracked (MET-07/SCALE-06)
  • metrics: drop mutable name labels from numeric series, join via _info (MET-08)
  • metrics: coordinated v1 metric naming & unit sweep

Features

  • api: proxy/custom-CA support, friendly 401, drop dead login-security cache (3cc9fb2), closes #586 #589 #551
  • chart,docs: starter Prometheus alert rules + Helm prometheusRule template (#569) (410575b)
  • chart: singleton guards, optional NetworkPolicy/Ingress/HPA, scale-based sizing + webhook TLS docs (a8740e5), closes #560 #563 #600 #601 #318
  • clients: DNS resolver Prometheus metrics + bounded DNS/client-store memory (d2c99b9), closes #319 #543
  • clients: ID-only numeric series + meraki_client_info join, capped & expiration-tracked (MET-07/SCALE-06) (63221da), closes #533
  • collectors: M3 high-value new signal (MR/MX/org/MT) (639526b), closes #259 #260 #261 #262 #263 #264 #265 #266 #267 #268 #269
  • config: add scale/cardinality settings; default rate_limit_shared_fraction to 0.8 (2c2c7e5), closes #550 #556
  • config: config-surface hardening, startup validation & single-org contract (c98f0ad), closes #310 #514 #515 #518 #522 #529 #564 #585 #587 #588 #590 #598 #599
  • config: default logs to JSON; clarify the two concurrency knobs (1e4ee31), closes #636 #640
  • core: opt-in ManagedTaskGroup all-failed propagation (raise_on_all_failed) (aff2ed4), closes #510
  • devices: close M2 device-coverage gaps (MG/MV/MS/MX) (0a21fec), closes #252 #253 #254 #255 #256 #257 #258
  • docs: align docs site with m7kni.io brand + server-side SEO/LLM metadata (6486bbd), closes #628
  • grafana: v2 dashboard + alerting rebuild; retire frozen dashboards/ (4ac87a8)
  • helm: generate all config knobs into the chart from the config schema (9dbb7a7)
  • metrics: add meraki_exporter_build_info{version,commit} gauge (MET-10) (be1ed71), closes #537
  • metrics: API requests by operation (bounded, no PII) (#274) (8084b8b)
  • metrics: coordinated v1 metric naming & unit sweep (416a26a), closes #531
  • metrics: drop mutable name labels from numeric series, join via _info (MET-08) (32dd2f6), closes #534
  • metrics: exporter self-resource memory/CPU gauges (#277) (6a8e5dc)
  • metrics: Phase-4 seam funnel — enum/label/group/sensor members (ead1217)
  • metrics: Phase-4 wave 4A — in-scope area signal expansion (13bf859), closes #285 #286 #287 #288 #289 #290 #291 #292 #293 #294 #295 #296 #297 #298 #299 #300 #301 #302 #303 #304 #305 #306 #308 #611 #612
  • metrics: Phase-4B feature metrics — signal/power/catalyst/eSIM/HA/uplink/Insight (ae13759), closes #324 #325 #326 #327 #328 #330 #613
  • ms: surface port errors/warnings from existing port-status data (79c4fc5), closes #245
  • mt: add no2/o3/pm10 sensor metrics; share client for sensor reads (86ced18), closes #246 #249
  • mx: populate MX_SECURITY_EVENTS_TOTAL from appliance security events (4705139), closes #244
  • org: Early Access opt-in state metric + has_beta_api risk signal (#278, #279) (cd76d8d)
  • otel: add DataLogEmitter — OTel log channel for per-entity data (#622 core) (0528524)
  • otel: optional OTLP metrics bridge + OTLP TLS/mTLS (#339, #313, #314) (2b9400c)
  • otel: OTel log producers + boundary doctrine (#622 fuller scope, #323) (c34a6cc)
  • scheduler: #617 wave 0 — solver core, config, metrics seam & collector plumbing (3e20f34)
  • scheduler: #617 wave 1 — AIMD feedback, OrgShape, manager & app integration (3071792)
  • scheduler: #617 wave 2 — endpoint-group gating across all fetch sites (2cb500d), closes #541 #552
  • scheduler: #623 enabled_fn auto-disable + #624 Catalyst gate; Phase-4B seam (907aa24)
  • scheduler: de-tier the dispatch layer — per-collector group-clocked loops (cc76452), closes #631 #632 #633 #634 #635
  • scheduler: register Phase-4 device-family endpoint groups (52b39d7)
  • web: endpoint exposure hardening, /status enrichment & webhook safety (f2675a9), closes #311 #312 #317 #558 #561
  • webhook: accelerate device-down detection via webhook events (#614) (5b24890)

Bug Fixes

  • alerts: bound AlertsCollector fan-out with process_in_batches_with_errors (b27c276), closes #248
  • alerts: bucket unknown alert severities as "other" instead of dropping them (28eaf9c), closes #524
  • apidrift: demote submodel-vs-bare-object conformance mismatch to INFO (f9e4316), closes #508
  • apidrift: mark nested sub-objects meraki_derived (unmapped=0) and surface beta-spec blind spot (57455d8), closes #609 #283
  • api: remove dead AsyncMerakiClient._request wrapper and api_duration_seconds (836a6f3), closes #344
  • app: cap webhook body, offload registry iteration, bound cardinality, track wait task (6420c6c), closes #480 #481 #482 #483 #484
  • build: correct Makefile docker targets and install-hooks (6d0b538), closes #371 #372 #373 #374
  • chart: point readinessProbe at /ready instead of /health (8639c1b), closes #243
  • chart: wire the chart-managed API key secret into the Deployment (e47a7cc)
  • clients: cap application-usage client-ID batch at 100 to avoid URL-length/414 risk (8889eb3), closes #525
  • clients: float usage type, paced signal-quality fan-out, demote per-network logs (10c9d87), closes #492 #493 #494
  • cli: repair first-run missing-API-key error path and --help env vars (dff23c8), closes #242
  • collectors: gate non-org collectors on OrgHealthTracker backoff (67cd893), closes #506
  • collectors: increment collector_errors_total on tolerated swallow paths (#511) (b6bcaec)
  • collectors: licensing/config correctness + drop deprecated strong-passwords metric (43bf9f8), closes #513 #516 #519 #523
  • config: bug-bash lane — startup summary, dead config, expiration, bounded concurrency, response validation (3687573), closes #455 #456 #457 #458 #459 #460 #461
  • core: dedicated DNS executor, None-label coalescing, cache copies, metric-name enums (036bc6d), closes #499 #500 #501 #502
  • core: implement real Prometheus series removal in MetricExpirationManager (85c28ca), closes #334
  • core: make OrgHealthTracker backoff aware of device/network failure domains (multi-writer) (08587ff), closes #547
  • core: per-family cardinality budgets — alarm on breach, stop deleting live series (cda95ba), closes #540 #554 #309
  • core: reapply NetworkFilter in api_helpers._fetch_devices_direct and unify product_types filtering (1aadae6), closes #520
  • core: single 429-retry owner, bounded Retry-After, sized SDK executor & per-fetch deadlines (4332161), closes #545 #544 #546
  • core: surface per-item batch failures in collector_errors_total (#621) (a382d54)
  • core: treat "collected nothing" as a collection failure so health signals are honest (RES-01) (61c4bb1), closes #509
  • core: validate direct fetchers, capture task-group exceptions, status-aware 404 (486360f), closes #488 #489 #490 #491
  • data-logs: decouple signal-quality from packet loss; surface emit counters on /status (d6a8b8c), closes #637 #639
  • deploy: bug-bash lane — Helm chart, Dockerfile, and CI hardening (fdea149), closes #441 #442 #443 #444 #445 #446 #447 #448 #449
  • deps: update dependency meraki to v3.3.0 (#380) (5472d84)
  • devices: paginate org memory-usage fetch so all devices are covered (0e1508d), closes #504
  • devices: seam pass — Catalyst MS gating, honest gauge names, PSU model label (bee1402), closes #426 #424 #425
  • devices: stop per-org _metrics.clear() wiping other orgs' series (0710ef7), closes #336 #337 #338
  • docs: bug-bash lane — document network-filter config; reconcile stale MT-only warning (df78af1), closes #450 #451
  • metrics: rename mistyped exporter self-metrics (MET-06) (167b6ef), closes #532
  • mr: paginate/parse MR performance + honest SSID/air-marshal metrics (fa62d97), closes #399 #400 #401 #402 #403 #404 #405 #406 #407
  • ms: MS port metric expiry, STP hygiene/cadence, real stack roles (ba86643), closes #415 #416 #417 #418 #419 #420
  • mt: NetworkFilter + expiration + inventory-cache the FAST sensor path (c9d932c), closes #427 #428 #429 #430 #431 #432 #433
  • mv: correct zone-name join, drop "None" labels, throttle static calls (3543ccb), closes #434 #435 #436
  • mx: aggregate uplink loss/latency per uplink (max across destinations) instead of last-write-wins (74ed0cb), closes #517
  • mx: drop dead VPN metrics, gate perf/firewall calls, paginate sec-events (fc2bfaa), closes #410 #411 #412 #413 #414
  • mx: pass explicit timespan=1800 to getDeviceAppliancePerformance for deterministic score (b9e2257), closes #521
  • mx: treat null getDeviceAppliancePerformance as "no score" not an error (ab5ab6f), closes #642
  • mx: widen VPN stats timespan 300s->900s so summaries reliably populate (dbbc72f), closes #527
  • network-health: bug-bash lane — bluetooth zeroing, RF util pinning, data-rate units, phantom failures field (40e3130), closes #437 #438 #439 #440
  • network-health: read live snake_case non_wifi + end_ts in channel utilization (6b73c46), closes #512
  • observability: correct collect_packet_loss API-call endpoint label (4c15bff), closes #342
  • observability: real /status API totals, org-scoped rate limiting, OTLP TLS, real version (009da56), closes #495 #496 #497 #498
  • observability: remove dead self-metrics and stop inventory series leaks (f4add56), closes #348 #349 #350
  • observability: remove frozen success-age gauge and dead collection-wait histogram (cff7ff9), closes #346 #347
  • observability: remove phantom pre-initialized zero-forever self-metric series (57181fe), closes #345
  • observability: stop counting inventory cache hits as API calls (246d3e7), closes #341
  • observability: stop double-counting collector API calls (fc8c9c2), closes #340
  • ops: bug-bash app-code — liveness dead-man switch, startup discovery, readiness, endpoint auth, smoothing clamp (effe4a8), closes #474 #475 #476 #477 #478
  • org: bug-bash follow-ups — surface isolated sub-collector failures + filter alert gauges (960e336), closes #408 #409
  • org: close org-collector correctness gaps (NetworkFilter, expiry, undercounts) (6410fa6), closes #381 #382 #383 #384 #385 #386 #387 #388 #389 #390 #391 #392 #393 #394 #395 #396 #397 #398
  • org: route device-count gauges through _set_metric so stale combos expire (d5ec85b), closes #335
  • otel: attribute collector/org spans + bubble collector errors to root span (a9f075b), closes #645 #646 #647 #648
  • otel: use dynamic package version for service.version (640dafe), closes #247
  • otel: use supported response_hook for requests span enrichment (96988f3), closes #343
  • ratelimit: route the remaining un-throttled SDK calls through OrgRateLimiter (#270) (30b0c3b)
  • scheduler,collectors: live-verify frozen scheduler assumptions (#630) (4514bf9)
  • scheduler: mark_ran fires only on ≥1 successful fetch per group (#629) (55dd4e5)
  • tests: correct shared test-helper bugs masking real behaviour (a583c19), closes #375 #376 #377 #378 #379
  • webhook: constant-time secret, bounded failure labels, no secret in logs (451bc6b), closes #485 #486 #487

Performance Improvements

  • collectors: raise perPage to endpoint maxima on paginated fetchers (#548) (fdd9f52)
  • ms: bug-bash follow-ups — org-wide port usage/PoE, real STP serials, stack metric expiration (7454948), closes #421 #422 #423
  • mt: route MT sensor readings through the rate limiter + drop all-serials param (#553) (55440da)
  • network-health: request fields=avg on latency-stats fetchers to skip unused rawDistribution (8f74757), closes #555
  • scheduler: skip smoothing on initial collection + derive liveness from fastest tier (5450e0a), closes #591 #596

Code Refactoring

  • app: remove dead tier-loop 10-consecutive-failure kill switch (57f79bb), closes #528
  • collectors: remove dead WebhookMetricsCollector and its unused metric enums (640b589), closes #530
  • core: delete 8 dead *MetricName enum members (MET-11) (4410df4), closes #538
  • core: delete dead utility code (24bacf3), closes #507
  • devices: bug-bash F-023 — validate MX/MT fetcher responses via Pydantic domain models (088f3fd), closes #462 #459
  • devices: validate MG/MS-power/MX-uplink-health/MV rows via Pydantic models (6f18706), closes #503
  • inventory: delete dead set_ttl_for_tier; paginate getOrganizations (567149c), closes #275 #557

Documentation

  • add roadmap-task workflow to CLAUDE.md; drop superseded planning docs (935f66b)
  • add upgrading + FAQ pages, wire nav, de-nav internal api-call-audit (9e2dd45), closes #571 #575 #577
  • add v1-readiness evidence pack backing issues #508#617 (8f3168a)
  • audit and refresh CLAUDE.md files repo-wide (719609f)
  • CLAUDE.md accuracy sweep + durable wave workflow + dashboards context (f08cd69)
  • claude: refresh stale CLAUDE.md/AGENTS.md rosters and claims (24db96d), closes #361 #362 #363 #364 #365 #366 #367 #368 #369 #370
  • collectors: correct stale collector_timeout default comment (120s -> 240s) (476bee5), closes #452
  • config: drop ghost PATH_PREFIX/ENABLE_HEALTH_CHECK note and wrong SAMPLING_RATE section from generator (2f7711e), closes #574
  • config: generate .env.example from the config schema; complete config.md; flag data-log event costs (0dab06d)
  • declare v1 distribution = container image + Helm chart only (no PyPI) (f119c7a), closes #602
  • document SERVER__API_TOKEN + beta-API posture, sweep .env.example, point to generated endpoints (7638f6e), closes #565 #572 #576 #604 #281
  • fix stale/incorrect docs-site content (2b5aa07), closes #351 #352 #353 #354 #355 #356 #357 #358 #359 #360
  • geo: content-shape pass for LLM/search retrievability (863f7e0)
  • metrics: disambiguate webhook counters and org-vs-exporter API request HELP (MET-12) (42322b6), closes #539
  • metrics: state data window/lag in windowed-metric HELP strings (MET-09) (9b31a3e), closes #536
  • mr: guardrail — never wire liveTools/beta MR endpoints into passive collectors (269ec6a), closes #284
  • otel: correct SAMPLING_RATE (normal pydantic setting) and TLS-via-OTEL__INSECURE=false claims (9ea11a6), closes #573
  • otel: document the OTLP-bridge parity envelope and log-level spellings (dfe4ff1), closes #641 #643 #644
  • reconcile org-collector docs with the Wave-2 code fixes (9a0545a)
  • regenerate config/metrics reference for cardinality + scale settings (#540/#550) (838ef02)
  • regenerate metrics reference for #274/#277 new metrics (f76d984)
  • regenerate metrics/collector reference for M1 (a6af126)
  • regenerate reference docs for DNS metrics + dns_cache_max_entries (#319/#543) (d666ab7)
  • regenerate reference docs; fix config-docs generator relative-import load (1e9d8ec)
  • regenerate reference pages to match current generator intro strings (c979db9)
  • scale: quantitative API-budget sizing formula + sharding/HA guide (#542, #568) (bd4ecca)
  • stability: publish metric stability & deprecation policy (GAP-01) (64bc2e6), closes #535
  • v1 onboarding pages — support matrix, freshness, troubleshooting, privacy, positioning (#566, #567, #570, #559, #616) (281f899)

0.31.0 (2026-06-30)

Features

  • apidrift: detect Meraki API drift on consumed operations (bc07e1a)
  • Meraki API drift detection (1aa88c4)

Bug Fixes

  • security: harden apidrift live-url against SSRF; repair invalid .snyk policy (56f7435)

Code Refactoring

  • models: map models to source ops, fix vlan type, drop dead models (3b4f96a)

Dependencies

  • drop unused 'safety' runtime dependency (removes vulnerable nltk) (f711738)

0.30.1 (2026-06-26)

Bug Fixes

  • docker: build multi-arch images on native runners (487ee51), closes #221
  • docs: remove glightbox slide_effect option (rejected by zensical 0.0.44) (8e1aecd)

0.30.0 (2026-05-08)

Features

  • config: add NetworkFilterSettings model (d768050)
  • config: wire network_filter into Settings (bed4c59)
  • core: add NetworkFilter resolver (d11209f)
  • inventory: apply NetworkFilter at the read path (e2bc90f)
  • network-filter: wire startup, fail-fast, metrics, and docs (87f7619)

Bug Fixes

  • collectors: apply NetworkFilter to org-wide device endpoints (2c21787)
  • inventory: validate SDK responses before caching (7392b61)
  • metric: use binary value instead of label for network_filter_match (a4c9436)
  • validate API responses to handle SDK exhausted-retry error shape (6d769f7)

Code Refactoring

  • collectors: route network fetches through inventory (c92803a)
  • route network health device/network lookups through inventory cache (8ed0969)

Documentation

  • add limited-testing warning to readme, docs site, and release notes (7032af1)

0.29.0 (2026-04-15)

Features

  • add /status health dashboard endpoint (172a23c)
  • add firewall & security policy collector for MX appliances (543b461)
  • add Kubernetes Helm chart (dc429a6)
  • add tier-aware metric expiration (33aa55a)
  • Waves 3-5 remaining source and test changes (ca95923)

Bug Fixes

  • add type annotations to ms_stack test helper function (dfba644)
  • bound packet metric and MS collector caches (f9953a9)
  • cap collector-internal smoothing at 30% of timeout budget (800c81e)
  • increase default collector timeout from 120s to 240s (fcab2e8)
  • rename POE metric enums from WATTS to WATTHOURS (fd4238e)
  • replace Python 2 exception syntax with tuple form (f68ebdf)
  • update TemplateResponse for Starlette 1.0 and parallelize MSStackCollector (0f3cd48)
  • use device_lookup for MR radio metric labels (#199) (644e695)

Code Refactoring

  • improve API client type safety (927728f)
  • standardize sub-collector init and API updates (64eaf9f)

Documentation

  • add API call reduction audit (6f3a1f4)
  • add improvement roadmap spec and Wave 1 implementation plan (60c6357)
  • add log aggregation examples with Grafana Alloy and LogQL (d793627)
  • add scaling guide with deployment recommendations (dc2a798)
  • update CLAUDE.md files across project (e299f28)

0.28.2 (2026-03-26)

Bug Fixes

  • deps: update dependency meraki to v2.2.0 (#173) (342aa2e)
  • devices: use availability_status field for device status detection (4e40908), closes #186

Code Refactoring

  • devices: remove common metrics collection from device-specific collectors (8ec6095)

0.28.1 (2026-03-13)

Dependencies

  • switch meraki from git to PyPI source & update (8bc84a4)

0.28.0 (2026-03-13)

Features

  • add API metrics instrumentation (a688581)
  • add collector management helper methods (caa563a)
  • add collector status display and trigger UI (6e08cfb)
  • add collector trigger endpoint (b7b169e)
  • add manual collector trigger API endpoint (507f0d8)
  • add MX appliance uplink status metrics (ad153ef)
  • add MX appliance uplink status metrics (09d3554)
  • add MX uplink info metric (99c33c1)
  • add new observability metrics (abc0dec)
  • add thread-safe metrics initialization (abed04b)
  • api: add rate limiting and collection smoothing (d1e56ef)
  • core: add timeout-based smoothing cap (4834801)
  • enhance startup logging and discovery (fb98bdc)
  • inventory: add device availability caching (1ea56e9)
  • logging: add smoothing cap to startup (56fc174)
  • otel: add metrics export routing config (e199645)
  • otel: add metrics filtering system (a67287e)
  • otel: integrate filtering into app (84633f0)
  • ui: expose smoothing cap diagnostics (da6bc9b)

Bug Fixes

  • ci: skip registry cache on PRs to prevent 403 errors (e971085)
  • clear stale device status label series (d0de7e4)
  • clear stale MX uplink status labels (57420b9)
  • device: improve status result validation (97364ad)
  • ensure metrics available in inventory service (d856ed0)
  • improve retry logic with jitter and Retry-After (98be37e)
  • ms: add SDK method availability check (2b2a99c)
  • ms: correct API endpoint for switch ports status (c9f551d)
  • prevent race conditions in device lookup (ecdbfce)
  • resolve test failures in device collector and error handling tests (4707340)
  • secure sensitive data masking in logs (89120a4)

Performance Improvements

  • mr: optimize to network-level collection (3d4a0a4)

Code Refactoring

  • add collector tracking infrastructure (c33bdef)
  • add concurrency control to collector execution (a5c59c7)
  • alerts: use inventory cache for data (16f29b8)
  • api: use inventory cache in APIHelper (4d7feb0)
  • ci: simplify docs workflow and remove deps (800196b)
  • collectors: add inventory access pattern (36b6941)
  • config: use inventory cache for orgs (3a217ca)
  • device: use inventory for availability (a5cff09)
  • enhance batch processing in collectors (001bd0c)
  • improve startup sequence with sequential init (4dcace4)
  • metrics: rename to meraki_exporter_ prefix (6a983cf)
  • otel: remove span metrics processor (cef99d5)
  • remove unused imports and metrics code (ca8721e)
  • reuse AsyncMerakiClient metrics counter (a4ebab9)
  • simplify config defaults and add docs tooling (6cd4a6f)
  • use instrumented API calls (f46afc4)

Documentation

  • add missing parameter documentation (621b81f)
  • clean up formatting and descriptions (9fa79c6)
  • config: update configuration reference (c9ff636)
  • improve OpenTelemetry configuration (a8e1a48)
  • metrics: update metrics documentation (9ff5b3a)
  • otel: update observability guides (fdd0c64)
  • remove ADR and patterns sections (8dc3710)
  • streamline collector documentation (ca79d1c)
  • update (8c05f71)
  • update API configuration reference (05c56e3)
  • update endpoint reference (4f56bb1)
  • update getting started and guides (c148640)
  • update metrics overview and index (381330f)

0.27.1 (2025-12-01)

Bug Fixes

  • add automated docker build on release creation (c6e3328)

0.27.0 (2025-12-01)

Features

  • add retry mechanism for rate-limited API responses (7177659)

Bug Fixes

  • error-handling: add api error response validation (d4708df)

Documentation

  • add comprehensive changelog for version 0.26.1 (bc70586)

0.26.1 (2025-12-01)

Bug Fixes

  • remove error suppression from docker help test (3a4af40)

Code Refactoring

  • replace asyncio with inspect for coroutine detection (d9976c1)

Documentation

  • rewrite collector reference with practical usage guide (489d631)

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.26.1] - 2025-12-01

Highlights

  • Bounded parallel collection with shared inventory caching and configurable batch sizes to speed up multi-org runs and cut API calls.
  • Docker-first packaging with a dedicated entrypoint plus a refreshed dependency stack targeting Python 3.14.
  • Wireless SSID collection fixes that align with the latest Meraki APIs for more accurate MR metrics.
  • Documentation overhaul (new collector guide, config updates, SEO/social cards) and release automation via release-please.

Features & Improvements

  • Added an inventory caching service (organizations, networks, devices) with TTLs, new collector concurrency/cache metrics, and the metric expiration framework controlled by MERAKI_EXPORTER_MONITORING__METRIC_TTL_MULTIPLIER.
  • Collectors now use ManagedTaskGroup bounded concurrency and larger configurable batch sizes (devices 20, networks 30, clients 20 by default) for faster collection.
  • Docker image rebuilt around docker-entrypoint.py and docs now recommend Docker as the primary deployment path.
  • Expanded .env.example with grouped settings, OTEL/monitoring options, and added uv.lock for reproducible installs; exposed the package main for easier embedding.
  • Improved OpenTelemetry tracing coverage and API client hooks; added Claude PR/code-review workflows and release-please automation.

Fixes

  • MR wireless collector now paginates SSID status, parses radio details correctly, and uses the organization summary SSID usage endpoint.
  • Device type detection falls back to productType when the model prefix is unknown (thanks @dmitchsplunk for the first external contribution in #83).
  • Docker CLI help test no longer suppresses errors, ensuring failures surface during CI.

Documentation

  • Collector reference rewritten into a practical usage guide; configuration docs updated with new settings and metric TTL guidance.
  • Documentation site moved to https://m7kni.io with new SEO/social assets and Docker-first getting started flow.

CI/CD

  • Baseline runtime and CI bumped to Python 3.14 with refreshed dependency pins and pre-commit hooks.
  • CI simplified to Ubuntu-only testing, optimized PR Docker builds, and removed legacy workflows (PyPI publish, Dependabot, CodeQL, etc.).

Contributors

  • @dmitchsplunk for improving device type detection (first external community contribution).