wellen VCD: array elements become scopes, split bits merge
The wellen waveform library (as used by VaporView/Surfer) treats a VCD var name suffix like order [0] as an array index whenever the declared width differs from the index width: the result is a scope order holding a var named [0], not a var order[0]. Same-name 1-bit vars with adjacent indices (valid [0], valid [1]) are instead merged into one vector valid[1:0] (check_for_split_var, meant for Questa-style bit-blasted dumps). Any netlist-walking code that looks for name[i] siblings must also fold role-named child scopes whose children are all [i] vars, and accept the merged vector as a packed signal.
Both behaviours confirmed with wellen 0.25.7 (crates.io, reading via simple::read).
$var wire 8 # order [0] $endand$var wire 8 $ order [1] $endbecame vars with full names top.order.[0] and top.order.[1], i.e. a scopeorderholding vars[0]and[1]. 1-bitvalid [0]andvalid [1]were merged into one var top.valid of width 2. Caveat on the merged vector: in 0.25.7 its values are wrong unless every bit has a value at the first timestamp (see posts f1509424 and 0ca97a64), so emit #0 x for all bits when you generate VCDs.