The "flaw" is that other miners can make it very difficult for anyone to get testnet coins. It should be possible to get some testnet coins at any time when you need them, so there's no need to hoard them already.
You can do it, if you apply testnet rules, on top of mainnet. Then, you mine some mainnet blocks on CPU, you do your tests, and then, your blocks are invalidated, so there is no chance, to get any value out of them. The whole concept is called "weak blocks", because you produce a regular block, in exactly the same way, as ASICs would, but you stop, after reaching some lower difficulty (for example equal to one, if you use your CPU).
Or infinite inflation
If coins will not be stale, then they will be traded anyway. Note that testnet4 is still below block number 210,000. Setting the block reward into 50 tBTC4 constantly, and disabling halvings, wouldn't change anything.
or doublings instead of halvings
Then, you will quickly go outside 21 million coins, so you will re-introduce Value Overflow Incident (or worse bugs). Also, as in the previous idea, we are still before the first halving, and it is very likely, that test coins will be traded sooner, than after 4 years, so any halving rules are irrelevant. Also note, that there are more testnet4 coins, but testnet3 is valued more, for example because the old chain is faster, and can confirm more spammy transactions per second.
testnet is supposed to be more or less equivalent to Bitcoin
If you want to reach mainnet conditions, then you should follow mainnet mempool. It is that simple. And you can produce weaker blocks, if you want to just test, if something is valid or not.
I assume the block hashes with many zeros are ASIC blocks, right?
Eight leading hex chars means 32 leading zero bits, so if you can see 8-9 zeroes at the beginning, then it is probably a CPU-mined block. But: you can always just check the difficulty, if it is 0x1d00ffff (CPU block) or not (ASIC block), and filter it by that.
If that's correct, testnet4 has barely any ASIC miners.
ASIC miners can also mine CPU blocks. And after 20 minutes, they are forced to do so, by consensus rules.
Do I understand correctly that CPU mined blocks still add to the difficulty at the next difficulty adjustment?
Exactly. If after one week, you have 2016 blocks, where 1008 blocks are CPU-mined, and 1008 blocks are ASIC-mined, then the difficulty should be the same (or almost the same). But it is doubled. Which means, that consensus rules push ASICs out, until reaching 10 minutes per block on average, no matter if it is 20-minute CPU block, or any-time ASIC block. Which means, that in the corner case, CPU miners can force ASICs to mine a single block per two weeks. But: in practice, there will be more ASIC blocks than that, because CPUs push block time 20 minutes forward, instead of 10 minutes, so it leaves some room for ASICs anyway (because for example if the average block time is 15 minutes, the difficulty will be decreased).
if I want to test things, it's very nice if it's compatible with others
It is compatible. Your blocks are valid. They appear in "getchaintips". They are just stale, but perfectly valid, and anyone can use "preciousblock", to pick your chain specifically, and mine on top of it.
If the rest of the network doesn't recognize your blocks, you can't test things.
If your blocks are not stale, then they are traded.
So a smart ASIC miner would also mine CPU blocks to get more blocks for the same hashrate?
Of course. After 20 minutes, they are forced to do so by consensus rules. But: it is more profitable, to just keep everything 2 hours in the future. And the best way is to have a long, local chain, and share things, that are within 2 hours window.
Does that mean the testnet (4) market is based on future scarcity expectations?
The price per coin was much higher in the past, but CPU miners just dumped it, when they sold something around 100k tBTC4.
Hoarding while it's cheap to sell later?
I don't think waiting is a good option, where the whole network can be resetted again soon. Also, testnet3 has higher price per coin than testnet4. And it will take some time, to reproduce the whole spam from testnet3 into testnet4.
What if it's ASIC mined?
Some blocks are ASIC-mined, some are CPU-mined. You can compare chainwork. Testnet3 has something around 2^75, testnet4 something around 2^70, and mainnet something around 2^95.
Testnet shouldn't be competing with real Bitcoin for ASIC power.
That's why I think all test coins should be just weak blocks, based on mainnet. But: people should try other ideas first, should see, how they fail, and then, maybe they will be convinced.
"Future blocks" shouldn't exist.
You can put any future timestamp you want inside your blocks, because sooner or later, clocks in other nodes will get there. Even if you mine mainnet coins, then still: nothing stops you from putting future timestamps. And if 51% of the mining power would set block times into 20 minutes intervals, instead of 10 minutes, then they could increase their domination for a while, and lower the network difficulty. Obviously, in that case, it will be lowered for everyone, so it will quickly increase again, when "honest" miners will use the current time. But still: putting future timestamps is profitable. Maybe not honest, but definitely profitable. In all networks, which share Bitcoin rules.
If someone doesn't use the correct time on his system, why not just reject their blocks?
Because when you download the history, then there is no way to tell, who put the right time in the past. You can judge it, if you witness it now. But if you have a history, then you can only view it in a way, which is relative to the current timestamp. Which means, that even if there would be a strict rule, to use the current time, with higher accuracy, then, you can still connect with some new node, and share a history with fake timestamps, because Proof of Work is the only protection in that case.
Also, a little inaccuracy is needed, because there are some delays, related to propagating blocks in the network. And if you make those rules too strict, then imagine losing a block, only because your time is different by one second, than in some other node. And imagine node A, rejecting your block (one second too far in the future, sorry, rejected), and then, node B, accepting your block (because now, one second elapsed, and it is correct).
But this should only happen if the last block was really 20 clock-minutes ago.
You can tell the current time here and now. But you cannot tell, if a block, mined one day ago, was honestly mined, or was it future-timestamped, or past-timestamped, for whatever reason.