LONG_PROMPT_MAX_TOKENS

const val LONG_PROMPT_MAX_TOKENS: Int = 12

The bound MatchGuards.longPrompts sets: past this many content words, one differing word is not evidence of a substitution.

Chosen on the tuned corpus, which is the split that exists to be fitted, and then measured everywhere else — not chosen by reading where the external split's failures happen to sit, which would be tuning against the one number in this project nobody could have tuned. It costs the tuned corpus nothing: every substitution catch there is a question of a dozen content words or fewer, because a question with a swappable term in it is short. The cost on the other splits is measured, published in the README and asserted in SubstitutionBoundTest.