One search target inside a scope. Each candidate represents a
"thing the player might mean": its name and keywords are what
the keyword matcher scores against, and the optional via
attribution describes the sub-feature path that brought it into
the pool.
Multiple candidates may point at the same Stuff — e.g., a location
appears once for itself, once per Detail, and once per Exit. The
resolver dedups by (stuff, via) tuple before reporting matches.
One search target inside a scope. Each candidate represents a "thing the player might mean": its
nameandkeywordsare what the keyword matcher scores against, and the optionalviaattribution describes the sub-feature path that brought it into the pool.Multiple candidates may point at the same Stuff — e.g., a location appears once for itself, once per Detail, and once per Exit. The resolver dedups by (
stuff,via) tuple before reporting matches.