Files
infoscreen/DEV-CHANGELOG.md
Olaf 4d652f0554 feat: 2026.1.0-alpha.16 – dashboard banner refactor, period auto-activation, text & docs
Dashboard (dashboard/src/dashboard.tsx, settings.tsx, apiAcademicPeriods.ts):
- Refactor loadHolidayStatus to useCallback with stable empty-deps reference;
  removes location.pathname dependency that caused overlapping API calls at mount
  and left the banner unresolved via request-sequence cancellation
- Add key prop derived from severity:text to Syncfusion MessageComponent to force
  remount on state change, fixing stale banner that ignored React prop/children updates
- Correct German transliterated text to proper Umlauts throughout visible UI strings
  (fuer -> für, oe -> ö, ae -> ä etc. across dashboard and settings views)

Backend (server/init_academic_periods.py):
- Refactor to idempotent two-phase flow: seed default periods only when table is
  empty; on every run activate exactly the non-archived period covering date.today()
- Enforces single-active invariant by deactivating all periods before promoting match
- Emits explicit warning when no period covers current date instead of doing nothing

Deployment (docker-compose.prod.yml):
- Add init_academic_periods.py to server startup chain after migrations and defaults;
  eliminates manual post-deploy step to set an active academic period

Release docs:
- program-info.json: bump to 2026.1.0-alpha.16; fix JSON parse error caused by
  typographic curly quotes in the new changelog entry
- TECH-CHANGELOG.md: detailed alpha.16 section with root-cause motivation for both
  dashboard refactoring decisions (unstable callback ref + Syncfusion stale render)
- DEV-CHANGELOG.md: document dashboard refactor, Syncfusion key fix, Umlaut changes,
  and program-info JSON regression and fix
- README.md: add Latest Release Highlights section for alpha.16
- .github/copilot-instructions.md: sync file map, prod bootstrap note, backend and
  frontend pattern additions for academic period init and Syncfusion remount pattern
2026-04-02 14:16:53 +00:00

4.7 KiB
Raw Blame History

DEV-CHANGELOG

This changelog tracks all changes made in the development workspace, including internal, experimental, and in-progress updates. Entries here may not be reflected in public releases or the user-facing changelog.


Unreleased (development workspace)

  • Programminfo GUI regression/fix: dashboard/public/program-info.json could not be loaded in Programminfo menu due to invalid JSON in the new alpha.16 changelog line (malformed quote in a text entry). Fixed JSON entry and verified file parses correctly again.
  • Dashboard holiday banner fix: dashboard/src/dashboard.tsxloadHolidayStatus now uses a stable useCallback with empty deps, preventing repeated re-creation on render. useEffect depends only on the stable callback reference.
  • Dashboard Syncfusion stale-render fix: MessageComponent in the holiday banner now receives key={${severity}:${text}} to force remount when severity or text changes; without this Syncfusion cached stale DOM and the banner did not update reactively.
  • Dashboard German text: Replaced transliterated forms (ae/oe/ue) with correct Umlauts throughout visible dashboard UI strings — Präsentation, für, prüfen, Ferienüberschneidungen, verfügbar, Vorfälle, Ausfälle.
  • TV power intent (Phase 1): Scheduler publishes retained QoS1 group-level intents to infoscreen/groups/{group_id}/power/intent with transition+heartbeat semantics, startup/reconnect republish, and poll-based expiry (max(3 × poll_interval_sec, 90s)).
  • TV power validation: Added unit/integration/canary coverage in scheduler/test_power_intent_utils.py, scheduler/test_power_intent_scheduler.py, and test_power_intent_canary.py.
  • Monitoring system completion: End-to-end monitoring pipeline is active (MQTT logs/health → listener persistence → monitoring APIs → superadmin dashboard).
  • Monitoring API: Added/active endpoints GET /api/client-logs/monitoring-overview and GET /api/client-logs/recent-errors; per-client logs via GET /api/client-logs/<uuid>/logs.
  • Dashboard monitoring UI: Superadmin monitoring page is integrated and displays client health status, screenshots, process metadata, and recent error activity.
  • Bugfix: Presentation flags page_progress and auto_progress now persist reliably across create/update and detached-occurrence flows.
  • Frontend (Settings → Events): Added Presentations defaults (slideshow interval, page-progress, auto-progress) with load/save via /api/system-settings; UI uses Syncfusion controls.
  • Backend defaults: Seeded presentation_interval ("10"), presentation_page_progress ("true"), presentation_auto_progress ("true") in server/init_defaults.py when missing.
  • Data model: Added per-event fields page_progress and auto_progress on Event; Alembic migration applied successfully.
  • Event modal (dashboard): Extended to show and persist presentation pageProgress/autoProgress; applies system defaults on create and preserves per-event values on edit; payload includes page_progress, auto_progress, and slideshow_interval.
  • Scheduler behavior: Now publishes only currently active events per group (at "now"); clears retained topics by publishing [] for groups with no active events; normalizes naive timestamps and compares times in UTC; presentation payloads include page_progress and auto_progress.
  • Recurrence handling: Still queries a 7day window to expand recurring events and apply exceptions; recurring events only deactivate after recurrence_end (UNTIL).
  • Logging: Temporarily added filter diagnostics during debugging; removed verbose logs after verification.
  • WebUntis event type: Implemented new webuntis type. Event creation resolves URL from system supplement_table_url; returns 400 if not configured. WebUntis behaves like Website on clients (shared website payload).
  • Settings consolidation: Removed separate webuntis_url (if present during dev); WebUntis and Vertretungsplan share supplement_table_url. Removed /api/system-settings/webuntis-url endpoints; use /api/system-settings/supplement-table.
  • Scheduler payloads: Added top-level event_type for all events; introduced unified nested website payload for both website and webuntis events: { "type": "browser", "url": "…" }.
  • Frontend: Program info bumped to 2025.1.0-alpha.13; changelog includes WebUntis/Website unification and settings update. Event modal shows no per-event URL for WebUntis.
  • Documentation: Added MQTT_EVENT_PAYLOAD_GUIDE.md and WEBUNTIS_EVENT_IMPLEMENTATION.md. Updated .github/copilot-instructions.md and README.md for unified Website/WebUntis handling and system settings usage.

Note: These changes are available in the development environment and may be included in future releases. For released changes, see TECH-CHANGELOG.md.