Skip to content

Commit c06bd32

Browse files
committed
Add upstream promotion ledger and re-carry notes to the patch ledger
CL-7302 requires the upstreamable patches to exist as tracked dependency rows with a named upstream contact rather than prose tasks, and requires each entry to record what the CL-5697 re-carry cost and where the next sync is likely to bite. Adds both, maps the disposition vocabulary onto the ticket taxonomy, records the live-consumer obligation keeping the contextTransforms patches alive, and narrows the google-genai typing ask to an upstream-only fix.
1 parent 74b0fe0 commit c06bd32

1 file changed

Lines changed: 101 additions & 8 deletions

File tree

‎vendor/intx-inference/PATCHES.md‎

Lines changed: 101 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,20 @@ confirm every hunk still maps to an entry here (or, if upstream has since
2020
absorbed the same fix, drop the entry and its markers — verify by reading
2121
the 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.
3448
date until upstream adopts; downstream users not using OpenAI Responses
3549
protocol 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.
4965
vendored package directly). **Removal path:** Upstream PR to `@intx/agent` to
5066
forward `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`.
6386
optional `reason` param to `classifyAbortError` and enriching `raw`. **Removal
6487
path:** Upstream PR adding the optional `reason` parameter and `ClassifiedAbortRaw`
6588
type. 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`
7499
explicitly. 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
85114
timer 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
95127
out 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
115149
streaming built in. No kill date — this is the core streaming architecture
116150
for 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`.
125163
Ships 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
132172
prefix. 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
150195
path:** 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).
162211
interrupting 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
170223
revision most recently written and skips `contextStore.writeTurns` when
171224
nothing 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
175228
behavioral change — reduces checkpoint cost from O(history) to O(1) when
176229
no turns were added. **Removal path:** Upstream PR adding revision check
177230
in `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.
189245
spurious 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
200257
together.
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
210269
OOM 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
224285
O(n) structuredClone on every event for directors that don't inspect turns.
225286
**Removal path:** Upstream PR lazy-ifying `ReactorState.snapshot().turns`
226287
with 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.
233296
gap 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

Comments
 (0)