Skip to content
Zyrax Guard — release notes
Changelog · zyrax-guard

Release notes

What changed in each release — new detections, hardening, fixes, and breaking changes. Every release ships signed binaries, SLSA provenance, and an SBOM on GitHub.

v0.11.1

08 Jul 2026

v0.11.1 — Windows upgrade parity via scoop

Windows was the only platform without a working zyrax-guard upgrade. Fixed.

Added

  • Scoop bucket — install the signed release binary on Windows:

    scoop bucket add zyrax https://github.com/tiagosilva07/scoop-zyrax
    scoop install zyrax-guard
    

    Manifest hashes come from the release's signed checksums.txt, and the bucket is regenerated automatically on every release.

  • upgrade delegates on scoop installs — Guard detects a scoop-managed install (scoop\apps\zyrax-guard\…) and runs scoop update zyrax-guard, the same way it already delegates to npm, Homebrew, and go install. --method scoop is accepted for manual override.

The standalone (non-scoop) Windows binary still upgrades manually via the Releases page — installing through scoop is now the recommended path on Windows.

Full Changelog: https://github.com/tiagosilva07/zyrax-guard/compare/v0.11.0...v0.11.1

v0.11.0

07 Jul 2026

v0.11.0 — BLOCK means attack

One deliberate verdict-policy change.

⚠️ Changed: vulnerabilities in legitimate packages now WARN instead of BLOCK

BLOCK is now reserved for known-malicious packages — typosquats, hallucinated names, denylist and OSV MAL-* malware entries. A vulnerability advisory on a legitimate package (any severity) now yields WARN, with the severity shown in the message:

$ zyrax-guard check some-pkg
! some-pkg@2.1.0 — WARN
  - GHSA-xxxx (high severity): Denial of Service in some-pkg

Why: popular packages routinely carry high-severity advisories — next and vite were BLOCKing installs over a real-but-ordinary DoS advisory. A false BLOCK on a household-name package teaches users to zyrax-guard allow it or remove the shell hook entirely, which destroys the gate's value against actual malware. BLOCK should mean "we think this is an attack", not "this has a known bug". Vulnerability management belongs to npm audit / Dependabot; Guard is the supply-chain attack gate.

If you want the old behavior in CI: run with --strict — WARN becomes a failure, so any advisory still fails the build.

Malware detection is unchanged: known-malicious packages BLOCK exactly as before, and ERROR (could-not-verify) still fails closed.

Full Changelog: https://github.com/tiagosilva07/zyrax-guard/compare/v0.10.0...v0.11.0

v0.10.0

07 Jul 2026

v0.10.0 — correctness & fail-closed hardening

