v1.7.20 — eliminate chronic DAG stall
v1.7.20 — eliminate the chronic DAG stall (certified-path Bullshark support)
Fixes the long-standing NarwhalTusk stall that wedged the chain every ~16 min (watchdog-restart loop, empty blocks, unreliable tx inclusion).
Root cause: countSupportLocked credited a validator as supporting leader L only via a DIRECT parent link at R+1..R+3. When the fast validator raced ahead, its R+1 cert omitted L, and genuine INDIRECT supporters (R+2/R+3 certs whose certified causal history includes L) were never counted → support stuck at 2 < 2f+1=3 → the wave never committed.
Fix: count support via a CERTIFIED PATH to L (bounded BFS over real parent links, floored at leaderRound) — the actual Bullshark commit rule. Pure function of the immutable DAG → deterministic (same DAG → same commit), never over-counts → cannot fork; R+1 semantics unchanged.
Verified: a deterministic repro test (dag_stall_repro_test.go) FAILS on the old code (support=2/committedRound=0) and PASSES with the fix; full narwhaltusk suite green; and on the live 4-validator testnet the chain ran 17 min with the watchdog OFF, height advancing monotonically, zero stalls (before: a stall every ~16 min).
Also reverted the ineffective 1.7.19 adaptive-wait change. Linux amd64. chainId 808080.