fallow 3.5.1 → 3.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/capabilities.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fallow",
3
- "version": "3.5.1",
3
+ "version": "3.6.0",
4
4
  "manifest_version": "1",
5
5
  "description": "Codebase analyzer for TypeScript/JavaScript: unused code, circular dependencies, code duplication, complexity hotspots, and architecture boundary violations",
6
6
  "global_flags": [
@@ -51,6 +51,16 @@
51
51
  "github-summary"
52
52
  ]
53
53
  },
54
+ {
55
+ "name": "--pretty",
56
+ "type": "bool",
57
+ "required": false,
58
+ "description": "Indent JSON output for manual inspection. Requires the final output format to be JSON",
59
+ "possible_values": [
60
+ "true",
61
+ "false"
62
+ ]
63
+ },
54
64
  {
55
65
  "name": "--quiet",
56
66
  "type": "bool",
@@ -1700,6 +1710,11 @@
1700
1710
  }
1701
1711
  ]
1702
1712
  },
1713
+ {
1714
+ "name": "audit-cache",
1715
+ "description": "Maintain reusable audit base-snapshot caches",
1716
+ "flags": []
1717
+ },
1703
1718
  {
1704
1719
  "name": "decision-surface",
1705
1720
  "description": "Surface the consequential structural DECISIONS a change embeds (the apex of the review brief), each framed as a judgment question with the routed expert to ask",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fallow",
3
- "version": "3.5.1",
3
+ "version": "3.6.0",
4
4
  "description": "Codebase intelligence for TypeScript and JavaScript. Free static analysis of code and styles, optional paid runtime intelligence (Fallow Runtime). Quality, risk, architecture, dependencies, duplication, and design-system drift for humans, CI, and the agents writing your code. Zero-config framework support.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -87,13 +87,13 @@
87
87
  "@tanstack/intent": "0.3.5"
88
88
  },
89
89
  "optionalDependencies": {
90
- "@fallow-cli/darwin-arm64": "3.5.1",
91
- "@fallow-cli/darwin-x64": "3.5.1",
92
- "@fallow-cli/linux-x64-gnu": "3.5.1",
93
- "@fallow-cli/linux-arm64-gnu": "3.5.1",
94
- "@fallow-cli/linux-x64-musl": "3.5.1",
95
- "@fallow-cli/linux-arm64-musl": "3.5.1",
96
- "@fallow-cli/win32-arm64-msvc": "3.5.1",
97
- "@fallow-cli/win32-x64-msvc": "3.5.1"
90
+ "@fallow-cli/darwin-arm64": "3.6.0",
91
+ "@fallow-cli/darwin-x64": "3.6.0",
92
+ "@fallow-cli/linux-x64-gnu": "3.6.0",
93
+ "@fallow-cli/linux-arm64-gnu": "3.6.0",
94
+ "@fallow-cli/linux-x64-musl": "3.6.0",
95
+ "@fallow-cli/linux-arm64-musl": "3.6.0",
96
+ "@fallow-cli/win32-arm64-msvc": "3.6.0",
97
+ "@fallow-cli/win32-x64-msvc": "3.6.0"
98
98
  }
99
99
  }
@@ -45,7 +45,7 @@ cargo install fallow-cli # build from source
45
45
 
46
46
  ## Agent Rules
47
47
 
48
- 1. **Always use `--format json --quiet 2>/dev/null`** for machine-readable output. The `2>/dev/null` discards stderr so progress messages and threshold warnings don't corrupt the JSON on stdout. Never use `2>&1`
48
+ 1. **Always use `--format json --quiet 2>/dev/null`** for machine-readable output and parse it as JSON. Compact JSON is the default; never depend on whitespace or add `--pretty` in agent pipelines. The `2>/dev/null` discards stderr so progress messages and threshold warnings don't corrupt the JSON on stdout. Never use `2>&1`
49
49
  2. **Always append `|| true`** to every fallow command. Exit code 1 means "issues found" (normal), not a runtime error. Without `|| true`, the Bash tool treats exit 1 as failure and cancels parallel commands. Only exit code 2 is a real error (invalid config, parse failure)
50
50
  3. **Use `--explain`** to include a `_meta` object in JSON output with metric definitions, ranges, and interpretation hints. In human format, `--explain` prints a `Description:` line under each section header.
51
51
  4. **Use the root `kind` field** to identify typed JSON envelopes (`dead-code`, `dead-code-grouped`, `health`, `dupes`, `combined`, `audit`, etc.).
