Silent Payments: Light Client Protocol

I’m not sure I’m understanding the problem you’re describing. Scanning over all outputs you should 100% be able to find all outputs (also those with k<0). blindbitd uses this function to scan for outputs.

edit: Looking a bit closer at my implementation, I think I see where the confusion comes from. blindbitd uses all taproot outputs of a block as an input for the scan function. Tweaks are not labeled with their corresponding txid. So we have to scan over all outputs of a block. Then you should always find all outputs. This means scanning over all outputs with k>0 as well. I believe the PR for Bitcoin core does not store txids as well. In Oracle I have an index that stores the txid but only the tweaks are served to the client.