v0.6.0
Minor Changes
-
23997e5: Runs
publintas a publish gate inbsh buildand generates types by default- After a successful build,
bsh buildnow runspublint(strict mode) against the emitteddist/and fails on errors — publishing mistakes like missing declaration files or brokenexportstargets are caught at build time instead of at publish. - Type declarations (
.d.mts) are now generated by default; pass--no-dtsto opt out. If yourpackage.jsondeclares types but they aren't emitted, the build now fails. - Entry globs that match nothing now fail with a clear message (
No entry files matched: …) instead of tsdown's opaqueError: undefined Cannot find entry. bsh publintoutput now renders full messages (e.g. whichexportstarget is broken) instead of bare rule codes.
- After a successful build,
-
e4ad9d2: Makes
bshpass its own lint and widens the test fixture API- The shared oxlint config now exempts
*.config.*files and oxlint JS plugins (rules/**) fromimport/no-default-export— config files and plugins legitimately require default exports. Fixture.write()andFixture.append()in@bomb.sh/tools/test-utilsnow accept plain strings (previously typedUint8Array-only, which contradicted the runtime behavior).bsh testraises the default vitesttestTimeoutto 15s — integration tests spawn real oxlint/knip binaries, which can exceed 5s on a loaded machine.- Internal: replaces all
node:pathusage with URL APIs, consolidates the duplicate knip config (package.json#knipwas silently ignored in favor ofknip.jsonc), and throws a codedToolsErrorinstead of a genericError.
- The shared oxlint config now exempts
-
f66e1df: Makes
bsh lint --fixfix far more than it used to--fixnow chainsknip --fixafter oxlint: unused dependencies and devDependencies are removed frompackage.jsonautomatically. Dead-code fixes (unused exports/types) additionally run with--fix --strict; unused files are never deleted automatically. knip fixes respect your knip config — keepignoreDependenciesaccurate, since untraceable deps (e.g. binaries referenced by path) will otherwise be removed.- The stock
no-consolerule is replaced bybombshell-dev/no-console-log, which auto-fixesconsole.log→console.info(semantically neutral in Node — they're the same stdout write). Other unlisted console methods are still flagged but not auto-fixed.
-
74356f7: Scopes the
bombshell-dev/exported-function-asyncandbombshell-dev/require-export-jsdoclint rules to a package's public API surfacebsh lintnow derives the public surface frompackage.json(exports,bin, andmain/module, mappingdist/paths back tosrc/), including conventionalpackages/*/workspace members. These two rules no longer fire on internal modules — only on files consumers can actually import. Packages without a publish surface (apps, examples) are exempt entirely, and wildcard passthrough exports ("./*": "./dist/*") don't designate surface. -
c276677: Restructures
bsh lintoutput and tiers knip's dead-code checks behind--strict- Errors are now always shown in full; warnings collapse to a per-rule count (pass
--warningsto see them). Warnings never affect the exit code, so this keeps actual failures visible. - Adds
--format jsonfor a machine-readable report ({ summary, violations }). Usepnpm -s run lint -- --format jsonto keep stdout clean. - Knip's dead-code issues (unused exports, types, and files) now only run with
--strict— they fire constantly mid-implementation and are only meaningful as a commit-time gate. Dependency hygiene issues (unused dependencies/devDependencies) still always run. - Fixes
tsgosilently type-checking nothing: file arguments made it skip the projecttsconfig(TS5112), so default runs reported zero type errors. Type checking now always runs in project mode and explicit targets filter the report instead. This may surface previously hidden type errors. - Widens the default oxlint target from
./srcto the whole project (gitignored paths likedist/are respected), matching the scope of knip and tsgo. - Turns off
unicorn/consistent-function-scopingandno-underscore-dangle, which fired frequently but were never deliberately enabled. --fixnow only exits non-zero when errors remain (previously any warning failed the run).
- Errors are now always shown in full; warnings collapse to a per-rule count (pass
-
83c20f7: Replaces the stock
max-paramslint rule with a Bombshell-aware versionThe 2-parameter limit (use an options bag beyond that) now only applies to signatures we author. Functions conforming to APIs we don't control are exempt:
overridemethods, members of classes thatextendsorimplements(e.g. Node streams, platform-shaped interfaces), and inline callbacks passed to other functions. -
7a80756: Updates the shared
tsconfig.jsonbaseline for modern Node packagestargetandlibmove fromes2022toes2024, so modern APIs likeArray.prototype.toSortedandPromise.withResolverstype-check without shims.- Adds
"types": ["node"]. Packages must now have@types/nodeinstalled — missing it previously surfaced as dozens ofCannot find name 'process'/'Buffer'(TS2591) errors; now it's a single actionableCannot find type definition file for 'node'(TS2688). Remedy:pnpm add -D @types/node.
Patch Changes
-
7fe9353: Updates the
lint,build, andlifecycleskills to match currentbshbehaviorThe lint skill no longer claims publint runs in
pnpm run lint(it gatespnpm run build), documents--strict,--warnings, and--format json, and adds a remedies table mapping common violations to their sanctioned fixes. The lifecycle skill moves the knip dead-code gate (lint --strict) to the PR handoff step.