@@ -20,6 +20,20 @@ confirm every hunk still maps to an entry here (or, if upstream has since
2020absorbed the same fix, drop the entry and its markers — verify by reading
2121the new upstream code, not by assuming).
2222
23+ ** Vocabulary:** this ledger's disposition labels map onto the CL-7302
24+ ticket taxonomy as follows — "Promotion candidate" = Upstreamable,
25+ "Long-lived" = Re-carryable, "Kill candidate" = Droppable, and "Companion"
26+ entries are Re-carryable but ride their primary patch's disposition (they
27+ ship out or die with it).
28+
29+ ** Re-carry status (CL-5697):** at the sync to upstream HEAD ` 0205b07b ` ,
30+ all 17 entries below were re-carried via three-way merge with zero
31+ conflicts. Upstream moved only ` reactor.ts ` (new doom-loop detection:
32+ ` doomLoopThreshold ` , ` toolBatchSignature ` , run-scoped accounting, fatal
33+ break) and ` assembly.ts ` (passthrough change). Every entry now carries a
34+ re-carry note stating the merge cost and the survivability risk going
35+ into the next sync.
36+
2337## adapter-ts-stream-terminal-detector
2438
2539` adapter.ts ` — Adds ` StreamTerminalDetector ` /` ProviderAdapter.isStreamTerminal ` .
@@ -34,6 +48,8 @@ SSE loop.
3448date until upstream adopts; downstream users not using OpenAI Responses
3549protocol can ignore. ** Removal path:** Upstream PR to
3650` @intx/inference ` adding ` isStreamTerminal ` to ` ProviderAdapter ` .
51+ ** Re-carry:** clean three-way at ` 0205b07b ` , zero conflicts. Low risk —
52+ ` adapter.ts ` is stable upstream and untouched by the doom-loop work.
3753
3854## assembly-ts-deps-context-transforms
3955
@@ -49,6 +65,13 @@ a change to the published package.
4965vendored package directly). ** Removal path:** Upstream PR to ` @intx/agent ` to
5066forward ` contextTransforms ` explicitly; then delete both this patch and
5167` harness-ts-context-transforms ` .
68+ ** Obligation:** both ` contextTransforms ` patches have live consumers today —
69+ ` src/session/assemble-runtime.ts:423 ` and ` src/subagent/run.ts:880 ` — so they
70+ must be re-carried on every sync until upstream exposes the field; only then
71+ can they be killed.
72+ ** Re-carry:** clean three-way at ` 0205b07b ` , zero conflicts (upstream touched
73+ ` assembly.ts ` with a passthrough change; the hunk applied cleanly). Low
74+ risk, but the consumer obligation above keeps this on the sync checklist.
5275
5376## errors-ts-classify-abort-reason
5477
@@ -63,6 +86,8 @@ four abort-check sites in `harness.ts`.
6386optional ` reason ` param to ` classifyAbortError ` and enriching ` raw ` . ** Removal
6487path:** Upstream PR adding the optional ` reason ` parameter and ` ClassifiedAbortRaw `
6588type. No kill date until upstream ships it.
89+ ** Re-carry:** clean three-way at ` 0205b07b ` , zero conflicts. Low risk —
90+ ` errors.ts ` sees little upstream churn.
6691
6792## harness-ts-context-transforms
6893
@@ -72,6 +97,10 @@ type. No kill date until upstream ships it.
7297** Disposition:** Kill candidate — pair with ` assembly-ts-deps-context-transforms ` .
7398** Removal path:** Upstream PR to ` @intx/agent ` exposing ` contextTransforms `
7499explicitly. Ships out together with the assembly patch.
100+ ** Obligation:** live consumers at ` src/session/assemble-runtime.ts:423 ` and
101+ ` src/subagent/run.ts:880 ` — re-carry until upstream exposes the field, then
102+ kill.
103+ ** Re-carry:** clean three-way at ` 0205b07b ` , zero conflicts. Low risk.
75104
76105## harness-ts-inactivity-on-semantic-progress
77106
@@ -84,6 +113,9 @@ produces events from a chunk.
84113** Disposition:** Promotion candidate. Clear upstream bug fix — the inactivity
85114timer should not re-arm on raw bytes. ** Removal path:** Upstream PR to
86115` @intx/inference ` gating re-arm on parsed-event output.
116+ ** Re-carry:** clean three-way at ` 0205b07b ` , zero conflicts. Moderate risk —
117+ upstream reworked retry/failover inside ` harness.ts ` 's ` runInference ` wrapper;
118+ re-verify the SSE-loop arming site on the next sync.
87119
88120## harness-ts-is-stream-terminal
89121
@@ -93,6 +125,8 @@ end-of-turn is a semantic event rather than `[DONE]` or socket close.
93125
94126** Disposition:** Companion to ` adapter-ts-stream-terminal-detector ` . Ships
95127out together when upstream adopts the ` isStreamTerminal ` hook.
128+ ** Re-carry:** clean three-way at ` 0205b07b ` , zero conflicts. Low risk;
129+ same sync-checklist caveat as the inactivity patch above.
96130
97131## harness-ts-commitment-boundary-streaming
98132
@@ -114,6 +148,10 @@ that upstream would need to adopt wholesale, not a simple param fix.
114148** Removal path:** Upstream redesigns ` runInference ` with commitment-boundary
115149streaming built in. No kill date — this is the core streaming architecture
116150for Corbits and likely to remain a fork patch for the foreseeable future.
151+ ** Re-carry:** clean three-way at ` 0205b07b ` , zero conflicts. Priority risk —
152+ upstream moved retry emission into ` harness.ts ` 's ` runInference ` wrapper,
153+ which is exactly the function this patch redesigns; re-verify the
154+ retry-suppression-after-commitment interaction on every sync.
117155
118156## harness-ts-is-committing
119157
@@ -123,6 +161,8 @@ pre-commit metadata).
123161
124162** Disposition:** Companion to ` harness-ts-commitment-boundary-streaming ` .
125163Ships out together.
164+ ** Re-carry:** clean three-way at ` 0205b07b ` , zero conflicts. Priority risk —
165+ tracks the commitment-boundary patch.
126166
127167## reactor-ts-ephemeral-turns
128168
@@ -132,10 +172,15 @@ history, so transient director guidance does not touch the cached transcript
132172prefix. No native equivalent exists upstream. ` index.ts ` re-exports the type
133173(mechanical; no separate marker).
134174
135- ** Disposition:** Long-lived. No upstream equivalent exists and is not planned.
136- Ephemeral turns are a Corbits-specific mechanism for injecting transient
137- director guidance. ** Removal path:** Only if Corbits adopts an alternative
138- mechanism for transient prompt injection. No kill date.
175+ ** Disposition:** Long-lived. Upstream carries no transient-turn or
176+ prompt-injection mechanism as of ` 0205b07b ` (verified by reading the
177+ upstream reactor at that SHA); no upstream issue or PR toward one exists in
178+ the clone. ** Removal path:** Only if Corbits adopts an alternative mechanism
179+ for transient prompt injection. No kill date.
180+ ** Re-carry:** clean three-way at ` 0205b07b ` , zero conflicts. Priority risk —
181+ upstream's new doom-loop detection added run-scoped accounting and a fatal
182+ break path in ` reactor.ts ` ; re-verify that ephemeral turns do not interact
183+ badly with doom-loop signatures or the run accounting on the next sync.
139184
140185## reactor-ts-correlating-ids-leak
141186
@@ -149,6 +194,10 @@ exit clears it.
149194** Disposition:** Promotion candidate. Clear upstream bug fix. ** Removal
150195path:** Upstream PR wrapping ` tryCorrelate ` in try/finally to clear
151196` correlatingIds ` on all exit paths.
197+ ** Re-carry:** clean three-way at ` 0205b07b ` , zero conflicts. Moderate risk —
198+ ` tryCorrelate ` sits adjacent to upstream's new signal-driven resume dispatch
199+ in ` reactor.ts ` ; re-verify exit paths after upstream changes to gate
200+ clearing.
152201
153202## reactor-ts-checkpoint-after-tool-cycle
154203
@@ -162,19 +211,26 @@ committed only at cycle terminals).
162211interrupting after a tool cycle must not lose committed tool turns.
163212** Removal path:** Upstream PR adding ` commitCycle() ` call in
164213` executeTools ` when ` addToHistory ` is true.
214+ ** Re-carry:** clean three-way at ` 0205b07b ` , zero conflicts. Moderate risk —
215+ upstream's doom-loop fatal break fires from inside the tool cycle; re-verify
216+ that a doom-loop break still commits (or intentionally does not commit) the
217+ in-flight cycle.
165218
166219## reactor-ts-skip-unchanged-history
167220
168221` reactor.ts ` — Skip re-serializing unchanged history on checkpoint.
169222` commitCycle ` now compares ` stateManager.getTurnsRevision() ` against the
170223revision most recently written and skips ` contextStore.writeTurns ` when
171224nothing changed, avoiding an O(history) re-serialize (including historical
172- tool-output blobs) on every checkpoint .
225+ tool-output blobs) on no-op checkpoints .
173226
174227** Disposition:** Promotion candidate. Performance optimization with no
175228behavioral change — reduces checkpoint cost from O(history) to O(1) when
176229no turns were added. ** Removal path:** Upstream PR adding revision check
177230in ` commitCycle ` .
231+ ** Re-carry:** clean three-way at ` 0205b07b ` , zero conflicts. Low risk;
232+ depends on the ` turnsRevision ` plumbing in ` state.ts ` , which is itself a
233+ patch (below).
178234
179235## reactor-ts-after-checkpoint-director-only
180236
@@ -189,6 +245,7 @@ its perspective, a single checkpoint.
189245spurious double ` afterCheckpoint ` events that confuse directors.
190246** Removal path:** Upstream PR gating ` afterCheckpoint ` on
191247` hasOverride ` /` pendingMessage !== null ` .
248+ ** Re-carry:** clean three-way at ` 0205b07b ` , zero conflicts. Low risk.
192249
193250## reactor-ts-last-written-turns-revision
194251
@@ -198,6 +255,8 @@ most recently serialized to the context store.
198255
199256** Disposition:** Companion to ` reactor-ts-skip-unchanged-history ` . Ships out
200257together.
258+ ** Re-carry:** clean three-way at ` 0205b07b ` , zero conflicts. Low risk;
259+ tracks the skip-unchanged-history patch.
201260
202261## sse-ts-max-line-length
203262
@@ -209,6 +268,8 @@ otherwise OOM the process.
209268** Disposition:** Promotion candidate. Security/correctness fix — prevents
210269OOM from a stuck or malicious stream. ** Removal path:** Upstream PR adding
211270` MAX_LINE_LENGTH ` cap to SSE line parsing.
271+ ** Re-carry:** clean three-way at ` 0205b07b ` , zero conflicts. Low risk —
272+ ` sse.ts ` has a single upstream commit and is effectively frozen.
212273
213274## state-ts-deep-freeze-turns-revision
214275
@@ -224,6 +285,8 @@ scale with session length. `getTurnsRevision()` also backs
224285O(n) structuredClone on every event for directors that don't inspect turns.
225286** Removal path:** Upstream PR lazy-ifying ` ReactorState.snapshot().turns `
226287with revision tracking.
288+ ** Re-carry:** clean three-way at ` 0205b07b ` , zero conflicts. Low risk —
289+ ` state.ts ` sees little upstream churn.
227290
228291## google-genai-files-ts-body-init-cast
229292
@@ -233,9 +296,39 @@ with revision tracking.
233296gap rather than carrying indefinitely.
234297
235298** Disposition:** Promotion candidate. Typing gap — should be fixed upstream.
236- ** Removal path:** Upstream PR widening ` BodyInit ` to accept ` Uint8Array ` , or
237- Corbits adds a local type assertion wrapper and removes the cast from the
238- vendored patch.
299+ ** Removal path:** Upstream PR widening ` BodyInit ` to accept ` Uint8Array ` so
300+ the cast can be deleted from the vendored file.
301+ ** Re-carry:** clean three-way at ` 0205b07b ` , zero conflicts. Low risk.
302+
303+ ---
304+
305+ ## Upstream promotion ledger
306+
307+ Every Promotion candidate above, as a tracked dependency row per CL-7302.
308+ These are dependencies on upstream maintainers, not work we schedule; the
309+ tracking reference is this ledger until an upstream issue is filed, and the
310+ revisit point is the next vendored sync (see ` docs/VENDORING.md ` ).
311+
312+ | Patch | Upstream ask | Upstream contact | Tracking | Revisit |
313+ | --- | --- | --- | --- | --- |
314+ | adapter-ts-stream-terminal-detector (+ harness-ts-is-stream-terminal) | Add an ` isStreamTerminal ` /` StreamTerminalDetector ` hook to ` ProviderAdapter ` for semantic end-of-stream protocols | Alexander Guy <alexander.guy@pm.me > | This ledger (vendor/intx-inference/PATCHES.md#adapter-ts-stream-terminal-detector) | Next vendored sync |
315+ | errors-ts-classify-abort-reason | Add optional ` reason ` param to ` classifyAbortError ` , carried as ` raw: { origin } ` | Alexander Guy <alexander.guy@pm.me > | This ledger (#errors-ts-classify-abort-reason) | Next vendored sync |
316+ | harness-ts-inactivity-on-semantic-progress | Gate the inactivity watchdog's re-arm on parsed events, not raw SSE bytes | Alexander Guy <alexander.guy@pm.me > | This ledger (#harness-ts-inactivity-on-semantic-progress) | Next vendored sync |
317+ | reactor-ts-correlating-ids-leak | Wrap ` tryCorrelate ` in try/finally so ` correlatingIds ` clears on success dispatch paths | Alexander Guy <alexander.guy@pm.me > | This ledger (#reactor-ts-correlating-ids-leak) | Next vendored sync |
318+ | reactor-ts-checkpoint-after-tool-cycle | Call ` commitCycle() ` in ` executeTools ` when ` addToHistory ` is true | Alexander Guy <alexander.guy@pm.me > | This ledger (#reactor-ts-checkpoint-after-tool-cycle) | Next vendored sync |
319+ | reactor-ts-skip-unchanged-history (+ reactor-ts-last-written-turns-revision) | Skip ` contextStore.writeTurns ` when ` getTurnsRevision() ` is unchanged | Alexander Guy <alexander.guy@pm.me > | This ledger (#reactor-ts-skip-unchanged-history) | Next vendored sync |
320+ | reactor-ts-after-checkpoint-director-only | Gate ` afterCheckpoint ` on ` hasOverride ` so auto-commits do not emit it | Alexander Guy <alexander.guy@pm.me > | This ledger (#reactor-ts-after-checkpoint-director-only) | Next vendored sync |
321+ | sse-ts-max-line-length | Cap the unterminated SSE line buffer (` MAX_LINE_LENGTH ` , 16 MiB) | Alexander Guy <alexander.guy@pm.me > | This ledger (#sse-ts-max-line-length) | Next vendored sync |
322+ | state-ts-deep-freeze-turns-revision | Make ` ReactorState.snapshot().turns ` a lazy, revision-tracked getter | Alexander Guy <alexander.guy@pm.me > | This ledger (#state-ts-deep-freeze-turns-revision) | Next vendored sync |
323+ | google-genai-files-ts-body-init-cast | Widen ` BodyInit ` to accept Node's ` Uint8Array ` typing so the cast can be removed | Alexander Guy <alexander.guy@pm.me > | This ledger (#google-genai-files-ts-body-init-cast) | Next vendored sync |
324+
325+ Contact basis: identified from the read-only upstream clone
326+ (` faremeter/interchange ` ); Alexander Guy <alexander.guy@pm.me > is the
327+ overwhelmingly dominant author of every upstream file these patches touch
328+ (` packages/inference/src/{reactor,harness,adapter,errors,sse,state}.ts ` ,
329+ ` providers/google-genai-files.ts ` , ` packages/inference/src/assembly.ts ` ),
330+ so he is the named contact for every row. Next action per row: file the
331+ upstream issue and replace the ledger tracking reference.
239332
240333---
241334
0 commit comments