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.

Registration problemname: "read"

The identity survived. Inspect catalog, preset, and tool policy.

Stream assembly problemname: ""

The identity was lost before policy. Inspect ordered wire deltas.

The overwrite happens before execution.

Firstid + name
Continue"" + ""
Translateoverwrite
Close"" + ""
Policyrefuse

Capture the smallest decisive bundle.

  1. WireOrdered deltas for one call index, including omitted versus explicit empty fields.
  2. SessionRaw chunks and the completed tool/call identity.
  3. 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.

Stop retries

Repeated empty calls spend budget without producing evidence.

Switch route

Use an authorized omission-style route, such as the reported official or Bailian Qwen controls.

Never allow empty

Policy is right to reject an unidentified effect.

Ship the regression, not just the guard.

Primary evidence.

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