This release fixes every high-impact finding from a full code-quality and security audit of the CLI. Three focused PRs: core-gate bugs (#75), fail-closed hardening (#76), CLI cleanup (#77).

⚠️ Breaking: zyrax-guard upgrade now requires a cosign signature by default

checksums.txt ships in the same GitHub release as the binary, so checksum-only verification cannot detect a compromised release — only the identity-pinned cosign check can. upgrade (binary/curl|sh installs) now aborts if cosign is not installed, with instructions. To keep the old best-effort behavior, opt out explicitly:

zyrax-guard upgrade --require-signature=false   # checksum-only (prints a warning)

npm/brew/go-managed installs are unaffected (upgrade delegates to your package manager).

Fixed

  • scan crashed on npm monorepos — workspace entries ("apps/web") in package-lock v2/v3 paniced the lockfile parser. They're local packages, not registry deps, and are now skipped. (#75)
  • install now installs the exact version it vettedzyrax-guard install lodash@4.17.20 used to check the pin, then run npm install lodash (latest). The vetted name@version now flows through to npm/pip/cargo, and version strings are validated at the exec boundary. (#75)
  • scan-agents <typo'd-path> no longer exits 0 — a missing or non-directory scan root is an error, not a clean pass. A CI gate can no longer silently scan nothing. (#75)
  • Terminal-escape / prompt injection via advisory text — OSV advisory summaries (community-influenceable) flowed unsanitized to the terminal and into the check_package MCP result; a crafted summary could forge a ✓ SAFE line or carry a prompt-injection payload. All registry-derived text is now sanitized (control characters and hidden unicode stripped) before reaching a terminal or an agent. (#75)
  • Unknown download stats no longer read as zero — a downloads-API hiccup used to set WeeklyLoads=0, which could false-BLOCK legitimate packages one edit away from a popular name. Unknown stats now skip the typosquat/popularity checks with a visible signal; a registry metadata failure fails closed with ERROR. (#76)
  • --deep registry failures are visible — a 5xx while fetching the artifact used to silently report "no install/build scripts found"; it now surfaces as the documented "could not fetch artifact" note across npm, PyPI, and crates. (#76)
  • scan-agents can't be evaded by oversized files — configs that are unreadable or exceed the 5 MB cap now produce a MEDIUM agent-config/unscannable finding instead of being silently skipped, and the cap is enforced on the read itself. (#76)
  • --help exits 0 on every subcommand (was 2, breaking scripts). (#77)

Added

  • Wall-clock budgets on every check — 60s per package (180s with --deep) on check, install, and the check_package MCP tool, so a slow registry can't stall your shell hook or your agent. (#76)
  • install --json for parity with check/scan/scan-agents. (#77)
  • scan --ecosystem pypi falls back to requirements.txt when poetry.lock is absent (pip-tools projects). (#77)
  • Exit codes documented in --help — including that ERROR (could-not-verify) fails closed regardless of --strict. (#77)

Internal

  • Denylist moved to an embedded data file (internal/data/denylist.json) — grow it via data-only PRs. (#77)
  • Dead code removed (DiffLockfiles, NewNPM, the abandoned maintainer-change check). (#77)
  • CI lint/vuln tools pinned (govulncheck@v1.5.0, staticcheck@v0.7.0) instead of @latest. (#77)
  • Test coverage: cmd 45% → 56%, internal/report 31% → 75%.

Full Changelog: https://github.com/tiagosilva07/zyrax-guard/compare/v0.9.1...v0.10.0

v0.9.1

28 Jun 2026

What's Changed

Full Changelog: https://github.com/tiagosilva07/zyrax-guard/compare/v0.9.0...v0.9.1

v0.9.0

27 Jun 2026

What's Changed

Full Changelog: https://github.com/tiagosilva07/zyrax-guard/compare/v0.8.2...v0.9.0

v0.8.2

24 Jun 2026

What's Changed

Full Changelog: https://github.com/tiagosilva07/zyrax-guard/compare/v0.8.1...v0.8.2

v0.8.1

24 Jun 2026

What's Changed

Full Changelog: https://github.com/tiagosilva07/zyrax-guard/compare/v0.8.0...v0.8.1

v0.8.0

24 Jun 2026

What's Changed

Full Changelog: https://github.com/tiagosilva07/zyrax-guard/compare/v0...v0.8.0

v0.7.1

20 Jun 2026

What's Changed

Full Changelog: https://github.com/tiagosilva07/zyrax-guard/compare/v0.7.0...v0.7.1

v0.7.0

20 Jun 2026

What's Changed

Full Changelog: https://github.com/tiagosilva07/zyrax-guard/compare/v0.6.1...v0.7.0

v0.6.1

10 Jun 2026

What's new

Zyrax Guard now plugs straight into CI and installs in one line.

GitHub Action

Gate every pull request. Drop Guard into a workflow and it checks the dependencies a PR adds. If one is a typosquat, known malware, a hallucinated name, or ships a risky install script, the check fails before it merges. Works with npm, PyPI, and crates.io.

- uses: actions/checkout@v4
  with: { fetch-depth: 0 }
- uses: tiagosilva07/zyrax-guard@v0
  with:
    ecosystem: npm        # npm | pypi | crates

One-line install (Linux / macOS)

curl -fsSL https://raw.githubusercontent.com/tiagosilva07/zyrax-guard/main/scripts/install.sh | sh

Downloads the signed binary for your OS/arch and verifies its SHA-256 (and the cosign signature when cosign is on your PATH).

Verify

Every binary is signed with keyless cosign and SLSA build provenance, and an SPDX SBOM is attached:

cosign verify-blob --bundle zyrax-guard-linux-amd64.cosign.bundle zyrax-guard-linux-amd64

Supersedes v0.6.0 (action description shortened to meet the Marketplace 125-character limit; no CLI behavior change).

v0.6.0

10 Jun 2026

What's Changed

Full Changelog: https://github.com/tiagosilva07/zyrax-guard/commits/v0.6.0

v0.5.0

06 Jun 2026

What's Changed

Full Changelog: https://github.com/tiagosilva07/zyrax-guard/compare/v0.1.0...v0.5.0

v0.4.1

05 Jun 2026

What's Changed

Full Changelog: https://github.com/tiagosilva07/invoke-guard/compare/v0.4.0...v0.4.1

v0.3.0

05 Jun 2026

What's Changed

Full Changelog: https://github.com/tiagosilva07/invoke-guard/compare/v0.2.0...v0.3.0

v0.1.0

05 Jun 2026

What's Changed

Full Changelog: https://github.com/tiagosilva07/invoke-guard/commits/v0.1.0