@@ -109,6 +109,7 @@ Route by intent before reaching for the big analysis commands. Same matrix as `f
109
109
  | `suppressions` | List active fallow-ignore suppression markers (read-only inventory) | `--file` |
110
110
  | `explain` | Explain one issue type without running analysis | `<issue-type>`, `--format json` |
111
111
  | `audit` | Combined dead-code + complexity + duplication + styling for changed files, returns a verdict; `fallow review` is an alias for `fallow audit --brief` (advisory orientation brief, always exits 0) | `--base`, `--gate`, `--brief`, `--max-decisions`, `--walkthrough-guide`, `--walkthrough-file`, `--show-deprioritized`, `--production`, `--production-dead-code`, `--production-health`, `--production-dupes`, `--workspace`, `--changed-workspaces`, `--ci`, `--fail-on-issues`, `--explain`, `--explain-skipped`, `--dead-code-baseline`, `--health-baseline`, `--dupes-baseline`, `--max-crap`, `--coverage`, `--coverage-root`, `--no-css`, `--css-deep`, `--no-css-deep`, `--include-entry-exports` |
112
+ | `audit-cache` | Maintain reusable audit base-snapshot caches | |
112
113
  | `decision-surface` | Surface the consequential structural DECISIONS a change embeds (the apex of the review brief), each framed as a judgment question with the routed expert to ask | `--max-decisions` |
113
114
  | `impact` | Show what fallow has done for you: how many issues it is surfacing, the trend since the last recorded run, and how many commits it contained at the pre-commit gate | `--all`, `--sort`, `--limit` |
114
115
  | `security` | Surface opt-in local security candidates for agent verification (not confirmed vulnerabilities). Rule families include the graph rule `client-server-leak`, a data-driven `tainted-sink` catalogue, and the include-required `hardcoded-secret` category for provider-prefix credentials and high-entropy literals assigned to secret-shaped identifiers. Most catalogue rows require non-literal input; narrowly literal-aware rows flag deterministic unsafe literals. Rules default off; suppress a file with `// fallow-ignore-file security-sink`; scope categories with `security.categories`. Add project-local request object names with `security.requestReceivers`; it extends the built-in `req` / `request` / `ctx` / `context` / `event` allowlist for HTTP `query`, `params`, and `body` reads. `hardcoded-secret` runs only when listed in `security.categories.include`. | `--format human\|json\|sarif`, `--changed-since`, `--file`, `--diff-file`, `--workspace`, `--changed-workspaces`, `--surface`, `--ci`, `--fail-on-issues`, `--sarif-file`, `--summary` |
