{"record":{"id":"c10da3a6e0643b57","repo":"headroomlabs-ai/headroom","slug":"nothing-to-run-skip-npm-and-skip-python-were","errorCode":null,"errorMessage":"nothing to run: --skip-npm and --skip-python were both set","messagePattern":"nothing to run: --skip-npm and --skip-python were both set","errorType":"exception","errorClass":"SystemExit","httpStatus":null,"severity":"warning","filePath":"scripts/release_smoke_all.py","lineNumber":78,"sourceCode":"    parser.add_argument(\"--python\", default=sys.executable)\n    parser.add_argument(\"--node\", default=shutil.which(\"node\") or \"node\")\n    parser.add_argument(\n        \"--python-release\",\n        action=\"store_true\",\n        help=\"Run the Python smoke with maturin --release instead of the faster ci profile.\",\n    )\n    parser.add_argument(\"--skip-npm\", action=\"store_true\")\n    parser.add_argument(\"--skip-python\", action=\"store_true\")\n    return parser.parse_args()\n\n\ndef main() -> None:\n    args = parse_args()\n    out_dir = args.out.resolve()\n    version = load_project_version()\n\n    if args.skip_npm and args.skip_python:\n        raise SystemExit(\"nothing to run: --skip-npm and --skip-python were both set\")\n\n    ensure_empty_dir(out_dir)\n\n    run([args.python, \"scripts/verify-versions.py\"])\n\n    completed: list[tuple[str, Path]] = []\n    if not args.skip_npm:\n        npm_out = out_dir / \"npm\"\n        run([args.node, \"scripts/build_npm_release_assets.mjs\", version, npm_out])\n        completed.append((\"npm\", npm_out))\n\n    if not args.skip_python:\n        python_out = out_dir / \"python\"\n        python_args: list[str | os.PathLike[str]] = [\n            args.python,\n            \"scripts/build_python_release_smoke.py\",\n            \"--out\",\n            python_out,","sourceCodeStart":60,"sourceCodeEnd":96,"githubUrl":"https://github.com/headroomlabs-ai/headroom/blob/322425c43bffde1ed0b64fecf3cf5951565dd82b/scripts/release_smoke_all.py#L60-L96","documentation":"release_smoke_all.py's main() rejects the combination of `--skip-npm` and `--skip-python`. Both flags together would make the script do nothing except verify versions, so it exits with a usage error rather than silently succeeding.","triggerScenarios":"Composing flags in a wrapper script or CI step that concatenates skip flags (e.g., a matrix where both skips end up enabled); copy-pasting a command line that accumulated flags.","commonSituations":"CI matrix jobs passing `--skip-$MATRIX_OTHER` for both axes; a wrapper that forwards user-supplied flags verbatim.","solutions":["Remove one of the two skip flags so at least one smoke runs.","If you genuinely want a no-op verification, run `scripts/verify-versions.py` directly instead.","Fix the wrapper/matrix logic that sets both flags."],"exampleFix":"# before\npython scripts/release_smoke_all.py --skip-npm --skip-python\n\n# after: only the npm smoke is unwanted\npython scripts/release_smoke_all.py --skip-npm","handlingStrategy":"validation","validationCode":"def validate_flags(skip_npm: bool, skip_python: bool) -> None:\n    if skip_npm and skip_python:\n        raise SystemExit(\"refusing to run with no work: unset --skip-npm or --skip-python\")","typeGuard":null,"tryCatchPattern":null,"preventionTips":["In matrix-driven CI, compute the single skip flag from the axis instead of concatenating both.","Fail fast on contradictory flags in wrappers — do not pass them through silently."],"tags":["cli","usage","release","smoke-test"],"backgroundTag":null,"analyzedSha":"322425c43bffde1ed0b64fecf3cf5951565dd82b","analyzedAt":"2026-08-15T01:03:05.481Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}