mirror of
https://github.com/luxfi/consensus.git
synced 2026-09-24 00:26:58 +00:00
TestNovaQuasarMatrix_FourOfFive_ExportsQuasar and _Partition_MajorityProducesNeither Exports failed roughly one run in three under full-suite CPU load, both with the same signature — tips=map[], nothing exported at all, after a 25s wait. An export-liveness test failing a third of the time trains a reader to re-run instead of read, which is how a real failure gets waved through. It was not slowness and not a too-short bound. promoteQuasar emits an export cert only for a block whose OWN Nova cert carried >⅔ of stake; a block finalized on the bare α quorum without that supermajority attesting in its round stays Nova-only PERMANENTLY, and that is deliberate — "no per-block retroactive promotion is needed for liveness" precisely because a later fully-voted block carries the frontier past it, and a Quasar tip finalizes all its ancestors. So the guarantee is at the FRONTIER, across blocks. Both tests demanded that one specific block export while building no successor, which is a strictly stronger claim than the engine makes. On any run where height 1's cert completed on the minimum quorum, the frontier had nothing to ride and the assertion reported the empty tips of a correctly-behaving fleet. The partition test had the same shape one level up: it drove heights only to a cap of 8, then sat in a 25s waitFor building NOTHING — waiting for an event that by construction nothing could now cause. Both now drive successive honest heights until the frontier moves, bounded by exportTO. Nothing is weakened: the FourOfFive invariant moves from the tip to blk's own HEIGHT, which is where "no two conflicting Quasars at one height" actually lives — a Quasar tip finalizes its ancestors, so comparing the tip to blk flagged honest frontier progress as a fork. Verified: 8/8 FourOfFive, 6/6 the whole matrix family. Runtime drops with the timeouts. Ruled out by execution, recorded so it is not retried: forcing prodParams5Fast (RoundTO 200ms) makes it fail MORE, not less — repolls advance the round and votes are round-scoped, so a shorter round splits the tally across rounds and the cert never reaches ⅔. Co-authored-by: Hanzo Dev <[email protected]>