shell/bash

Free catalog · v0.0.12

Reviews Bash and POSIX shell scripts with ShellCheck and evidence-backed model analysis.

Bash adversary

shell/bash reviews .sh and .bash scripts with two complementary passes:

  • ShellCheck emits evidence-backed findings for errors, warnings and informational diagnostics. Style diagnostics and unresolved-source notices (SC1090/SC1091) are excluded. Inline suppressions work; user/repository .shellcheckrc files are deliberately ignored for reproducibility.
  • The model reviews control flow and operational hazards beyond linting: destructive paths, failed commands, errexit exceptions, pipelines, traps, temporary files, injection, subshell state and concurrency. Findings require exact supplied source lines and concrete failure conditions. Generic strict-mode or style advice is excluded.

Node.js 22 and ShellCheck 0.9 or later are required; development tests use 0.11.0. Pin a ShellCheck version in your runner for reproducible diagnostics. Install ShellCheck on the runner's PATH or set SHELLCHECK_PATH to an absolute trusted executable. ShellCheck is an external process, not bundled in the package; the runner must expose it inside the execution environment. No runtime downloads occur. Configure the model through Doomer's normal model broker.

npm ci
npm test
doomer validate .
doomer pack --check .

Depot CI runs on pushes to main and pull requests. The tag release workflow tests tagged source, synchronizes version metadata through doomerlabs/actions/version@v1, and publishes with OIDC through doomerlabs/actions/push@v1 to registry.doomer.ai/catalog/shell/bash:<version> and :latest. Metadata synchronization uses the Depot-managed RELEASE_GITHUB_TOKEN when available, falling back to the repository-scoped workflow token with contents-write permission.

The bundled dist/index.js contains the SDK; it needs no installed Node dependencies at runtime. Scripts are passed to ShellCheck on stdin, never executed. External sourced files are not followed. No shell interpolation is used to launch the analyzer.

Changed reviews use the runner's changed-file list and authoritative changed-line ranges. Diagnostics outside those lines are context only. Whole-repository reviews inspect all matching scripts. Deleted files, dependency/build directories, and non-shell extensions are excluded. Extensionless scripts and shell embedded in YAML, Dockerfiles or Makefiles are outside this first version.

Analysis is bounded to 200 scripts of at most 128 KB each. Model input covers the first 12 scripts and 16,000 characters per script, with numbered lines. ShellCheck has a 15-second per-script deadline and 2 MB output limit. Coverage notes explicitly report truncation, unavailable models, or missing/failing ShellCheck; partial review is never described as a complete clean pass.

Tests exercise real ShellCheck against vulnerable/clean fixtures, injected model responses, exact source citations, changed-line filtering, unavailable tools and analysis bounds. Model tests use a stub broker and do not measure live model quality.

SDK source coverage

The SDK dependency follows the published SDK version pinned in package.json. Model review retains evidence-backed findings when repository source coverage is partial, records the limitation, and does not grant a whole-change clean opinion. Provider and output-validation failures are not coverage gaps: they retain failure or model-unavailable reporting and cannot grant a whole-change clean opinion.

Bounded model output repair

Model stages use the SDK output-validation loop with at most two final-generation requests (initial output plus one repair), unless a stage already supplies its own bounded validator. Broker and client schema failures provide specific feedback to final generation; gathered evidence and the original deadline are retained. Rejected completion usage is included in returned totals and terminal or interrupted ModelReviewError failures. Unexpected exceptions from custom model implementations propagate unchanged and do not expose SDK usage totals; custom models should report request failures with ModelReviewError. Exhausted validation remains incomplete and cannot grant a whole-change clean opinion.

This release uses SDK 0.1.43, including schema repair and interrupted-repair usage preservation.

Provider transport retries and format corrections have their own existing bounds; the two-attempt limit applies to SDK final-generation requests.

SDK 0.1.43

This release rebuilds with SDK 0.1.43. SDK PR #73 adds a tested neutral fallback to formatOpinionAsync when concern wording validation is exhausted, preserving completed findings and the ship decision. Reviewers that do not call this API retain their existing opinion behavior. Provider and transport failures remain errors. Domain rules and evidence requirements are unchanged.

More from the registry