Optionalcontext: StrictFillContextOptional ReadonlycontextReadonlymaxLongest trigger — the tail this source needs to match against.
ReadonlynameHow many trailing tokens this source needs to see in TokenView.tail.
The session retains the maximum across its sources; a source that needs
more history than that keeps its own copy (see observe()).
Strict schema/template rows as a ProposalSource. Always policy "assert": the spans are sliced out of the model's own chat template, so they are determined by construction, not guessed.