Skip to content

Live Chat 1.5.0 / 1.5.1 — Send Resilience + Typing Production Readiness Audit ​

FieldValue
Date2026-09-25
StatusGo — migrate catalog through 1.5.1; deploy Backend (widget JS + soft-fail hardening) + Frontend; Reverb preferred for typing/desk live updates
ScopeFree Communication module live-chat 1.4.2 → 1.5.0 → 1.5.1 (send soft-fail; typing; embed Retry; desk / canned filter; open/close soft-fail; embed send lock + hydrate-before-retry; snippet ?v= cache-bust; structured side-effect logs)
CompanionLive Chat deployment · 1.0.1 readiness · Developer · User · Overview · API · CHANGELOG

Additive MINOR (1.5.0) plus PATCH remediations (1.5.1) on the existing Live Chat module. No new permissions, queues, scheduler entries, or env vars. Prior 1.0.1 production readiness remains the baseline security/CORS/session audit; this page covers 1.5.0 / 1.5.1.


Executive summary ​

Production embeds (e.g. third-party marketing sites) and the agent desk could both fail message send with HTTP 500 when ShouldBroadcastNow / notify / automation threw after persist (commonly a down or misconfigured Reverb). 1.5.0 soft-fails those side effects after the message row commits, so visitors and agents can always send. Typing is fan-out via public + tenant POST …/typing → LiveChatTyping (private inbox/conversation + public visitor channel). The embed replaces browser alert() with an in-panel error + Retry. The desk filters canned replies when the composer starts with /.

1.5.1 closes remaining audit gaps: soft-fail LiveChatConversationOpened / Closed and webhook/automation forward(); structured Log::warning for side-effect failures; embed send lock + hydrate-before-retry (avoids duplicate posts when Retry follows a soft-failed persist); embed snippet ?v= cache-bust aligned to catalog PATCH.

GateResult
Catalog migrate-only 1.4.2 → 1.5.0 (2026_09_25_142200_…)Pass
Catalog migrate-only 1.5.0 → 1.5.1 (2026_09_25_200000_…)Pass
No schema / permission / env changesPass
Visitor + agent send soft-fail notify / broadcast / automation after persistPass
Conversation open / close lifecycle soft-failPass
Conversation-updated + presence broadcasts soft-failPass
Integration webhook/automation forward() soft-failPass
Public POST …/typing (Bearer session) + tenant POST …/typing (live-chat.reply)Pass
LiveChatTyping on private + public visitor channelsPass
Embed: in-panel error + Retry; send lock; hydrate-before-retry; visitor typing; agent-is-typingPass
Embed snippet includes widgets/live-chat.js?v=1.5.1Pass
Desk: typing API fan-out + / canned filterPass
Prior CORS / entitlement / PII / session TTL / IDOR gates (1.0.1+)Pass (unchanged)
Pest LiveChatModuleTest incl. broadcast-outage send, open/close soft-fail, typing, embed snippetPass (28, verified 2026-09-25)
Playwright test:e2e:live-chat (10, shared demo session)Pass (verified 2026-09-25 on 1.5.0 baseline)
Docs hubs + roadmap 1.5.1 + this pagePass

Go / No-Go: Go after companion CI green and:

  1. php artisan migrate --force (catalog through 1.5.1)
  2. Backend deploy that serves updated public/widgets/live-chat.js
  3. Frontend SPA deploy
  4. Staging smoke below (third-party Origin embed + desk send); re-copy Settings embed snippet if sites still load unversioned script without CDN purge

Reverb remaining down does not block send or conversation open/close; it only degrades typing indicators and live inbox updates (poll fallback remains).


Incident → remediation map ​

Symptom (pre-1.5.0)Root causeFix
Website widget POST …/messages → 500; alert("Server Error")Sync broadcast / notify / automation after persistSoft-fail + report() / structured log; embed in-panel Retry
Agent desk send → toast / failSame broadcastMessageSent pathSoft-fail on agent send
Typing only agent↔agent (whisper)Visitors not on private Echo channelsHTTP typing + LiveChatTyping on public visitor channel
Open/close could 500 on automation fan-outUnwrapped event(Opened/Closed)Soft-fail in 1.5.1
Stale embed script after deployLong-lived CDN / browser cacheSnippet ?v= + redeploy (1.5.1 / O2)

Findings (1.5.0 audit → 1.5.1 remediations) ​

