Commit Graph
14371 Commits
Author SHA1 Message Date
Neil 1ae73d0974 fix(cli): give the Windows user-PATH write 15 s and one retry (#36224)
On a low-spec Windows machine the first in-app "install orca command"
failed with "Windows PATH command timed out after 5000ms" and a retry
succeeded: a cold PowerShell start plus the settings-change broadcast
outran 5 s. Raise the deadline to 15 s and retry once on timeout; the
write sets PATH to a fixed value, so repeating it is safe.
2026-10-29 21:27:09 -07:00
Brennan Benson a05cb89f1e Restore OMP thinking choices for non-running models (#36158)
* fix(acp): restore thinking choices for non-running OMP models

* test: cover OMP catalog persistence and menu scaling

* test: keep OMP scaling measurements in assertions

* test: load ACP fixtures before consumer tests

* test: preserve catalog source types in persistence cases
2026-10-29 21:25:58 -07:00
Neil 6c86dec334 fix(plugins): harden security dialogs, syntax literals and display names against data plugins (#36220)
- Pin dialog and floating surfaces inside .plugin-security-chrome so a theme's --popover can't wash out trust text
- Limit auto-closing pairs and comment markers to 1-8 printable single-line characters (validate:plugin refuses; hosts drop the entry)
- Strip control, bidi and zero-width characters from plugin names, titles and listing text (validate:plugin refuses; hosts and the plugin list strip)
2026-10-29 21:23:52 -07:00
Brennan Benson 54a4f26ec8 Avoid unrelated native chat renders on agent status updates (#34596) 2026-10-29 21:16:15 -07:00
Neil e25e02593d i18n(plugins): translate the new plugin list, filter and access strings in every locale (#36215)
Covers strings added by #36100 and #35846 (category chips, install-state tabs,
access labels, the trusted-code warning, Try it) plus the plugin-pane strings
German, Portuguese, Russian, Turkish and Traditional Chinese never received.
Games, Agents and Integrations chips now read from the catalog instead of the slug.
2026-10-29 21:14:02 -07:00
Neil d6caa43719 feat(telemetry): drop the plugin_uninstalled event; install counts are cumulative (#36214) 2026-10-29 21:09:35 -07:00
Neil 65fec4617e plugins: warn before trusting non-official plugins and review access-growing updates one by one (#36218)
Non-official plugins that run code show a non-dismissable warning on their page and in the
update review; content-only plugins show nothing, language packs keep a one-line note.
Updates that grow access or move repository no longer join Update all: each gets its own
before/after review that installs and approves exactly the reviewed bytes.
2026-10-29 21:00:56 -07:00
Kelvin Amoaba 93ca82a2a7 fix(agent-status): keep the conversation id across hookless claude turns (#36208)
Claude reports slash commands like /context over OSC 7501 with no hooks, so
idle panes lost their session and mobile chat could not find it.

Fixes #36033
2026-10-30 03:36:07 +00:00
Jinjing 0ded87821d Sanitize Git remote errors before credential redaction (#36205)
* fix(git): sanitize ANSI before push error redaction and guidance

* fix(git): strip ANSI before renderer credential redaction

* Sanitize ANSI sequences before redacting remote error credentials

* Strip Git credentials without quadratic URL matching

* Preserve complex credentials when redacting remote URLs
2026-10-29 20:29:56 -07:00
Brennan Benson bf3e7ed405 Show a card in the coordinator's chat when it starts a worker (#35263)
* Snapshot agent message relations and verify task display prefixes

* Show native chat agent messages in navigable cards

* Keep agent message cards derived from canonical input and sidebar state

* test: correct agent card contracts and cover raw queue editing

* test: repair agent card runtime and operation contracts

* fix: preserve queued image previews and typed test measurements

* fix: use checked worker fixture and owned sender button typography

* fix: complete agent card fixtures and native presentation

* test: preserve queued edit exports and current authorship

* test: use namespace type imports in queued edit fixture

* Show newly started workers in native chats

* Preserve sender progress and consolidate card contracts

* Simplify sender and notice contract instrumentation

* Remove duplicate sender and notice measurement mirrors

* Use a template literal for the dispatch boundary fixture

* Correct sender and notice verification phase accounting

* Consolidate agent message tests around user contracts

* Restore folded agent message preview on focus exit

* Consolidate agent message regression coverage

* Consolidate agent message fixture data

* Fix display text test lint diagnostics

* Use conversation view type for mail test records

* Reuse active copy control in card workflow test

* Use fixed timestamp in worker start context fixture

* Count fixture array reads without reflective access

* Use a typed store in runtime state fixture

* Fix worker card fixture types and CLI transport project includes
2026-10-29 20:28:54 -07:00
Kelvin Amoaba 324f138de2 fix(browser): keep an agent on its own tab when the user picks or opens another (#36108) 2026-10-30 03:27:56 +00:00
Neil 8f2e24f893 Revert "Warn macOS 12 users about upcoming support changes" (#36209) 2026-10-29 20:26:46 -07:00
Kelvin Amoaba dc99281085 feat(source-control): resolve merge conflicts and complete merges from the phone (#36160)
* feat(source-control): resolve conflicts with one host operation shared by desktop and mobile

* feat(mobile): resolve merge conflicts and complete merges from Source Control

* test(mobile): pin Complete merge refusals and the older-desktop message

* fix(source-control): only resolve paths Git still reports as conflicted

* fix(source-control): refuse to keep a missing file and serialize conflict resolution per worktree

* fix(source-control): resolve only the exact conflicted path

* fix(source-control): match conflicted paths in Git's separator form on Windows and WSL

* fix(source-control): accept only the resolutions the live conflict offers

* fix(source-control): refuse to keep a both-modified file that is gone from disk

* feat(mobile): translate the merge conflict actions

* test(runtime): keep the mobile allowlist test under its line cap

* fix(mobile): let VoiceOver reach conflict action buttons
2026-10-30 03:18:48 +00:00
OrcaWinandOrcaWin 7679916342 test: remove low-value wrapper, copy, and theme checks (#36202)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 20:18:37 -07:00
Brennan Benson abc8850180 Choose an agent setup from the new tab menu (#34728)
* Unify dedicated agent launch choices and argument badges

* Enable action model and effort menus with argument migration

* Bound argument choice edit range processing

* Preserve independent action effort through launch and migration

* Preserve literal config arguments and explicit launch permissions

* Respect repository action argument groups and share launch controls

* Remove duplicate action launch command coverage

* Add agent setup search and controls to the new tab menu

* Show inherited choices beside picker reset options

* Keep terminal Arguments separate from shared launch choices

* Launch default agents from rows and select resolved setup values

* Keep terminal settings available while Chat defaults load

* Reuse existing launch setup controls and Arguments editor

* Unify Source Control action choices and repository overrides

* Use precise types in action choice contracts

* Consolidate action choice test imports

* Correct action choice types and integration test boundaries

* Complete prepared terminal test result contract

* Align action integration expectations with canonical choices

* Keep launch defaults authoritative and couple CLI controls

* Assert production Chat preparation runs in launch contract

* Preserve alternate Chat launches and bound picker argument derivation

* Publish committed picker priority and satisfy control contracts

* test(mobile): type the file preview retry test helpers so the test typecheck passes (#35431)

(cherry picked from commit 0774fc9373)

* fix: keep picker integration tests within compiler boundaries

* fix: revalidate completed picker defaults on reopen

* test: give exported launch fixture mocks portable signatures

* fix: keep fallback launch carriers out of action mode controls

* Preserve Fast argument badges outside dialog mode controls

* Project existing Fast carriers independently of model capabilities

* Keep setup focus during launch row pointer transitions

* Allow declared tier choices without an inherited selection

* fix: place agent setup beside the launch menu

* Commit edited action arguments before planning and launch

Reconcile deliberate raw edits once into the submitted action recipe so replacement model and effort flags reach Save and Start together. Preserve captured sources and untouched load conflicts.

* Name portable Source Control dialog fixture results

* Keep agent setup contained and preserve known argument policy

* Use checked style properties in popup geometry fixture

* Keep setup scrolling inside a plain content wrapper

* fix(agent-picker): match the setup panel to the approved layout

Flush model search and list, one settings section with label-left rows
(Effort, compact Permissions menu, Fast mode), a fixed Arguments
disclosure row with its hint, and a summary footer with Launch chat /
Launch terminal. Settled defaults with nothing chosen keep the model
list and Effort pickable. Hovering another menu row no longer closes
the open panel.

* fix(agent-picker): use primitive-owned spacing and update launch labels in tests

* fix(agent-picker): add panel labels to localization catalogs

* Keep one launch setup open and align picker spacing

* Tighten launch model rows and clarify terminal hint

* Keep keyboard focus in replacement launch setup

* fix(tab-bar): keep a long agent setup result's chevron inside the menu

* test(agent-picker): wait for outgoing focus cleanup event

* Show empty model search feedback and name setup dialog

* test: register selection catalog in launch guard fixture

* fix(agent-picker): retain setup drafts and contain Arguments

* fix(agent-picker): retain authored setup route after alternate launch

* style(agent-picker): use a ghost setup chevron with divider

* style(agent-picker): apply muted color to setup glyph

* test(agent-picker): declare retained catalog default
2026-10-29 20:17:26 -07:00
Brennan Benson 9a7f76ef28 fix(native-chat): agent message cards no longer reserve a row for the copy button (#36189)
* fix(native-chat): agent message cards no longer reserve a row for the copy button

* test(native-chat): cover compact agent message card layout
2026-10-29 20:10:26 -07:00
Brennan Benson 5cf3a8256e Let sidebar card properties hide agent model badges (#36026)
* feat(sidebar): let card properties hide agent model badges

* Disable model visibility control until preferences load

* Register model label and separate WSL test projects

* test: complete serialized WSL routing fixture

* test: align legacy row snapshots with model badge token

* refactor(sidebar): colocate compact card reveal helper
2026-10-29 20:09:57 -07:00
Neil 3bae99a2bb Warn macOS 12 users about upcoming support changes (#36182)
* feat: warn macOS 12 users about upcoming support changes

* fix: use explicit border tokens in macOS support notice

* fix: route compatibility guides through the app link setting

* fix: balance support notice columns in narrow windows

* test: include macOS notice in suppressed feature-tip history

* Simplify macOS 12 notice and isolate compatibility checks

* Clarify Apple compatibility wording in macOS notice
2026-10-29 20:08:48 -07:00
Brennan Benson ca2148a30d Settings: choose Chat or CLI in each agent's row; remove Chat → Providers (#36185)
* feat(settings): choose chat or CLI per agent in the Agents list

Each agent's open-as-chat choice lived in two places: Settings > Chat >
Providers and a Chat | CLI control under Default Agent. The choice now
lives only in each chat agent's row of Settings > Agents > Installed,
writing the same per-agent setting. Agents whose chat runs without their
CLI (a downloaded chat runtime) are listed as installed with CLI
unavailable, and the downloaded runtime and chat sign-in move into the
agent's row. Search and the install card's hint point at Agents. Shown
only while Chat UI is on, as before.

* Preserve agent choices and setup across inventory changes

* Fix settings regression test type conformity
2026-10-29 20:07:00 -07:00
Kelvin Amoaba 1ed54cf4b5 fix(mobile): restore alerts without native push (#36125)
* fix(mobile): restore alerts without native push

* test(mobile): refresh notification reply matrix
2026-10-30 03:03:19 +00:00
Kelvin Amoaba 6b937c7e5f fix(source-control): resolve delete/modify conflicts and complete merges from the panel (#35347)
* fix(source-control): resolve delete/modify conflicts and complete merges from the panel

* fix(source-control): address review findings on conflict resolution

* fix(source-control): save every view of the file before marking a conflict resolved

* fix(source-control): match unsaved conflict views by physical file only

* test(source-control): prove completeMerge refuses with a commit template set

* refactor(source-control): reuse autosave view matching and refresh only after a completed merge

* fix(source-control): drop the untranslated Complete merge fallback text

* fix(source-control): refuse Keep file when the file is gone and re-read unsaved views on retry

* fix(source-control): let Keep file stage conflicted symlinks with missing targets

* fix(source-control): run one conflict resolution per file at a time
2026-10-30 02:56:42 +00:00
Neil a17b6706f5 fix(explorer): open folder links that lead outside the project again (#36191)
* fix(explorer): open folder links that lead outside the project again

#24489 replaced in-memory path grants with declared file access, and the
explorer started refusing folder links out of the project with a toast.
fs:readDir now accepts user-named access; the explorer retries a contained
listing that main refuses only as outside the project, and files listed
that way open by absolute path so their tabs keep access after restart.

* fix(explorer): let main verify outside folder links, and list them only on a gesture

Review follow-ups:
- New project-folder-link access kind, accepted only for fs:readDir: main
  lists a folder only when the nearest project folder above it holds a
  symlink on the path, so an unregistered root's child or an arbitrary
  folder stays refused. user-file no longer lists folders.
- The explorer follows a link only on a user act or under a folder already
  listed as outside; refreshes never upgrade a contained listing.
- A link target that fails to list (EPERM, ENOENT) shows its own error.
- Open Markdown Preview opens outside rows by absolute path too.
- New/Duplicate/Rename/Delete are disabled on rows listed through an
  outside link, since writes stay inside projects.

* fix(explorer): keep keyboard edits off outside-link rows, and follow listed link rows on reveal

- Enter-to-rename and the delete binding skip rows listed through an outside
  folder link, matching the disabled context-menu items.
- A folder the parent listing shows as a symlink may follow the link without
  a click, so reveal and re-expansion after a workspace switch list it; a
  folder that only became a link stays refused until clicked.
- Pass followProjectFolderLink only when set, so existing read-call
  expectations hold.

* fix(explorer): limit folder-link listings to project roots; no rename on outside-row double-click

- Orca's floating folder is not a project, so a link there no longer
  authorizes an outside listing (direct IPC callers included).
- Double-clicking an outside-link row's name pins the preview instead of
  starting a rename main would refuse.
2026-10-29 19:48:09 -07:00
OrcaWinandOrcaWin 6be126d65f test: remove low-value copy, layout, and equivalence checks (#36192)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 19:35:42 -07:00
Brennan Benson b578e3012e fix(pi): the thinking menu before the first message matches the chat's (#34592)
* fix(pi): the thinking menu before the first message matches the chat's

Pi's pre-session catalog now asks Pi for its models over RPC and builds each
menu with the same projection a running chat uses, falling back to the text
listing only when Pi cannot answer over RPC.

* fix(pi): preserve remembered off effort on precise model lists

* test(pi): focus effort regression and stop fallback contracts

* test(pi): allow metadata reads between ordered option writes

* fix(pi): derive supported effort without replacing accepted intent

* test: cover host effort projection and refreshed frozen queues

* test: consolidate session option imports

* test: normalize absent catalog fixture records

* test: isolate host fixture types from client projects

* Preserve legacy effort capture for other agents
2026-10-29 18:59:25 -07:00
Neil 3931660639 fix(windows): start the WSL holder outside Orca's jobs so a crash doesn't take it down (#36178)
* fix(windows): start the WSL holder outside Orca's jobs so a crash doesn't take it down

* test(windows): prove the job closed with a non-breakaway control before checking the holder
2026-10-29 18:57:42 -07:00
Jinjing 8784a55f6f Leave the Plugins shortcut to focused browser pages (#36176)
* Allow plugin shortcuts in browser guest pages

* Clarify plugin shortcut availability in the UI
2026-10-29 18:56:14 -07:00
Neil 3fb6dc7301 refactor(jira): group favourite picker owners (#36157) 2026-10-29 18:29:55 -07:00
Neil 4f052ad0c3 perf(native-chat): skip WSL distro walk for host-native transcript hook paths (STA-3786) (#36152)
A host-native hook path proves the agent ran on the host, so the 5s
session-ID fallback no longer walks every running distro's roots over 9P
while the transcript is unflushed. Mirrors the existing guest-hook-path rule.
2026-10-29 18:26:04 -07:00
Brennan Benson 373f226c0a Card headings name the coordinator and worker without 'your' (#36168)
The cards are read by the user, not the agent, so 'your coordinator' read as if addressed to the agent.
2026-10-29 18:24:03 -07:00
OrcaWinandOrcaWin 523d8b14cd Preserve nested list content when leaving an empty item (#35236)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 17:59:08 -07:00
OrcaWinandOrcaWin 349f46f608 test: remove low-value catalog cases and source guard suites (#36175)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 17:51:18 -07:00
OrcaWinandOrcaWin 5058476b15 fix(editor): preserve trailing mixed-list items when outdenting (#35176)
* fix(editor): preserve trailing mixed-list items when outdenting

* fix(editor): keep ordered numbering for trailing items moved by outdent

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 17:49:57 -07:00
Brennan Benson 70209b9b11 Keep chats stopped by a delivered kill readable after downgrading (#36142)
* fix(native-chat): keep chats stopped by a delivered kill readable after a downgrade

v1.4.244 accepts only three death kinds and sets aside any other record,
so a chat Stop force-killed (exit never observed) vanished after a
downgrade. Store the delivered kill as the absent pid an older build's
restart probe would itself record, plus an exact marker this build reads
back; in-memory code still sees kill-delivered.

* test(native-chat): explain release-checkout timeout

* test(native-chat): cover downgrade recovery and workspace rekeying

* test(native-chat): preserve checked record types at test boundaries
2026-10-29 17:42:38 -07:00
OrcaWinandOrcaWin 5951dbbf92 fix(editor): task-list parsing fixes (ordered parents, wrapped markup, tight continuations, bare markers) (#35187)
* fix(editor): preserve sibling tasks beneath ordered list items

* fix(editor): preserve wrapped inline markup in task items

* fix(editor): keep nested task continuations valid and editable

* fix(editor): keep literal task markers out of mixed checklists

* fix(editor): apply review fixes to task-list parsing stack

- Trim synthetic test matrices to the behavioral cases
- Regenerate pnpm-lock (drops a stale github-slugger importer entry)
- Assert the plain bullet's node type under an ordered parent

* fix(editor): keep one-column-deeper ordered tasks as sibling checkboxes

Dedent an ordered item's task block by the first task's column instead of
keeping its leading whitespace. A task one column deeper stays a sibling
checkbox, and text at or within the first task's column stays nested as
before. Strip leftover paragraph indent from task children.

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 17:38:19 -07:00
OrcaWinandOrcaWin e988b5dd77 fix(mobile): preserve code, quotes and code blocks through rich Markdown edits (#35056)
* fix(mobile): preserve literal code through rich Markdown edits

* fix(mobile): preserve inline code containing backticks

* Preserve adjacent inline-code text when saving mobile Markdown

* Preserve quote paragraphs and blocks in mobile Markdown

* fix(mobile): preserve selected text when creating code blocks

* test(mobile): choose native history shortcut from browser host

* Preserve paragraph-owned mobile code blocks when saving

* Preserve code selected inside mobile headings after saving

* fix(mobile): keep code serialization space-normalized and trim review tests

- Inline code and code blocks keep turning browser-created NBSPs into spaces;
  only the reader-side entity fix is needed for literal code.
- Inline code line breaks save as spaces so table rows and headings stay intact.
- Code blocks keep trimming trailing newlines left by placeholder <br>s.
- Heading- and paragraph-owned code blocks join adjacent inline code runs.
- Empty nested quotes reopen as a plain empty paragraph.
- Trim synthetic and behavior-locking tests.

* fix(mobile): keep quoted text literal when block reading would rewrite it

Quoted list continuations and lazy lines were restructured on save because the list reader drops them; reopen quote blocks only when they save the source or the same bytes as the literal paragraph.

* test(mobile): use template literal for saved code-block markdown

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 17:38:16 -07:00
OrcaWinandOrcaWin cb33f2b2d8 fix(editor): save pasted blob: images beside the note without withholding the paste (#35625)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 17:36:53 -07:00
Neil a892fca5a1 Plugins settings: one list with Installed badge, inline switch, install-state filter, category chips and trusted-code access copy (#36100)
* Plugins settings: one list with an Installed badge, inline switch and install-state filter

* test(plugins): drive card enablement through the inline switch

* plugins: keep the installed-read error on Not installed; cover installed cards past the cap

* plugins: inline category filter chips with icons from one category-icon module

* plugins: single-select category chips, marketing icon table, Remote/VMs label, trusted-code access copy

* plugins: Not installed waits for the installed-plugin read

* ci: retrigger
2026-10-29 17:34:26 -07:00
Jinjing 76653fbd06 Add quick access to Plugins settings (#36153)
* Add quick access to Plugins settings

* Forward Plugins shortcut from guest pages and show keycap hint
2026-10-29 17:30:41 -07:00
OrcaWinandOrcaWin 6236fdd4d7 test: remove low-value copy and CI fixture checks (#36159)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 17:20:50 -07:00
OrcaWinandOrcaWin 9d2f744725 fix(editor): keep completion menus placed and keyboard results visible (#34992)
* fix(editor): keep keyboard completion results visible

* fix(editor): keep completion menus placed and keyboard results visible

* fix(editor): restore link bubble anchor and keep completion menus tied to their editor

Restore the link bubble's required anchorElement, keep editor clicks and
refocus from dismissing completion menus (selection sync still governs),
close them when the editor is hidden, and cover keyboard scrolling and
outside dismissal.

* fix(editor): share #34980's editor-visibility dismissal so completion menus close when their workspace is hidden but painted

* fix(editor): read latest dismiss callback via useEffectEvent instead of render-time ref write

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 17:19:34 -07:00
OrcaWinandOrcaWin b683573faa fix(editor): improve picker dismissal, theme and accessible names (#34980)
* fix(editor): give the emoji picker dismissal and app theme behavior

Move the slash-command emoji picker onto the shared Popover so Escape and
outside clicks dismiss it, follow the app theme instead of the OS theme,
name the dialog for assistive tools, and close it when its editor is hidden
so the portaled picker cannot float over another tab or workspace.

* fix(editor): dismiss emoji picker when its workspace is hidden but still painted

Extract the link bubble's ancestor visibility check (opacity-0, inert, aria-hidden,
hidden, display/visibility) into editor-anchor-visibility.ts and reuse it, with an
ancestor MutationObserver, for the portaled emoji picker.

* fix(editor): read latest dismiss callback via useEffectEvent instead of render-time ref write

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 17:18:52 -07:00
OrcaWinandOrcaWin 85884f8397 fix(editor): keep relative link targets when pasting between note folders (#35743)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 17:18:42 -07:00
Neil 553c0ccb28 perf(renderer): forget visible-tab-pick state when a worktree is removed (STA-12498) (#36165)
Removed paired workspaces kept their cached frame and reported pane until
environment teardown, and every workspace switch scanned those tombstones.
Clear them with the other per-worktree tracking and never cache removal frames.
2026-10-29 17:18:06 -07:00
Neil 52eeb14db3 perf(native-chat): memoize turn statuses so status-only renders keep transcript slots (STA-6288) (#36141)
useNativeChatTurnStatus returned a fresh object each render, busting the
slots memo and re-running buildNativeChatTranscriptSlots' transcript-length
passes on turnActivity/stopping/awaitingInput-only renders.
2026-10-29 17:18:00 -07:00
Neil bb5f08e02c perf(git): batch per-remote exact-ref probes into one for-each-ref call (#36156)
Hosted-review eligibility (baseRefExistsOnRemote) and PR remote-base probes
spawned one `show-ref --verify` per configured remote. Eligibility re-runs on
every source-control state change (commit, ahead/behind, dirty toggle, worktree
switch), so a repo with many remotes bursts dozens of git children each time.

Add probeExactRefsViaForEachRef: one stdin-free `for-each-ref -- <refs>` child,
keeping only exact matches (descendants do not count), with fallback to the
existing per-ref probes on any failure. On a 77-remote repo: 77 children /
~570ms -> 1 child / ~40ms, identical present/absent results.

Exact probes are now case-sensitive on every filesystem (for-each-ref matches
refnames byte-for-byte, unlike loose-ref show-ref on macOS/Windows), which
matches packed-ref and hosting-provider semantics.

Refs STA-8433, STA-6289
2026-10-29 17:17:55 -07:00
NeilandClaude d887405add fix(wsl): refuse a drive/UNC conversion that would split a nested duplicate project (#36155)
* fix(wsl): refuse a drive/UNC conversion that would split a nested duplicate project

A refused duplicate inside a converting folder had its path rewritten while its ids stayed,
so its terminal history and sessions no longer matched. Another spelling of the same folder
still converts with it.

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

* fix(wsl): refuse only duplicates inside a converting folder, as an overlap

Review: an enclosing duplicate never splits, the same-spelling exemption keys on the main folder,
the blocker reads as an overlap instead of naming the clicked row, and the scan is skipped when
nothing is a duplicate.

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

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-10-29 17:16:07 -07:00
OrcaWinandOrcaWin ab9d846d79 fix(editor): reveal collapsed sections before navigating to their content (#35075)
Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 17:15:35 -07:00
OrcaWinandOrcaWin 15023ab339 fix(editor): match Unicode heading anchors across rich and preview modes (#35077)
* fix(editor): match Unicode heading anchors across rich and preview modes

* test(editor): drop slugger tests that only re-test github-slugger

The preview-parity test in markdown-anchor-scroll.test.ts covers the behavior that matters.

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 17:14:52 -07:00
OrcaWinandOrcaWin 32060decbb fix(editor): open the link that received the modifier-click (#35071)
* fix(editor): open the link that received the modifier-click

* fix(editor): read clicked link href from its mark, not the sanitized DOM

Tiptap blanks rendered hrefs for file:, Windows drive paths and custom schemes; resolve the clicked anchor's document position and read the link mark instead.

---------

Co-authored-by: OrcaWin <293788423+OrcaWin@users.noreply.github.com>
2026-10-29 17:14:35 -07:00
Jinjing 165f63a02d fix(terminal): retain only timings in typing diagnostics (#36088)
* fix(terminal): retain only timings in typing diagnostics

* Remove typed text from latency diagnostics and cover task overlap

* Preserve text metadata in diagnostic lifecycle test
2026-10-29 17:11:47 -07:00