Trivial: add a comment.
Keep track of "root" automata.

Make a distinction between automata that are defined (which can include automata that only exist to be incorporated into others) and top-level "root" automata that are actually named and used.
Store context begin/end in Usage, not automaton.

The context in which we use an automaton should not be stored in the automaton itself: it's a property of the "use this automaton" line rather than the the automaton's declaration.

This distinction doesn't matter for inline assertions but it does for struct automata.
Trivial: error message improvements.