Test seam: clear the entire stash. Production code never calls this (the stash is alive for the duration of the giver's lifecycle); tests use it between cases.
Read a slot. Returns null when nothing's been stored. The
resolver maps the returned result.stuff array to MqlMatch
records, stamping result.via (when present) on each.
Read the input fragment that produced a slot, or null when the
slot is empty. Used by the dispatcher to substitute for
dynamic-pronoun queries during scope update — look it becomes
look <stored fragment> for scope-anchor purposes.
Update the stash from a resolve result. The dispatcher calls
this once per resolveAndValidate MQL field.
last always updates; the gendered slot
corresponding to the matched Stuff's pronouns updates for
single-stuff results; multi-stuff results route to them.slotFor is provided by the caller because MixinApi.isGendered
lives on the wrong side of the dependency graph for direct use
here (mql/pronoun-memory.ts would re-enter command.ts via
mixin.ts's import chain). The dispatcher passes a routing fn
that knows the gender mapping.
The stash itself. Plain class, instantiated once per CommandGiver.