When a block reward is spent together with other outputs in the wallet and that block reward is later orphaned, the wallet does not show the other funds as available anymore.  Even a `-rescan` is not enough - only `-zapwallettxes` or an explicit `abandontransaction` "recovers" the funds.  I prepared a [test case](https://github.com/domob1812/bitcoin/blob/wallet-bug-invalidated-block-rewards/test/functional/wallet_bug.py) that shows this behaviour.

Is this a known issue or the expected behaviour?  While this situation is something that will presumably not occur in practice (as it requires a long reorg), I wonder if that transaction should be automatically abandoned as it seems clear it won't be able to be confirmed anymore.
if (!spk_man->SetupGeneration()) {
                            error = Untranslated("Unable to generate initial keys");
                            status = DatabaseStatusFAILED_CREATE;
                            return nullptr;
                        }
                    }
                }
            }
            // R
            ->Lock();
        }
    }
    NotifyWalletLoaded(context, );
    AddWallet(context, );
    ->postInitProcess();
    // W
    UpdateWalletSetting(*context.chain, name, load_on_start, warnings);
    // L
    if (!(_creation_flags & WALLET_FLAG_DESCRIPTORS)) {
        warnings.push_back(_("Wallet created successfully. The legacy  type is being deprecated and support for creating and opening legacy s will be removed in the future."));
    }
    status = DatabaseStatusSUCCESS;
    return ;
}
stdshared_ptr<CWallet> RestoreWallet(WalletContext& context, const fspath& backup_file, const stdstring& _name, stdoptional<bool> load_on_start, DatabaseStatus& status, bilingual_str& error, stdvector<bilingual_str>& warnings)
{
    DatabaseOptions options;
    ReadDatabaseArgs(*context.args, options);
    options.require_existing = true;
    const fspath _path = fsbridgeAbsPathJoin(GetWalletDir(), fsu8path(_name));