fallow 3.25.0 → 3.26.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 +14 -3
- package/package.json +10 -10
- package/schema.json +3 -1
- package/skills/fallow/references/cli-reference.md +12 -11
- package/types/output-contract.d.ts +43 -4
package/capabilities.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fallow",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.26.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": [
|
|
@@ -255,7 +255,7 @@
|
|
|
255
255
|
"name": "--explain-skipped",
|
|
256
256
|
"type": "bool",
|
|
257
257
|
"required": false,
|
|
258
|
-
"description": "Show
|
|
258
|
+
"description": "Show per-pattern counts for skipped files: default duplicate ignores on dupes and audit, built-in discovery ignores on check, dead-code, audit and the default run",
|
|
259
259
|
"possible_values": [
|
|
260
260
|
"true",
|
|
261
261
|
"false"
|
|
@@ -320,6 +320,16 @@
|
|
|
320
320
|
"false"
|
|
321
321
|
]
|
|
322
322
|
},
|
|
323
|
+
{
|
|
324
|
+
"name": "--fail-on-stale-baseline",
|
|
325
|
+
"type": "bool",
|
|
326
|
+
"required": false,
|
|
327
|
+
"description": "Exit with code 1 if a loaded --baseline has entries that match nothing in this run",
|
|
328
|
+
"possible_values": [
|
|
329
|
+
"true",
|
|
330
|
+
"false"
|
|
331
|
+
]
|
|
332
|
+
},
|
|
323
333
|
{
|
|
324
334
|
"name": "--tolerance",
|
|
325
335
|
"type": "string",
|
|
@@ -7252,7 +7262,7 @@
|
|
|
7252
7262
|
]
|
|
7253
7263
|
},
|
|
7254
7264
|
"plugins": {
|
|
7255
|
-
"count":
|
|
7265
|
+
"count": 126,
|
|
7256
7266
|
"note": "Built-in framework plugins, auto-activated when their enabler dependency is present; run fallow list --plugins for the set active in a specific project",
|
|
7257
7267
|
"names": [
|
|
7258
7268
|
"nextjs",
|
|
@@ -7326,6 +7336,7 @@
|
|
|
7326
7336
|
"biome",
|
|
7327
7337
|
"stylelint",
|
|
7328
7338
|
"prettier",
|
|
7339
|
+
"oxfmt",
|
|
7329
7340
|
"oxlint",
|
|
7330
7341
|
"markdownlint",
|
|
7331
7342
|
"cspell",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fallow",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.26.0",
|
|
4
4
|
"mcpName": "io.github.fallow-rs/fallow",
|
|
5
5
|
"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.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -88,14 +88,14 @@
|
|
|
88
88
|
"@tanstack/intent": "0.3.8"
|
|
89
89
|
},
|
|
90
90
|
"optionalDependencies": {
|
|
91
|
-
"@fallow-cli/darwin-arm64": "3.
|
|
92
|
-
"@fallow-cli/darwin-x64": "3.
|
|
93
|
-
"@fallow-cli/linux-x64-gnu": "3.
|
|
94
|
-
"@fallow-cli/linux-arm64-gnu": "3.
|
|
95
|
-
"@fallow-cli/linux-x64-musl": "3.
|
|
96
|
-
"@fallow-cli/linux-arm64-musl": "3.
|
|
97
|
-
"@fallow-cli/win32-arm64-msvc": "3.
|
|
98
|
-
"@fallow-cli/win32-x64-msvc": "3.
|
|
99
|
-
"fallow-type-aware": "3.
|
|
91
|
+
"@fallow-cli/darwin-arm64": "3.26.0",
|
|
92
|
+
"@fallow-cli/darwin-x64": "3.26.0",
|
|
93
|
+
"@fallow-cli/linux-x64-gnu": "3.26.0",
|
|
94
|
+
"@fallow-cli/linux-arm64-gnu": "3.26.0",
|
|
95
|
+
"@fallow-cli/linux-x64-musl": "3.26.0",
|
|
96
|
+
"@fallow-cli/linux-arm64-musl": "3.26.0",
|
|
97
|
+
"@fallow-cli/win32-arm64-msvc": "3.26.0",
|
|
98
|
+
"@fallow-cli/win32-x64-msvc": "3.26.0",
|
|
99
|
+
"fallow-type-aware": "3.26.0"
|
|
100
100
|
}
|
|
101
101
|
}
|
package/schema.json
CHANGED
|
@@ -36,7 +36,7 @@
|
|
|
36
36
|
"default": []
|
|
37
37
|
},
|
|
38
38
|
"ignorePatterns": {
|
|
39
|
-
"description": "An array of project-root-relative glob patterns for files to exclude from analysis entirely; entries are unioned with fallow's built-in defaults (**/node_modules/**, **/dist/**, build/**, **/.git/**, **/coverage/**, **/*.min.js, **/*.min.mjs, **/*.min.cjs, **/*.bundle.js), so custom globs add to rather than replace them. Set it (e.g. `[\"generated/**\"]`) to drop generated or vendored trees from every detector; patterns are validated at load.",
|
|
39
|
+
"description": "An array of project-root-relative glob patterns for files to exclude from analysis entirely; entries are unioned with fallow's built-in defaults (**/node_modules/**, **/dist/**, **/build/**, **/.git/**, **/coverage/**, **/*.min.js, **/*.min.mjs, **/*.min.cjs, **/*.bundle.js), so custom globs add to rather than replace them. Set it (e.g. `[\"generated/**\"]`) to drop generated or vendored trees from every detector; patterns are validated at load.",
|
|
40
40
|
"type": "array",
|
|
41
41
|
"items": {
|
|
42
42
|
"type": "string"
|
|
@@ -373,6 +373,8 @@
|
|
|
373
373
|
}
|
|
374
374
|
},
|
|
375
375
|
"additionalProperties": false,
|
|
376
|
+
"allowComments": true,
|
|
377
|
+
"allowTrailingCommas": true,
|
|
376
378
|
"$defs": {
|
|
377
379
|
"ExternalPluginDef": {
|
|
378
380
|
"description": "A declarative plugin definition loaded from a standalone file or inline config.\n\nExternal plugins provide the same static pattern capabilities as built-in\nplugins (entry points, always-used files, used exports, tooling dependencies),\nbut are defined in standalone files or inline in the fallow config rather than\ncompiled Rust code.\n\nThey cannot do AST-based config parsing (`resolve_config()`), but cover the\nvast majority of framework integration use cases.\n\nSupports JSONC, JSON, and TOML formats. All use camelCase field names.\n\n```json\n{\n \"$schema\": \"https://raw.githubusercontent.com/fallow-rs/fallow/main/plugin-schema.json\",\n \"name\": \"my-framework\",\n \"enablers\": [\"my-framework\", \"@my-framework/core\"],\n \"entryPoints\": [\"src/routes/**/*.{ts,tsx}\"],\n \"configPatterns\": [\"my-framework.config.{ts,js}\"],\n \"alwaysUsed\": [\"src/setup.ts\"],\n \"toolingDependencies\": [\"my-framework-cli\"],\n \"usedExports\": [\n { \"pattern\": \"src/routes/**/*.{ts,tsx}\", \"exports\": [\"default\", \"loader\", \"action\"] }\n ]\n}\n```",
|
|
@@ -446,7 +446,7 @@ Human output groups paths under "Shared with your team (commit these)" and "Loca
|
|
|
446
446
|
{
|
|
447
447
|
"kind": "agent-install",
|
|
448
448
|
"schema_version": 1,
|
|
449
|
-
"fallow_version": "3.
|
|
449
|
+
"fallow_version": "3.26.0",
|
|
450
450
|
"root": "/abs/path",
|
|
451
451
|
"mode": "install",
|
|
452
452
|
"dry_run": false,
|
|
@@ -650,7 +650,7 @@ fallow health --format json --quiet --trend
|
|
|
650
650
|
{
|
|
651
651
|
"kind": "health",
|
|
652
652
|
"schema_version": 7,
|
|
653
|
-
"version": "3.
|
|
653
|
+
"version": "3.26.0",
|
|
654
654
|
"elapsed_ms": 32,
|
|
655
655
|
"summary": {
|
|
656
656
|
"files_analyzed": 482,
|
|
@@ -1053,7 +1053,7 @@ fallow audit \
|
|
|
1053
1053
|
{
|
|
1054
1054
|
"kind": "audit",
|
|
1055
1055
|
"schema_version": 7,
|
|
1056
|
-
"version": "3.
|
|
1056
|
+
"version": "3.26.0",
|
|
1057
1057
|
"command": "audit",
|
|
1058
1058
|
"verdict": "fail",
|
|
1059
1059
|
"changed_files_count": 12,
|
|
@@ -1130,7 +1130,7 @@ fallow flags --format json --quiet --workspace my-package
|
|
|
1130
1130
|
```json
|
|
1131
1131
|
{
|
|
1132
1132
|
"schema_version": 7,
|
|
1133
|
-
"version": "3.
|
|
1133
|
+
"version": "3.26.0",
|
|
1134
1134
|
"elapsed_ms": 116,
|
|
1135
1135
|
"feature_flags": [],
|
|
1136
1136
|
"total_flags": 0
|
|
@@ -1231,7 +1231,7 @@ fallow security --gate newly-reachable --changed-since origin/main
|
|
|
1231
1231
|
{
|
|
1232
1232
|
"kind": "security",
|
|
1233
1233
|
"schema_version": "4",
|
|
1234
|
-
"version": "3.
|
|
1234
|
+
"version": "3.26.0",
|
|
1235
1235
|
"elapsed_ms": 42,
|
|
1236
1236
|
"config": {
|
|
1237
1237
|
"rules": {
|
|
@@ -1260,7 +1260,7 @@ fallow security --gate newly-reachable --changed-since origin/main
|
|
|
1260
1260
|
{
|
|
1261
1261
|
"kind": "security",
|
|
1262
1262
|
"schema_version": "4",
|
|
1263
|
-
"version": "3.
|
|
1263
|
+
"version": "3.26.0",
|
|
1264
1264
|
"elapsed_ms": 42,
|
|
1265
1265
|
"config": {
|
|
1266
1266
|
"rules": {
|
|
@@ -1836,7 +1836,7 @@ Available on all commands:
|
|
|
1836
1836
|
| `--group-by` | `owner\|directory\|package\|section` | - | Group output by CODEOWNERS ownership (`owner`), first path component (`directory`), workspace package (`package`, aliases: `workspace`, `pkg`), or GitLab CODEOWNERS `[Section]` headers (`section`, alias: `gl-section`). All output formats partition issues into labeled groups. `section` mode attaches an `owners` array to each group in JSON output |
|
|
1837
1837
|
| `--performance` | `bool` | `false` | Show pipeline timing breakdown |
|
|
1838
1838
|
| `--explain` | `bool` | `false` | JSON: include metric definitions in `_meta`. Human: print a `Description:` line under each section header. Always on for MCP. |
|
|
1839
|
-
| `--explain-skipped` | `bool` | `false` |
|
|
1839
|
+
| `--explain-skipped` | `bool` | `false` | Human/markdown only: show per-pattern counts for files skipped by the default duplicates ignores. `dupes` prints only that breakdown; on `check`, `dead-code`, `audit` and the default run the same flag reports source files the built-in discovery ignores removed |
|
|
1840
1840
|
| `--summary` | `bool` | `false` | Show only category counts without individual items. Useful for dashboards and quick overviews |
|
|
1841
1841
|
| `--ci` | `bool` | `false` | CI mode: `--format sarif --fail-on-issues --quiet` |
|
|
1842
1842
|
| `--fail-on-issues` | `bool` | `false` | Exit 1 if any issues found (promotes `warn` to `error`) |
|
|
@@ -1844,6 +1844,7 @@ Available on all commands:
|
|
|
1844
1844
|
| `-o, --output-file` | `string` | - | Write the report to a file instead of stdout, for any --format (no ANSI codes). Useful on large projects where the terminal scrollback truncates the top. Progress and the confirmation stay on stderr |
|
|
1845
1845
|
| `--report-path-prefix` | `string` | - | Prefix prepended to every path in the CI-facing formats (`github-annotations`, `github-summary`, `codeclimate`, `review-github`, `review-gitlab`). CI platforms address files by repository-root-relative path, so when the analyzed project lives in a subdirectory (e.g. `packages/app/`), paths need that offset. fallow detects the offset via the git toplevel automatically; this flag overrides the detection. Pass an empty string to disable rebasing and emit paths relative to `--root` |
|
|
1846
1846
|
| `--fail-on-regression` | `bool` | `false` | Fail if issue count increased beyond tolerance vs a regression baseline |
|
|
1847
|
+
| `--fail-on-stale-baseline` | `bool` | `false` | Exit with code 1 if a loaded --baseline has entries that match nothing in this run |
|
|
1847
1848
|
| `--tolerance` | `string` | `0` | Allowed increase: `"2%"` (percentage) or `"5"` (absolute). Default: `"0"` |
|
|
1848
1849
|
| `--regression-baseline` | `string` | - | Path to a standalone regression baseline file. Without it, fallow uses `regression.baseline` from the config |
|
|
1849
1850
|
| `--save-regression-baseline` | `string` | - | Save current issue counts. With no path, update `regression.baseline` in the discovered fallow config or create `.fallowrc.json`; with a path, write a standalone baseline file |
|
|
@@ -2029,7 +2030,7 @@ The HTTP layer mirrors the bash `gh_api_retry` / `curl_retry` helpers: `FALLOW_A
|
|
|
2029
2030
|
{
|
|
2030
2031
|
"kind": "dead-code",
|
|
2031
2032
|
"schema_version": 7,
|
|
2032
|
-
"version": "3.
|
|
2033
|
+
"version": "3.26.0",
|
|
2033
2034
|
"elapsed_ms": 45,
|
|
2034
2035
|
"total_issues": 12,
|
|
2035
2036
|
"entry_points": {
|
|
@@ -2189,7 +2190,7 @@ When `--baseline` is used in combined output, the JSON includes a `baseline_delt
|
|
|
2189
2190
|
{
|
|
2190
2191
|
"kind": "dupes",
|
|
2191
2192
|
"schema_version": 7,
|
|
2192
|
-
"version": "3.
|
|
2193
|
+
"version": "3.26.0",
|
|
2193
2194
|
"elapsed_ms": 82,
|
|
2194
2195
|
"total_clones": 15,
|
|
2195
2196
|
"total_lines_duplicated": 230,
|
|
@@ -2233,11 +2234,11 @@ When running `fallow` with no subcommand (all analyses), the JSON output combine
|
|
|
2233
2234
|
{
|
|
2234
2235
|
"kind": "combined",
|
|
2235
2236
|
"schema_version": 7,
|
|
2236
|
-
"version": "3.
|
|
2237
|
+
"version": "3.26.0",
|
|
2237
2238
|
"elapsed_ms": 159,
|
|
2238
2239
|
"check": {
|
|
2239
2240
|
"schema_version": 7,
|
|
2240
|
-
"version": "3.
|
|
2241
|
+
"version": "3.26.0",
|
|
2241
2242
|
"elapsed_ms": 45,
|
|
2242
2243
|
"total_issues": 12,
|
|
2243
2244
|
"unused_files": [],
|
|
@@ -500,6 +500,31 @@ kind: "node-modules-missing"
|
|
|
500
500
|
kind: "boundaries-not-configured"
|
|
501
501
|
} | {
|
|
502
502
|
kind: "rule-packs-not-configured"
|
|
503
|
+
} | {
|
|
504
|
+
/**
|
|
505
|
+
* The built-in glob that matched, verbatim (for example
|
|
506
|
+
* `** /build/**`).
|
|
507
|
+
*/
|
|
508
|
+
pattern: string
|
|
509
|
+
/**
|
|
510
|
+
* Candidate source files this pattern excluded in this walk, across
|
|
511
|
+
* every directory it matched, not just the one `path` anchors at.
|
|
512
|
+
* Exact: the walk counts each excluded candidate once.
|
|
513
|
+
*/
|
|
514
|
+
file_count: number
|
|
515
|
+
/**
|
|
516
|
+
* Distinct directories this pattern matched at, `path` included, and
|
|
517
|
+
* not the number of directories that held the files. A
|
|
518
|
+
* directory-shaped pattern (`** /dist/**`) matches at the directory it
|
|
519
|
+
* names, so an excluded subtree counts once however many nested
|
|
520
|
+
* directories inside it held source: a `dist/` holding files in three
|
|
521
|
+
* sub-directories reports `1`. A file-shaped pattern (`** /*.min.js`)
|
|
522
|
+
* has no directory to collapse to and counts each matched file's own
|
|
523
|
+
* parent. Exact either way, and anything above `1` says `path` names
|
|
524
|
+
* one matched location out of several.
|
|
525
|
+
*/
|
|
526
|
+
directory_count: number
|
|
527
|
+
kind: "excluded-by-default-ignore"
|
|
503
528
|
})
|
|
504
529
|
/**
|
|
505
530
|
* Discriminant for [`CloneGroupAction::kind`]. Mirrors the action types
|
|
@@ -2663,7 +2688,8 @@ _meta?: (Meta | null)
|
|
|
2663
2688
|
* `malformed-tsconfig`, `tsconfig-reference-dir-missing`;
|
|
2664
2689
|
* - source discovery, during the file walk: `skipped-large-file`,
|
|
2665
2690
|
* `skipped-minified-file`, `skipped-source-dotdir`,
|
|
2666
|
-
* `
|
|
2691
|
+
* `excluded-by-default-ignore`, `source-read-failure`,
|
|
2692
|
+
* `source-parse-degraded`;
|
|
2667
2693
|
* - dead-code analysis, from the dependency-catalog and override
|
|
2668
2694
|
* detectors: `malformed-pnpm-workspace-yaml`,
|
|
2669
2695
|
* `bun-lockb-override-resolution-skipped`.
|
|
@@ -2684,6 +2710,18 @@ _meta?: (Meta | null)
|
|
|
2684
2710
|
* optional `reachability_caveats[]` array, and a reader who never scrolls
|
|
2685
2711
|
* back up to this list still sees it. `fallow fix` reads the same array
|
|
2686
2712
|
* and withholds the removal while a caveat stands.
|
|
2713
|
+
*
|
|
2714
|
+
* `excluded-by-default-ignore` is the one source-discovery kind that
|
|
2715
|
+
* reports unseen files WITHOUT raising a caveat. It names a built-in
|
|
2716
|
+
* ignore pattern (`** /dist/**`, `** /build/**`, `** /coverage/**`, or one
|
|
2717
|
+
* of the four minified-bundle globs) that removed candidate source files
|
|
2718
|
+
* from the walk, which is designed behavior on generated output rather
|
|
2719
|
+
* than a degraded run, so it is advisory only and no finding inherits it.
|
|
2720
|
+
* One entry per pattern, never per file, so the array stays bounded on a
|
|
2721
|
+
* project of any size. Gitignored trees are pruned before the walk sees
|
|
2722
|
+
* them and count zero, and `** /node_modules/**` is never reported:
|
|
2723
|
+
* installed dependencies are not the first-party source the kind is
|
|
2724
|
+
* about.
|
|
2687
2725
|
*/
|
|
2688
2726
|
workspace_diagnostics?: WorkspaceDiagnostic[]
|
|
2689
2727
|
/**
|
|
@@ -6034,9 +6072,10 @@ stale_entries: number
|
|
|
6034
6072
|
moved_entries: number
|
|
6035
6073
|
/**
|
|
6036
6074
|
* True when this run analyzed a subset of the project (changed-file,
|
|
6037
|
-
* diff, or workspace scoping
|
|
6038
|
-
*
|
|
6039
|
-
* false on scoped
|
|
6075
|
+
* diff, or workspace scoping, or production mode, which drops test, story
|
|
6076
|
+
* and dev files), so the baseline was compared against a narrowed finding
|
|
6077
|
+
* set and staleness cannot be judged. `stale` is always false on scoped
|
|
6078
|
+
* runs.
|
|
6040
6079
|
*/
|
|
6041
6080
|
change_scoped: boolean
|
|
6042
6081
|
/**
|