@@ -510,7 +510,7 @@ fallow health --format json --quiet --trend
510
510
  {
511
511
  "kind": "health",
512
512
  "schema_version": 7,
513
- "version": "3.5.1",
513
+ "version": "3.6.0",
514
514
  "elapsed_ms": 32,
515
515
  "summary": {
516
516
  "files_analyzed": 482,
@@ -908,7 +908,7 @@ fallow audit \
908
908
  {
909
909
  "kind": "audit",
910
910
  "schema_version": 7,
911
- "version": "3.5.1",
911
+ "version": "3.6.0",
912
912
  "command": "audit",
913
913
  "verdict": "fail",
914
914
  "changed_files_count": 12,
@@ -983,7 +983,7 @@ fallow flags --format json --quiet --workspace my-package
983
983
  ```json
984
984
  {
985
985
  "schema_version": 7,
986
- "version": "3.5.1",
986
+ "version": "3.6.0",
987
987
  "elapsed_ms": 116,
988
988
  "feature_flags": [],
989
989
  "total_flags": 0
@@ -1084,7 +1084,7 @@ fallow security --gate newly-reachable --changed-since origin/main
1084
1084
  {
1085
1085
  "kind": "security",
1086
1086
  "schema_version": "4",
1087
- "version": "3.5.1",
1087
+ "version": "3.6.0",
1088
1088
  "elapsed_ms": 42,
1089
1089
  "config": {
1090
1090
  "rules": {
@@ -1113,7 +1113,7 @@ fallow security --gate newly-reachable --changed-since origin/main
1113
1113
  {
1114
1114
  "kind": "security",
1115
1115
  "schema_version": "4",
1116
- "version": "3.5.1",
1116
+ "version": "3.6.0",
1117
1117
  "elapsed_ms": 42,
1118
1118
  "config": {
1119
1119
  "rules": {
@@ -1638,6 +1638,7 @@ Available on all commands:
1638
1638
  | `-c, --config` | `string` | - | Config file path |
1639
1639
  | `--allow-remote-extends` | `bool` | `false` | Allow trusted config files to extend HTTPS URLs |
1640
1640
  | `-f, --format` | `human\|json\|sarif\|compact\|markdown\|codeclimate\|pr-comment-github\|pr-comment-gitlab\|review-github\|review-gitlab\|badge\|github-annotations\|github-summary` | `human` | Output format (alias: --output) |
1641
+ | `--pretty` | `bool` | `false` | Indent JSON output for manual inspection. Requires the final output format to be JSON |
1641
1642
  | `-q, --quiet` | `bool` | `false` | Suppress progress output |
1642
1643
  | `--no-cache` | `bool` | `false` | Disable incremental caching |
1643
1644
  | `--threads` | `string` | - | Number of parser threads |
@@ -1767,7 +1768,7 @@ Set `FALLOW_FORMAT=json` and `FALLOW_QUIET=1` in your agent environment to avoid
1767
1768
  | Format | Description | Use Case |
1768
1769
  |--------|-------------|----------|
1769
1770
  | `human` | Colored terminal output | Interactive use |
1770
- | `json` | Machine-readable JSON | Agent integration, CI pipelines |
1771
+ | `json` | Compact machine-readable JSON by default; add `--pretty` for indented manual inspection | Agent integration, CI pipelines |
1771
1772
  | `sarif` | Static Analysis Results Interchange Format | GitHub Code Scanning, SARIF-compatible tools |
1772
1773
  | `compact` | Grep-friendly: one issue per line. Dupes lines include `code-duplication:path:start-end:fingerprint=dup:<id>,...` | Quick filtering |
1773
1774
  | `markdown` | Markdown tables | Documentation, PR comments |
@@ -1837,7 +1838,7 @@ The HTTP layer mirrors the bash `gh_api_retry` / `curl_retry` helpers: `FALLOW_A
1837
1838
  {
1838
1839
  "kind": "dead-code",
1839
1840
  "schema_version": 7,
1840
- "version": "3.5.1",
1841
+ "version": "3.6.0",
1841
1842
  "elapsed_ms": 45,
1842
1843
  "total_issues": 12,
1843
1844
  "entry_points": {
@@ -1997,7 +1998,7 @@ When `--baseline` is used in combined output, the JSON includes a `baseline_delt
1997
1998
  {
1998
1999
  "kind": "dupes",
1999
2000
  "schema_version": 7,
2000
- "version": "3.5.1",
2001
+ "version": "3.6.0",
2001
2002
  "elapsed_ms": 82,
2002
2003
  "total_clones": 15,
2003
2004
  "total_lines_duplicated": 230,
@@ -2041,11 +2042,11 @@ When running `fallow` with no subcommand (all analyses), the JSON output combine
2041
2042
  {
2042
2043
  "kind": "combined",
2043
2044
  "schema_version": 7,
2044
- "version": "3.5.1",
2045
+ "version": "3.6.0",
2045
2046
  "elapsed_ms": 159,
2046
2047
  "check": {
2047
2048
  "schema_version": 7,
2048
- "version": "3.5.1",
2049
+ "version": "3.6.0",
2049
2050
  "elapsed_ms": 45,
2050
2051
  "total_issues": 12,
2051
2052
  "unused_files": [],
@@ -10466,12 +10466,10 @@ export type RefactoringTarget = Omit<RefactoringTargetFinding, "actions">;
10466
10466
  // import the bare names from `fallow/types` would break at upgrade time
10467
10467
  // otherwise.
10468
10468
  //
10469
- // Stability commitment: these aliases ship as part of fallow's v2.x stable
10470
- // surface. They are scheduled for removal alongside the kind-tagged
10471
- // `FallowOutput` major bump (see https://github.com/fallow-rs/fallow/issues/413),
10472
- // with a one-minor-cycle deprecation window (`@deprecated` JSDoc +
10473
- // CHANGELOG headline) preceding the removal. New code should prefer the
10474
- // `*Finding` wrapper names. Full public-consumer policy:
10469
+ // Stability commitment: legacy output aliases remain supported throughout v3.
10470
+ // Removing them requires an explicit deprecation period and a future major
10471
+ // release. New code should prefer the `*Finding` wrapper names. Full
10472
+ // public-consumer policy:
10475
10473
  // https://github.com/fallow-rs/fallow/blob/main/docs/backwards-compatibility.md
10476
10474
  //
10477
10475