All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
0.19.0 - 2026-04-20
IGNORE_APP_RELATIONSHIPenv var. When set, theappfield in target configs is ignored — targets are no longer triggered just because their corresponding app is tainted (only direct changes, lockfile changes, and tainted workspace imports apply).
0.18.1 - 2026-04-13
- Upgrade vendored typescript-go to
24753aa4bf38
0.18.0 - 2026-04-10
- Global
changeDirsfield in.goodchangesrc.json(top-level, next toignores). Matching files taint all exports (libraries) and trigger all targets in the package.
0.17.1 - 2026-04-10
- Detect runtime side-effect statements (e.g.
console.log()) in entrypoint/barrel files as affecting all exports — previously these were misclassified as "comments/imports only" and seeded zero taint
0.17.0 - 2026-04-04
- Breaking: Lockfile dep change detection now parses old and new pnpm-lock.yaml as YAML (gopkg.in/yaml.v3) instead of diffing text lines. Compares resolved versions for direct deps per importer, and BFS-walks the snapshots section to detect transitive dep version changes — a transitive change taints the direct dep that pulled it in.
0.16.7 - 2026-04-04
- Upgrade vendored typescript-go to
c0703e66b68b
0.16.6 - 2026-04-04
- Upgrade vendored typescript-go to
02bf7c9f25a4
0.16.5 - 2026-04-04
- Upgrade vendored typescript-go to
7d9b07b896c1
0.16.4 - 2026-04-04
- Upgrade vendored typescript-go to
df62f5db69a2
0.16.3 - 2026-04-04
- Upgrade vendored typescript-go to
65056016dd8a
0.16.2 - 2026-04-04
- Upgrade vendored typescript-go to
df56d26717f7
0.16.1 - 2026-04-04
- Upgrade vendored typescript-go to
7f8f645fc008
0.16.0 - 2026-04-04
- Breaking: Merged
targetandvirtual-targettypes into a unified target definition. Thetypefield is removed. All targets now supportapp,targetName,changeDirs, lockfile detection, and fine-grained mode.targetNamedefaults to the package name when not set.changeDirsdefaults to**/*when not set.
0.15.3 - 2026-02-23
- Add intra-file taint propagation after seeding phase in both
AnalyzeLibraryPackageandFindAffectedFiles, so that symbols referencing other tainted symbols in the same file are also marked as tainted before BFS starts
0.15.2 - 2026-02-20
- Fix
export const/export letdeclarations not being added to the exports list in the TS parser, causing locally declared exported variables (e.g.export const allScenarios = [...]) to be invisible during entrypoint taint checking
0.15.1 - 2026-02-17
- Upgrade vendored typescript-go to
daa761e5c641
0.15.0 - 2026-02-17
- lockfileVersion change detection: when
lockfileVersionchanges in a subspace's pnpm-lock.yaml, all projects in that subspace are treated as having all external deps changed, and all library exports are wildcard-tainted. This propagates transitively through the existing dependency graph and taint analysis. ParseLockfileVersionusing proper YAML parsing (gopkg.in/yaml.v3) to compare old vs new lockfile versions
0.14.2 - 2026-02-16
- Comprehensive debug logging across all analyzer functions: FindAffectedFiles, FindEntrypoints, CollectEntrypointExports, HasTaintedImports, HasTaintedImportsForGlob, FindCSSTaintedPackages, and import resolution (resolve.go)
0.14.1 - 2026-02-16
- Upgrade vendored typescript-go to
7b198ca5c705
0.14.0 - 2026-02-14
- JSON import taint propagation: changed
.jsonfiles now taint TS/JS files that import them, with symbol-level granularity based on usage of the imported binding
0.13.0 - 2026-02-14
- Per-target
ignoresfield in target definitions. Per-target ignores are additive with the globalignoresand only apply to the specific target's detection.
0.12.0 - 2026-02-14
- Breaking:
.goodchangesrc.jsonnow uses atargetsarray instead of a single top-level target definition. Each entry intargetsis a target object withtype,app,targetName, andchangeDirs. Theignoresfield remains at the top level (shared across all targets).
0.11.2 - 2026-02-14
- Fine-grained detection now seeds taint from changed CSS/SCSS files within the project (with CSS module granularity for
*.module.scss/*.module.css)
0.11.1 - 2026-02-14
- Fine-grained detection now uses symbol-level taint propagation matching library analysis: AST diffs identify changed symbols, import graph tracks name mappings, BFS only propagates to importers of actually changed symbols, with intra-file and re-export handling
0.11.0 - 2026-02-14
-v/--versionflag prints the embedded version from theVERSIONfile
0.10.0 - 2026-02-14
- Fine-grained
changeDirsentries now support an optionalfilterfield to narrow output results (e.g.{"glob": "src/**/*", "filter": "src/**/*.test.ts", "type": "fine-grained"}analyzes all files but only returns affected test files)
0.9.5 - 2026-02-14
- Fine-grained changeDirs now AST-diff changed files against the merge base; whitespace-only or comment-only changes no longer cascade through importers
0.9.4 - 2026-02-14
- Fine-grained BFS propagation now follows re-exports (
export { X } from "./foo",export * from "./foo") so barrel files no longer break the chain
0.9.3 - 2026-02-14
- Fine-grained changeDirs now detect lockfile dependency changes (
pnpm-lock.yamlupgrades taint files importing the affected external dep)
0.9.2 - 2026-02-14
- CSS module imports (
*.module.scss/*.module.css) with named bindings now use granular taint: only symbols that reference the imported binding are tainted, instead of all exports in the file
0.9.1 - 2026-02-14
- Changed CSS/SCSS files within a library now taint TS files that relatively import them (e.g.
import "./styles.scss"taints all exports of the importing file)
0.9.0 - 2026-02-14
- Breaking:
changeDirsentries now use glob patterns instead of directory paths ("glob"field replaces"path") - Glob matching uses doublestar:
*matches files in current dir,**/*matches all nested files,**/*.stories.tsxmatches specific patterns - Ignores override glob matches: if a file matches a glob but is also in
ignores, it is excluded - Fine-grained changeDirs only match TS/TSX source files
0.8.0 - 2026-02-14
- When
TARGETSis set, compute relevant package set (active targets + transitive dependencies) and skip change detection, library analysis, and transitive dependent walks for irrelevant packages
0.7.1 - 2026-02-14
- Load all
.goodchangesrc.jsonconfigs once at startup instead of re-reading from disk per changed file and again during target detection
0.7.0 - 2026-02-14
- Skip expensive target detection (file scanning, taint import checks) for targets excluded by
TARGETSfilter
0.6.0 - 2026-02-14
- Optional
TARGETSenv var to filter output by target name (comma-delimited, supports*wildcard globs)
0.5.1 - 2026-02-14
- Fix ignore globs not supporting
**patterns (e.g.scenarios/**/*.md) by replacingfilepath.Matchwithdoublestar.Match
0.5.0 - 2026-02-13
- Fine-grained virtual target detection:
changeDirsentries can specify"type": "fine-grained"to collect specific affected files instead of triggering a full run - New
FindAffectedFilesanalyzer function for transitive file-level taint propagation within directories - Output format changed from
[]stringto[]{"name", "detections?"}for richer target information
changeDirsconfig field is now an array of objects ({"path": "...", "type?": "..."}) instead of plain strings
0.4.0 - 2026-02-13
- Parallelize library analysis within the same topological level using goroutines
0.3.0 - 2026-02-13
install.shscript for downloading and installing standalone binaries with SHA-256 verification
0.2.5 - 2026-02-13
- Upgrade vendored typescript-go to
f058889a79ed
0.2.4 - 2026-02-12
- Trim release binaries to 6 targets: linux/amd64, linux/arm64, darwin/amd64, darwin/arm64, windows/amd64, windows/arm64
0.2.3 - 2026-02-12
- SHA-256 hash files (
.sha256) for every release binary
0.2.2 - 2026-02-12
- Fix runner label for GitHub release job (
runners-cxa-xlarge, notcxa-xlarge)
0.2.1 - 2026-02-12
- Use cxa-xlarge runner for GitHub release job (cross-compiling 32 binaries)
- Docker images limited to linux/amd64 and linux/arm64 only (other platforms served via standalone binaries)
0.2.0 - 2026-02-12
- Cross-platform standalone binaries attached to GitHub releases (32 targets)
- Support for Linux, macOS, Windows, FreeBSD, OpenBSD, NetBSD, Solaris, Illumos, AIX, DragonFlyBSD
- Docker build uses Go cross-compilation instead of QEMU emulation for faster multi-platform builds
0.1.0 - 2026-02-11
- Initial release
- AST-level change detection for Rush monorepo libraries using vendored typescript-go parser
- Taint propagation through workspace dependency graph (unlimited BFS hops)
- Target and virtual target support via
.goodchangesrc.jsonconfiguration - Lockfile dependency change detection (pnpm-lock.yaml)
- Optional CSS/SCSS taint tracking and propagation through
@use/@importchains - Optional type-only change detection (interfaces, type aliases, annotations)
- Multi-stage Docker build
- Automated vendor upgrade workflow