`hs-on` now wraps each event handler in a `guard` that catches thrown
exceptions and re-dispatches them as an `exception` DOM event on the
same target with `{error: e}` as detail. The `on exception(error)`
handler, registered the same way, receives the event and destructures
`error` from the detail. Wrapping skips `exception`/`error` event
handlers to avoid infinite loops — those bubble out as before.
Suite hs-upstream-throw: 5/7 → 7/7. Smoke 0-195: 162/195 unchanged.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>