# Mobile performance audit: four additional fixes

These four PRs build on the four earlier performance fixes already merged into the V2 branch. The target is mobile responsiveness; this is not a V1-versus-V2 benchmark.

| Change | Evidence |
| --- | --- |
| Connection subscriptions | 20 hydration transitions: broad workspace notifications 20, connection-only notifications 0. Offline, reconnect, error, enable/disable, label and endpoint changes still propagate. |
| Thread-list config projection | Five captured provider frames: four config notifications remain, list notifications 4 → 0 in Hermes. Full freshness, model and workspace data still reaches other consumers. |
| Existing-thread model options | Captured catalog: 670 model options → 6 for the selected provider. Hermes median construction/grouping 2.188 → 0.00846 ms, p95 2.734 → 0.00854 ms. Visible selected-provider output and full New Task output match the original implementation. |
| Shell summary | Actual old/new atom factories, 761 threads and 60 timestamp updates: summary notifications 60 → 0. Hermes median update 0.344 → 0.00383 ms, p95 0.725 → 0.00392 ms. Availability, cached/synchronizing/live status, errors and enabled environment membership still update. |

## Method and limits

Hermes measurements used the iPhone 16 Pro simulator on iOS 18.6 with eager production JavaScript (`dev=false`, `lazy=false`) inside the compatible Debug development client. Timings measure the named operation, not end-to-end opening latency or native frame rate. The model and shell probes use ten warmup updates followed by fifty timed updates. Parsing and fixture construction are outside the timed operations. List replay runs three repetitions per variant; it measures downstream notification suppression, not a reduction in schema decoding cost. Connection isolation is a focused AtomRegistry regression test.

Large provider messages still need parsing and schema validation. The list selector deliberately does not hide freshness changes from Settings or the composer. The targeted improvements do not establish performance on a physical phone or claim that all sources of latency have been removed.

## Integrated verification

The primary agent tested the combined changes in one simulator against the existing authorized environments. Home retained its populated list after relaunch. A populated thread opened and scrolled. Its model settings showed only its provider, refreshed successfully, and retained the selected model and reasoning options. No message was sent and no model setting was changed. A temporary input character used to focus the composer was removed. The New Task project chooser also opened; full New Task catalog equivalence was verified in the probe and regression tests.

Focused tests cover connection projections and route hydration, list capabilities/provider presentation, model fallback/options behavior, and shell lifecycle notifications. Mobile and client-runtime typechecks pass. Targeted lint reports only existing React/compiler warnings in large components and an existing accumulating-spread warning. React Doctor reports five existing component-complexity warnings and no errors. Temporary probes were removed. The preexisting lockfile change was preserved.

Web/desktop UI and wire contracts are unchanged. The shared shell summary is consumed only by mobile in this repository. Capability-based behavior continues to support older servers, and no server deployment or native binary change is required by these patches.

Implemented with GPT-6 in Codex.
