What gets replaced
set on a name you already stored replaces its value and says nothing about
it. The previous value is gone, and the keyring keeps no history to recover it
from.
run sets the names you give it in the command's environment, so a variable
the shell already exported is overridden for that command. Names you leave out
are passed through untouched.
run, export and pack each check every name before doing anything, so a
name you never stored stops them with nothing done. A command cannot start with
half of its secrets, a startup file cannot ask for a value that is not there,
and a bundle cannot carry half of a profile.