Skip to content

Integration batch N (#1369, #1352, #1358, #1387, #1411, #1446) - #1457

Merged
Juliusolsson05 merged 72 commits into
mainfrom
integration/batch-2026-09-27-n
Sep 27, 2026
Merged

Juliusolsson05 merged 72 commits into
mainfrom
integration/batch-2026-09-27-n

Conversation

@Juliusolsson05

@Juliusolsson05 Juliusolsson05 commented Sep 27, 2026 •

Copy link
Copy Markdown
Owner

Integration batch N (owner-approved merge mode). Built after git fetch from origin/main 6dd23a4, with each member merged --no-ff. It supersedes batch M #1454 (#1411 is included here).

Every member had GATE PASS (--member). #1356 was left out because it conflicts with #1369 in undoClose.ts. 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:41
…the main thread (#769)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ure the conversations catalog

#769 asks to move transcript work off the main thread, but the recordings
cannot attribute main stalls to it: each initial load was sampled twice
(half timing only path resolution), and catalog discovery, search and
prompt extraction had no monitor boundary. Measure first.

Refs #769

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… composer (#1350)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ser instead of refusing it as a human draft

A delivery whose bytes painted after its rollback stopped watching left them
in Claude's composer, and the gate then refused every later delivery as a
human draft. SessionManager now marks a session stranded while no other
writer has touched the PTY since; the next delivery clears the composer
under its reservation and continues. inputInspect reports the mark.

Fixes #1350

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…he late paint, never reclaim image strands

Round-1 review of #1358 (steering q75): a late failure of a replaced process
could mark the same-id successor and clear its human draft; a delivery inside
the recorded 0.7-3.8 s paint lag skipped the reclaim; image pills are not
proven safe to kill.

Refs #1350

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…iscovery spans, pin the catalog thresholds

Round-1 review of #1352: 26 operations x 4 outcomes outgrew three hard-coded
100-pair caps; a rejected discovery left its span pending until the sweep
called it a timeout; the new thresholds were untested, and discovery's sat
above the main-stall band.

Refs #769

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…als, import the control stack statically

Round-1 review b of #1358.

Refs #1350

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

Codex writes paste+Enter atomically, so the Codex test never reached the
kind check (it passed with the guard deleted). Pi's bridge 'unknown'
outcome reports promptWritten && !enterWritten, which does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Mutation battery on 6eeac3b: the write-side entry check, the
strandedComposer handoff check and the exit clear each survived alone,
because the other layer covered for them. A replacement registered before
the old process's generation-owned cleanup now pins the read side; the
map itself pins the write side and the exit clear (their only effect
once the row is gone is not retaining the dead RegistryEntry).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#1358 verification a (blocker): an image delivery that reclaimed a text
mark and then stranded left the old mark standing, so the next delivery
Ctrl+U'd a composer holding image pills. Any delivery that wrote now
clears the mark before deciding whether to set its own.

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

#1352 verification b: restoring the store's 100-entry persistence slice
and raising each catalog threshold by 1 ms both survived. The store now
has an all-pairs operations.json test, and the threshold cases sample
exactly at the threshold.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…cement (#1283 item 1)

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

Tombstones of MCP-closed children named the parent's old session id, so
the parent's successor could not list, read or collect them. carryParent
rewrites stored tombstones and child->parent hints, and keeps a bounded,
acyclic alias chain for a close whose read predates the swap.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t's successor

orchestration:carry-parent, called wherever live children are remapped
(replace incl. newConversation, Reload Agents) and on Undo Close, only
for committed successors.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
#1358 verification b: the only window test reinstalled fake timers, which
reset the clock and put strandedAt in the future, so a 500 ms window
survived. One clock throughout; the next delivery starts 6 s after the
failure and the text paints at +7 s. Red with 500 ms and 6.5 s.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s filed under the successor

#1369 review a: createAgent's answer and adoptLateResponse stored the
requested (replaced) parent as the child's hint and invalidated only its
cache, so the successor served a stale empty list. Both now resolve through
the alias chain. Review b: the preload->IPC->bridge boundary, the
same-conversation replace carry and alias pruning are now pinned; every
single mutation is red.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…erer helper's containment

#1369 review c: dropping either status-cache invalidation in carryParent,
the renderer's identity-pair skip or its .catch left every test green.
Also corrects the delete(to) comment: no wired caller revives an id.

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

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

Undo Close remapped pointers only on the rows it restored, so a restored
parent's live orchestration and linked children kept the dead id and the
parent could not list, read or prompt them. Both restore commits now map
every live session through the restore's lineage (remapMetaLineage keeps
unmapped ids, so a child of another still-closed pane keeps its link).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t swap under the successor

#1369 verification a and b: createOrchestrationAgent captured the parent
id, awaited the spawn, and filed the child under it; a replacement
committed meanwhile had only remapped existing children, so the successor
could not list, read or close the new child. The committed-swap helper now
records a bounded, acyclic successor map per window, and filing resolves
parent and root through it. Red without the resolution; every piece pinned.

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

q85: the mark is the last step of a delivery that can land long after the
create began (a prompt waiting for the composer, or #1370's late
adoption). It was addressed with the parent id the tool call captured;
after a replacement that id has no window and owns no children, so the
mark was lost. Resolved through the alias chain; the combined late-create
+ replacement path was reproduced against #1375 and passes with this.

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

#1369 verification a, round 3: the bridge serves one renderer request at a
time, so a mark resolved when queued could still dispatch to a parent
replaced while it waited. Only the mark is rewritten; other requests act
for the parent that asked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Juliusolsson05 and others added 24 commits September 27, 2026 04:27
…ugh rewrites (#1251 row 9)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…rkflow (#1251 row 11)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ng it (#1251 row 12)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…runing (#1251 row 13)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Row 13 of #1251 and steering q109 on #1417 both change
loadManualLegacyBundlePaths, so the row ships with #1417 (commit 02df3652
there), with a test through the real loader. This PR no longer touches
debugRetention.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…overwritten or expired (#1411 review)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ort skipped rows and rollouts (#1411 review)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
 review)

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

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…llides (#1411 review round 2)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…pe (#1411 review round 2 survivors)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… is kept (steering q115)

Startup found set-aside refused files by listing each run with
.catch(() => []). A failed listing read as 'no set-aside file', so a prior
run holding only one had no marker and the next maintenance deleted it with
the refused bytes (the unknown-as-empty shape q109 forbade). Now the run is
marked unindexed (never expired) and the store degraded; only ENOENT means
nothing to find. Real temp run + one injected per-run listing failure: red at
5689181 (ENOENT on the deleted run); removing the unindexed mark is red.

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

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
happy-dom 20.10 added a global OffscreenCanvas. xterm's WidthCache prefers it
over <canvas>, so the real-xterm wheel test's 2D-context shim is bypassed and
term.open() throws 'value must not be falsy'. The shim fix follows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eel test (#1365)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…block (#1446 review c)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Juliusolsson05 Juliusolsson05 added the type:chore Maintenance, deps, tests, docs label Sep 27, 2026
@Juliusolsson05

Copy link
Copy Markdown
Owner Author

Batch disposition (B6): 6 members at GATE PASS (member mode): #1369 501d945, #1352 af88269, #1358 e21172a, #1387 02e03d9, #1411 3c807a1 (manager-verified), #1446 033a7d8. Base is 6dd23a4. 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 1457 --dry → GATE PASS #1457 (f7e66c0, 0 behind main, checks green, reviews OK). The body is in past tense and the rows 8–12 claim was corrected (q129). Merging.

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

Labels

type:chore Maintenance, deps, tests, docs

Projects

None yet

1 participant