Fuzzy exercise-name matcher for the Pass-3 enforcement engine.
Ported from wpl-validator-ts/src/enforce/matcher.ts. Pure functions. Any change here is a change to the safety contract — add a conformance fixture with every behavioral change.
Summary
Functions
Returns true when extracted (an exercise name from the plan) collides with
blacklisted (a forbid pattern from a personalization rule).
Normalize a free-text name into a lowercase, underscore-separated token.
Strip a trailing English plural 's' from a token.
Functions
Returns true when extracted (an exercise name from the plan) collides with
blacklisted (a forbid pattern from a personalization rule).
Normalize a free-text name into a lowercase, underscore-separated token.
Strip a trailing English plural 's' from a token.