CB-201: nudge leads about backend outages #238

Closed
agent wants to merge 0 commits from worker/cb201-unit3-nudge-abdf5c-6 into main
Member

Adds one-shot, per-lead backend outage notices to ReplyPushLoop. The notices share the existing retry cap and combine with pending ticket notices. Tests: mvn clean install passed (1129 tests, 0 failures).

Adds one-shot, per-lead backend outage notices to ReplyPushLoop. The notices share the existing retry cap and combine with pending ticket notices. Tests: mvn clean install passed (1129 tests, 0 failures).
agent added 1 commit 2026-09-03 05:29:16 +02:00
CB-201: nudge leads about backend outages
CI / contract (pull_request) Successful in 1m7s
CI / build (pull_request) Successful in 1m55s
ee932fd85b
agent added 1 commit 2026-09-03 05:44:21 +02:00
CB-201: make unmapped target notice truthful
CI / contract (pull_request) Successful in 1m13s
CI / build (pull_request) Successful in 1m15s
7840e9adf6
Owner

Merged to main in e5eb353.

Verified by the lead: baseline 1129 tests, 0 failures; routing the unmapped path back through onBackendIncident gives 1 red with 0 compile errors, and it is the right red — the test now asserts the whole rendered message, not two substrings:

expected: <A backend error on worker term_worker could not be mapped to a credential
(no credential matched) — no cool-off was applied. Run fleet_list to check that worker.>
but was: <Backend credential unknown is cooling for 0 remaining seconds; affected profiles:
unmapped backend error: no credential matched; affected workers: term_worker. Run fleet_list to see more.>

The first round reused the incident message for the unmapped case. That told the lead a credential was "cooling for 0 remaining seconds" when nothing was cooling, and it put the free-text reason into the profiles field. A false notice to the lead is worse than no notice, because the lead acts on it. It now has its own record types and its own text.

Also right, and worth stating: this is a fourth source inside the existing ReplyPushLoop, not a new scheduler. A second injector would have raced the one control that already owns lead-pane delivery.

Merged to main in `e5eb353`. Verified by the lead: baseline **1129 tests, 0 failures**; routing the unmapped path back through `onBackendIncident` gives **1 red with 0 compile errors**, and it is the right red — the test now asserts the whole rendered message, not two substrings: ``` expected: <A backend error on worker term_worker could not be mapped to a credential (no credential matched) — no cool-off was applied. Run fleet_list to check that worker.> but was: <Backend credential unknown is cooling for 0 remaining seconds; affected profiles: unmapped backend error: no credential matched; affected workers: term_worker. Run fleet_list to see more.> ``` The first round reused the incident message for the unmapped case. That told the lead a credential was "cooling for 0 remaining seconds" when nothing was cooling, and it put the free-text reason into the profiles field. A false notice to the lead is worse than no notice, because the lead acts on it. It now has its own record types and its own text. Also right, and worth stating: this is a fourth source inside the existing `ReplyPushLoop`, not a new scheduler. A second injector would have raced the one control that already owns lead-pane delivery.
ltms closed this pull request 2026-09-03 05:57:49 +02:00
Some checks are pending
CI / contract (pull_request) Successful in 1m13s
CI / build (pull_request) Successful in 1m15s

Pull request closed

Sign in to join this conversation.