Route nudge: widening a regex traded one bug for a worse one

OrchestKit PR #3990. Type a prompt and watch three versions of ALREADY_ROUTED_RE disagree about whether the user already routed their work.

executor-route-nudge fires at most once per session when a prompt looks build-shaped, reminding you that the executor skills carry specialist wiring. It stays quiet when you have already routed, for example by typing /ork:implement. Deciding "already routed" is one regex, and that regex went through three versions in one afternoon.

Try it

versionpatternalready routed?
original
hardcoded
/\/(?:ork|hq-ext):[a-z-]+/i
widened
regression
/\/[a-z][a-z0-9-]*:[a-z][a-z0-9-]+/i
shipped
fixed
/(?:^|\s)\/[a-z][a-z0-9-]*:[a-z][a-z0-9-]+/i

What actually happened

The original named ork and hq-ext literally. That was two problems at once. A consumer of the public plugin who typed /vercel:deploy had already routed their work and got nudged to route it anyway, and a public OSS plugin should not carry a private plugin's namespace in its shipped source.

Widening it to any /<plugin>:<skill> fixed both, and quietly broke something bigger: /guide:setup inside an ordinary URL matches that shape. Any prompt merely containing a link with a colon path stopped nudging. The old hardcoded form never had that reach, so the fix was a net regression, and it was caught in review rather than by a test.

The shipped version requires the token to stand alone: start of string, or preceded by whitespace. Two regression tests now pin both directions, one per bug.

The lesson worth keeping

Widening a pattern to remove a special case also widens what it accidentally matches. The question to ask is not "does this now catch the case I wanted", it is "what else just became catchable". Here the answer was every URL in every prompt.