shipsafe 0.2.1

AI-Powered Pre-Deploy Security Gate
# FAQ

### What does ShipSafe actually run?

Three battle-tested scanners as subprocesses, in parallel: semgrep (SAST),
trivy (SCA, with grype as fallback), and gitleaks (secrets). ShipSafe
normalizes, deduplicates, and filters their findings into one report and
one exit code.

### Why not just run the three tools directly?

You can! ShipSafe adds: one command and one config instead of three, a
single severity model and fail threshold, merged + deduplicated results,
SARIF/JSON/table output, PR comments and Security-tab upload via one
action line, Japanese output, and AI triage that keeps false positives
from failing your build.

### Is my code sent anywhere?

Not by default. All scanning runs locally as subprocesses; network access
is only used by the scanners themselves to fetch rule packs /
vulnerability DBs. ShipSafe has no telemetry.

The exception is **AI triage**, which is opt-in (`--ai-triage` or
`ai.triage: true`): for each finding it sends the finding metadata and up
to ±12 lines of surrounding code directly to the Anthropic API using your
own `ANTHROPIC_API_KEY`. Nothing is sent unless you enable it, and nothing
passes through ShipSafe-operated servers.

### How does AI triage work?

Claude (default `claude-opus-4-8`, configurable via `ai.model`) reviews
each finding with its surrounding code and classifies it as a true
positive, a false positive, or uncertain, with a one-sentence reason.
False positives stay in every report — annotated, so each verdict is
auditable — but stop counting toward `--fail-on`. Uncertain verdicts keep
gating (fail safe). Cost is bounded: one batched API call per scan, capped
at `ai.max-findings` (default 50, prioritized by severity). Any failure —
missing key, network error, refusal — skips triage with a warning and the
gate behaves exactly as without AI.

### Do I need all three scanners installed?

No — missing scanners are skipped with a warning. `shipsafe doctor` shows
what's available.

### How is severity decided?

- SAST: semgrep `ERROR` → critical, `WARNING` → medium, `INFO` → low
- SCA: the advisory's own severity (trivy/grype)
- Secrets: by credential type — cloud infrastructure keys (AWS, GCP,
  Azure, Sakura Cloud, private keys) are critical; service tokens (GitHub,
  LINE, PayPay, freee, kintone, Slack, Stripe…) are high; generic matches
  are lower

### What happened to the "AI-generated code" rules?

The bundled rule pack was removed in 0.2.0: its patterns (string-built
SQL, hardcoded credentials, XSS sinks, …) largely duplicated the OWASP
registry pack and double-reported the same lines. Configs that still list
`ai-generated-code` are accepted and ignored with a warning. AI triage is
the replacement strategy: instead of more overlapping rules, ShipSafe now
removes the noise from the rules you already run.

### Does it work outside GitHub?

The CLI is CI-agnostic — gate any pipeline on its exit code and consume
the JSON/SARIF output. The composite action (PR comments, Security tab)
is GitHub-specific.

### Japanese support?

`--lang ja` localizes CLI output (severity labels 重大/高/中/低, summaries,
errors). Detection rules for Japanese cloud/SaaS credentials (Sakura
Cloud, LINE, PayPay, freee, kintone) are always on.

### How fast is it?

~6 seconds for a 100k-line polyglot repository on a laptop; see
[benchmarks.md](benchmarks.md).

### What about AI fix suggestions?

AI triage shipped in v0.2.0 (see above). AI fix suggestions in PR
comments, entropy-based unknown-secret detection, and SBOM generation are
planned for upcoming releases — see the README roadmap.

### License?

MIT, including the bundled rules.