IDSeverityStatusFindingAction
LC15-01CriticalFixedReverb/ShouldBroadcastNow outage 500’d visitor + agent sendSoft-fail side effects after message persist
LC15-02HighFixedEmbed used alert() for API errorsIn-panel banner + Retry
LC15-03MediumFixedNo visitor↔agent typing surfacePublic/tenant typing routes + LiveChatTypingBroadcast
LC15-04MediumFixedDesk canned chips only (no / filter)Composer / filters shortcuts/titles
LC15-05LowFixedE2E tinker preferred Herd PHP 8.4 on Windowsverify-tenant-email.ts prefers php85
LC15-06LowFixed (1.5.1)Soft-fail can leave message saved if client retriesEmbed send lock + hydrate-before-retry skips re-POST when visitor body already painted
LC15-07MediumFixed (1.5.1)Conversation open/close automation could 500 the HTTP pathSoft-fail LiveChatConversationOpened / Closed
LC15-08MediumFixed (1.5.1)Webhook/automation forward() unwrappedtry/catch + structured log in IntegrationEventDispatcher

Ops (not code blockers) ​

IDSeverityStatusFindingOwner
O1MediumOpenKeep Reverb daemon healthy for typing + live desk (send works without it)Ops
O2MediumMitigated (1.5.1)Redeploy API static widgets/live-chat.js (CDN purge if fronted); new snippets use ?v=1.5.1Ops / Eng
O3LowOpenCustomer site embeds: refresh snippet from Settings after 1.5.1 (or purge CDN for unversioned URLs)Customer / CS
O4LowMitigated (1.5.1)Monitor live-chat.side-effect-failed / integrations.forward-failed + report() volumeOps / Eng

Explicitly deferred (unchanged) ​

  • Captcha / Turnstile beyond throttle + session TTL
  • Bots / FAQ flows; invoice/record share in chat
  • Multi-widget / multi-domain brands
  • Mobile agent shell

Test evidence ​

SuiteResultNotes
herd php vendor/bin/pest tests/Feature/Tenant/LiveChat/LiveChatModuleTest.php --compact28 passed (verified 2026-09-25)Soft-fail send; open/close soft-fail; typing; embed ?v= snippet
npm run test:e2e:live-chat (shared demo session, E2E_SKIP_WEBSERVER=1)10 passedGate → entitle → validation → visitor send → reply → note hidden from public → typing → claim/close → lead → search

Do not claim CI green until companion PRs’ Quality Gates pass on the merge branch.


Deploy order ​

  1. Companion CI green (Backend / Frontend / Docs)
  2. Backend — php artisan migrate --force through 2026_09_25_200000_bump_live_chat_module_version_to_1_5_1; confirm public/widgets/live-chat.js is the 1.5.1 artifact; php artisan reverb:restart if Reverb is used
  3. Frontend — SPA with typing API + / canned filter
  4. Docs — this page live
  5. Staging smoke below before pointing production marketing embeds at the new API build

Suggested merge order: Backend → Frontend → Docs.


Pre-flight checklist ​

#CheckOwnerPass?
1Migrate through 2026_09_25_200000_…; catalog live-chat = 1.5.1Ops☐
2API serves updated GET {APP_URL}/widgets/live-chat.js (and Settings snippet uses ?v=1.5.1)Ops☐
3Reverb daemon up or accepted degraded typing (send still works)Ops☐
4Scheduler still runs live-chat:purge-visitors --days=90Ops☐
5Pest Live Chat suite green on CIEng☐
6Playwright test:e2e:live-chat green on CIQA☐
7Staging third-party Origin: visitor send + agent reply without 500QA☐

Staging smoke (human) ​

  1. Marketplace: workspace with Live Chat 1.5.1 entitled; widget Active
  2. From a foreign Origin (or Diligent Creators staging): open widget → send message → expect 201, no "Server Error" alert; Retry banner only on real failures; double-click send does not duplicate
  3. Stop Reverb briefly (staging only) → send still succeeds; typing may stall; restore Reverb
  4. Agent desk: reply appears; empty compose disabled; internal Note visible in desk, absent from public poll
  5. Type in visitor composer → agent sees typing; type in desk → visitor sees “is typing…” when realtime connected
  6. Desk composer / → canned filter chips; insert body
  7. Claim / close / reopen; search by visitor name
  8. Optional: require prechat → session without name/email → 422
  9. Confirm Settings embed snippet contains live-chat.js?v=1.5.1

Rollback ​

LayerAction
FrontendRedeploy previous SPA
Backend codeRedeploy previous release; keep additive catalog migrations
ModuleMarketplace cancel / deactivate widgets (existing path)
SchemaNo schema rollback — catalog bump only

Monitoring ​

  • Public + tenant POST …/messages 5xx rate (should drop vs pre-1.5.0)
  • Structured logs: live-chat.side-effect-failed, integrations.forward-failed
  • report() / Nightwatch events mentioning LiveChatMessageSentBroadcast / Reverb connection errors
  • Throttle denials on live-chat-widget / live-chat-widget-session
  • Typing endpoint 401/403/404 vs volume

Sign-off ​

RoleNameDateDecision
Eng☐ Ready
QA☐ Ready
Ops☐ Ready

Release decision: Go — ship companions after CI green; migrate to catalog 1.5.1 and redeploy API widget script before relying on production embeds (diligentcreators.com and peers).

Official documentation for the EloSync SaaS Platform.