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¶
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
ManagedTaskGroupbounded concurrency and larger configurable batch sizes (devices 20, networks 30, clients 20 by default) for faster collection. - Docker image rebuilt around
docker-entrypoint.pyand docs now recommend Docker as the primary deployment path. - Expanded
.env.examplewith grouped settings, OTEL/monitoring options, and addeduv.lockfor reproducible installs; exposed the packagemainfor 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
productTypewhen 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).