Expand description
Give every agent the provider it actually runs with, before the bundle
stops deciding it (docs/specs/SPEC_AGENT_BUNDLE_FORMAT_V0_3_2026_10_05.md
§3.3).
Until now a bound bundle’s non-empty provider won over the agent’s own
(resolve_effective_provider_id). From this release the agent’s provider
decides, so an agent whose two values differ would switch CLI. They differ
for agents changed through agent.define updates, and for agents with no
provider at all that m0021 gave a claude bundle. For each, this copies
the bundle’s provider onto the agent, so every agent keeps its CLI.
The bundle rows are left as they are. Bundles live in the store every channel shares, definitions in each channel’s own, and channels migrate separately: a channel migrating later must still find the bundle’s value. Kept, the values are a “suggested for” hint, and an older build, which still prefers them, runs the same CLI as this one.
Same reach as m0021: local definitions with a memory_id (a definition
known only from the global registry carries none, so the bundle never
overrode it). Writes go through agent_def_update, which also updates the
global registry’s copy, the one reads prefer. Idempotent: a second run
finds nothing to change.