Skip to content

Integration batch P (9 PRs) - #1464

Merged
Juliusolsson05 merged 63 commits into
mainfrom
integration/batch-2026-09-27-p
Sep 27, 2026
Merged

Juliusolsson05 merged 63 commits into
mainfrom
integration/batch-2026-09-27-p

Conversation

@Juliusolsson05

@Juliusolsson05 Juliusolsson05 commented Sep 27, 2026 •

Copy link
Copy Markdown
Owner

Integration batch P (owner-approved merge mode, owner-requested history form). The branch was created from origin/main 53568fb (batch O); each member PR was retargeted here and merged through GitHub.

Every member had GATE PASS (--member) on main 53568fb, and a local merge probe of all nine was clean. #1450 was held for the next batch (it shares src/main/index.ts with #1449, q125). #1354 was still a draft. Merged after green exact-head CI and a recorded non-member gate PASS (see comments).

🤖 Generated with Claude Code

Juliusolsson05 and others added 30 commits September 26, 2026 19:45
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Undo Close passed only the explicit tldrIdentity, so an agent whose identity
was derived (reporting domains on, no explicit field) came back with a fresh
one. It now uses tldrIdentityForSession, the rule Reload Agents uses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…bers

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…d-identity

# Conflicts:
#	src/renderer/src/workspace/hook/actions/undoClose.ts
…d-identity

