Skip to content

MPL release: mvp#262

Draft
KyubumShin wants to merge 1 commit into
mainfrom
mpl/release/mvp
Draft

MPL release: mvp#262
KyubumShin wants to merge 1 commit into
mainfrom
mpl/release/mvp

Conversation

@KyubumShin

Copy link
Copy Markdown
Owner

MPL Stage A release artifact for cut mvp.

Snapshot ref: refs/mpl/releases/mvp

⚠ Do not push to this branch. Further work happens on the working branch; subsequent cohort commits do NOT update this PR. This PR is frozen at the snapshot point.

PR #245 fixed the trailing-keyword shape for runner heads via
classifyRunnerHead (npm/pnpm/yarn/cargo/go/npx/pnpx synthesize a canonical
of just `head subcommand` before matchFamilyRegex). The structurally
same-class hole remained for the rest of STRICT_GATE_HEAD_ALLOWLIST — heads
whose binary name IS the family signal (tsc/eslint/vitest/jest/mocha/ruff/
mypy/playwright/cypress/wdio). Their fallback ran matchFamilyRegex against
the whole canonical, so a trailing HARD3 keyword promoted the entry:

  classifyGateCommand('tsc playwright')    → 'hard3_resilience' (wrong)
  classifyGateCommand('vitest playwright') → 'hard3_resilience' (wrong)

ANSI-C `$'...'`, parameter expansion `${...}`, and locale translation
`$"..."` wrapped arbitrary text into the same forgery surface:

  classifyGateCommand("tsc $'playwright'")    → 'hard3_resilience' (wrong)
  classifyGateCommand('tsc ${FOO}playwright') → 'hard3_resilience' (wrong)

Fix: extend the synthesized-canonical pattern to non-runner heads. After
classifyRunnerHead returns undefined, if the head is a head-as-signal
binary, run matchFamilyRegex on just the head — trailing positional args
and quote/expansion wrappers never reach the keyword scan. Both shapes
close in the same change because the post-head text is dropped entirely.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant