fields
For IndexKind.COMPOSITE_TERM, the fields keyed together — relative to the element at path, and empty for every other kind.
The one place a definition is more than a path and a kind, and the exception is argued rather than convenient: a composite term is a tuple, so a definition without the tuple's members would not say what the index is over. It stays part of the definition rather than becoming an option for the same reason the kind is — two indexes over $.items[*] keying different fields are different indexes, and making them compare equal would let one silently answer for the other.
Order is significant, because a term carries each value's declared position; (sku, qty) and (qty, sku) produce different bytes for the same element. The planner matches a query's fields against these as a set and reorders, so the order is a property of the file and never something a caller has to get right.