Mobile WebKit can resize the visual viewport around the keyboard, delay media readiness, or leave controls in a stale state after backgrounding. Those failures are intermittent and easy to “fix” with a timer that causes new bugs everywhere else.
The compatibility engine probes capabilities and observes targeted attributes. Healing runs when a known invariant breaks, not merely because the browser family matches.
What was actually going wrong
Broad browser detection and permanent polling risked treating every WebKit session as broken.
What I tried
- Resetting the entire chat layout on every resize
- Running a fast interval that rewrote input attributes
- Disabling features solely from the user-agent string
Capability checks, narrow observers, and idempotent repairs target actual broken states.
Why it worked
The repair condition is evidence from the page, while platform detection only informs the strategy.
Compatibility code should prove a symptom before it heals one.
Where EACI uses this today
Main chat applies mobile fixes without changing healthy desktop or mobile sessions.
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.