fix(mobile): stabilize inspector reset identity and finish hostile-throw hardening

- The inspector boundary keyed resets on the registered render callback, but
  registrants (ThreadRouteScreen) rebuild it on every active-turn update: a
  persistently crashing inspector reset, re-threw, and re-recorded on each
  update, burning through the bounded diagnostics log. Registrations now
  carry a stable content identity (thread key + inspector mode, review
  pane, files path), and the boundary resets only when that changes.
  inspectorResetKeys() encodes the rule with tests: same-owner callback
  rebuilds do not reset, content changes do.
- describeRenderError/readErrorStack now also guard the `instanceof Error`
  check itself (Symbol.hasInstance / throwing getPrototypeOf traps), with a
  Proxy test — everything on the componentDidCatch path is throw-proof.
- Diagnostics rows now key off a unique per-record id instead of
  timestamp+scope (which collided for two catches in the same millisecond)
  and without an array index.
3e01a27d8bJulius Marminge committed on 9/22/2026, 11:41:06 PMparentaeb3582
10 files changedLine totals unavailable