[glm-grade=A] fix(notifications): un-gate 7 dead emitters + repair legacy 4-arg send shape (DC-094)
Two silent-death defects in one class: 1. Seven emitters absent from DEFAULT events, so the send() gate (config.events[canonical] !== true) dropped them on every install: ssl-cert-expiry, dns-propagation, drift-detected, dependency-restart-complete/-failed, recipeRemoved, workflow. All now default ON; dependency-restart spellings fold onto one canonical toggle; recipeRemoved aliases to recipe-removed in both the manager and route alias maps. 2. Nine call sites used a legacy 4-arg send(event, title, message, type) against the 3-arg signature: the message string landed in the type slot (Discord embed color fell back to info-blue, history.type wrong) and providers received the TITLE as the body - deploy-failure notifications carried no error text at all. Fixed at source (9 sites) plus a type-guarded shim in send() for external legacy callers. Also: explicit data.title now flows to ntfy Title header, email subject, Discord embed title, and history; settings UI gains 9 event toggles (separate Backup Complete/Failed) with defaults-on semantics. Tests: +24 (new DC-094 suite: defaults, gate pass-through, alias folding send-time and load-time, stored-config inheritance, shim body/title/ color/subject/history, type-guard, 3-arg no-regression); 4 assertions in bundled-workflows-health-check updated from the old 4-arg mock contract to the canonical shape (same behavior asserted). Full suite 116 suites / 2706 tests green. Judge: GLM-5.3 cold read via delegate_task (deleg_8a7cedd0), grade A, zero blockers; 2 polish items (Backups toggle conflation, shim type-guard) folded into this commit. Verdict URN: urn:ump:uyipjjwdjqjy3alvceqxvlucrymd7hnsben5udpp2bqycoh3l2la
This commit is contained in:
@@ -168,6 +168,33 @@
|
||||
<label class="checkbox-label-sm">
|
||||
<input type="checkbox" id="event-deploy-failed" checked /> Deployment Failed
|
||||
</label>
|
||||
<label class="checkbox-label-sm">
|
||||
<input type="checkbox" id="event-ssl-cert-expiry" checked /> SSL Expiry
|
||||
</label>
|
||||
<label class="checkbox-label-sm">
|
||||
<input type="checkbox" id="event-dns-propagation" checked /> DNS Propagation
|
||||
</label>
|
||||
<label class="checkbox-label-sm">
|
||||
<input type="checkbox" id="event-drift-detected" checked /> Config Drift
|
||||
</label>
|
||||
<label class="checkbox-label-sm">
|
||||
<input type="checkbox" id="event-dependency-restart" checked /> Dependency Restarts
|
||||
</label>
|
||||
<label class="checkbox-label-sm">
|
||||
<input type="checkbox" id="event-recipe-removed" checked /> Recipe Removed
|
||||
</label>
|
||||
<label class="checkbox-label-sm">
|
||||
<input type="checkbox" id="event-workflow" checked /> Workflow Actions
|
||||
</label>
|
||||
<label class="checkbox-label-sm">
|
||||
<input type="checkbox" id="event-backup-complete" checked /> Backup Complete
|
||||
</label>
|
||||
<label class="checkbox-label-sm">
|
||||
<input type="checkbox" id="event-backup-failed" checked /> Backup Failed
|
||||
</label>
|
||||
<label class="checkbox-label-sm">
|
||||
<input type="checkbox" id="event-update-available" checked /> Updates
|
||||
</label>
|
||||
<label class="checkbox-label-sm" style="grid-column: 1 / -1;">
|
||||
<input type="checkbox" id="event-resource-alert" checked /> Resource Alerts
|
||||
</label>
|
||||
@@ -275,6 +302,15 @@
|
||||
document.getElementById('event-container-up').checked = config.events?.['container-up'] === true;
|
||||
document.getElementById('event-deploy-success').checked = config.events?.['deploy-success'] !== false;
|
||||
document.getElementById('event-deploy-failed').checked = config.events?.['deploy-failed'] !== false;
|
||||
document.getElementById('event-ssl-cert-expiry').checked = config.events?.['ssl-cert-expiry'] !== false;
|
||||
document.getElementById('event-dns-propagation').checked = config.events?.['dns-propagation'] !== false;
|
||||
document.getElementById('event-drift-detected').checked = config.events?.['drift-detected'] !== false;
|
||||
document.getElementById('event-dependency-restart').checked = config.events?.['dependency-restart'] !== false;
|
||||
document.getElementById('event-recipe-removed').checked = config.events?.['recipe-removed'] !== false;
|
||||
document.getElementById('event-workflow').checked = config.events?.['workflow'] !== false;
|
||||
document.getElementById('event-backup-complete').checked = config.events?.['backup-complete'] !== false;
|
||||
document.getElementById('event-backup-failed').checked = config.events?.['backup-failed'] !== false;
|
||||
document.getElementById('event-update-available').checked = config.events?.['update-available'] !== false;
|
||||
document.getElementById('event-resource-alert').checked = config.events?.['alert'] !== false;
|
||||
}
|
||||
} catch (error) {
|
||||
@@ -352,6 +388,15 @@
|
||||
'container-up': document.getElementById('event-container-up').checked,
|
||||
'deploy-success': document.getElementById('event-deploy-success').checked,
|
||||
'deploy-failed': document.getElementById('event-deploy-failed').checked,
|
||||
'ssl-cert-expiry': document.getElementById('event-ssl-cert-expiry').checked,
|
||||
'dns-propagation': document.getElementById('event-dns-propagation').checked,
|
||||
'drift-detected': document.getElementById('event-drift-detected').checked,
|
||||
'dependency-restart': document.getElementById('event-dependency-restart').checked,
|
||||
'recipe-removed': document.getElementById('event-recipe-removed').checked,
|
||||
'workflow': document.getElementById('event-workflow').checked,
|
||||
'backup-complete': document.getElementById('event-backup-complete').checked,
|
||||
'backup-failed': document.getElementById('event-backup-failed').checked,
|
||||
'update-available': document.getElementById('event-update-available').checked,
|
||||
'alert': document.getElementById('event-resource-alert').checked
|
||||
},
|
||||
healthCheck: {
|
||||
|
||||
Reference in New Issue
Block a user