Validation: #42 Turbo Streams Live Delivery + Solid Cable

validation-42-2026-07-17 Doc

validation pass

Ticket

Board item: #1818 on board-iss. PR #66 (squash merge).

Environment

Prod cluster (k3s), namespace intelligentstaffingsystems, verified via kubectl and curl.

Checks

# Criterion How to Verify Result Evidence
1 Turbo Streams broadcasting wired Code review on main PASS <code>broadcasts_to :lead</code> in Message model; <code>turbo_stream_from @lead</code> in thread view
2 Solid Cable configured Code review on main PASS production adapter is solid_cable; migration at db/cable_migrate/; cable: database in database.yml
3 Stimulus controllers present Code review on main PASS messages-thread (auto-scroll, broadcast alignment) and messages-form (textarea resize, Enter-to-send)
4 JS foundation bootstrapped Code review on main PASS importmap-rails configured; application.js imports turbo-rails and controllers
5 Security: opaque_sub Code review on main PASS Raw Keycloak subs never exposed in DOM; hashed via opaque_sub helper
6 Docs updated Code review on main PASS docs/messaging.md has live delivery architecture section
7 App deployed and running <code>kubectl get deployment -n intelligentstaffingsystems</code> PASS Pod running with image <code>harbor.tail5b443a.ts.net/intelligentstaffingsystems/app:93b9a79...</code> which includes PR #66
8 Site accessible <code>curl -s -o /dev/null -w '%{http_code}' https://intelligentstaffingsystems.ai/login</code> PASS HTTP 200

Verdict

PASS — all checks green. 18 files verified on main, deployed to production, site accessible.

Known Issue

Two test assertions compare raw Keycloak subs but views render opaque hashes. Production code is correct; test assertions need updating. Masked by PG17 local test blocker (#65) and squash-merge CI push-event gap.

Discovered Issues

Test assertion fix needed (minor, non-blocking).