Sure, good point RE: variant length never being 0. I agree that INDEL calls should always have the shorter allele be length==1 (alt for deletion, ref for insert). For the canonical representation, we could use some of the code that is in the normalization utilities (utils.NormalizationUtils); this code is used for INDEL canonicalization during indel realignment.

SVs are a can of worms... that I think people tend to over-complicate. I agree that we should table that until a later pull request. A while back, for SVs we supported a nested schema for imprecise breakpoints and whatnot.