Skip to content

Remove the vendored ACPX transient-environment patch after a released scoped seam passes continuity #566

Closed

Description

@taras

Purpose

Issue #561 vendors the smallest ACPX 0.12.0 runtime closure with one local
agentProcessEnv patch. It lets XMD deliver the exact observed Claude
executable path to ACP children without retaining that path in ACPX session
state or mutating process.env.

Remove the snapshot when a released ACPX version supplies the same scoped,
non-retaining child-process environment seam. This is removal, not an ACPX
upgrade bundled with unrelated provider work.

Exit gate

A candidate released ACPX version replaces the vendor only when all of these
pass on one exact revision:

  • its child environment reaches every agent child used by doctor, ensure,
    reconnect, control and turn paths;
  • that environment is absent from session options, retained session records,
    events, status, diagnostics and the parent process environment;
  • resumeSessionId receives the bound route UUID unchanged and the canonical
    provider assertion must match it before the first turn;
  • the deterministic transient-environment, binding, runtime-lifecycle,
    legacy/replay, missing-history and identity-mismatch regressions pass;
  • the opt-in installed-Claude native-to-ACP marker proof recovers native
    history through a marker-free ACP Prompt, and its independent absent-identity
    case refuses without a turn;
  • Deno cached/no-node-modules build and release compile, the npm package, JSR
    dry run and the repository clean/composability verifier pass; and
  • the ordinary workflow ACP-only WSL/WAL profile remains independent of machine
    routes, coordinator and executable observation.

Removal

  • replace packages/acp/src/acpx-runtime.ts with the released package import;
  • remove packages/acp/vendor/acpx, its formatter/linter/typecheck/publish
    exceptions, exact-delta verifier, third-party notice entry and direct SDK
    dependency if nothing else owns it;
  • regenerate only the dependency locks the released package changes through
    the repository dependency procedure;
  • update architecture and ACP/native-launch specifications to name the
    released seam; and
  • retain the behavioral regressions and real continuity gate.

Related: #561 and agentclientprotocol/claude-agent-acp#1019.

Released-candidate assessment (2026-10-28)

The pinned production runtime is still the patched [email protected] closure. Upstream 0.15.0 released a snapshotted, child-only agentProcessEnv overlay. The latest inspected release is 0.21.1; its public contract and client creation carry that overlay. Version 0.21.0 additionally introduced opt-in inherited-environment allow/block lists. These are release/source findings, not a passing XMD continuity or distribution test.

Qualify this released seam against the existing transient-environment regressions and retire the redundant local environment behavior when its contract passes. Preserve the existing executable-binding and non-retention guarantees, including any protected-authentication precedence differences in the upstream environment merge. Do not infer a need for paid per-release certification merely from a new version: follow #891's accepted integration-verification policy and reuse applicable evidence.

The provenance now records three independent ACPX patches. #629 owns response metadata; the materialization patch delivered by closed #648 supplies explicit first-turn backend acceptance and a waitable promotion barrier. In 0.21.1, promptStarted means the writable transport accepted the request, which is a different fact; no equivalent first-turn materialization API was found. Therefore the direct released-package import and whole-directory removal listed above remain conditional on resolving all remaining patch contracts. Plan the released-base migration and individual patch retirements coherently; this issue does not authorize dropping acceptance guarantees.

Coordinate #629 against the same candidate. Upstream also changed atomic session writes to collision-resistant temporary paths and later a private staged writer; #933 owns the observed save failure. Reuse that issue's deterministic reproduction when assessing the newer store instead of declaring the observed failure fixed from release notes alone.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions