Skip to content

Integration batch S (#1442) - #1467

Merged
Juliusolsson05 merged 15 commits into
mainfrom
integration/batch-2026-09-27-s
Sep 27, 2026
Merged

Juliusolsson05 merged 15 commits into
mainfrom
integration/batch-2026-09-27-s

Conversation

@Juliusolsson05

@Juliusolsson05 Juliusolsson05 commented Sep 27, 2026 •

Copy link
Copy Markdown
Owner

Integration batch S (owner-approved merge mode, owner-requested history form). The branch was created from origin/main 4b7e669 (batch R); the member PR was retargeted here and merged through GitHub.

The member had GATE PASS (--member) with its OWNER-APPROVED decisions (q119/q120 option B bounded to the app run; spinner option A). It pins claude-code-headless#69 (merged). Merged after green exact-head CI and a recorded non-member gate PASS (see comments).

🤖 Generated with Claude Code

Juliusolsson05 and others added 15 commits September 27, 2026 07:45
#1381)

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

Adds the 'transport-gap' interruption beside #1040's 'transport-error' at
every renderer touchpoint (turn state, ledger input statics key, lifecycle
candidate, feed item, Feed row, invariants) with the sentence 'Some live
output was not captured'. Inert until the fold keeps the value, which
needs the package's interruption union (next). The three spelled-out
marker checks in ledgerFeedItems become one predicate.

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

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The owner-approved call (B6 proxy, 2026-09-27) is a DURABLE feed-history
row, and 'one row kind'. The work-slot marker from 91b05b0 would give way
to the work chip as soon as the agent worked again, which hides the loss.

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

Option B, OWNER-APPROVED (B6 proxy, 2026-09-27): lost data is never hidden.
ClaudeSession seals the adapter at the gap (claude-code-headless#69 places
it in order); SessionManager records each gap per provider conversation
(TransportGapLedger, in memory, bounded) and emits it; the tap forwards
session:transport-gap; the initial history chunk carries the
conversation's gaps so every feed rebuild gets them back. The renderer
merges both paths by id and paints one muted row, 'Part of this response
was not captured (HH:MM:SS–HH:MM:SS)', placed by time among the entries
through the notice candidates (no new render owner). The fold keeps
interruption 'transport-gap' on the sealed turn.

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

Outcome, decision 5, Change and Tests now state the per-conversation ledger
carried by the initial history chunk and the durable row; the #69 hold and
the filed residuals (#1443, #1444) are recorded.

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

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

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

#69 merged after its own round 1 (since is a poll-start lower bound; a
request-only flow that provably starts after the gap streams; the phase owner
is sealed last). The app API is unchanged; no lockfile entry to resync.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…transcript; distinct live-only ids (#1442 review a)

ClaudeSession has no getProviderSessionId, so getNativeConversationId was
always null for Claude: every real gap took the live-only path and its row
vanished on the first reload (the test fake implemented the getter). The
manager now records each committed Claude entry's sessionId, the same value
the renderer sends back as providerSessionId, with the resume id as the
fallback; cleared at teardown. Live-only ids are a sequence: two gaps of one
poll share its until and were merged away.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…s flush before a gap row (#1442 review b)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…int and the real Feed row; fix since docs (#1442 review c)

- session:load-initial-history's transportGaps attach, through the real
  preload call and a real ledger (returning the plain chunk: red).
- A gap arriving alone repaints a reused adapter (no gaps identity check: red).
- The real Feed renders the row's sentence (return null for it: red).
- TransportGapRecord and decision 5 say since = the previous poll's start.

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

# Conflicts:
#	src/renderer/src/workspace/hook/actions/initialHistory.renderer.test.tsx
#	src/renderer/src/workspace/hook/actions/initialHistory.ts
fix(claude): a feed row, kept for the app run, where the proxy transport lost live output
@Juliusolsson05 Juliusolsson05 added the type:chore Maintenance, deps, tests, docs label Sep 27, 2026
@Juliusolsson05

Copy link
Copy Markdown
Owner Author

Batch disposition (B6): #1442 40bf9a3; the title was corrected to drop 'durable' (it survives the app run, not a restart; #1445). OWNER-APPROVED: (B6 proxy) q120 option B bounded to the app-run lifetime; spinner option A. 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 1467 --dry → GATE PASS #1467 (ab0c59e, 0 behind main, checks green, reviews OK). The body is in past tense; the only closing ref is #1381. Merging.

@Juliusolsson05
Juliusolsson05 marked this pull request as ready for review September 27, 2026 22:23
@Juliusolsson05
Juliusolsson05 merged commit a70403e into main Sep 27, 2026
2 checks passed
@Juliusolsson05
Juliusolsson05 deleted the integration/batch-2026-09-27-s branch September 27, 2026 22:23
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

Development

Successfully merging this pull request may close these issues.

claude feed: show a missing-span marker when the proxy transport reports a gap

1 participant