Commit Graph

78555 Commits

Author SHA1 Message Date
Peter Steinberger a67784ef43 refactor(trajectory): use findLast in export scans (#120612) 2026-08-08 08:56:20 -07:00
Glucksberg 6318e30077 fix(codex): prevent session-changed errors after /new (#113429)
* test(codex): prove replies after retained session reset

Co-authored-by: Markus <markuscontasul@gmail.com>
Co-authored-by: Josh Lehman <josh@martian.engineering>

* test(codex): verify reset idempotency

* test(codex): prove reset keeps binding writable

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Josh Lehman <josh@martian.engineering>
2026-08-08 08:55:25 -07:00
Peter Steinberger d9ff862823 fix(macos): recover node startup after legacy identity recreation (#120610) 2026-08-08 08:54:16 -07:00
clawsweeper[bot] a6765d369f fix(config): preserve manual .bak.* backups (#120298)
* fix(config): preserve manual .bak.* backups

* test(config): cover numeric manual backup names

---------

Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-08 08:49:57 -07:00
Peter Steinberger 2bce06e1e7 refactor(pr): remove unreachable fork push retry (#120565)
* refactor(pr): remove unreachable fork push retry

* refactor(pr): simplify missing fork branch handling
2026-08-08 08:48:44 -07:00
Peter Steinberger 7ecdef6e2e fix: prefer Crabbox inspect SSH host (#120611) 2026-08-08 08:30:07 -07:00
Peter Steinberger 18dd70cec0 fix(release): dispatch validation through a client-pushed target ref (#120613) 2026-08-08 08:22:17 -07:00
Vincent Koc b5180b6816 fix(codex): support app-server 0.147.0 (#120594)
* fix(codex): support app-server 0.147.0

* docs(codex): clarify marketplace version provenance
2026-08-08 23:07:05 +08:00
Peter Steinberger a5b798a88c fix(cli): avoid missing-facing camera snap failures (#120430)
* fix(cli): use node default camera for snap

* test(cli): isolate ClawHub package preflight

* test(cli): split Claws package fixture
2026-08-08 08:05:50 -07:00
Peter Steinberger 6176c0a79d feat(macos): control motorized camera pan, tilt, and zoom (#120511)
* feat(macos): add native camera PTZ controls

Add physical UVC pan, tilt, and zoom through the signed Mac app, with camera.ptz.control kept behind dangerous-command approval. Verified against real Insta360 Link 2 Pro hardware.

* refactor(agents): split message tool display config

* fix(mac): harden camera PTZ contracts
2026-08-08 08:04:29 -07:00
Peter Steinberger 876a3f0d8f fix(ui): bulk session archive no longer stalls per thread (#120493)
* perf(ui): batch session archive requests

* fix(ci): sync bulk archive protocol surfaces

* fix(plugins): validate bulk archive ownership

* fix(ci): restore current main quality gates

* fix(ui): bound bulk archive dispatch

* fix(ui): bound bulk archive dispatch

* fix(ui): preserve bulk archive compatibility

* fix(ui): recover metadata-less archive fallback
2026-08-08 07:53:43 -07:00
Peter Steinberger 88975f85ea fix: required background completion silently disappears (#120453)
* fix(agents): surface silent required completions

* refactor(agents): simplify completion fallback handling

* fix(agents): require visible completion delivery

* fix(agents): preserve resolved session patches

* fix(agents): bound resolved session patch output

* fix(agents): reject silent automatic completions

* fix(agents): settle committed completion side effects

* fix(agents): retain ultra thinking profile

* fix(agents): require destination-safe completion evidence

* fix(agents): block invisible completion side effects

* fix(agents): preserve outbound no-replay evidence

* fix(agents): preserve resolved session identifiers
2026-08-08 07:52:12 -07:00
Peter Steinberger d4cc57fe0a fix(ui): keep split-pane close button reachable in narrow panes (#120460)
* fix(ui): keep split-pane close button reachable in narrow panes

Pane headers used viewport media queries, so split panes could shrink far below the viewport without adapting their controls. Move header responsiveness to inline-size container queries and apply a priority ladder that sheds split and secondary actions before the close control can be clipped.

* test(ui): focus surviving pane action in narrow splits

* fix(ui): cover full narrow-pane header composition

* fix(ui): shed secondary split-header controls through 640px

closes the 521-640px interval where secondary controls returned before the pane could fit them, per ClawSweeper P1 on eb90baa129.

* fix(ui): prove full split-header fits just above the shed cutoff

Measured full-composition width 728px; cutoff raised to 720px accordingly, per ClawSweeper P1 on b3b0b1c2516.

* fix(ui): avoid shadowing split-header fixture variable

* fix(ui): hide the dock caret in narrow split headers

Rebase onto main moved the board dock to .chat-pane__dock-caret (PR #120487); selector+fixture updated, measured width 793px.
2026-08-08 07:48:19 -07:00
licheer-zte a32e81c8e8 fix(model-fallback): treat empty non-GPT completions as failed candidates (#120132) (#120148)
* fix(model-fallback): treat empty non-GPT completions as failed candidates (#120132)

Empty and whitespace-only completions from non-GPT models were counted as
candidate_succeeded, silently dropping the turn on visible channels. Apply
the empty/reasoning-only classification to every model; deliberate silent
replies and committed outbound deliveries remain successful.

* fix(model-fallback): classify mixed reasoning-plus-blank completions as failed (#120148)

A completion like [{ isReasoning: true, text: "thinking" }, { text: " " }]
carries no user-visible reply: reasoning text is invisible to the shared
visibility test (includeReasoningPayloads: false), so counting it as visible
made the run look successful and silently ended visible-channel turns.

Filter reasoning payloads out of the empty/whitespace predicate so mixed
reasoning-plus-blank results classify as empty_result (fallback-worthy),
while mixed reasoning-plus-visible-text results stay successful.

Regression tests: mixed reasoning+blank -> empty_result; mixed
reasoning+visible -> success.

* fix(model-fallback): require deliverable assistant results

Use one owner-boundary deliverability predicate for fallback classification, preserve intentional terminal outcomes, and add a mock-channel Gateway scenario for mixed reasoning-plus-blank recovery.\n\nCo-authored-by: 李琪0668001400 <li.qi16@xydigit.com>

* chore: preserve contributor credit

Co-authored-by: 李琪0668001400 <li.qi16@xydigit.com>

* test(qa): cover default model fallback scenario

Make the mixed reasoning-plus-blank fixture recover through both the catalog default alternate and the explicit proof model.

Co-authored-by: 李琪0668001400 <li.qi16@xydigit.com>

---------

Co-authored-by: licheer-zte <licheer-zte@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-08 07:48:17 -07:00
Peter Steinberger 1e004151c6 fix(ui): prevent Git metadata stalls from blocking Control UI builds [AI] (#120490)
* fix(ui): bound advisory Git build metadata reads

* fix(ui): hard-kill lockless Git metadata reads
2026-08-08 07:39:24 -07:00
Vincent Koc 37526444d2 fix(qa): defer testing skill model policy (#120590)
Punchcard-Session: amber-workshop-workshop-36
2026-08-08 22:38:44 +08:00
Vincent Koc 7f9364c5e1 fix(gateway): isolate startup sidecars between test cases (#120503)
* test(gateway): stop startup sidecars between cases

Punchcard-Session: amber-workshop-workshop-36

* test(gateway): make sidecar cleanup one-shot

Punchcard-Session: amber-workshop-workshop-36

* test(gateway): satisfy cleanup type contracts

Punchcard-Session: amber-workshop-workshop-36
2026-08-08 22:08:17 +08:00
Peter Steinberger bc3bf842c9 fix(sessions): preserve context provenance across retries [AI] (#120509)
* fix(protocol): preserve checkpoint token version casing

* fix(agents): preserve retry usage chronology

* test(sessions): relax transcript estimate assertion

* fix(agents): preserve omitted harness attempt provenance

* test(sessions): cover retry and Swift provenance

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>

* test(agents): cover hook-block usage chronology

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-08 07:06:36 -07:00
Peter Steinberger 725fe96bd7 fix(telegram): avoid credential reads in reply policy
Resolve reply mode through Telegram’s config-only account projection so threading policy never reads token files or SecretRefs.
2026-08-08 06:53:37 -07:00
Peter Steinberger f4f5310355 fix(telegram): restore account-scoped reply mode
Resolve reply mode through the selected Telegram account so account overrides and top-level inheritance reach outbound reply context.

Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-08-08 06:53:37 -07:00
wonfong 9fdc266f64 fix(subagents): wake the parent when a follow-up finishes a yielded child (#120187)
* fix(subagents): wake the parent when a follow-up finishes a yielded child

A sub-agent that calls sessions_yield on its own behalf parks its run and
correctly withholds the parent's announce. But a later follow-up to that same
child session registered a sibling registry row instead of continuing the paused
one, so the requester defaulted to the child's own main session and the original
parent — itself idle behind sessions_yield — was never woken. The paused row also
stayed an unsettled descendant, deferring the parent's settle batch forever with
nothing recorded explaining the silence.

Follow-up dispatch now adopts the paused row through the existing post-steer
replacement seam, inheriting the requester identity and carrying the settle-wake
credential forward with its frozen batch membership remapped to the new run id.
A follow-up that names its own requester keeps registering separately, since an
explicit requester is a delivery opt-in that adoption would silently drop.

Also stops frozen-result refill from targeting paused rows: a yield clears the
result on purpose, so refilling from the session would attribute a later turn's
text to the paused run.

Closes #120157

* fix(subagents): select the paused owner past a requester-bound sibling

Adoption looked up the newest run for the child session and adopted it only
when that row was itself paused. A requester-bound follow-up deliberately stays
a sibling, but it registers at a higher generation and becomes that newest row,
so any later default follow-up saw an unpaused newest row, declined adoption,
and registered yet another sibling. The original requester stayed parked behind
a paused row that can never announce -- the same silent stall this fix exists to
remove, reached through a valid mixed-delivery sequence.

The latest-run query now takes an optional predicate applied before the
generation comparison, so a caller that owns a specific row class selects the
newest row of that class. Adoption asks for the newest `sessions_yield` row
directly instead of inferring it from generation order.

Docs now state that continuation applies to default delivery, since a follow-up
carrying its own requester runs as a sibling by design.

* test(qa): prove post-yield follow-up delivery through the gateway boundary

The unit and gateway-method tests for paused-run adoption assert on registry
rows, which proves the bookkeeping but not that an operator ever sees the
result. This adds the boundary proof: a real gateway child, the QA mock channel,
and the mock provider driving a subagent that pauses itself and finishes only on
a later follow-up.

A fixture plugin owns both legs. Its `before_dispatch` hook spawns the child with
`completionDelivery: "current-requester"`, so the announce has the operator turn
as its audience. An HTTP route then dispatches the follow-up to that same paused
session using default delivery -- the path adoption is meant to catch. A
requester-bound follow-up would opt into its own audience and run as a sibling
instead, so the two legs must differ here.

The mock provider gains a child that yields on its own behalf. Both of its turns
match on the current prompt rather than the shared transcript, so the yielded
kickoff cannot make the follow-up turn yield a second time.

The scenario asserts both sides of the invariant: no outbound traffic while the
child is paused, and exactly one announce carrying the follow-up marker once it
ends.

Reverting the adoption call site fails this test in the way that matters: the
child still produces its marker and the run still ends with stopReason=stop, but
nothing reaches the requester and the wait times out. The result is computed and
then silently dropped -- which is the failure this repair exists to remove.

* fix(ci): match QA Lab fixture plugin entries as a group in knip

The all-exports pass listed one fixture entry by name, so every new QA Lab
fixture plugin lands as an unused file and turns check-dependencies red until
someone remembers this file. Nothing imports these entries by design: the
Gateway E2E loads them through plugin config paths.

* docs(subagents): scope yield continuation to plugin runtime follow-ups

Adoption is gated on plugin_subagent task tracking, which only
createGatewaySubagentRuntime().run sets, so api.runtime.subagent.run is the
sole route into it. Writing that as one example implied other follow-up paths
to a paused session continue the run too; they are not tracked as sub-agent
runs and announce nobody.

* fix(subagents): reject undurable paused-run adoption

Fail plugin follow-up admission closed when the paused-run ownership swap cannot be persisted, while retaining the existing restart-recovery return-false contract. Trim duplicate tests and keep boundary coverage for requester routing, wake-batch remapping, repeated yield, and persistence rollback.

Co-authored-by: zhou.huanfeng <woundfongv3@163.com>

* docs(subagents): clarify yielded-run steering

Co-authored-by: zhou.huanfeng <woundfongv3@163.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-08 06:46:19 -07:00
Peter Steinberger 9a2f91a79a fix(release): keep prerelease companions exact in cross-OS checks (#120556)
* fix(release): install exact cross-os companion artifacts

* fix(release): derive companion package type from resolver

* fix(release): produce provider-owned companion registries

* fix(release): preserve companions for npm candidates

* refactor(release): simplify companion registry flow

* test(release): align package acceptance contracts

* fix(release): guard optional registry JSON parsing

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-08 21:45:16 +08:00
Sergio Cadavid 45c6b47ed0 fix: gateway stalls for tens of seconds after each agent turn on multi-agent installs (#120075)
* fix(sessions): reuse database path identities during target resolution

Prepare filesystem identities once per synchronous session-target operation and share the matcher across collision, fixed-store, and registered-owner scans while preserving uncached comparator and filesystem-error behavior.

Fixes #120074.

Co-authored-by: Sergio <cadavidsergio@hotmail.com>

* test(sessions): split target dedupe regressions

* test(sessions): remove stale dedupe import

Co-authored-by: Sergio <cadavidsergio@hotmail.com>

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-08 06:42:13 -07:00
Peter Steinberger 295c8dfe6e refactor(acp): make reply projector single-dispatch (#120560) 2026-08-08 05:55:35 -07:00
Peter Steinberger 83900e4683 feat(browser): add relay authentication v2 (#120526)
* feat(browser): add relay authentication v2

* fix(browser): cap relay test WebSocket payload

* fix(browser): keep relay E2E inside extension boundary

* fix(browser): isolate relay admission and cleanup auth

* fix(browser): finish relay auth migration hardening

* fix(browser): keep preauth transport bounded through teardown
2026-08-08 05:48:24 -07:00
Vincent Koc 4eec51a276 merge: align Fish Audio extension directory (#120084) 2026-08-08 20:46:55 +08:00
Vincent Koc 4341a3b73c test(infra): isolate worktree migration plugin discovery (#120564)
Punchcard-Session: amber-workshop-workshop-36
2026-08-08 20:45:47 +08:00
Peter Steinberger e5d4fe02a4 fix(gateway): retain work admission across hosted wizard steps (#120582) 2026-08-08 05:04:04 -07:00
Peter Steinberger caa50686ea fix(ci): clear Mantis reactions with app identity (#120523) 2026-08-08 05:00:08 -07:00
Peter Steinberger 2d5ff4768c improve(ui): consolidate dashboard chat visibility into one Chat/Split/Dashboard toggle (#120487)
* improve(ui): consolidate dashboard chat visibility into one Chat/Split/Dashboard toggle

The dashboard face spread chat visibility across three separate
affordances: a two-option face toggle, an icon-only dock dropdown among
the header actions, and a floating vertically-rotated "Show chat"
button on the board edge that users could not discover. One concept,
three controls.

The header now renders a single segmented control - Chat | Split |
Dashboard - where Split is dashboard plus docked chat and Dashboard is
board-only (the former "Hide chat"). A compact caret attached to the
pill picks the dock side (left/right/bottom) and only appears in Split
mode when dock mutation is allowed; read-only sessions keep the plain
two-option Chat | Dashboard toggle. The floating reopen button, the
standalone dock menu button, and their CSS (including the mobile
overrides) are deleted, so the header ends up with fewer buttons than
before.

Verified in the mock-gateway dev harness: mode mapping, caret dropdown,
unhide-to-remembered-side, and hidden dock rendering board-only.

* fix(ci): unexport board dock settings union and repair stale plugin-sdk baseline

BoardVisibleChatDock lost its last external consumer when the board
view switch consolidated dock controls; keep it file-local so the
production unused-export scan stays clean.

Also regenerate docs/.generated/plugin-sdk-api-baseline.sha256: the
session-catalog module hash was stale on main (check fails on clean
origin/main after the agent-attribution reverts), which blocks every
PR's check-plugin-sdk-api-baseline job.

* docs(web): describe the Chat/Split/Dashboard switch and dock-side picker
2026-08-08 04:48:55 -07:00
clawsweeper[bot] 90acd2bc90 fix(exec): explain Linux OOM-score-adjusted SIGKILLs (#117911)
* fix(exec): explain Linux OOM-score-adjusted SIGKILLs

* fix(exec): explain Linux OOM-score-adjusted SIGKILLs

* fix(exec): clarify Linux OOM wrapper diagnostics

* fix(exec): warn about Linux OOM bias opt-out

* fix(exec): keep Linux OOM guidance foreground-only

---------

Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-08 04:41:13 -07:00
Peter Steinberger de9314301f fix(mcp): complete browser OAuth login callbacks (#120431)
* fix(mcp): complete OAuth loopback login

Co-authored-by: 李琪0668001400 <li.qi16@xydigit.com>

* fix(auth): abort loopback DNS resolution safely

* fix(mcp): move callback wait outside state lease

* fix(plugin-sdk): bind the callback redirect host by default

* fix(plugin-sdk): preserve explicit loopback bind hosts

* fix(ci): satisfy loopback callback type and lint gates

* fix(mcp): bind PKCE state to each login attempt

* refactor(mcp): keep verifier override internal

* test(mcp): preserve split OAuth CLI coverage

---------

Co-authored-by: 李琪0668001400 <li.qi16@xydigit.com>
2026-08-08 03:57:55 -07:00
Peter Steinberger d1dea39bbb fix(maintainers): route PR reads through Octopool (#120525)
* fix(maintainers): route PR reads through Octopool

* test(maintainers): cover PR transport ownership

* fix(maintainers): scope merge wait to CI run
2026-08-08 03:56:36 -07:00
Peter Steinberger 205753eef7 feat(ui): split model picker into searchable model + effort popovers (#120495)
* refactor(ui): remove fake token estimate

* feat(ui): split model picker into model and effort popovers

* fix(ui): hide filtered-out model rows under the flex option style

* fix(ui): drop unused model locator in cloud-startup e2e

* fix(ui): restore focus and expose active model option to assistive tech
2026-08-08 03:47:32 -07:00
Peter Steinberger 0575610f4c refactor(ui): align sidebar session list on a single lead-slot rail (#120473)
* refactor(ui): align sidebar session list on a single lead-slot rail

* fix(ui): keep sidebar group drag handle interactive

* fix(ui): keep catalog chevron visible on touch devices

Touch contexts have no hover, so branded catalog headers keep the chevron as their resting affordance (ClawSweeper P2 on #120473).
2026-08-08 03:47:26 -07:00
Vincent Koc 6e100ca56a test(codex): remove duplicate session helper 2026-08-08 18:47:18 +08:00
Peter Steinberger 95ea82b1e5 fix(ci): restore deterministic main checks (#120501)
* fix(plugin-sdk): stabilize session catalog baseline

* test(doctor): isolate bind persistence inventory

* fix(ci): prepare max-lines base during checkout

* test(sessions): align freshness regression fixtures

* style(tests): format context usage fixture

* fix(ci): preserve token provenance and isolate fork credentials

Finish the canonical token-provenance fixtures while preserving the
latest maintainer-owned unavailable-usage ordering. Limit the diff-base
GitHub token to manual non-release comparisons and guard that fork
isolation invariant in the existing workflow regression test.

Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>

* test(ui): identify actual managed image eviction

* fix(ci): reuse the validated protocol comparison base

Consume the immutable diff base already resolved and validated by
preflight for every CI event. Remove the dead duplicate manual
GitHub lookup and unreachable fallbacks, and guard the single
authoritative path without changing fork credential isolation.

* test(sessions): preserve stale total expectation

* test(ui): arm reconnect deferral before disconnect

---------

Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>
2026-08-08 03:36:35 -07:00
Peter Steinberger 6ae7a8684a fix(ui): restore terminal button in chat header (#120436)
* fix(ui): restore terminal button in chat header

* test(ui): follow background task props API

Remove the callback option retired by #120463 so the terminal header regression test type-checks on current main.
2026-08-08 03:26:51 -07:00
Peter Steinberger 2cfacdb671 fix(ui): move stale-client refresh notice into the sidebar update card (#120483)
* fix(ui): move stale-client refresh notice into the sidebar update card

The 'Server updated — refresh for full capabilities' notice rendered as a
full-width callout at the top of <main>, where the fixed shell-chrome
controls (nav toggle / search, layout.css z-index 45) overlap its text.

Move the notice into the existing sidebar-update-card slot above the
identity/connectivity footer: refreshRequired takes precedence over
updateAvailable (a stale client cannot trust its own update metadata),
renders non-dismissible with a refresh icon and two-line text, and is
wired through the sidebar, settings sidebar, and collapsed-nav floating
card. The old top-of-main banner branch, its resolver helper, and the
orphaned i18n key are deleted.

* fix(ui): keep stale-client refresh visible during onboarding and clear collapsed chrome cluster

Address both accepted ClawSweeper P2 findings:

- restore the stale-client refresh action during onboarding
- keep the floating update card clear of the three-button collapsed chrome cluster
2026-08-08 03:06:12 -07:00
Peter Steinberger c933145088 feat(ui): show custom commit age in sidebar footer (#120388)
* feat(ui): show custom commit age in sidebar footer

* test: repair sidebar build status CI gates

* test(ui): assert gateway state during reconnects

* fix(ui): expose build provenance in sidebar label

* fix(ci): align SDK baseline and test formatting

* fix(sessions): preserve context usage provenance

* test(agents): split session loop lifecycle coverage

* test(agents): reuse session loop resource helpers

* test(sessions): preserve stale totals in JSON output
2026-08-08 03:03:50 -07:00
Peter Steinberger 10c7f005be refactor(github-copilot): narrow runtime facade (#120544)
* refactor(github-copilot): narrow runtime facade

* style(github-copilot): format runtime exports
2026-08-08 02:56:12 -07:00
Peter Steinberger 97b564e81c fix(ui): keep streamed media pinned to the chat (#115060)
* fix(ui): keep streamed media pinned to the chat

* test(ui): exercise real manual media scroll gestures

* fix(ui): settle chat follow at shared end boundary

* test(mcp): split OAuth CLI coverage

* style(mcp): format split CLI tests

* fix(ui): follow media growth during active streams

* test(ui): type active stream fixture

---------

Co-authored-by: Peter Steinberger <steipete@golden-gate.local>
2026-08-08 02:55:09 -07:00
Vincent Koc cdd621eaee test(telegram): use model selection rejection seam 2026-08-08 02:21:34 -07:00
Vincent Koc daca53c985 test(codex): align file-backed session fixtures 2026-08-08 02:21:34 -07:00
Vincent Koc 67618e273d fix(docs): preserve legacy plugin reference links 2026-08-08 02:21:33 -07:00
Vincent Koc e5f5030570 fix(plugins): align Fish Audio extension directory 2026-08-08 02:21:33 -07:00
Peter Steinberger c5d00cb47d fix(ui): keep task transcripts in the task sidebar (#120463)
* fix(ui): keep task transcripts in the task sidebar

* refactor(ui): split background task rail rendering

* fix(ui): reset stale task rail views

* fix(sessions): honor context usage provenance

Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>

* fix(qa): split suite runtime agent process below line cap

---------

Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>
2026-08-08 01:45:44 -07:00
Peter Steinberger d9080cfff8 fix(agents): transfer requester wake ownership across yield and deflake survivor registry setup (#120538) 2026-08-08 01:42:33 -07:00
Peter Steinberger a4b4c58e87 fix(protocol): regenerate gateway models after #120497 schema change (#120514) 2026-08-08 01:01:55 -07:00
Peter Steinberger fb61ae15fc fix(daemon): skip unreadable foreign LaunchDaemon plists in ownership scan (#120481)
* fix(daemon): skip unreadable foreign LaunchDaemon plists in ownership scan

inspectSystemLaunchDaemonOwnership raised SystemLaunchDaemonOwnershipError when any /Library/LaunchDaemons plist was unreadable, such as third-party VPN helper plists with mode 600. This broke gateway install/repair and launchd.integration.e2e on affected Macs. Unreadable plists are foreign by contract, while loaded same-label daemons remain caught by the bracketing launchctl probes.

* fix(ci): regenerate plugin-sdk api baseline after 267268f646

* test(doctor): scope gateway-bind persistence test to its writer seam

Culprit: 267268f646.

* docs(daemon): document unreadable plist tradeoff
2026-08-08 00:48:59 -07:00