# Conflicts:
#	src/renderer/src/workspace/hook/actions/undoClose.ts
…ion child (#1370)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…fter the deadline (#1370)

A healthy provider can take longer than the bridge's 30 s create deadline
to start (the bundled OpenCode took 43.1 s under load). The caller got
"outcome unknown - do not repeat", the tool handler returned without
delivering the prompt, and the late answer was adopted as an idle child
with no brief and nothing telling the parent.

- The tool handler hands the bridge a late-create continuation; the
  bridge keeps it for the outstanding request and runs it from
  adoptLateResponse (never for an in-time or failed answer). A throw is
  recorded as a prompt_delivery_failed incident.
- The handler's bootstrap delivery is one function shared by the
  punctual and late paths (deliver, armPromptWhenReady, mark delivered).
- The outcome-unknown reply says a late child receives its prompt
  automatically and must not be sent it again.

Fail-first: bridge and real-MCP-handler tests are red on origin/main.
Mutations killed: adoption skipping the continuation, the handler not
registering it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The hand-resolved main merges (1937b5c, ff32bce) staged the worktree's
stale codex-headless checkout (6334d5ac) over main's d42cc1da, so CI read
fixtures that only exist in the newer package (composer-0157). No change
to this PR's own diff.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ch, duplicate and rewind (#927)

All three operations ran a real native-resume projector and threw its report
away, so a projection that dropped or demoted content was invisible whenever
the context reduction reported no shrink. Each result now carries a bounded,
curated NativeProjectionFidelity summary (counts, per-code counts, capped
source lines with an exact omitted count; no projector prose or evidence),
through IPC to the renderer. The switch toast, the bulk summary and the
duplicate command name material loss (UNCONFIRMED default: non-opaque drops
and demotions).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… first in toasts, narrow the failure claim (#1384 round 1, steering q90)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…prompts' (#1306)

Every source (Claude, Codex, OpenCode, Pi, Grok) raises a typed
ConversationPromptsUnreadable when a transcript or store is there but cannot
be read or listed; only genuine absence answers []. promptFolder rethrows
non-ENOENT errors; View Prompts says it in fixed words; search degrades that
one row. Steering q116: discovery (stat/readdir walks) follows the same rule.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t, and Update now says a rejected request (#1425)

runUpdate caught nothing after publishing the undismissable 'updating':
openLog's mkdir (EACCES/ENOSPC) stranded it forever. It now publishes
failed { reason: 'could-not-start', logPath: null } without running the
command. The banner says so in fixed words with Update now as the retry
(keyed per attempt), open-log opens nothing for it, and every Update now
action awaits its IPC and shows 'Couldn't start the update. Try again.'
on rejection instead of dropping it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…MCP host stop (#1372)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…out a Resume that fails (#1348)

A null snapshot (run-not-found) became a generic error with Retry, and the
view fell back to the reference's launch-time status, so a failed reference
kept a Resume that could only fail. A new 'missing' store phase and one
shared wording: Expired when the reference names its own project,
Unavailable when it was looked up in the session's.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…the OS text (#1427)

safeErrorMessage passed Node's own text through, so the Skills, Conventions
and Custom Skills surfaces showed 'EACCES: permission denied, mkdir
<home>/.claude/skills' and the like. One mapper replaces its four copies and
three direct error.message sites: a system error becomes a fixed sentence per
code, the service's own curated text is kept unless it carries an absolute
path or runs long, anything else is generic, and the raw error goes to the
main log. Real-filesystem tests (read-only skills folder, state file under a
file) are red on main; the pass-through mutant is red.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…wner-approved (B6 proxy)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s package's own single-line text (#1456 review a)

Review a: (1) the four Reveal handlers returned shell.openPath's raw string
with the path; (2) unclassified git and fetch errors passed through because
the mapper kept any short message; (3) the path filter missed /tmp, ~/, ../,
quoted paths and UNC shares. Reveal failures now answer in fixed words (raw
text logged); git, fetch, YAML parse and toJS failures get fixed sentences
at the source; the mapper keeps only single-line, bounded, path-free text
from exactly a plain Error or GitHubSkillSourceError, never child-process or
library errors, and every rewrite is logged. The renderer IPC-rejection half
of finding 4 is filed as #1459. All four Reveal handlers red on the old code;
all five mutants red.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Juliusolsson05 and others added 24 commits September 27, 2026 10:59
… every errno sentence and every rewrite's log (#1456 review c)

Review c: 'Provider failed [/Users/...]' was kept because '[' was not a
listed delimiter; PATH_LIKE now treats any non-word character before the
slash as a path start, and prose like and/or stays kept. All 18 errno codes
are pinned to their sentences and each asserts its raw-error log, as do the
TypeError and ENOTDIR system cases. The old-regex, no-ENOTDIR-log,
no-TypeError-log and EDQUOT mutants are red.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…selector agrees (#1348, #1440 reviews a+b)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…art hint copy (#1447 review c)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…n its own (#1440 round-2 review b)

One Promise.all over every visible tab let a later transient failure clear a
tab already proven Expired, and one slow read hold back another tab's answer.
Each run is now asked once, its answer lands when it arrives, and a missing
verdict is never taken back.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…row are unreadable (#1434 verification a)

The Codex locator skips a file it cannot open, so a listable tree holding the
conversation's own unreadable rollout read as absent; assertTreeListable now
fails on a file named for the conversation. A Pi file named for the session
whose first row is not its session header is damaged, not 'another cwd'.
The OpenCode typed query error and the prompt folder's cache-hit parse check
are pinned.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…1434 verification b)

Verifier b's repro ({type:'session', id:null}) was already rejected at
e1e67e8 by the id check; this pins it (dropping the id check turns it red).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… own cwd, and no Cancel on a missing run (#1440 review c)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…; keep a submission recorded before adoption; retry after a reservation collision (#1375 review round 2)

Round 2: (a, b) a late Claude/Codex child's readiness waiter could deliver
after the parent detached; deliverPromptWhenReady takes a shouldDeliver guard
asked when the gate opens, and the late path passes the parent-lease check.
(c) the renderer files the child before its create answer reaches main, so a
parent's own send could land first and adoption reset the record, causing a
second brief; adoption now keeps an existing record. (c) a reservation
collision ended the late loop; it now retries. (b) the stop test goes
through the real orchestration_send_prompt. All red at ed86637; the
send_prompt bookkeeping mutant is red.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e-bootstrap

# Conflicts:
#	src/main/orchestration/OrchestrationBridge.ts
…esolve the parent lease through its alias chain

W2's patch (temp/q85): orchestration.bootstrap_mark_failed on the late path
only, and the combined late-create + parent-replacement case. isParentAttached
now resolves the parent through #1369's currentParentId, so a parent replaced
during the late window keeps its brief flowing to the successor; only a
parent with no live successor is gone. Removing the alias resolution fails
the replaced-parent test. Orchestration suites green; tsc 0.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…pts-unreadable

# Conflicts:
#	src/main/conversations/service.system.test.ts
… the fetch timeout and YAML parse detail; pin the file-in-the-way reason (#1456 review round 2 c)

Round 2 c: 'Provider failed./var/...' was kept because '.' and '-' counted as
word characters; PATH_LIKE now treats a slash after anything but a letter,
digit or underscore as a path start. The 60 s fetch abort and the YAML parser
branch now log their raw detail, and the file-in-the-way reason has a
real-filesystem test. All red at a037caf; the file-component path mutant is
red.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eck by identity, not class name (#1456 review round 2 a, b)

Round 2 a/b: with prettyErrors off the parser leaves linePos unset, so 'near
line N' never appeared; the line now comes from the error's offset and the
tests require it. A foreign class merely named GitHubSkillSourceError passed
the own-text check; it is now instanceof (githubSkillSource no longer imports
the mapper, so no cycle). Their log and FILE_COMPONENT findings were already
fixed in ad03125. The old-linePos mutant is red.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…dentity

fix(undo-close): a restored agent keeps its derived TLDR identity
…dren

fix(undo-close): a restored parent's live children follow it to its new id
…ootstrap

fix(orchestration): deliver the bootstrap prompt to a child created after the deadline (#1370)
…ection-fidelity

fix(provider-switch): carry the native projection report through switch, duplicate and rewind
…-unreadable

fix(conversations): an unreadable conversation file is said, not 'no prompts' (#1306)
fix(workflows): show a run whose stored data is gone as expired, without a Resume that fails
…-start

fix(cli-updates): an update that cannot start says so and stays dismissable
…ispose

fix(shutdown): dispose the goal loop at quit, after sessions and the MCP host stop
fix(skills): user-visible errors name the problem, never the path or the OS text
@Juliusolsson05 Juliusolsson05 added the type:chore Maintenance, deps, tests, docs label Sep 27, 2026
@Juliusolsson05

Copy link
Copy Markdown
Owner Author

Batch disposition (B6): 9 members merged via GitHub into this branch after GATE PASS (member mode) on 53568fb. Their residuals are on each member's disposition and manager verification (#1375, #1434, #1456 manager-verified at the cap). It merges when exact-head CI is green, the body is in past tense and a non-member gate PASS is recorded.

@Juliusolsson05

Copy link
Copy Markdown
Owner Author

Pre-merge gate record: merge-gate.sh agent-code 1464 --dry → GATE PASS #1464 (2250c56, 0 behind main, checks green, reviews OK). The body is in past tense. Merging.

@Juliusolsson05
Juliusolsson05 marked this pull request as ready for review September 27, 2026 21:02
@Juliusolsson05
Juliusolsson05 merged commit f0bcf09 into main Sep 27, 2026
2 checks passed
@Juliusolsson05
Juliusolsson05 deleted the integration/batch-2026-09-27-p branch September 27, 2026 21:02
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment