SLA targets come from a single global per-priority map in packages/outpost/shared/src/constants.ts (DEFAULT_SLA_FIRST_RESPONSE / DEFAULT_SLA_RESOLUTION). There is no per-customer override and no UI to set one.
Why it matters
The global targets are tuned for paid support — HIGH means 8 hours to resolve — and are meaningless for OSS community tickets. So SLA_CHECK flags essentially every open ticket: on 2026-07-31 the dashboard read "SLA Breaches 51" against 51 total tickets. A metric that fires on everything conveys nothing.
This also blocks the sales use case: Outpost is meant to serve sales as well as support, and contractual SLAs are per-customer by definition.
Fix
- SLA targets become a per-
Account setting, editable on the customer page, sourced from that customer's contract, with the global map as the fallback.
- A settings surface to edit them.
- Clear
slaBreachedAt once a ticket receives a response — today it is write-once, so the count only ever grows.
- Scope the dashboard card to the selected month.
Interim, decided 2026-07-31: the dashboard card becomes "Needs human reply" — AI answered, no human followed up, across Discord + GitHub.
SLA targets come from a single global per-priority map in
packages/outpost/shared/src/constants.ts(DEFAULT_SLA_FIRST_RESPONSE/DEFAULT_SLA_RESOLUTION). There is no per-customer override and no UI to set one.Why it matters
The global targets are tuned for paid support — HIGH means 8 hours to resolve — and are meaningless for OSS community tickets. So
SLA_CHECKflags essentially every open ticket: on 2026-07-31 the dashboard read "SLA Breaches 51" against 51 total tickets. A metric that fires on everything conveys nothing.This also blocks the sales use case: Outpost is meant to serve sales as well as support, and contractual SLAs are per-customer by definition.
Fix
Accountsetting, editable on the customer page, sourced from that customer's contract, with the global map as the fallback.slaBreachedAtonce a ticket receives a response — today it is write-once, so the count only ever grows.Interim, decided 2026-07-31: the dashboard card becomes "Needs human reply" — AI answered, no human followed up, across Discord + GitHub.