Skip to content

Releases: Patchflow-security/patchflow-cli

PatchFlow CLI v0.1.7

Choose a tag to compare

@github-actions github-actions released this 18 Jul 16:08
56d7909

PatchFlow CLI v0.1.7

Capability and benchmark statements are governed by the
dated claim registry.
Historical benchmark results remain available in the
benchmark repository,
including their methodology and limitations.

Changelog

New Features

  • 725435c: feat(cross-language): function boundary detection for all 7 languages + CWE-based safe-pattern suppression + regression corpus for all 6 taint frameworks (@malik111110)
  • 35bd0b1: feat(doctor+ci): add config round-trip check to doctor and CI release gate (@malik111110)
  • e3b1cc4: feat(init): generate a working .patchflow/rules.yaml with framework detection (@malik111110)
  • 405f50d: feat(taint): add Go taint engine support + framework taint rules for Echo, Gin, Laravel, Symfony (@malik111110)
  • 2224cd5: feat(taint): inline sanitizers, closure capture, expanded sources/sinks, taint-specific smoke test assertions (@malik111110)
  • 9758555: feat: add five-minute onboarding launch gate (#21) (@malik111110)

Bug Fixes

Other Changes

PatchFlow CLI v0.1.6

Choose a tag to compare

@github-actions github-actions released this 04 Jul 21:03

PatchFlow CLI v0.1.6

Benchmark Results (v1.0)

  • 18 intentionally vulnerable repos: 100% recall, 918K LOC, 19 CWE categories
  • 5 historical CVE repos: 100% recall, 387K LOC
  • 10 clean repos: 0.094 HC/KLOC, 720K LOC

See Benchmark Report v1.0 for details.

Changelog

Other Changes

  • c5e304a: release: v0.1.6 — fix silent-wrong-output bugs + output-correctness test suite (@malik111110)

PatchFlow CLI v0.1.5

Choose a tag to compare

@malik111110 malik111110 released this 04 Jul 14:31

What's New

LICENSE File Crawling + Text-Based License Detection

When all registry API lookups fail or return uninformative results (NOASSERTION, Other, UNKNOWN), the CLI now fetches the raw LICENSE file directly from the source repository and identifies the license using text-based detection — similar to GitHub's licensee.

How it works

  1. Fetch: Downloads the raw LICENSE file from raw.githubusercontent.com — tries multiple file names (LICENSE, LICENSE.md, LICENSE.txt, COPYING, UNLICENSE, NOTICE) and multiple branches (main, master, HEAD, develop, trunk)
  2. Normalize: Lowercases the text, strips punctuation, removes copyright lines (which contain project-specific names/dates that reduce matching accuracy)
  3. Match: Compares against 35+ known license signatures using bigram n-gram similarity (Dice's coefficient)
  4. Result: Returns the SPDX identifier if confidence >= 50%

Supported licenses (text-based detection)

MIT, Apache-2.0, BSD-2-Clause, BSD-3-Clause, ISC, MPL-2.0, GPL-2.0, GPL-3.0, LGPL-2.1, LGPL-3.0, AGPL-3.0, Unlicense, BSL-1.0, CC0-1.0, Zlib, WTFPL, Python-2.0, Ruby, EPL-1.0, EPL-2.0, CDDL-1.0, Artistic-2.0, PostgreSQL, OpenSSL, Vim, PHP-3.01, BUSL-1.1, SSPL-1.0, EUPL-1.2, AFL-3.0, CC-BY-4.0, CC-BY-SA-4.0, Beerware, 0BSD, BlueOak-1.0.0

Additional fallbacks

  • PyPI repository URL extraction: When PyPI has no license, extracts GitHub repo URL from project_urls (Homepage, Source, Repository)
  • RubyGems repository URL extraction: When RubyGems has no license, extracts GitHub repo URL from source_code_uri, homepage_uri, repository_uri
  • GitHub API + LICENSE crawl: When the GitHub API returns NOASSERTION, falls back to fetching the raw LICENSE file

Benchmark Results

Metric Original v0.1.4 v0.1.5 Total Improvement
Coverage 78.2% 89.6% 95.6% +17.4pp
Unknown licenses 733 353 156 78.7% reduction
License findings 736 363 184 75.0% reduction

v0.1.4 -> v0.1.5 alone: unknowns reduced by 55.8% (353 -> 156)

Per-project highlights (v0.1.4 -> v0.1.5)

Project v0.1.4 Unknown v0.1.5 Unknown Resolved
log4j-old (Java) 264 95 169 via LICENSE crawling
lodash (JS) 52 34 18 via LICENSE crawling
rails-v5.2.1 (Ruby) 24 14 10 via RubyGems repo URL + LICENSE crawling

Installation

# Homebrew
brew install patchflow-security/tap/patchflow

# Scoop (Windows)
scoop install patchflow

# Direct download
curl -fsSL https://raw.githubusercontent.com/Patchflow-security/patchflow-cli/main/scripts/install.sh | bash

Verify

patchflow version --json

Full Changelog: v0.1.4...v0.1.5

PatchFlow CLI v0.1.4

Choose a tag to compare

@malik111110 malik111110 released this 04 Jul 02:54

What's New

Embedded OCI Image Scanner

  • No external Trivy dependency — the image scanner is now embedded directly in the CLI as internal/imagescan/
  • Native Go, OCI-first scanner with vulnerability matching (NVD, OSV, Alpine, Debian, Ubuntu)
  • New flags: --input, --platform, --no-vulns, --severities, --format, --output
  • Image reference validation with security checks

License Detection Overhaul

Comprehensive improvements to license gathering across all ecosystems:

Metric Before After Improvement
Coverage 78.2% 89.6% +11.4pp
Unknown licenses 733 353 51.8% reduction
License findings 736 363 50.7% reduction

Benchmarked across 10 real-world projects with 3,270+ dependencies.

Go

  • golang.org/x/* modules: GitHub mirror mapping + BSD-3-Clause fallback
  • gopkg.in/* modules: 40+ repo mappings (yaml.v3, check.v1, ini.v1, etc.)
  • google.golang.org/* modules: protobuf, grpc, genproto, api, appengine
  • Go module proxy fallback for non-GitHub modules (VCS URL extraction)

Java/Maven

  • POM file parsing from Maven Central with <licenses> extraction
  • SCM URL extraction from POM to GitHub license lookup
  • Version resolution via search API (3 query formats) for "unknown" versions
  • 130+ groupId to GitHub repo mappings (Apache, Spring, Hibernate, JBoss, Google, Square, etc.)

npm

  • Repository URL extraction from npm registry metadata (string + object formats)
  • Full package metadata fallback for repo URL when version-specific response lacks it
  • Homepage URL fallback for GitHub repo discovery

Python

  • PyPI classifier-based fallback (40+ classifier to SPDX mappings)
  • Empty version handling (uses no-version endpoint)
  • pyproject.toml extras parsing fixed (test = ["pytest"] no longer creates bogus dependency)
  • pyproject.toml inline table license parsing (license = {file = "..."})

Ruby

  • Gemfile parser fixed for commas and quotes in package entries
  • Version constraint cleanup (~>, >=, etc. stripped before lookup)
  • source_code_uri, homepage_uri, repository_uri fallback for GitHub license

SPDX Classification

  • Mapping tables expanded from ~25 to 300+ entries
  • AFL licenses (1.1, 1.2, 2.0, 2.1, 3.0) added to permissive
  • Short GPL forms (GPL-2, GPL-3, GPLV2, GPLV3) added to copyleft
  • "Other"/"UNKNOWN"/"NOASSERTION" treated as uninformative, triggers GitHub fallback
  • Weak copyleft (LGPL) checked before strong copyleft (GPL) to fix substring misclassification

Installation

# Homebrew
brew install patchflow-security/tap/patchflow

# Scoop (Windows)
scoop install patchflow

# Direct download
curl -fsSL https://raw.githubusercontent.com/Patchflow-security/patchflow-cli/main/scripts/install.sh | bash

Verify

patchflow version --json

Full Changelog: v0.1.3...v0.1.4

PatchFlow CLI v0.1.3

Choose a tag to compare

@github-actions github-actions released this 03 Jul 21:43

PatchFlow CLI v0.1.3

Benchmark Results (v1.0)

  • 18 intentionally vulnerable repos: 100% recall, 918K LOC, 19 CWE categories
  • 5 historical CVE repos: 100% recall, 387K LOC
  • 10 clean repos: 0.094 HC/KLOC, 720K LOC

See Benchmark Report v1.0 for details.

Changelog

Bug Fixes

Other Changes

PatchFlow CLI v0.1.2

Choose a tag to compare

@github-actions github-actions released this 01 Jul 21:18

PatchFlow CLI v0.1.2

Benchmark Results (v1.0)

  • 18 intentionally vulnerable repos: 100% recall, 918K LOC, 19 CWE categories
  • 5 historical CVE repos: 100% recall, 387K LOC
  • 10 clean repos: 0.094 HC/KLOC, 720K LOC

See Benchmark Report v1.0 for details.

Changelog

Other Changes

PatchFlow CLI v0.1.0

Choose a tag to compare

@github-actions github-actions released this 01 Jul 16:21

PatchFlow CLI v0.1.0

Benchmark Results (v1.0)

  • 18 intentionally vulnerable repos: 100% recall, 918K LOC, 19 CWE categories
  • 5 historical CVE repos: 100% recall, 387K LOC
  • 10 clean repos: 0.094 HC/KLOC, 720K LOC

See Benchmark Report v1.0 for details.

Changelog

Other Changes