With the new/updated test it's more clear now what is going on:
1. system refreshes core20/kernel
2. kernel fails to boot, system gets reset
3. bootloader falls back to "good" kernel, boots again
4. system boots up with "try_base=new-core20", that works fine
5. bootOk runs, detects that modeenv is fine and updates modeenv to not have "trying" anymore
6. snapd detects rollback-accross-reboot for the kernel snap
7. runs undo on kernel+base
8. the undo of the base triggers
a) a rollback to the old base which now triggers a new "base_status=try" cleared that status earlier already
b) a cleanup of the "new" base because that got undone because of the kernel+base undo
c) now the system reboots but has "base=new-core (no longer on the system)", "try_base=old-core"
9. the system fails to boot because in snap-bootstrap we error hard (bootstate20.go:genericInitramfsSelectSnap) if the base=snap snap is missing.
With the new/updated test it's more clear now what is going on:
1. system refreshes core20/kernel new-core20" , that works fine accross- reboot for the kernel snap go:genericInitr amfsSelectSnap) if the base=snap snap is missing.
2. kernel fails to boot, system gets reset
3. bootloader falls back to "good" kernel, boots again
4. system boots up with "try_base=
5. bootOk runs, detects that modeenv is fine and updates modeenv to not have "trying" anymore
6. snapd detects rollback-
7. runs undo on kernel+base
8. the undo of the base triggers
a) a rollback to the old base which now triggers a new "base_status=try" cleared that status earlier already
b) a cleanup of the "new" base because that got undone because of the kernel+base undo
c) now the system reboots but has "base=new-core (no longer on the system)", "try_base=old-core"
9. the system fails to boot because in snap-bootstrap we error hard (bootstate20.