diff --git a/docs/technical-notes-codex.md b/docs/technical-notes-codex.md index 93a52f8..dbacd80 100644 --- a/docs/technical-notes-codex.md +++ b/docs/technical-notes-codex.md @@ -1,6 +1,6 @@ # Technical Notes (Internal) -Last updated: 2026-02-16 +Last updated: 2026-02-19 ## Purpose Internal technical snapshot of the `backupchecks` repository for faster onboarding, troubleshooting, and change impact analysis. @@ -121,7 +121,8 @@ Critical deletion order to avoid constraint violations: - DSM Updates, Account Protection, Firmware Updates - Set appropriate backup_type (e.g., "Updates", "Firmware Update") - Do NOT participate in schedule learning -- Still visible in Run Checks for awareness +- Usually still visible in Run Checks for awareness +- Exception: non-backup 3CX informational types (`Update`, `SSL Certificate`) are hidden from Run Checks **Regular Parsers:** - Backup jobs (Veeam, Synology Active Backup, NAKIVO, etc.) @@ -202,7 +203,10 @@ All pages use **explicit link-based queries** (no date-based logic): 2. Job-level scope: `tickets JOIN ticket_scopes WHERE job_id = Y AND resolved_at IS NULL AND active_from_date <= run_date` - Prevents duplicates by tracking seen ticket IDs - Shows newly created tickets immediately (via scope) without waiting for resolve action -- Same for remarks: `remarks JOIN remark_job_runs WHERE job_run_id = X` +- **Two-source remark display**: + 1. Direct links: `remarks JOIN remark_job_runs WHERE job_run_id = X` + 2. Job-level scope: `remarks JOIN remark_scopes WHERE job_id = Y AND resolved_at IS NULL AND active_from_date <= run_date` (with timezone-safe fallback from `start_date`) +- Prevents duplicates by tracking seen remark IDs ### Resolved vs Deleted - **Resolved**: Ticket completed in Autotask (tracked in internal `tickets.resolved_at`) @@ -359,6 +363,23 @@ File: `build-and-push.sh` ## Recent Changes +### 2026-02-19 +- **Added 3CX Update parser support**: `threecx.py` now recognizes subject `3CX Notification: Update Successful - ` and stores it as informational with: + - `backup_software = 3CX` + - `backup_type = Update` + - `overall_status = Success` +- **3CX informational schedule behavior**: + - `3CX / Update` and `3CX / SSL Certificate` are excluded from schedule inference in `routes_shared.py` (no Expected/Missed generation). +- **Run Checks visibility scope (3CX-only)**: + - Run Checks now hides only non-backup 3CX informational jobs (`Update`, `SSL Certificate`). + - Other backup software/types remain visible and unchanged. +- **Fixed remark visibility mismatch**: + - `/api/job-runs//alerts` now loads remarks from both: + 1. `remark_job_runs` (explicit run links), + 2. `remark_scopes` (active job-scoped remarks), + - with duplicate prevention by remark ID. + - This resolves cases where the remark indicator appeared but remarks were not shown in Run Checks modal or Job Details modal. + ### 2026-02-13 - **Fixed missed runs ticket propagation**: Added `link_open_internal_tickets_to_run` calls in `_ensure_missed_runs_for_job` (routes_run_checks.py) after creating both weekly and monthly missed JobRun records. Previously only email-based runs got ticket linking, causing missed runs to not show internal tickets or Autotask tickets. Required `db.session.flush()` before linking to ensure run.id is available. - **Fixed checkbox auto-selection**: Added `autocomplete="off"` to all checkboxes on Inbox and Run Checks pages. Prevents browser from automatically re-selecting checkboxes after page reload following delete actions.