diff --git a/containers/backupchecks/src/backend/app/changelog.py b/containers/backupchecks/src/backend/app/changelog.py index a68b035..d9e12eb 100644 --- a/containers/backupchecks/src/backend/app/changelog.py +++ b/containers/backupchecks/src/backend/app/changelog.py @@ -3,6 +3,21 @@ Changelog data structure for Backupchecks """ CHANGELOG = [ + { + "version": "v0.2.4", + "date": "2026-03-26", + "summary": "Hotfix release that restores support for linking existing umbrella/shared Autotask tickets across companies from Run Checks.", + "sections": [ + { + "title": "Fixed", + "type": "bugfix", + "changes": [ + "Run Checks Link existing Autotask ticket no longer blocks cross-company tickets when the selected ticket company differs from the mapped customer company", + "Umbrella/shared Autotask tickets can be linked again while existing safeguards remain: ticket must exist, include a ticket number, and not be terminal/completed" + ] + } + ] + }, { "version": "v0.2.3", "date": "2026-03-23", diff --git a/containers/backupchecks/src/backend/app/main/routes_run_checks.py b/containers/backupchecks/src/backend/app/main/routes_run_checks.py index 315446f..a532c31 100644 --- a/containers/backupchecks/src/backend/app/main/routes_run_checks.py +++ b/containers/backupchecks/src/backend/app/main/routes_run_checks.py @@ -2240,15 +2240,13 @@ def api_run_checks_autotask_link_existing_ticket(): if not isinstance(t, dict): return jsonify({"status": "error", "message": "Autotask did not return a ticket object."}), 400 - # Enforce company scope. + # Allow cross-company linking for shared/umbrella Autotask tickets. + # Keep parsed company id for diagnostics/audit context, but do not block on mismatch. try: t_company = int(t.get("companyID") or 0) except Exception: t_company = 0 - if t_company != int(customer.autotask_company_id): - return jsonify({"status": "error", "message": "Selected ticket does not belong to the mapped Autotask company."}), 400 - tnum = (t.get("ticketNumber") or t.get("number") or "") tnum = str(tnum or "").strip() if not tnum: diff --git a/containers/backupchecks/src/templates/main/run_checks.html b/containers/backupchecks/src/templates/main/run_checks.html index dae5989..f726985 100644 --- a/containers/backupchecks/src/templates/main/run_checks.html +++ b/containers/backupchecks/src/templates/main/run_checks.html @@ -1513,6 +1513,7 @@ table.addEventListener('change', function (e) { if (mailPanel) mailPanel.style.display = ''; if (bodyFrame) bodyFrame.srcdoc = wrapMailHtml(run.body_html || ''); } else { + if (modalEl) modalEl.classList.remove('is-cove'); if (covePanel) covePanel.style.display = 'none'; if (ccPanel) ccPanel.style.display = 'none'; if (mailHeading) { mailHeading.style.display = ''; mailHeading.textContent = 'Mail'; } diff --git a/docs/changelog-claude.md b/docs/changelog-claude.md index 1e4a12b..b35c152 100644 --- a/docs/changelog-claude.md +++ b/docs/changelog-claude.md @@ -2,6 +2,14 @@ This file documents all changes made to this project via Claude Code. +## [2026-03-26] + +### Fixed +- Run Checks modal mail visibility hotfix: normal mail runs now explicitly clear the `is-cove` modal class before rendering mail content, preventing intermittent hidden mail after navigating from a Cove run; Cove behavior itself remains unchanged. +- Run Checks Autotask "Link existing ticket" now allows linking cross-company tickets (for shared/umbrella tickets that apply to multiple customers): + - Removed the hard company mismatch block in `POST /api/run-checks/autotask-link-existing-ticket` (`containers/backupchecks/src/backend/app/main/routes_run_checks.py`). + - Tickets are still validated for existence, ticket number presence, and non-terminal status before linking. + ## [2026-03-23] ### Fixed diff --git a/docs/changelog.md b/docs/changelog.md index 023fc93..a9eca2e 100644 --- a/docs/changelog.md +++ b/docs/changelog.md @@ -1,3 +1,9 @@ +## v0.2.4 + +### Fixed +- **Autotask: link existing ticket cross-company hotfix** — removed the hard company mismatch block in the Run Checks endpoint that links existing Autotask tickets, so umbrella/shared tickets can be linked even when the ticket company differs from the mapped customer company. +- Existing safeguards remain active: ticket must exist, must have a ticket number, and may not be in a terminal/completed status. + ## v0.2.3 ### Added