a66a643863
Closes the silent-skip hole reviewers flagged: with the index/count hardcoded in three sibling strings, a copy-paste slip (shard-2of3 running --shard=1/3) or a partial 3->4 migration would silently skip a third of the 428-file suite while CI stays green. scripts/run-ui-shard.mjs parses N/M from npm_lifecycle_event (the script NAME is the single source of truth), validates the package's shard family is exactly 1..M for one M, and delegates through 'npm run test:ui' so the vitest command stays single-sourced. Mutation-verified: shard-9of3 name -> exit 1 'index out of range'; adding shard-4of4 beside the 3-family -> exit 1 'must form exactly 1..M'; correct invocation runs shard 2/3 (142 files) identically to before.