Serializable snapshot of an OpenVertexTypeIndex. Designed to
round-trip via serde_json for the vtype_enum-style
collect/validate workflow. Non-generic — the typed tileset is
reconstructed by the caller from tile_angles.
BFS-built catalog of every OpenVertexType reachable from a
tileset’s first-glue junctions, with TransitionInfos between
them and a VTypeKind classification for each.
A single transition in the VT graph: gluing tile tile_id to
src_id’s recorded witness, with the matched edge anchored at
tile_offset on the tile and the focus vertex consumed on side,
produces a patch whose junction is the VT with id dst_id
(or seals the focus if dst_id == CLOSED_ID).
One transition record. Mirrors TransitionInfo one-to-one; the
closed_vt_id index of the destination closed VT is not retained
(a closing transition is identified by dst_id == CLOSED_ID).
One VT record in a Collection: the canonical
OpenVertexType, its VTypeKind classification, the neighbor
junction offsets in the witness, and the witness boundary itself.
Sentinel destination id for transitions that seal the focus vertex
(dst_id == CLOSED_ID). Same convention as
TransitionInfo::dst_id; preserved in the serialized form so a
loader can distinguish “transition to closed” from “transition to
open VT id N”.
Sentinel destination id used by closing transitions in
TransitionInfo::dst_id: a transition with dst_id == CLOSED_ID
seals the source vertex (no successor VT). All real VT ids are
1-based and >= 1, so id 0 is reserved.