Changelog
All notable changes to calvigil are documented here.
[6.0.0] — 2026-06-24
Added
- Supply Chain Guard M1-M3 checks for dependency trust drift, package metadata suspicion, and install-time execution behavior, enabled with
scan --supply-chain-guard. calvigil supply-chain difffor comparing baseline and target JSON reports to flag new direct dependencies, downgrades, possible dependency-confusion names, and lockfile drift.- AI slop code-smell scoring for OSS scans. Existing AI-SEC pattern findings, Semgrep AI code-quality findings, and optional AI enrichment indicators now roll up into
slop_code_smellsin JSON plus table and HTML report summaries. - Documentation and examples explaining that slop code smells are concrete quality/security symptoms, not proof of AI authorship.
- Five new AI-SEC pattern signals informed by current secure-coding research and standards:
AI-SEC-019external HTTP requests without explicit timeout or abort signal.AI-SEC-020fail-open error handling that returns success/allow/true after failures.AI-SEC-021temporary security bypass comments around auth, CSRF, validation, sanitization, or access control.AI-SEC-022unbounded Go goroutine fan-out without an obvious limiter.AI-SEC-023Go HTTP servers started without read/write/idle timeout configuration.
- Configurable regex pattern rule packs via
--pattern-rules, with YAML/JSON file or directory support, duplicate-ID validation, severity validation, RE2 compilation checks, and project-local trust guardrails. - Community-aligned Semgrep rule pack with 27 original Calvigil rules for framework, JWT, TLS, deserialization, C/C++, PHP/Ruby, Dockerfile, and shell supply-chain patterns.
- Bundled Semgrep rule integrity tests that parse every rule pack, enforce required fields, validate severity values, and prevent duplicate rule IDs.
Changed
- Built-in regex pattern coverage increased from 47 to 52 rules: 29 general
SEC-*rules and 23AI-SEC-*code-quality/security signals. - AI slop code-smell scoring now maps additional timeout, fail-open, insecure-default, validation, and secret-exposure rules into the summary categories.
- Bundled Semgrep coverage increased from 74 to 101 rules across four packs after comparing Calvigil’s gaps with the public
semgrep/semgrep-rulesrepository structure.
Fixed
- Corrected malformed bundled Semgrep YAML in existing packs so all shipped rules parse cleanly in automated tests.
[5.3.0] — 2026-06-24
Added
- Official Docker image support for Calvigil OSS under
calsoftit/calvigil-oss, with a non-root container image that includes thecalvigilbinary, CA certificates,git, and bundled Semgrep rules. - Docker build and smoke-test Make targets for local image validation.
- Offline scanning mode for
scan,scan-image,scan-binary, andscan-license, allowing dependency and package inventory extraction without querying external vulnerability databases.
Changed
- Docker documentation now points users to
calsoftit/calvigil-ossand keeps publishing details out of user-facing docs.
Fixed
- Expanded matcher, image scan, report validation, scanner, and integration test coverage for post-5.2 changes.
- Package license enrichment now resolves and stores licenses before vulnerability matching, preventing package inventory rows from being pushed or reported with empty licenses when later vulnerability sources are slow or fail.
- Registry license strings are normalized before storage across PyPI, npm, RubyGems, ConanCenter, and deps.dev-backed ecosystems such as Go, Maven, and Cargo. This fixes PyPI packages such as
pkg:pypi/plotly@5.24.0showing as unknown when registry metadata clearly reportsMIT.
[5.2.0] — 2026-06-19
Added
- Regular JSON scans now enrich package inventory licenses before reporting or Enterprise push, not only during
scan-license.
Changed
- NVD matching and CVSS enrichment are more resilient:
- Default dependency, image, and binary scans include NVD package keyword search again, capped at 20 unique package names and conservatively paced.
- Exact-CVE enrichment uses up to 100
cveIdsper request, a 2-minute request timeout, a 10-minute enrichment budget, controlled keyed parallelism, six-second request pacing, transient-error backoff, and a 24-hour local CVE cache. - Timed-out or
503CVE batches split down to individual CVE lookups so partial successes are preserved.
Fixed
- Report upload validation now rejects non-JSON and empty scan reports before Enterprise submission.
- NVD CVSS enrichment now falls back to contributed CVSS metrics such as CISA-ADP when NVD/NIST primary scoring is not yet available.
- OSV Go advisories that alias CVEs now receive CVSS score/severity enrichment when the ecosystem-specific OSV record omits CVSS data.
- PyPI license resolution now reads version-specific
license_expressionmetadata, normalizes PyPI license classifiers, and recognizes canonical full license text. This fixes packages such aspkg:pypi/zstandard@0.25.0,pkg:pypi/tiktoken@0.12.0, andpkg:pypi/pathspec@1.1.1that previously appeared as unknown.
[5.1.0] — 2026-06-16
Added
calvigil push: Upload an existing JSON scan report to Calvigil Enterprise.- Supports Enterprise URL/API key via flags, config, or environment variables.
- Supports CI metadata: project, ref, commit, environment, CLI version, and idempotency key.
--fail-on-policyevaluates the Enterprise policy gate before storing and exits non-zero without consuming quota on policy failure.--evaluate-onlychecks policy without storing the scan.
- Enterprise config keys:
enterprise-url,enterprise-key; env vars:CALVIGIL_ENTERPRISE_URL,CALVIGIL_API_KEY, andCALVIGIL_ENTERPRISE_API_KEY. - NVD CVSS enrichment for already-matched CVEs:
- Uses the NVD
cveIdsbatch parameter with up to 100 IDs per request. - Fills missing
scoreandseverityon OSV/other-source findings while preserving the original match source. - Fixes Go advisory cases where an OSV
GO-*record aliases a CVE but does not include CVSS data.
- Uses the NVD
[5.0.0] — 2026-06-12
Added
- Sonatype OSS Index matcher: Optional vulnerability database alongside OSV.dev
- PURL-based component-report API covering all supported ecosystems
- Enabled when
ossindex-userandossindex-tokenare configured - Config keys:
ossindex-user,ossindex-token; env vars:OSSINDEX_USER,OSSINDEX_TOKEN
- CISA KEV enrichment: Findings are checked against the CISA Known Exploited Vulnerabilities catalog after matching
- Exploited findings flagged
⚠ KEVin table output and counted in the scan summary - New
known_exploitedfield on vulnerability records in JSON/report output - Best-effort: feed failures never alter scan results
- Exploited findings flagged
- Canonical Data Model (
internal/matcher/canonical.go): all sources are normalized into one consistent shape before reporting- CVE IDs preferred as primary identifier; GHSA/ecosystem IDs demoted to aliases
- Cross-source merge: duplicate findings (matched by ID or alias) are merged instead of dropped — missing severity, CVSS score, fix version, summary, and references are filled in from whichever source has them
--skip-testsflag: exclude test files from reachability analysis- LM Studio Support: New AI provider for running local LLMs via LM Studio
- OpenAI-compatible
/v1/chat/completionsendpoint (default:http://localhost:1234) - Full code analysis and vulnerability enrichment support (same capabilities as Ollama)
- CLI flags:
--provider lmstudio,--lmstudio-url,--lmstudio-model - Config keys:
lmstudio-url,lmstudio-model - Environment variables:
LMSTUDIO_URL,LMSTUDIO_MODEL - Auto-detection in
--provider automode (tried after Ollama, before OpenAI)
- OpenAI-compatible
- AI-Generated Code Detection: 18 new pattern rules (AI-SEC-001 through AI-SEC-018)
- Semgrep AI Code Quality Rule Pack: 25+ semantic rules for AI-generated code issues
- AI Code Indicator: Classifies findings as
LIKELY_AI,POSSIBLY_AI, orUNLIKELY_AI
Changed
- Vulnerability aggregation now merges duplicate findings across databases (by ID or alias) instead of keeping only the first occurrence
- Pattern rule count increased from 29 to 47 (29 SEC + 18 AI-SEC)
- Semgrep bundled rule packs increased from 52 to 77+ rules (3 YAML files)
Fixed
UNKNOWNseverity eliminated in most cases:- OSV: severity now derived from CVSS v3 → v4 → v2 vectors
- GitHub Advisory: falls back to numeric CVSS score when the label is missing
- Canonical normalization derives severity from CVSS score as a last resort
[4.3.0] — 2026-04-15
Added
- IaC scanner with 25 built-in rules (Terraform, Kubernetes, Dockerfile, CloudFormation, Docker Compose, Helm)
- Binary/SCA scanner (Go binaries, JARs, Python wheels)
- Supply chain integrity verification (
--verify-integrity) - Phantom dependency detection
- Vulnerability cache with configurable TTL
- OS keyring secret store with file fallback
- SPDX 2.3 reporter
- Pattern rules SEC-013 through SEC-029
- AI enrichment layer with structured evidence
Changed
- Module path updated to
github.com/Calsoft-Pvt-Ltd/calvigil
[4.2.0] — 2026-03-01
Added
- Initial release
- Multi-ecosystem dependency scanning (Go, Java, Python, Node.js, Rust, Ruby, PHP, C/C++)
- Vulnerability matching via OSV, NVD, and GitHub Advisory databases
- AI-powered code analysis (OpenAI GPT-4, Ollama local LLM)
- Semgrep CE integration with bundled OWASP Top 10 and language-specific rule packs
- Pattern rules SEC-001 through SEC-012
- License compliance scanning with SPDX classification
- Output formats: Table, JSON, SARIF, CycloneDX, OpenVEX, HTML, PDF
- PURL generation for all packages
- Transitive dependency classification
- Configuration management with
configcommand