“It stopped working” is difficult to act on after a session ends. Full chat capture would provide context but creates a privacy cost that is not justified for routine JavaScript failures.
The diagnostic path records named events such as script load failures, empty visible replies, and service-worker registration failures. Browser family, endpoint class, and resource metadata are reduced or sanitized before export.
What was actually going wrong
Console-only errors vanished with the tab, while unrestricted logs risked collecting user content.
What I tried
- Asking users to keep developer tools open
- Logging entire request and response bodies
- Grouping every failure under a generic chat error
Structured error types, allowlisted metadata, and a sanitized session export preserve technical evidence without copying conversations.
Why it worked
Stable categories can be counted across sessions while privacy-sensitive text is unnecessary for most root causes.
Useful observability records state transitions, not everything a user said.
Where EACI uses this today
Main diagnostics distinguish blank replies, stream failures, scripts, avatars, and platform issues.
This journal covers real engineering on EACI Companion / The Veil. Companions include Caelum, Chad, Natalia, Atreus, Luna, Roxy, and Cael. Journal articles stay family-safe in content. See Privacy and Ethics.