Skip to content

v1.8.0 — The Collaboration Release: Operations Center, Workload & Capacity, Notification Center, Mentions, Side Threads

Choose a tag to compare

@kimpearce888 kimpearce888 released this 28 Sep 01:43
· 13 commits to main since this release

M2 (plan phases 10–14) of the approved 48-phase roadmap.

What's new

🖥️ Operations Center (phase 10)

The whole support operation on one screen — 16 live tiles (unassigned, needs first response, customer waiting, waiting over threshold, urgent, SLA at risk / breached, high customer effort, repeated issue, known issue, AI escalation, issue spike, automation approvals, failed jobs, sync problems, campaign activity), scoped by mailbox, live over SSE. Every conversation tile is a COUNT(*) over one whitelisted parameterized fragment — the same fragment powers its inbox drill-down (?ops=<tileKey>), so a tile number and the list behind it can never disagree (parity-locked by tests and a live audit check).

👥 Team workload & capacity (phase 11)

Per-agent and per-team workload with tiered weighted pressure (each conversation counts once at its highest tier), an explicit configurable capacity model — never inferred from anything about a person — availability from the Help Scout user statuses the mirror already syncs, an honest 7-day average-load approximation, and a suggested assignee that is a read-only recommendation with its reasoning printed next to it. Nothing ever reassigns automatically.

🔔 Notification Center (phase 12)

14 notification types produced by one idempotent sweep — the single producer, single funnel: customer replies, assignments, @mentions, SLA risk/breach, automation approvals, AI escalations, known issues, issue spikes, campaign replies, sync/job failures, customer events. Dedup keys make re-syncs, re-sweeps and crashes structurally incapable of duplicating. Targeting (assignee / mention / broadcast), per-type preferences, unread badge live over SSE, mark read / all-read, source links, retention pruning. The sweep defers its cursor until the first sync settles — history is not news.

💬 Mentions (phase 13)

@agent and @team in internal notes and side-thread messages with exact identity matching only (never prefix/substring — @al never notifies Alex; unknown tokens stay plain text), @autocomplete in the composers, mention highlighting, and a "mentions for me" queue linking back to conversations.

🗂️ Side collaboration threads (phase 14)

Internal-only team discussions attached to a conversation (Support / Engineering / Billing style) — never customer-visible, never synced to Help Scout, by construction. Participants with mention auto-join, resolve/reopen (409 on resolved), existence-validated ids, full audit history.

Quality

  • 408/408 tests (+64 over v1.7.0): mention-parser unit suite, sweep/side-thread/operations integration suites, full-loop e2e (webhook → sweep → SSE → badge → mark read)
  • Black-box audit extended with section J (361 checks, 0 HIGH / 0 MEDIUM after fixes) — hostile scope params, tile/drill parity, hostile capacity models, mention-token identity guessing, XSS payloads, conflict cycles
  • Human-like browser pass: onboarding walked, live SSE badge verified updating without refresh, all flows exercised through the real UI, all 16 pages walked with zero console errors
  • 8 real bugs found and fixed by this release's own testing (each regression-locked): fresh-install notification spam, sweep dropping assignment metadata, a workload crash on a misnamed column, duplicate query-param 500, FK 500s on unknown participant ids, silent non-boolean read flags, capacity key validation, sync_state JSON quoting

Full changelog: https://github.com/kimpearce888/supportos/blob/main/CHANGELOG.md