Commit Graph
3761 Commits
Author SHA1 Message Date
OrcaWinandOrcaWin f70465cf3a test: remove low-value renderer adapter and projection checks (#41462)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 00:42:28 -08:00
OrcaWinandOrcaWin dac6392709 test: remove low-value CLI, shortcut, and relay checks (#41452)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 00:26:04 -08:00
Neil fb58871bdb refactor(claude): group root modules by defining owners (#41437) 2026-11-12 00:20:10 -08:00
OrcaWinandOrcaWin 9ee5ec9fa0 test: remove low-value account wrapper and routing checks (#41447)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-12 00:04:18 -08:00
Wooseong KimandKelvin Amoaba b4ca378c61 fix(agent-hooks): keep the Claude session model on hook status (#41058)
* fix(agent-hooks): keep the Claude session model on later hook status

SessionStart reports the model, but the Claude handler dropped it, so the
mobile composer chip stayed on "Model". Publish that model and retain it
when later lead and child events omit it.

* fix(agent-hooks): keep the Claude model across an Orca restart

Claude reports its model only on SessionStart. After a restart the listener's
lead state is empty, so the next hook dropped the saved model from the row.

* test: run the Claude model restart test in the node pool

* fix(agent-hooks): keep the Claude model when a terminal status row lands first

* refactor(agent-hooks): read the Claude lead model once to keep claude-events under the line limit

---------

Co-authored-by: Kelvin Amoaba <97001695+AmoabaKelvin@users.noreply.github.com>
2026-11-12 07:48:50 +00:00
OrcaWinandOrcaWin b4d87ff410 test: remove low-value worker and model inventory cases (#41439)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 23:47:13 -08:00
OrcaWinandOrcaWin 4dcf689fb2 test: remove low-value mobile and host policy suites (#41436)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 23:25:07 -08:00
OrcaWinandOrcaWin 0a0f8d5a9f test: remove low-value approval and cloud push suites (#41420)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 23:00:12 -08:00
Jinwoo Hong 4d50c440be perf(orchestration): read released worker output from its original instead of a saved copy (#41374)
* perf(orchestration): read released worker output from its original instead of a saved copy

* fix(orchestration): keep refusal codes on released chat reads and locate legacy remote transcripts

* test(orchestration): prune flaky-pattern baseline for removed archive tests; guard a cursor read

* fix(orchestration): keep locator fields when stripping copies; never let the optional receipt page block remote release

* test(orchestration): drop removed archive tests from the node-runtime test list

* refactor(orchestration): drop the background strip; old rows keep their saved copy and its reader

* fix(orchestration): give reference rows the empty copy fields older Orca reads, with a note

* test(orchestration): give the slow-exit release mock a stored archive body

* fix(orchestration): record a transcript reference only for agents the reader can open
2026-11-12 01:45:22 -05:00
Neil 176943e8fe refactor(mobile-tasks): group modules by concrete feature owners (#41410)
* refactor(mobile-tasks): group modules by concrete feature owners

* refactor(mobile-tasks): consolidate concrete owner imports

* refactor(mobile-tasks): point recording loaders at concrete owners
2026-11-11 22:40:18 -08:00
OrcaWinandOrcaWin affd908567 test: remove narrow parser, policy, and native projection tests (#41407)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 22:30:38 -08:00
HrithikandHrithik Saini 1b940ba30a fix(i18n): improve Korean translations for Undo, Quit, and Stop (#37042)
- auto.components.activity.clearCompleted.undo: '끄르다' -> '실행 취소'
- rendererRecovery.quit: '그만두다' -> '종료'
- components.native-chat.backgroundTasks.stop: '멈추다' -> '중지'
- auto.components.settings.terminal.search.stop: '멈추다' -> '중지'
- Add key overrides to locale-ko-key-overrides.json

Fixes #37042

Adapted from https://github.com/stablyai/orca/pull/37078 by @hrithiksaini99.
Reported and wording proposed by @Tomk2d in #37042.

Co-authored-by: Hrithik Saini <49943287+hrithiksaini99@users.noreply.github.com>
2026-11-11 22:17:09 -08:00
NeilandClaude e7d25df3ed feat(wsl): turn WSL hosts on by default (flag-on; owner decides) (#36501)
* feat(wsl): turn WSL hosts on by default; ORCA_INTERNAL_WSL_HOSTS=0, false, off or no turns them off

Co-Authored-By: Claude <noreply@anthropic.com>

* fix(wsl): review follow-ups for WSL hosts on by default

- Off words also match when quoted (cmd.exe's set NAME="0" keeps the quotes).
- The refusal now says WSL hosts are turned off for this launch, not missing from the build.
- New preload test pins when the renderer gets the WSL hosts API.
- Unit tests no longer inherit the gate state an Orca terminal publishes.

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-11-11 22:03:29 -08:00
Neil 46b225e473 chore(links): point website, docs and download links at orca.dev (#41376)
The site now lives at orca.dev; the old onorca.dev and www.onorca.dev hosts
redirect there. Linking to orca.dev directly skips that redirect.

Only page links change. Service hosts, sign-in and relay endpoints stay as they are.
2026-11-11 21:50:37 -08:00
Neil b9e3912ff8 Call orca.dev for feedback, plugin lists and update notes; accept orca.dev share and download links (#41380)
* chore(endpoints): call orca.dev for feedback, plugin lists and update notes

The site moved to orca.dev. Feedback, connection diagnostics, plugin install
stats, the plugin kill list, update nudges and the changelog feed now use
orca.dev, as do the diagnostics token URL baked into builds and the release
download mirror (downloads.orca.dev). The old hosts serve the same paths,
so released builds keep working.

Skill share links on share.orca.dev are accepted, and the mobile scanner
recognizes the orca.dev Android download code. The old hosts stay accepted.

* chore(ci): leave the release JavaScript benchmark workflow unchanged

Editing it triggers the benchmark, whose parity check currently fails on
arm64 because max-quality brotli output for the mobile page differs by
architecture. The benchmark only needs some diagnostics URL, and the old
host still serves it.
2026-11-11 21:50:31 -08:00
Neil a919371cee refactor(codex-accounts): organize concrete domain owners (#41388)
* refactor(codex-accounts): organize concrete domain owners

* test(codex-accounts): retire vacuous account selection case
2026-11-11 21:49:43 -08:00
OrcaWinandOrcaWin 86f23bbb6b test: remove low-value policy and parser samples (#41397)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 21:35:14 -08:00
OrcaWinandOrcaWin 9a04aa89ef test: remove 56 low-value presentation, CLI, and reload tests (#41389)
* test: remove presentation and command-selection inventories

* test: remove CLI and display projection inventories

* test: remove browser reload projection suite

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 21:08:44 -08:00
Neil e902c9a65b refactor(workspace-layout): organize concrete domain owners (#41350)
* refactor(workspace-layout): organize concrete domain owners

* test(layout): retire obsolete legacy-leaf publication setup
2026-11-11 20:54:34 -08:00
OrcaWinandOrcaWin bbe22681c2 test: remove notification, icon and native policy inventories (#41375)
* test: remove notification and native policy inventories

* test: remove icon projection samples and tray suite

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 20:54:07 -08:00
OrcaWinandOrcaWin bedb2bbaf1 test: remove low-value journal, input and capture examples (#41368)
* test: remove low-value journal and smart-key samples

* test: remove low-value journal, input and capture examples

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 20:32:02 -08:00
OrcaWinandOrcaWin 2d0f453776 test: remove low-value skill, host, and WSL suites (#41358)
* test: remove low-value skill and host-environment suites

* test: remove WSL notice and status mapping samples

* test: record WSL example coverage retired from broad gates

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 20:04:37 -08:00
Jinjing b80ac94ba4 fix(runtime): hold tui-idle until a cold-starting Claude has painted (STA-2380) (#40539)
* fix(runtime): hold tui-idle until a cold-starting Claude has painted (STA-2380)

A shell auto-title (oh-my-zsh preexec) names the pane `claude` the moment
the command execs. Claude's `idle_title` rule counts that bare name as weak
idle once output has been quiet for 3s, so a Claude that took >3s to draw
its first frame settled `terminal wait --for tui-idle` on a blank screen.
`dispatch --inject` then pasted into a TUI that had not mounted yet and the
prompt was lost.

Name-only idle lanes (agent rule verdicts that require quiet, and the
sustained-title lane) now also require that the running command has painted
something since the shell's OSC 133;C command-start marker. Shells without
the marker keep today's behavior.

* fix(runtime): corroborate Claude's name-only idle with its own composer marker (STA-2380, C1 F1)

Orca's zsh OSC 133;C hook is first in preexec_functions, so a later user or
framework preexec hook (zsh-you-should-use, a custom echo) prints after the
command-start marker and before Claude runs. The any-visible-byte paint latch
counted that text as Claude's paint, so a silent cold start under such a hook
still settled tui-idle ready-weak on the shell's bare `claude` title.

For agents whose worker start already trusts their composer marker (Claude),
"painted" now means that marker (`❯`+NBSP after DECSET 2031, which no shell
sends) arrived since the command started. Other agents keep any-byte paint;
markerless shells and output gaps keep the permissive default.

Evidence: a real-zsh live-shell test under the production wrapper with
oh-my-zsh title-only, p10k/starship-style silent, and you-should-use-style
printing hooks, replayed through the real wait; runtime tests for the hook
text, a boot banner, the positive bare-title + composer path, and worker-start
readiness plus brief delivery timing.

* fix(ci): route command-paint attribution sources to shell_contracts; attribute live-shell bytes by stream offset (STA-2380, C2 F1/F2)

- pr-shell-contract-prefixes: the live-shell test, terminal-command-paint.ts,
  tui-idle-evidence-source.ts and draft-paste-ready-scanner.ts route to the
  shell_contracts job; a routing test reads the job's step from pr.yml and
  asserts every listed test routes there.
- tui-idle-zsh-preexec-hook-order.live-shell.test: locate the DECSET 2031
  anchor by offset in the accumulated stream, split a straddling read, carry
  pending escapes across the shell/agent halves, and assert attribution is
  invariant under coalescing and 3-byte re-chunking.
- terminal-command-paint: disclose the accepted trade-off (a known Claude with
  marker history but no supported composer signal times out; markerless shells
  and output gaps still fail open; no version cutoff claimed).

* test(ci): stream-offset launch-order proof, route tui-idle-evidence.ts, parse the whole shell-contracts step (STA-2380, C3-1/2/3)

- live-shell test: assert the launch order on the joined bytes by stream
  offset (133;C, then the user hook's output, then the agent's anchor and
  composer); no read-boundary or timestamp assertions remain. Re-chunk
  cases add a split anchor and a shell-tail/agent-start coalesced read.
- pr-shell-contract-prefixes: route tui-idle-evidence.ts, the readiness
  evaluator the live-shell replay exercises.
- routing ratchet: read the step's run script through the YAML parser so
  a blank line or later command cannot truncate it; cross-check against
  the real-shell tests UNIT_EXCLUDE drops so a dropped entry fails rather
  than a smaller count; fixture tests for blank line, exact list, missing
  step.

* test(ci): answer compinit's insecure-directory prompt in the zsh preexec live-shell test (STA-2380)

Ubuntu's global zshrc runs a plain compinit, which on CI runners stops at
"Ignore insecure directories and continue [y] or abort compinit [n]?"
before zle exists, so the stand-in never launched and the shell-contracts
job failed with "no composer frame from the stand-in". Answer the prompt
with y as zsh-startup-hook-pty-harness.ts does. The prompt bytes precede
Orca's OSC 133;C marker, so stream-offset attribution is unchanged.
2026-11-11 19:57:53 -08:00
Brennan Benson 79cf868097 Capture executing stacks and machine state for hangs (#41027)
* Preserve bounded diagnostics for main-thread stalls and observer gaps

* Use a typed file-read fault injection in watchdog coverage

* Record reviewed incident-only watchdog file operations

* Clarify watchdog snapshot types and validated parser conversions

* Place validated object assertion rationale at its conversion

* Capture executing stacks after main and renderer hangs

* Preserve hang capture progress through late cleanup and reporting

* Publish renderer hang baseline before collecting stacks

* Service capture cleanup in packaged watchdog smoke

* Release native capture after dependency load failure
2026-11-11 19:48:48 -08:00
Brennan Benson 3f84308ec1 Revert orca chat list/read/send/wait (#40836) and its perf repair (#41129) (#41241)
* Revert "Make chat wait check the chat's work state instead of reading its history every second (#41129)"

This reverts commit 9a10464bec.

* Revert "feat(cli): read, message and wait on agent chats with orca chat list/read/send/wait (#40836)"

This reverts commit c2e6ebbf0b.
2026-11-11 19:36:32 -08:00
OrcaWinandOrcaWin 333febd77b test: remove narrow mobile, provider, and utility suites (#41342)
* test: remove low-value mobile classification and wiring cases

* test: remove narrow provider identity and utility suites

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 19:22:20 -08:00
OrcaWinandOrcaWin 1cc94fdfd6 test: remove low-value workspace and launch suites (#41336)
* test: remove low-value workspace and launch coverage

* test: prune removed orphan cleanup timer baseline

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 19:03:54 -08:00
OrcaWinandOrcaWin 6f2e3bde15 test: remove low-value GitHub and launch-default coverage (#41326)
* test: remove low-value GitHub client projections and inventories

* test: remove launch default projection suites

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 18:20:23 -08:00
OrcaWinandOrcaWin e58bf50c78 test: remove query-plan and eligibility test noise (#41323)
* test: remove internal query-plan assertions

* test: remove startup sweep plan-only suite and mailbox plan observer

* test: remove terminal link grant metadata suite

* test: trim hosted review eligibility projections and probe inventories

* test: keep peer reply selection without query plan assertions

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 18:08:58 -08:00
Neil a0f1cb0ee2 refactor(git): group root modules by concrete domain owners (#41322)
* refactor(git): group root modules by concrete domain owners

* chore(git): reconcile retired-test metadata with owner cleanup
2026-11-11 18:02:15 -08:00
OrcaWinandOrcaWin 252cfa3efd test: remove 34 low-value tests, including five whole suites (#41321)
* test: remove low-value startup and usage suites

* test: drop redundant form driver and lease recipes

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 17:40:04 -08:00
Neil 04158606b5 refactor(git): group command execution by concrete owners (#41316) 2026-11-11 17:05:03 -08:00
Brennan Benson 175f10e32b Run local usage services in a supervised backend process (#40792)
* Move local usage services into a supervised backend process

* Own usage recovery and worker retirement lifetimes

* Preserve answered usage data during background refresh

* Run independent usage scans concurrently in the backend

* Limit backend startup paths to the delegated usage service

* Show usage failures through backend recovery

* Include usage failure strings in the English catalog

* Keep usage update details beside refresh failures

* Resolve usage freshness failure from the final producer snapshot

* Retain the forced refresh completion requirement

* Keep managed backend failures out of application crash reports

* Preserve usage recovery boundaries across backend reconnects

* Match the backend RPC cancellation signal in the usage seam proof

* Avoid serializing backend requests before port delivery

* Keep receiving request validation in the boundary schemas

* test: align usage transport coverage with renderer project

* fix: preserve unknown usage state and renderer retirement

* fix(usage): revalidate tracking before scan admission

* fix(usage): retry failed backend startup on demand

* test(usage): isolate stale backend ownership checks
2026-11-11 16:39:52 -08:00
Brennan Benson 890ad4d8aa Prevent new blocking work on Electron main in CI (#41263)
* WIP: guard blocking main-process APIs with file ratchets

* Cover declared SQLite receivers and preserve daemon guards

* Cover SQL iteration and shared synchronous IPC in ratchets
2026-11-11 16:24:55 -08:00
Brennan Benson 7a44471331 fix(native-chat): hold an automatic continue until the chat's account has usage again (#40412)
* fix(native-chat): hold an automatic continue until the chat's account has usage again

The automatic continue after a usage limit sent at the cut's reported reset
without looking at the account, so it could send into a still-spent weekly
window. Each sweep pass now attributes the chat's launch account (the host's
launchAccountHome) to Orca's polled reading taken in that same home, and holds
the send until the latest spent window's reset (+15 s). The hold is derived
each pass, never saved, only grows for one cut and account, and waits up to two
minutes for a reading taken since that reset before falling back to the reset
it has. A spent window with no known reset stops the automatic continue for that
cut; on System Default, where Orca can't tell which login a reading saw, a fresh
reading with room releases both. Rows on desktop and phone show the held time
through an optional continueAt; older clients keep the cut's time.

* fix(native-chat): attribute usage holds once per account and retire them with their scope

- C1/X7: launch home resolved once per provider and reading once per (provider, home) per pass; narrow usageReading accessor replaces getState().
- X8: forget() drops the hold; hidden-chat caches are pruned while the setting is off; readState stores nothing for an unattributed chat.
- X3/C3: launch and reading homes compared in canonical form (~, dot segments, async realpath, bounded cache).
- X4/C2: a hold belongs to its scope (canonical home + billing kind) and retires when it changes.
- X2: a launch whose provider has no reading yet asks once and waits within the two-minute window.
- X5: attribution runs before the overdue check, so a restart keeps the account's later reset.
- X6: the launch account is re-attributed right before each send; beforeRun refuses a changed attribution.
- C5: cold chats publish when their continue time moves.
- X1/C4: WSL launches keep the cut's own reset (no hold).

* fix(native-chat): gate held continues on an account scope token and stop reviving stale cuts

- C6: a hold extends only with a spent window that had begun by the cut's reset.
- X6-R2, X10, P1-1: a synchronous account scope token (selection, launch env, reading home and
  provenance) is captured at attribution; send() re-resolves only when it moved, memoized per
  token, and beforeRun compares live and captured tokens. Opening a chat drops only cold-cut caches.
- X11: production tick() test at N=300 and 10N=3000 counts resolver and reader calls.
- X2-R2: the bootstrap wait starts when a pass first sees the due send without a reading.
- X9: canonical homes are resolved once per account per pass; the unbounded-lifetime cache is gone.
- C5-R2: unloaded chats have no status push path, so the cold continueAt publication is removed.

* fix(native-chat): separate continue eligibility from current spending and bind sends to their attribution's sources

- X12: a cut's eligible anchor (its reset, an established hold, or a covering window) takes the
  24 h overdue test; once eligible, every currently spent window holds the send.
- X13/P1-2, X6-R3: the account owner returns attributions with a synchronous source witness
  (settings snapshot identity, cached login-shell capture revision, reading-source identity);
  Claude billing comes from the launch's own env composition. A result whose sources moved while
  it resolved is discarded; send() and beforeRun bind to the attribution's own witness and
  supersede without spending an attempt.
- CI-1: the scope-token type assertion is gone with the token.

* fix(native-chat): keep a covering hold beside spent windows of unknown reset

- X12-R4 / C7: rebuilding the covering anchor skips spent windows whose reset, and so start, is
  unknown; the eligible branch still refuses on them.
- E1-R4: the preparation-change and suspended-attribution race tests run on a Claude chat
  through the real host send, mutation and accepted settlement.

* refactor(native-chat): move the usage-limit continue status into its own wire module

The merge with main put agent-session-wire.ts one line over the 300-line limit.

* fix(native-chat): read the shell capture revision lazily so module mocks without it still load

Tests that main added mock login-shell-environment without the revision accessor, so binding it at module load failed.

* fix(native-chat): release a usage hold on fresh room for any account without stranding the cut

- QA-1: room in a fresh attributed reading newer than the last spent evidence (spentSeenAt)
  releases the hold and clears an unknown reset for every account; the System Default-only
  branch and identityKnown are gone.
- QA-1b: the release pulls heldUntil down to that reading instead of clearing it, and an
  unknown-reset hold anchors on its last evidence, so a release over a day after the cut sends.

* fix(native-chat): release an expired usage hold from its room reading and ask for readings while a reset is unknown

- R6-1 / QA-1b-R6: a release sets heldUntil to the room reading itself, so an expired finite
  hold followed by an unknown reset no longer strands the cut.
- R6-2: the usage poller idles while Orca is unfocused with no viewer, so an unknown reset asks
  for a non-forced reading at most every 10 minutes through the existing refresh.

* fix(native-chat): bound unknown-reset readings per account and honor the failure backoff

- R7-1 / X-R7-1: the rate-limit service owns the automatic-read cadence: a read waits while the
  provider's last reading or admitted automatic read is within the asked interval, so held chats
  on one account cause at most one unknown-reset read per 10 minutes.
- R7-2: automatic reads wait out the poller's failure backoff (shared failureRetryDue) and start
  its clock; forced refreshes are unchanged.

* fix(rate-limits): scope automatic usage-read admission to the selected account

- R8-1 / X-R8-1: an admitted automatic read counts toward the cadence only for the account whose
  reading source the service held then, so a switch never lets one account's read delay another's.
- Prunes the flaky-test-pattern baseline: service-refresh-orchestration no longer reads the wall clock.

* fix(native-chat): keep a usage-reading request retryable until the service starts it, and show the last known reset while one is unknown

* fix(native-chat): show no automatic continue while a chat waits on an unknown reset, since fresh room still releases it

* fix(native-chat): publish no continue time for a cancelled or stopped cut while its account's reset is unknown
2026-11-11 16:18:47 -08:00
OrcaWinandOrcaWin 4509730131 test: remove repeated wiring and suspended orchestration suites (#41302)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 16:16:48 -08:00
Kelvin Amoaba d9d3dfdd08 fix(emulator): make iPhone Duo fold work in release builds and show serve-sim's real error (#41051)
* fix(emulator): let iPhone Duo fold in release builds

Release signing gave serve-sim's in-simulator helpers the hardened runtime,
which drops the DYLD_ROOT_PATH that simctl spawn hands them, so the Duo HID
and accessibility helpers aborted at launch. Sign just those two with only
allow-dyld-environment-variables.

serve-sim's uncaught errors print its minified source, which contains the
"No serve-sim server running" text, so every crash was reported as no active
emulator. Report the thrown error line instead.

Fixes #40509

* fix(emulator): keep multi-line serve-sim error messages

* refactor(emulator): simplify serve-sim failure message parsing
2026-11-12 00:10:11 +00:00
Neil 22c7097240 refactor(mobile): organize browser stream, input and pane modules (#41300)
* refactor(mobile): group browser streams, interactions and pane owners

* refactor(mobile): use named browser module type imports
2026-11-11 16:06:30 -08:00
OrcaWinandOrcaWin c2e716dbbb test: remove 17 low-value wrapper and private-state suites (#41292)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 15:51:03 -08:00
NeilandKelvin Amoaba 5d61e00c6d build(mobile): upgrade to Expo SDK 58 and React Native 0.88 (#37935)
* build(mobile): upgrade to Expo SDK 58 and React Native 0.88

Expo 58 drops Zod from @expo/cli, which clears the last Zod 3 advisory
(GHSA-mrhx-c7xc-m3w5) in mobile along with its local patch and override.

- Expo 55 -> 58, React Native 0.83 -> 0.88, React 19.3, gesture-handler 3,
  webview 14, reanimated 4.7, worklets 0.13 (SDK 58 bundled versions,
  pinned below today's batch to respect minimumReleaseAge).
- Port the react-native and react-native-webview patches unchanged; drop
  expo-constants, expo-notifications, @expo/cli, expo-router, zod and
  query-string patches plus the zod/query-string/xcode>uuid overrides,
  which upstream fixed or no longer need.
- iOS minimum rises to 16.4 (Expo 58 / RN 0.88 requirement).
- Migrate to RN 0.88 strict types: instance ref types, NamedStyles,
  AppState.currentState, list header/footer nulls.
- Replace removed runtime APIs: InteractionManager -> idle callback with a
  macrotask fallback; StyleSheet.absoluteFillObject -> absoluteFill;
  FileHandle.readBytes -> readBytesSync (it became async).
- Resolve react-native/asset-registry for shared assets in Metro and alias
  the old registry path for react-native-svg in the desktop mobile-web bundle.
- Reduce the iOS scene plugin to the reconnect override; Expo 58's template
  now ships the scene delegate itself.

* fix(mobile): bridge react-native-svg web imports and libsodium runtime for RN 0.88

- Share react-native-svg web shims between the mobile-web build and its render
  checks: map the old asset-registry path to react-native-web's registry and stub
  the Android-only touch-sound TurboModule.
- Patch react-native-libsodium 1.7.0 to read the JSI runtime from the bridge proxy;
  RN 0.88 removed RCTCxxBridge.runtime.

* fix(mobile): use Expo 58's legacy promise resolver for audio permissions

* fix(mobile): skip null handles in the RPC recording timer shims for RN 0.88 types

* style(mobile): format MobilePRSidebar after rebase

* fix(mobile): name RN 0.88 text input refs for declarations; allow queued back in stack render check

- Type text input refs with an exported interface so declaration emit can name hook results
  (RN 0.88 aliases TextInputInstance to an unexported class).
- Expo Router 58 drains back() after a commit; check the interrupted push's exit from the
  frame it starts, bounded to three frames of lag.

* chore(mobile): justify the text input handle interface for React Doctor

* chore(mobile): use a nameable intersection alias for text input refs

* fix(mobile): use sync expo-file-system writes, copies and moves on Expo 58

Expo 58 made File.write/copy/move and FileHandle.writeBytes return promises.
Our callers never awaited them, so failures escaped their try/catch and the
store's tmp-then-move and PDF writes could race their close or rename.

* build(mobile): raise the page bundle budget to 10 MiB for Expo 58

Expo 58 adds about 310 KB to the page: expo-router (+258 KB, now carrying
React Navigation, net about +110 KB) and Reanimated 4.7 (+152 KB). Main had
85 KB of headroom left. 10 MiB still stays within the 10 MiB per-asset contract.

* fix(mobile): drop the window-metrics seed RN 0.88 removed from Android

RN 0.88 no longer holds window metrics: DeviceInfoModule reads the activity's
WindowMetrics on demand and setWindowDisplayMetrics is gone, so MainActivity
no longer compiled. Layout scale still comes from the screen metrics we reseed.

---------

Co-authored-by: Kelvin Amoaba <97001695+AmoabaKelvin@users.noreply.github.com>
2026-11-11 23:30:02 +00:00
Kelvin Amoaba cab41b4075 fix(browser): tell agents when a page waits on a passkey, and let them cancel it (#41048) 2026-11-11 23:27:38 +00:00
Neil 16552ad983 refactor(plugins): organize panel and worker modules by concrete owners (#41277)
* refactor(plugins): group panel and worker modules by owner

* chore(tests): prune retired plugin supervision timeout allowance

* refactor(plugins): consolidate duplicate owner imports
2026-11-11 15:23:33 -08:00
OrcaWinandOrcaWin ce08e6b25e test: remove low-value CLI, mobile, and clipboard cases (#41273)
* test: remove low-value CLI, mobile, and clipboard cases

* test: trim unused keyboard synthesis fakes

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 15:16:34 -08:00
Neilandoutof-place 7c38e53284 test: keep real git and shell test fixtures off developer config (#41278)
Disable commit/tag GPG signing via a cached wrapper GIT_CONFIG_GLOBAL when
the developer's global gitconfig enables signing, clear inherited GIT_CONFIG_GLOBAL
in GitBinaryTestFixture, strip inherited TERM_PROGRAM* in Vitest setup, and
run ssh-posix-command-wrapper shell checks against an empty HOME/ZDOTDIR/XDG_CONFIG_HOME.

Fixes #27210

Co-authored-by: outof-place <contact@outofplace.space>
2026-11-11 15:03:49 -08:00
OrcaWinandOrcaWin a9a0e8cd21 test: remove shallow catalog, browser and launch checks (#41258)
* test: remove routine native and catalog suites

* test: remove shallow browser, bridge and CLI checks

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 14:44:15 -08:00
Neil 057f5772e9 refactor(mobile): group terminal document modules by domain (#41267) 2026-11-11 14:39:46 -08:00
Neil a44b496f28 refactor(watchers): group filesystem process modules by owner (#41265)
* refactor(watchers): group process modules by concrete owners

* refactor(watchers): consolidate direct limit imports
2026-11-11 14:27:28 -08:00
OrcaWinandOrcaWin b1106ba883 test: remove low-value suites, recorder snapshots, and repeated inputs (#41244)
* test: remove weak recorder scenarios and arithmetic suites

* test: remove low-value boundary suites and recorder cases

* test: remove mock suites and trim repetitive boundary inputs

* test: remove shallow provider and browser checks

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-11-11 14:14:48 -08:00
Neil 1708f1caee refactor(claude-accounts): organize sign-in and profile owners (#41222) 2026-11-11 13:47:58 -08:00
Brennan BensonandRenato Pires ed31974c2d fix: warn before closing a window with a busy native chat (#40953)
* fix: warn before closing a window with a busy chat

Co-authored-by: Renato Pires <contact@raydev.ca>

* test: cover missing chat status and child-only observations

* fix: synchronize the shared close-warning translation keys

---------

Co-authored-by: Renato Pires <contact@raydev.ca>
2026-11-11 13:30:07 -08:00