{
  "repo": "core",
  "version": "7.33.0",
  "from": "a36eb21ebe39f5191f30102623e1570c3eb77f41",
  "to": "v7.33.0",
  "added": [],
  "removed": [],
  "changed": [],
  "narrowed": [
    {
      "id": "F4",
      "source": "behaviorFlips.summary",
      "text": "Behaviour change with a NARROWING (#1121; +0 exports): ONE resolution chain for every model-call watchdog (`resolveWatchdogMs`): construction config (an explicit `0` is OFF) > per-call advisory > the engine default constant (`STALL_FIRST_BYTE_MS` 300 000 + the upload allowance / `STALL_FIRST_TOKEN_MS` 600 000 / `STALL_IDLE_MS` 300 000, F5). The old third level \"both absent ⇒ off\" is retired: a first-party brain built with no timeout fields and driven without the Runner's advisory (a bare SDK brain; compaction and side-query calls) now arms all three — a call that never gets headers ends after 301 s + a widened 601 s retry, one with no delta after 600 s, silence after a delta after 300 s (the same 300 s the transport's body clock used to give such a call, now the engine's own watchdog announcing a `stall` instead of a transport failure; an Anthropic `ping` is not a content delta, so with text already streamed the call is committed by tier A, \"Response stalled mid-stream. The response above may be incomplete.\"). `0` on a watchdog now means no bound at all on that segment, the transport's included (F2). NARROWING: such a brain whose fetch keeps no clock of its own (a `fetchImpl` that is not undici's, a test double) waited indefinitely on every segment and is now cut at those defaults; on Node's fetch it was bounded by the transport's 300 s clocks — the header cut reported `transport` and re-sent through the shared ladder up to `maxRetries` times — and is now bounded by the engine's (headers 301 s + one widened 601 s retry; first token 600 s, wider; idle 300 s, the same bound under a new announcer). WHO IS HURT: a deployment that constructed a first-party brain with no timeout fields and relied on it having none. COMPENSATION: `0` on the field it wants off, or a larger value."
    }
  ],
  "closedSetMembers": [],
  "closedSetsUnreadable": [],
  "typeKeys": [
    {
      "type": "AnthropicBrainConfig",
      "at": [
        "src/brain/anthropic.ts:25"
      ],
      "added": [
        "firstByteTimeoutMs"
      ],
      "addedDetail": [
        {
          "key": "firstByteTimeoutMs",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [
        "connectTimeoutMs"
      ],
      "breaking": true,
      "criteriaCovered": true
    },
    {
      "type": "BrainTimeoutConfig",
      "at": [
        "src/brain/timeout.ts:166"
      ],
      "added": [
        "firstByteTimeoutMs"
      ],
      "addedDetail": [
        {
          "key": "firstByteTimeoutMs",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [
        "connectTimeoutMs"
      ],
      "breaking": true,
      "criteriaCovered": true
    },
    {
      "type": "OpenAIBrainConfig",
      "at": [
        "src/brain/openai.ts:27"
      ],
      "added": [
        "firstByteTimeoutMs"
      ],
      "addedDetail": [
        {
          "key": "firstByteTimeoutMs",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [
        "connectTimeoutMs"
      ],
      "breaking": true,
      "criteriaCovered": true
    },
    {
      "type": "OpenResponsesBrainConfig",
      "at": [
        "src/brain/open-responses.ts:101"
      ],
      "added": [
        "firstByteTimeoutMs"
      ],
      "addedDetail": [
        {
          "key": "firstByteTimeoutMs",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [
        "connectTimeoutMs"
      ],
      "breaking": true,
      "criteriaCovered": true
    },
    {
      "type": "StallTimeouts",
      "at": [
        "src/engine/llm/types.ts:70"
      ],
      "via": "CompleteSimpleFn.SimpleStreamOptions.StreamOptions.stallTimeouts",
      "added": [
        "firstByteMs"
      ],
      "addedDetail": [
        {
          "key": "firstByteMs",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [
        "connectMs"
      ],
      "breaking": true,
      "criteriaCovered": false
    },
    {
      "type": "StreamEngineConfig",
      "at": [
        "src/brain/stream-engine.ts:45"
      ],
      "via": "AnthropicBrainConfig.StreamEngineConfig",
      "added": [
        "firstByteTimeoutMs"
      ],
      "addedDetail": [
        {
          "key": "firstByteTimeoutMs",
          "optional": true
        }
      ],
      "addedRequired": [],
      "removed": [
        "connectTimeoutMs"
      ],
      "breaking": true,
      "criteriaCovered": false
    }
  ],
  "typeKeysUnreadableArms": [],
  "typeKeysFlattenedCount": 217,
  "declarationMoves": [],
  "mintMoves": [],
  "criteriaObserves": [
    {
      "kind": "taskEventField",
      "name": "status.attempt",
      "assertions": [
        "G1.b"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "status.detail",
      "assertions": [
        "G1.a"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "status.errClass",
      "assertions": [
        "G1.a"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "status.maxRetries",
      "assertions": [
        "G1.b"
      ]
    },
    {
      "kind": "taskEventField",
      "name": "status.timeoutMs",
      "assertions": [
        "G1.a",
        "G2.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "AnthropicBrainConfig.firstByteTimeoutMs",
      "assertions": [
        "G3.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "AssistantMessage.errorMessage",
      "assertions": [
        "G3.a",
        "G4.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "AssistantMessage.partialFinalized",
      "assertions": [
        "G4.c"
      ]
    },
    {
      "kind": "typeMember",
      "name": "AssistantMessage.stopReason",
      "assertions": [
        "G3.a",
        "G4.a",
        "G4.b"
      ]
    },
    {
      "kind": "typeMember",
      "name": "Brain.stream",
      "assertions": [
        "G3.a",
        "G4.a",
        "G4.c"
      ]
    },
    {
      "kind": "typeMember",
      "name": "BrainTimeoutConfig.firstByteTimeoutMs",
      "assertions": [
        "G1.a",
        "G2.a",
        "G3.a",
        "G4.a",
        "G4.b"
      ]
    },
    {
      "kind": "typeMember",
      "name": "BrainTimeoutConfig.firstTokenTimeoutMs",
      "assertions": [
        "G2.a",
        "G4.a",
        "G4.b"
      ]
    },
    {
      "kind": "typeMember",
      "name": "BrainTimeoutConfig.idleTimeoutMs",
      "assertions": [
        "G4.b",
        "G4.c"
      ]
    },
    {
      "kind": "typeMember",
      "name": "OpenAIBrainConfig.fetchImpl",
      "assertions": [
        "G1.b",
        "G2.a",
        "G2.b"
      ]
    },
    {
      "kind": "typeMember",
      "name": "OpenAIBrainConfig.firstByteTimeoutMs",
      "assertions": [
        "G1.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "OpenAIBrainConfig.maxRetries",
      "assertions": [
        "G1.b"
      ]
    },
    {
      "kind": "typeMember",
      "name": "OpenResponsesBrainConfig.firstByteTimeoutMs",
      "assertions": [
        "G3.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "RunWorkflowOptions.stallMs",
      "assertions": [
        "G5.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "RunWorkflowOptions.timers",
      "assertions": [
        "G5.a"
      ]
    },
    {
      "kind": "typeMember",
      "name": "TaskRegistry.list",
      "assertions": [
        "G3.b"
      ]
    },
    {
      "kind": "typeMember",
      "name": "TaskRegistry.runningShellIds",
      "assertions": [
        "G3.b"
      ]
    },
    {
      "kind": "typeMember",
      "name": "TaskResult.result",
      "assertions": [
        "G2.b",
        "G4.c"
      ]
    },
    {
      "kind": "typeMember",
      "name": "TaskResult.terminal",
      "assertions": [
        "G1.a",
        "G1.b",
        "G2.a",
        "G2.b",
        "G4.c"
      ]
    }
  ],
  "consumersHint": {
    "cli": [],
    "server": [],
    "sdk": [],
    "note": "scanned cli@4e593722 server@907e1c76 sdk@4fe310e — a name listed is MENTIONED there today, which is evidence of consumption, not proof of it. Ledger files (**/docs/core-consumption/**, **/docs/wire-consumption/**, **/*LEDGER*.json) are not evidence of use — server: 4 name(s) matched ONLY in bookkeeping files and were set aside (AnthropicBrainConfig, BrainTimeoutConfig, OpenAIBrainConfig, OpenResponsesBrainConfig)"
  },
  "breakingCount": 6,
  "breakingItems": [
    "type lost keys: AnthropicBrainConfig -connectTimeoutMs",
    "type lost keys: BrainTimeoutConfig -connectTimeoutMs",
    "type lost keys: OpenAIBrainConfig -connectTimeoutMs",
    "type lost keys: OpenResponsesBrainConfig -connectTimeoutMs",
    "type lost keys: StallTimeouts -connectMs",
    "type lost keys: StreamEngineConfig -connectTimeoutMs"
  ],
  "toResolvedAt": "0ce5bb4b0d729b70f84bdd3ed2ea93bbdaedb68a"
}
