Indexable summary of an ExAST pattern or selector.
The plan is advisory: callers may use the terms to retrieve candidates, but must still verify matches with ExAST to preserve exact semantics.
@type t() :: %ExAST.Index.Plan{ candidate_groups: [MapSet.t(String.t())], negative_terms: MapSet.t(String.t()), optional_terms: MapSet.t(String.t()), required_terms: MapSet.t(String.t()), requires_comments?: boolean(), requires_source?: boolean() }