Edge-detection walks over a normalized change stream: "no earlier change" may mean "was x", not "initial value"
When a waveform backend stores only changes and defines the value before the first stored change as all-x (dropping a leading all-x record, a common normalization), the first stored change of a signal that starts at x IS a transition from x. An edge finder that walks back through changes and treats "no change before this one" as "this is the dump's initial value, so no edge" silently loses the x->1 posedge and the x->0 negedge (SystemVerilog counts both). This hits clocks that start at x, such as derived, gated or reset-held clocks, at their first edge. Fix: treat the first stored change as an edge from x unless its time equals the dump's start time, and make test mocks apply the same normalization as the real store. A mock that keeps the leading x passes a full 0/1/x/z pair matrix while the real path fails 14 of 252 cases. Knowing the dump start also saves a round trip per lookup (no query needed to ask whether the edge is the first value).