This is the rc.8 contract.Your client did not lose fields. `dsh-acp` is automation-only and deliberately constructs `toolCall` with only `toolCallId`.

Render only what the wire proves.

Known

Session identity, exact tool-call identity, and the live one-shot option ids.

Unknown

Tool name, command, arguments, target path, effect, and risk level.

Safe default

Apply a predeclared machine policy or show an explicit generic prompt that defaults to reject.

Never infer

Do not decode meaning from an id prefix, label, model text, or stale cached call.

Choose the product mode honestly.

Automationpredeclared Session policy

Select an option offered by the exact request. Missing policy or option cancels.

ACP-only Web UIgeneric confirmation

Say that details are unavailable. Preserve “Allow once”; never imply durable trust.

Rich Web hostauthoritative call registry

Join DSH-native tool events by Session plus exact call id, then redact for display.

Fail closed across every race.

Expire pending cards on result, cancellation, disposal, reconnect, and timeout. One server-side response wins; late or duplicated browser clicks cannot create a new grant.

Primary evidence.

Build the approval boundary, not just the card.

The complete guide includes TypeScript policy handling, a generic prompt, a rich-host correlation design, lifecycle races, Web security controls, and ten acceptance gates.

Read the complete guide