monkeys

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.