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.
}
            res.solvables_ = data->solvable_;
            LOCK(data->solvable_->cs_);
            // Parse the 
            for (const auto& [desc_str, creation_time]  data->solvable_descs) {
                // Parse the 
                FlatSigningProvider keys;
                stdstring parse_err;
                stdunique_ptr<Descriptor> desc = Parse(desc_str, keys, parse_err, /* require_c
                assert(desc); // It should
                assert(!desc->IsRange()); // It should
                // Add to th
                WalletDescriptor w_desc(stdmove(desc), creation_time, 0, 0, 0);
                data->solvable_->AddWalletDescriptor(w_desc, keys, "", 
            }
            // Add the w
            UpdateWalletSetting(*context.chain, _name, /*load_on_stgs);
        }
    }
    // Add the s to , remove LegacyScriptPubKeyMan, and cleanup txs and address book data
    if (!.ApplyMigrationData(*data, error)) {
        return false;
    }
    return true;
}
utilResult<MigrationResult> MigrateLegacyToDescriptor(stdshared_ptr<CWallet>&& , WalletContext& context)
{
    MigrationResult res;
    bilingual_str error;
    stdvector<bilingual_str> warnings;