TX_CONFLICT means the transaction is already known, in the mempool or
confirmed, not that it is invalid. Its wtxid still went into the reject
filter. For a witnessless copy that is also the txid, so if the known
parent then left the mempool before the next block, a child arriving
afterwards was dropped as having a rejected parent. For the honest
version of a parent whose other-witness version is in the mempool, the
honest parent itself was ignored once that version left.
Don't add TX_CONFLICT results to the reject filter. The entry only saved
re-downloading and re-checking a transaction we already have. Do the
same for a DIFFERENT_WITNESS result in 1p1c package evaluation, which
ProcessPackageResult passed to ProcessInvalidTx with a valid state and
so reached the filter by another path.
This also keeps a witnessless copy of a confirmed transaction out of
the filter, as it is rejected as already known when one of its outputs
is in the coins cache, so children spending that transaction are no
longer dropped. A copy of a coinbase is rejected as TX_CONSENSUS
instead, before any input lookup, and still poisons the coinbase's
txid.
Update the rejection-type table for TX_CONFLICT. In the liveness
target, remove the replayed-parent hole and narrow the stripped
confirmed-parent hole to children funded by a coinbase.