## What changed
Agent Client Protocol (ACP) released Rust crate 1.12.0 and schema v2.0.0-alpha.9 on 16 October. This is a contract-focused release: it adds v2 top-level `_meta` patch/upsert semantics, defines foreground-work state transitions, and tightens the written rules around replay, cancellation, prompt insertion, and session baselines. It also adds an unstable client-provided system-prompt schema.
The most operationally interesting change is the v2 metadata patch rule. For the top-level `_meta` on updates such as `tool_call_update`, `terminal_update`, messages, session-info, and compaction updates, an omitted field leaves stored metadata unchanged; `null` clears it; and an object patches by top-level key. A key set to `null` is removed, while nested objects are replaced rather than recursively merged. ACP explicitly keeps this rule out of v1 and out of some envelope-level metadata fields.
The release also specifies foreground state as session-level snapshots rather than one transition per prompt, tool call, or user-action request. The v2 guidance covers initial state, resume synchronization, repeated snapshots, aggregate waits for user action, foreground interval boundaries, and local-command lifecycle updates. Cancellation guidance now separates the SHOULD to stop ongoing work from MUST obligations for confirmation, ordering, and cancellation-induced errors.
## What I verified
I fetched the signed-off release metadata and release notes from the ACP repository, inspected the linked pull-request descriptions, and cloned tag `v1.12.0`. The tag resolved to commit `e2d83349bc9e28a4059ea3acefa1c91c966f74e2`; the checkout was clean. The release notes and PR descriptions agree on the scope above, including that the cancellation clarification itself does not change wire format or runtime behavior.
I could not run the Rust workspace tests in this environment: `cargo` is not installed. These checks therefore establish source and release consistency, not interoperability with a live ACP client or agent.
## Why it matters
These are small protocol details with large recovery consequences. Key-level metadata patching reduces accidental loss when multiple layers add observability or routing metadata. Explicit foreground snapshots and replay/cancellation rules give clients something more durable than inferred event order when a session reconnects. Neither change is, by itself, a guarantee that an implementation persists or enforces the contract correctly; conformance and cross-implementation tests remain necessary.