Skip to content

Releases: itsDNNS/docsight

v2026-03-06.3 — Modulation Performance Module

06 Mar 16:51

Choose a tag to compare

New Feature: Modulation Performance

A new built-in analysis module that tracks how modulation levels change over time and surfaces degradation that single-snapshot views miss.

Highlights

  • Per-protocol-group health index with correct scaling per DOCSIS version and direction (US 3.0 max 64QAM = 100/100, DS 3.0 max 256QAM, DS 3.1 max 4096QAM, US 3.1 max 1024QAM)
  • Multi-day overview (7d/30d) with stacked modulation distribution bars and dual-axis health/low-QAM trend per protocol group
  • Intraday channel drill-down — click any day bar to see per-channel modulation timelines with degradation summaries (e.g. "4.5h at 16QAM between 14:00–18:30")
  • Low-QAM exposure KPI — percentage of time at or below a configurable threshold (default ≤16QAM)
  • Sample density indicator — actual vs expected sample count with quality percentage
  • Disclaimer displayed in both views, translated (EN/DE)

API Endpoints

Method Path Description
GET /api/modulation/distribution?direction=us&days=7 Per-protocol-group distribution with daily breakdown
GET /api/modulation/intraday?direction=us&date=2026-03-05 Per-channel timeline for a single day
GET /api/modulation/trend?direction=us&days=7 Legacy trend data

Demo Mode

Demo data now generates realistic modulation variation — bad periods every ~10 days where upstream channels drop to 16QAM and downstream edge channels degrade, plus evening congestion patterns (19–23h).

Closes #92Wiki documentation

v2026-03-06.2 — 4-Tier VFKD Health System

06 Mar 09:44

Choose a tag to compare

Changes

  • New 4-tier VFKD health system: Good → Tolerated → Marginal → Critical

    • Replaces the previous 3-tier system with a "tolerated" level for values that deviate from ideal but are still within ISP-accepted ranges
    • Applied across dashboard, channel tables, PDF reports, and LLM export
  • Per-metric health coloring in channel tables

    • Power, SNR, and modulation cells now use data-health attributes instead of inline template conditions
    • Cleaner CSS-driven coloring, fully backward compatible with existing data
  • Tolerated deviations no longer appear in Active Issues panel

    • Values the ISP considers acceptable are still shown in metric cards and the health banner, but are no longer promoted as actionable issues
  • PDF report module updated for 4-tier health labels and thresholds

v2026-03-06.1 — Setup Redesign & PDF Fix

06 Mar 07:17
8e89310

Choose a tag to compare

