Restart recovers rc.2. Scope ownership repairs the tool collision.Closing a Session does not dispose its process-lifetime standing preset mount.

One error, three collision paths.

Same presetgeneration A + B

A live Session keeps the superseded graph mounted.

Host providersbuilt-in + copy

Both register Service, Event, Builtin, and Tool provider IDs.

rc.2 Agent toolsstandard + cordis

Both root-register pwsh; the second preset fails.

Current source gives tools a standing scope.

Mount

Each preset owns one standing scope.

Join

Agents inherit their preset scope.

Register

tools.register() writes to the calling layer.

Reject

Duplicates inside one layer still fail loudly.

Do not delete tool-pwsh from a shipped preset.

Upgrade one complete graph, then prove standard and cordis Sessions can both call their scoped tool before and after disposal.

Choose the contract by plane.

True Host providercanonical entry + holders

Equivalent manifests may share; unequal manifests fail.

Agent toolsibling scope layers

The same name may exist in standard and cordis without global dedupe.

Operator recoveryswitch back → isolate → upgrade

Preserve the failed RPC and never patch shipped files in place.

Upgrade proof is an execution sequence.

  1. Standard ACreate one Session and run harmless pwsh.
  2. Cordis BSwitch defaults while A stays live; create and execute.
  3. Return AProve its scoped tool survived.
  4. Dispose BCreate standard C, execute, then cold-restart and repeat.

Keep the complete recovery and ownership contract.

The canonical guide covers stale generations, Host holders, rc.2 tool collisions, safe upgrade, scope isolation, and disposal-order tests.

Read the complete guide