fix: cross-platform external check commands#17
Merged
Conversation
- list ejectable checks by kind instead of evaluating every eject getter - refresh stale glob pass-through example in help-text comment
PatrickDinh
marked this pull request as ready for review
July 20, 2026 23:36
staff0rd
approved these changes
Jul 21, 2026
staff0rd
left a comment
Member
There was a problem hiding this comment.
my agents had nothing to say about this :0
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
--reach the tool as literal entries — never re-split or glob-expanded..CMD/.EXEbin shims (PATHEXT).verifyx ejectwrites scripts quoted for both POSIX and Windows npm scripts, and fails at eject time on args it can't quote portably.verify:circular-depsscaffolds as plainverifyx circular-deps(skott scans the project by default); failure hints print the exact argv.Why
verifyx duplicate-code -- --ignore '**/generated/**'ignored nothing. Passthrough args were joined unquoted into a single shell string, so/bin/shglob-expanded the pattern and jscpd received--ignore src/generated/a.ts src/generated/b.ts— a single-file ignore plus a stray scan path. The same joining word-split any arg with a space.Windows failed the opposite way:
cmd.exenever expands globs, so the scaffoldedverifyx circular-deps -- src/*.tshanded skott a literalsrc/*.tsand failed on every Windows machine. With shell strings, each argument's fate depends on which shell re-parses it — so no shell gets to see the arguments at all.How
checkCommand/fixCommandare nowreadonly string[], spawned withshell: falseviacross-spawn(new runtime dependency — plain shell-lessspawncan't runnode_modules/.bin.cmdshims on Windows). Consumer-ownedverify:*script overrides are user-authored strings and still run through the platform shell, unchanged.Verified manually with before/after tarballs on real Windows + Linux:
duplicate-code -- --ignore '**/generated/**'verify:circular-deps, clean projectsrc/*.tsnot foundcircular-deps -- "my src/index.ts"duplicate-codewith real duplicates