Changes

  • Redesigned setup wizard to match the Tribu Design System (#146)

    • Glass cards, Lucide icons, mesh background, Outfit font
    • Full i18n coverage for all setup wizard strings
    • E2E tests for the setup flow
  • Fixed PDF report column overlap in all languages (#154)

    • Dynamic key column width instead of fixed 60mm
    • Shortened health-status labels to prevent overflow

v2026-03-04.1 — Prometheus Metrics Endpoint

04 Mar 09:50

Choose a tag to compare

What's New

DOCSight now exposes all DOCSIS signal metrics via a Prometheus-compatible /metrics endpoint, enabling integration with Grafana/Prometheus monitoring stacks.

Features

  • GET /metrics returns all channel metrics in Prometheus text exposition format (text/plain; version=0.0.4; charset=utf-8)
  • Per-channel downstream metrics: power, SNR, correctable/uncorrectable errors, modulation (as numeric QAM order)
  • Per-channel upstream metrics: power, modulation
  • Summary metrics: health status (0-3), channel counts
  • Device info: model, software version, uptime
  • Connection info: max downstream/upstream kbps
  • Poll timestamp: Unix epoch gauge of last successful modem poll
  • No auth required: endpoint is always accessible (like /health)
  • No additional modem queries: reads from existing in-memory state

Technical Details

  • Pure format_metrics() function with no external dependencies
  • 60 new tests (52 unit + 8 integration), 860 total passing
  • Closes #59

v2026-03-03.3

03 Mar 19:07

Choose a tag to compare

Bug Fixes

  • BNetzA: Fix detail table showing 0.0 Mbit/s for all measurements (#148)
  • BNetzA: Hide dashboard card when measurement fields are incomplete (#148)
  • BNetzA: Handle NULL fields on dashboard to prevent crash (#148)
  • BNetzA: Shorten German table column headers for readability (#148)
  • BQM: Clamp spread offset to never schedule collection before 00:30 (#139)
  • CH7465: Omit Username in login payload for password-only firmware (#149)

Features

  • BNetzA: Extract tariff, provider, and SOLL values from Desktop App CSV imports (#148)
  • Data-driven driver hints for setup and settings UI

v2026-03-03.2 — BNetzA Design System & CSV Parser Fix

03 Mar 14:11

Choose a tag to compare

What's New

BNetzA Page Design System Alignment

The BNetzA Broadband Measurement page now fully matches the app's design language:

  • Lucide SVG icons replace all Unicode emojis (expand, refresh, complaint, PDF, delete, verdict)
  • Verdict icons at a glance: green circle-check for compliant, red triangle-alert for deviation, with i18n tooltips
  • Hover effects and animations on all action buttons (expand arrow rotates, action icons highlight on hover)
  • CSS classes replace inline JS styles for detail tables, grid layout, and typography
  • Complaint textarea uses the design system's monospace font variable
  • Global value color utilities (val-good, val-warn, val-crit) promoted from channel-table-only to app-wide, also fixing previously broken color coding in the Speedtest table

BNetzA CSV Parser Fix (#147)

  • Recognize Messzeitpunkt column header used by the breitbandmessung.de Desktop App and Web Test
  • Prefer exact header matches over substring matches to prevent false column mappings
  • Extract time from combined DD.MM.YYYY HH:MM:SS values when no separate time column exists
  • Remove overly broad zeit candidate that incorrectly matched Laufzeit

BNetzA Demo Data

  • Updated demo measurements to realistic 1 Gbit/s cable connection values

Housekeeping

  • Moved docker-compose.bnetz.yml to the wiki (Example Compose Stacks page)
  • Updated README for Generic Router mode and community driver modules
  • Linked Example Compose Stacks from README quick-start section

v2026-03-03.1 — Community Driver System & Generic Router Mode

03 Mar 10:40
eee4a82

Choose a tag to compare

What's New

Community-Contributed Modem Drivers (#131, #129)

DOCSight now supports community-contributed modem drivers via the module system. Third-party modules can declare a "driver" contribution in their manifest to add support for new modem types without modifying core code.

Architecture:

  • New DriverRegistry class provides unified driver lookup (built-in + module-contributed)
  • Module drivers take priority over built-in drivers, enabling community overrides
  • Driver modules are security-restricted from also contributing collectors or publishers

Generic Router Mode (#131, #129)

Users with non-DOCSIS connections (fiber, DSL, satellite, fixed wireless) can now select Generic Router (No DOCSIS) during setup. In this mode:

  • DOCSIS-specific sections (channel tables, signal health, hero chart) are replaced with an informative placeholder
  • All modem-agnostic features remain fully functional: Speedtest, BQM, BNetzA, Weather, Smokeping, Journal, and any module-contributed cards
  • Setup and settings pages hide irrelevant credential fields when Generic Router is selected

Event Log Improvements (#137)

  • Rich human-readable event messages replace raw JSON
  • Mobile responsive layout with severity icons instead of text labels
  • Severity filter pills wrap properly on small screens
  • Lucide arrow icons for sorting

i18n & Polish (#144)

  • Translated hardcoded English strings in channel tables and metric cards
  • Color-coded upstream modulation indicators
  • Updated docker-compose.bnetz.yml with new upstream repo URL

v2026-03-02.1

02 Mar 15:15

Choose a tag to compare

What's New

Spike Expiry for Uncorrectable Errors (#141)

One-time uncorrectable error spikes no longer permanently penalize the health score. After a configurable observation window (default 48h), the spike is suppressed — uncorr_pct resets to 0.0 and health is recalculated from remaining issues. A new spike resets the timer automatically.

The summary includes a spike_suppression object when active, showing last spike time and hours since.

Configurable via errors.spike_expiry_hours in thresholds.

BQM Collection Fixes (#138, #139)

  • Live polling now uses random jitter (0-120s) instead of fixed intervals, preventing clustered requests
  • Daily collection spread offset fires before the configured time (00:00-02:00) instead of after

v2026-03-01.2 — BQM & Dashboard Polish

01 Mar 22:51

Choose a tag to compare

BQM Improvements

  • User-Agent with repo URL — ThinkBroadband can now identify DOCSight traffic (DOCSight/{version} (+github))
  • Live refresh interval — reduced from 5min to 15min to be a better citizen on TBB infrastructure

Dashboard

  • Errors card shows percentage — displays uncorrectable error ratio instead of raw count, with health badge (Good/Marginal/Poor) based on configurable thresholds
  • Min codewords threshold — suppresses misleading percentages when total error count is below 1000 (e.g. right after modem boot)
  • Hero card countdown fix — refresh timer no longer causes layout shift in meta items
  • Health ring legend — zero counts are now muted to avoid confusion (e.g. "0/8")

Sidebar & Layout Fixes

  • Prevent swipe-to-close on tablet/desktop layout
  • Dark mode toggle aligned to right edge
  • Sidebar appearance consistent between dashboard and settings

Other Fixes

  • Lucide icons replace emoji/unicode in speedtest tracker
  • Speedtest table horizontal scroll on mobile
  • Settings scroll cutoff on mobile fixed

v2026-03-01.1 — Dashboard & Settings Redesign

01 Mar 15:34
e42387a

Choose a tag to compare

Complete UI Overhaul

The entire frontend has been redesigned with a modern, mobile-first design system — new dashboard, new settings, theme engine, and PWA support.

Dashboard Redesign

  • New layout shell — mobile sticky header, compact sidebar, bottom tab bar
  • Hero card — status dot, health summary, provider info, gaming badge, inline refresh/countdown
  • Metrics grid — DS Power, US Power, SNR, Errors, Speed cards with health badges and ranges
  • Health rings — thin donut rings with channel breakdown (Good/Marginal/Poor)
  • Channel tables — clean grouped layout by DOCSIS version
  • Responsive — mobile-first with tablet and desktop breakpoints

Settings Redesign

  • New structure — Core settings (Connection, Appearance, Notifications, Security, System, Support) + Module settings in sidebar
  • Tribu design system — glass cards, toggle rows, card icons, consistent spacing
  • Module cards — redesigned grid layout with enable/disable, settings links, author info

Theme Engine

  • Themes as modulescontributes: theme in manifest.json with theme.json color definitions
  • 3 built-in themes — Classic (default dark), Ocean (blue tones), Tribu (purple accent)
  • Live preview — preview any theme before activating, instant switch without restart
  • Theme gallery — browse installed themes in Appearance settings
  • Theme registry — browse and install community themes (API ready)
  • Mutual exclusion — only one theme active at a time
  • Dark/Light mode — each theme defines both color schemes

PWA & Offline

  • Service worker — offline caching for static assets
  • Self-hosted dependencies — Chart.js, Lucide icons, date-fns adapter bundled locally (no CDN)
  • Self-hosted fonts — Inter, Outfit, JetBrains Mono served from /static/fonts/
  • App manifest — installable as PWA with proper icons and theme color

Design System

  • Design tokens (tokens.css) — shared CSS custom properties for colors, spacing, typography
  • Components (components.css) — reusable UI primitives (badges, toggles, cards, buttons)
  • Modular CSS — split from monolithic main.css into tokens, components, views, modals, fonts
  • Per-module CSS — module-specific styles extracted into modules/<name>/static/style.css

Module System Improvements

  • Smokeping extracted — fully modular with own routes, i18n, templates, and JS
  • Module CSS isolation — each module owns its styles, injected only when enabled
  • Theme security validation — theme.json values validated against injection
  • Settings integration — modules appear in Settings sidebar sorted alphabetically

Fixed

  • CSS specificity: .desktop-only utility class now properly overrides component styles
  • Hero meta items display on single line on desktop (no wrapping)
  • Mobile header shows countdown + refresh only in sticky bar, not duplicated in hero
  • Theme palette dots update when toggling dark/light mode
  • Toggle switches visible in all contexts (table, card, standalone)
  • Module-dependent sidebar links gated on module existence
  • closeMobileSidebarcloseSidebar JS reference error on resize

Stats

  • 86 files changed, ~14k lines touched
  • 743 tests passing
  • 3 PRs merged (#132, #133, #134, #135)