The Bailian signatureChat and non-streaming tools work. A streamed first delta has identity, continuation deltas serialize empty strings, and the completed call reaches policy unnamed.
Do not debug the wrong boundary.
name: "read"The identity survived. Inspect catalog, preset, and tool policy.
name: ""The identity was lost before policy. Inspect ordered wire deltas.
The overwrite happens before execution.
First
→
id + nameContinue
→
"" + ""Translate
→
overwriteClose
→
"" + ""Policy
refuseCapture the smallest decisive bundle.
- WireOrdered deltas for one call index, including omitted versus explicit empty fields.
- SessionRaw chunks and the completed
tool/callidentity. - Route A/BThe same read-only prompt through empty-value and omission-style routes.
first { id: "call_8f2", name: "read" }
next { id: "", name: "" }
final { callId: "", name: "" }
policy tool "" is disabled
Keep the safety boundary intact.
Repeated empty calls spend budget without producing evidence.
Use an authorized omission-style route, such as the reported official or Bailian Qwen controls.
Policy is right to reject an unidentified effect.
Ship the regression, not just the guard.
- 01First non-empty identity survives empty-string and null continuation fields.
- 02All argument fragments still concatenate in order.
- 03Interleaved call indexes keep independent identities.
- 04A never-identified call fails loudly before policy.
- 05Session and execution record the same call ID and name.
- 06Web and headless expose the same protocol failure.
Primary evidence.
- Bailian report #3464
- Earlier null-continuation report #3281
- rc.8 DeepSeek stream translator
- rc.8 BlockAssembler close contract
Keep the complete incident runbook.
The canonical guide includes the Bailian control matrix, safe capture, route isolation, source repair shape, eight acceptance gates, and a minimal report template.
Read the complete guide