fallow 3.30.0 → 3.31.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/README.md +2 -4
- package/capabilities.json +161 -46
- package/issue-registry.json +76 -37
- package/package.json +12 -11
- package/schema.json +58 -5
- package/skills/fallow/SKILL.md +1 -0
- package/skills/fallow/references/cli-reference.md +30 -16
- package/skills/fallow/references/gotchas.md +24 -0
- package/skills/fallow/references/issue-types.md +2 -1
- package/skills/fallow/references/mcp.md +31 -1
- package/types/output-contract.d.ts +697 -16
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
**Codebase intelligence for TypeScript and JavaScript.**
|
|
4
4
|
|
|
5
|
-
One binary finds unused code, circular dependencies, duplication, complexity hotspots, boundary violations, and design-system styling drift. An optional paid
|
|
5
|
+
One binary finds unused code, circular dependencies, duplication, complexity hotspots, boundary violations, and design-system styling drift. An optional paid product, Fallow Cloud, adds production coverage: which functions run in production. No AI inside the analyzer, and no TypeScript compiler or Node.js runtime needed for static analysis: runs are deterministic, with typed output contracts and traceable explanations.
|
|
6
6
|
|
|
7
7
|
[](https://github.com/fallow-rs/fallow/actions/workflows/ci.yml)
|
|
8
8
|
[](https://www.npmjs.com/package/fallow)
|
|
@@ -48,9 +48,7 @@ Every issue carries an `actions[]` array with an `auto_fixable` flag, so scripts
|
|
|
48
48
|
- Design-system styling drift for CSS and CSS-in-JS (Sass/Less, CSS Modules, Tailwind, styled-components, Emotion, and more)
|
|
49
49
|
- A changed-file PR gate with per-finding attribution (`fallow audit`)
|
|
50
50
|
- Optional TypeScript checker evidence for exact symbol use, affected files, targeted tests, cross-file private type leaks, and public-signature coupling (`--type-aware`)
|
|
51
|
-
- Optional
|
|
52
|
-
|
|
53
|
-
For head-to-head timings against [knip](https://knip.dev) and [jscpd](https://github.com/kucherenko/jscpd), see [BENCHMARKS.md](https://github.com/fallow-rs/fallow/blob/main/BENCHMARKS.md): fallow is faster than knip on smaller projects, knip is faster on several larger repos, and jscpd's Rust rewrite is faster at raw duplication scanning.
|
|
51
|
+
- Optional production coverage with Fallow Cloud: hot paths, cold code, runtime-weighted health (licensed; a single local coverage capture is free)
|
|
54
52
|
|
|
55
53
|
### Optional TypeScript semantic evidence
|
|
56
54
|
|
package/capabilities.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fallow",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.31.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": [
|
|
@@ -100,6 +100,16 @@
|
|
|
100
100
|
"required": false,
|
|
101
101
|
"description": "Only report issues in files changed since this git ref (e.g., main, HEAD~5)"
|
|
102
102
|
},
|
|
103
|
+
{
|
|
104
|
+
"name": "--no-package-baselines",
|
|
105
|
+
"type": "bool",
|
|
106
|
+
"required": false,
|
|
107
|
+
"description": "Ignore the per-package refs of `workspaces.changedSince` for this run",
|
|
108
|
+
"possible_values": [
|
|
109
|
+
"true",
|
|
110
|
+
"false"
|
|
111
|
+
]
|
|
112
|
+
},
|
|
103
113
|
{
|
|
104
114
|
"name": "--diff-file",
|
|
105
115
|
"type": "string",
|
|
@@ -330,6 +340,22 @@
|
|
|
330
340
|
"false"
|
|
331
341
|
]
|
|
332
342
|
},
|
|
343
|
+
{
|
|
344
|
+
"name": "--fail-on-baseline-growth",
|
|
345
|
+
"type": "bool",
|
|
346
|
+
"required": false,
|
|
347
|
+
"description": "Exit with code 1 if a loaded baseline has a key that the same file at the base ref does not have",
|
|
348
|
+
"possible_values": [
|
|
349
|
+
"true",
|
|
350
|
+
"false"
|
|
351
|
+
]
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
"name": "--baseline-base",
|
|
355
|
+
"type": "string",
|
|
356
|
+
"required": false,
|
|
357
|
+
"description": "The git ref that --fail-on-baseline-growth compares the baseline with"
|
|
358
|
+
},
|
|
333
359
|
{
|
|
334
360
|
"name": "--fail-on-parse-error",
|
|
335
361
|
"type": "bool",
|
|
@@ -799,6 +825,16 @@
|
|
|
799
825
|
"false"
|
|
800
826
|
]
|
|
801
827
|
},
|
|
828
|
+
{
|
|
829
|
+
"name": "--package-cycles",
|
|
830
|
+
"type": "bool",
|
|
831
|
+
"required": false,
|
|
832
|
+
"description": "Only report dependency cycles between workspace packages",
|
|
833
|
+
"possible_values": [
|
|
834
|
+
"true",
|
|
835
|
+
"false"
|
|
836
|
+
]
|
|
837
|
+
},
|
|
802
838
|
{
|
|
803
839
|
"name": "--boundary-violations",
|
|
804
840
|
"type": "bool",
|
|
@@ -931,6 +967,12 @@
|
|
|
931
967
|
"required": false,
|
|
932
968
|
"description": "Only report issues in the specified file(s). Accepts multiple values. The full project graph is still built, but only issues in matching files are reported. Useful for lint-staged pre-commit hooks"
|
|
933
969
|
},
|
|
970
|
+
{
|
|
971
|
+
"name": "--finding-id",
|
|
972
|
+
"type": "string",
|
|
973
|
+
"required": false,
|
|
974
|
+
"description": "Only report the findings with these `finding_id` values. Repeat the flag or pass a comma-separated list. Ids stay the same under every filter. The JSON output adds `finding_id_query`: a missing id means \"resolved\" only when `conclusive` is true"
|
|
975
|
+
},
|
|
934
976
|
{
|
|
935
977
|
"name": "path",
|
|
936
978
|
"type": "string",
|
|
@@ -3047,6 +3089,45 @@
|
|
|
3047
3089
|
"license_note": null,
|
|
3048
3090
|
"docs_url": "https://docs.fallow.tools/explanations/dead-code#re-export-cycles"
|
|
3049
3091
|
},
|
|
3092
|
+
{
|
|
3093
|
+
"id": "package-cycle",
|
|
3094
|
+
"rule_id": "fallow/package-cycle",
|
|
3095
|
+
"command": "dead-code",
|
|
3096
|
+
"category": "Architecture",
|
|
3097
|
+
"description": "Two or more workspace packages import each other in a loop",
|
|
3098
|
+
"label": "Package Cycles",
|
|
3099
|
+
"config_key": "package-cycle",
|
|
3100
|
+
"registry_index": 20,
|
|
3101
|
+
"aliases": [
|
|
3102
|
+
"package-cycles"
|
|
3103
|
+
],
|
|
3104
|
+
"lsp": true,
|
|
3105
|
+
"filter_flag": "--package-cycles",
|
|
3106
|
+
"result_key": "package_cycles",
|
|
3107
|
+
"summary_label": "Package cycles",
|
|
3108
|
+
"summary_docs_anchor": "package-cycles",
|
|
3109
|
+
"sarif_rule_ids": [
|
|
3110
|
+
"fallow/package-cycle"
|
|
3111
|
+
],
|
|
3112
|
+
"codeclimate_check_names": [
|
|
3113
|
+
"fallow/package-cycle"
|
|
3114
|
+
],
|
|
3115
|
+
"ts_alias": {
|
|
3116
|
+
"name": "PackageCycle",
|
|
3117
|
+
"parent": "PackageCycleFinding"
|
|
3118
|
+
},
|
|
3119
|
+
"counts_in_total": true,
|
|
3120
|
+
"fixable": false,
|
|
3121
|
+
"suppressible": true,
|
|
3122
|
+
"suppress_comment": "// fallow-ignore-next-line package-cycle",
|
|
3123
|
+
"default_severity": "warn",
|
|
3124
|
+
"opt_in": false,
|
|
3125
|
+
"frameworks": [],
|
|
3126
|
+
"note": "Requires a workspace with two or more packages",
|
|
3127
|
+
"license": "free",
|
|
3128
|
+
"license_note": null,
|
|
3129
|
+
"docs_url": "https://docs.fallow.tools/explanations/dead-code#package-cycles"
|
|
3130
|
+
},
|
|
3050
3131
|
{
|
|
3051
3132
|
"id": "boundary-violation",
|
|
3052
3133
|
"rule_id": "fallow/boundary-violation",
|
|
@@ -3055,7 +3136,7 @@
|
|
|
3055
3136
|
"description": "Import crosses a configured architecture boundary",
|
|
3056
3137
|
"label": "Boundary Violations",
|
|
3057
3138
|
"config_key": "boundary-violation",
|
|
3058
|
-
"registry_index":
|
|
3139
|
+
"registry_index": 21,
|
|
3059
3140
|
"aliases": [],
|
|
3060
3141
|
"lsp": true,
|
|
3061
3142
|
"filter_flag": "--boundary-violations",
|
|
@@ -3092,7 +3173,7 @@
|
|
|
3092
3173
|
"description": "Source file matches no configured architecture boundary zone",
|
|
3093
3174
|
"label": "Boundary Coverage",
|
|
3094
3175
|
"config_key": "boundary-violation",
|
|
3095
|
-
"registry_index":
|
|
3176
|
+
"registry_index": 22,
|
|
3096
3177
|
"aliases": [
|
|
3097
3178
|
"boundary-coverage-violations"
|
|
3098
3179
|
],
|
|
@@ -3128,7 +3209,7 @@
|
|
|
3128
3209
|
"description": "Zoned file calls a callee its zone forbids",
|
|
3129
3210
|
"label": "Boundary Call Violations",
|
|
3130
3211
|
"config_key": "boundary-violation",
|
|
3131
|
-
"registry_index":
|
|
3212
|
+
"registry_index": 23,
|
|
3132
3213
|
"aliases": [
|
|
3133
3214
|
"boundary-calls",
|
|
3134
3215
|
"boundary-call-violations"
|
|
@@ -3165,7 +3246,7 @@
|
|
|
3165
3246
|
"description": "Banned usage matched a rule-pack rule",
|
|
3166
3247
|
"label": "Policy Violations",
|
|
3167
3248
|
"config_key": "policy-violation",
|
|
3168
|
-
"registry_index":
|
|
3249
|
+
"registry_index": 24,
|
|
3169
3250
|
"aliases": [
|
|
3170
3251
|
"policy-violations"
|
|
3171
3252
|
],
|
|
@@ -3201,7 +3282,7 @@
|
|
|
3201
3282
|
"description": "Suppression comment or tag no longer matches any issue",
|
|
3202
3283
|
"label": "Stale Suppressions",
|
|
3203
3284
|
"config_key": "stale-suppressions",
|
|
3204
|
-
"registry_index":
|
|
3285
|
+
"registry_index": 39,
|
|
3205
3286
|
"aliases": [],
|
|
3206
3287
|
"lsp": true,
|
|
3207
3288
|
"filter_flag": "--stale-suppressions",
|
|
@@ -3237,7 +3318,7 @@
|
|
|
3237
3318
|
"description": "Suppression comment omits a required reason",
|
|
3238
3319
|
"label": "Missing Suppression Reasons",
|
|
3239
3320
|
"config_key": "require-suppression-reason",
|
|
3240
|
-
"registry_index":
|
|
3321
|
+
"registry_index": 40,
|
|
3241
3322
|
"aliases": [
|
|
3242
3323
|
"missing-suppression-reasons"
|
|
3243
3324
|
],
|
|
@@ -3269,7 +3350,7 @@
|
|
|
3269
3350
|
"description": "Catalog entry not referenced by any workspace package",
|
|
3270
3351
|
"label": "Unused Catalog Entries",
|
|
3271
3352
|
"config_key": "unused-catalog-entries",
|
|
3272
|
-
"registry_index":
|
|
3353
|
+
"registry_index": 41,
|
|
3273
3354
|
"aliases": [
|
|
3274
3355
|
"catalog",
|
|
3275
3356
|
"unused-catalog-entries"
|
|
@@ -3309,7 +3390,7 @@
|
|
|
3309
3390
|
"description": "Named catalog group has no entries",
|
|
3310
3391
|
"label": "Empty Catalog Groups",
|
|
3311
3392
|
"config_key": "empty-catalog-groups",
|
|
3312
|
-
"registry_index":
|
|
3393
|
+
"registry_index": 42,
|
|
3313
3394
|
"aliases": [
|
|
3314
3395
|
"empty-catalog",
|
|
3315
3396
|
"empty-catalog-groups"
|
|
@@ -3349,7 +3430,7 @@
|
|
|
3349
3430
|
"description": "package.json references a catalog that does not declare the package",
|
|
3350
3431
|
"label": "Unresolved Catalog References",
|
|
3351
3432
|
"config_key": "unresolved-catalog-references",
|
|
3352
|
-
"registry_index":
|
|
3433
|
+
"registry_index": 43,
|
|
3353
3434
|
"aliases": [
|
|
3354
3435
|
"unresolved-catalog",
|
|
3355
3436
|
"unresolved-catalog-references"
|
|
@@ -3389,7 +3470,7 @@
|
|
|
3389
3470
|
"description": "Package-manager override target is not declared or resolved",
|
|
3390
3471
|
"label": "Unused Dependency Overrides",
|
|
3391
3472
|
"config_key": "unused-dependency-overrides",
|
|
3392
|
-
"registry_index":
|
|
3473
|
+
"registry_index": 44,
|
|
3393
3474
|
"aliases": [
|
|
3394
3475
|
"unused-dependency-overrides",
|
|
3395
3476
|
"unused-override",
|
|
@@ -3430,7 +3511,7 @@
|
|
|
3430
3511
|
"description": "Package-manager override has an unparsable key or value",
|
|
3431
3512
|
"label": "Misconfigured Dependency Overrides",
|
|
3432
3513
|
"config_key": "misconfigured-dependency-overrides",
|
|
3433
|
-
"registry_index":
|
|
3514
|
+
"registry_index": 45,
|
|
3434
3515
|
"aliases": [
|
|
3435
3516
|
"misconfigured-dependency-overrides",
|
|
3436
3517
|
"misconfigured-override",
|
|
@@ -3471,7 +3552,7 @@
|
|
|
3471
3552
|
"description": "\"use client\" file exports a server-only / route-config name",
|
|
3472
3553
|
"label": "Invalid Client Exports",
|
|
3473
3554
|
"config_key": "invalid-client-export",
|
|
3474
|
-
"registry_index":
|
|
3555
|
+
"registry_index": 25,
|
|
3475
3556
|
"aliases": [
|
|
3476
3557
|
"invalid-client-exports"
|
|
3477
3558
|
],
|
|
@@ -3509,7 +3590,7 @@
|
|
|
3509
3590
|
"description": "Barrel re-exports both a \"use client\" module and a server-only module",
|
|
3510
3591
|
"label": "Mixed Client/Server Barrels",
|
|
3511
3592
|
"config_key": "mixed-client-server-barrel",
|
|
3512
|
-
"registry_index":
|
|
3593
|
+
"registry_index": 26,
|
|
3513
3594
|
"aliases": [
|
|
3514
3595
|
"mixed-client-server-barrels"
|
|
3515
3596
|
],
|
|
@@ -3545,7 +3626,7 @@
|
|
|
3545
3626
|
"description": "\"use client\" / \"use server\" directive is not in the leading position and is ignored",
|
|
3546
3627
|
"label": "Misplaced Directives",
|
|
3547
3628
|
"config_key": "misplaced-directive",
|
|
3548
|
-
"registry_index":
|
|
3629
|
+
"registry_index": 27,
|
|
3549
3630
|
"aliases": [
|
|
3550
3631
|
"misplaced-directives"
|
|
3551
3632
|
],
|
|
@@ -3581,7 +3662,7 @@
|
|
|
3581
3662
|
"description": "inject() / getContext() reads a key that no provide() / setContext() supplies",
|
|
3582
3663
|
"label": "Unprovided Injects",
|
|
3583
3664
|
"config_key": "unprovided-injects",
|
|
3584
|
-
"registry_index":
|
|
3665
|
+
"registry_index": 28,
|
|
3585
3666
|
"aliases": [
|
|
3586
3667
|
"unprovided-injects"
|
|
3587
3668
|
],
|
|
@@ -3617,7 +3698,7 @@
|
|
|
3617
3698
|
"description": "A Vue / Svelte component is reachable through a barrel but rendered nowhere",
|
|
3618
3699
|
"label": "Unrendered Components",
|
|
3619
3700
|
"config_key": "unrendered-components",
|
|
3620
|
-
"registry_index":
|
|
3701
|
+
"registry_index": 29,
|
|
3621
3702
|
"aliases": [
|
|
3622
3703
|
"unrendered-components"
|
|
3623
3704
|
],
|
|
@@ -3653,7 +3734,7 @@
|
|
|
3653
3734
|
"description": "A Vue, Svelte, or React component prop is referenced nowhere in its own component",
|
|
3654
3735
|
"label": "Unused Component Props",
|
|
3655
3736
|
"config_key": "unused-component-props",
|
|
3656
|
-
"registry_index":
|
|
3737
|
+
"registry_index": 30,
|
|
3657
3738
|
"aliases": [
|
|
3658
3739
|
"unused-component-props"
|
|
3659
3740
|
],
|
|
@@ -3689,7 +3770,7 @@
|
|
|
3689
3770
|
"description": "A Vue <script setup> defineEmits event is emitted nowhere in its own component",
|
|
3690
3771
|
"label": "Unused Component Emits",
|
|
3691
3772
|
"config_key": "unused-component-emits",
|
|
3692
|
-
"registry_index":
|
|
3773
|
+
"registry_index": 31,
|
|
3693
3774
|
"aliases": [
|
|
3694
3775
|
"unused-component-emits"
|
|
3695
3776
|
],
|
|
@@ -3725,7 +3806,7 @@
|
|
|
3725
3806
|
"description": "An Angular @Input() / signal input() / model() input is read nowhere in its own component",
|
|
3726
3807
|
"label": "Unused Component Inputs",
|
|
3727
3808
|
"config_key": "unused-component-inputs",
|
|
3728
|
-
"registry_index":
|
|
3809
|
+
"registry_index": 32,
|
|
3729
3810
|
"aliases": [
|
|
3730
3811
|
"unused-component-inputs"
|
|
3731
3812
|
],
|
|
@@ -3761,7 +3842,7 @@
|
|
|
3761
3842
|
"description": "An Angular @Output() / signal output() output is emitted nowhere in its own component",
|
|
3762
3843
|
"label": "Unused Component Outputs",
|
|
3763
3844
|
"config_key": "unused-component-outputs",
|
|
3764
|
-
"registry_index":
|
|
3845
|
+
"registry_index": 33,
|
|
3765
3846
|
"aliases": [
|
|
3766
3847
|
"unused-component-outputs"
|
|
3767
3848
|
],
|
|
@@ -3797,7 +3878,7 @@
|
|
|
3797
3878
|
"description": "A Svelte component dispatches a createEventDispatcher event whose name is listened to nowhere in the project",
|
|
3798
3879
|
"label": "Unused Svelte Events",
|
|
3799
3880
|
"config_key": "unused-svelte-events",
|
|
3800
|
-
"registry_index":
|
|
3881
|
+
"registry_index": 34,
|
|
3801
3882
|
"aliases": [
|
|
3802
3883
|
"unused-svelte-events"
|
|
3803
3884
|
],
|
|
@@ -3833,7 +3914,7 @@
|
|
|
3833
3914
|
"description": "A Next.js Server Action exported from a \"use server\" file is referenced by no code in the project",
|
|
3834
3915
|
"label": "Unused Server Actions",
|
|
3835
3916
|
"config_key": "unused-server-actions",
|
|
3836
|
-
"registry_index":
|
|
3917
|
+
"registry_index": 35,
|
|
3837
3918
|
"aliases": [
|
|
3838
3919
|
"unused-server-actions"
|
|
3839
3920
|
],
|
|
@@ -3869,7 +3950,7 @@
|
|
|
3869
3950
|
"description": "A SvelteKit load() return-object key is read by no consumer",
|
|
3870
3951
|
"label": "Unused Load Data Keys",
|
|
3871
3952
|
"config_key": "unused-load-data-keys",
|
|
3872
|
-
"registry_index":
|
|
3953
|
+
"registry_index": 36,
|
|
3873
3954
|
"aliases": [
|
|
3874
3955
|
"unused-load-data-keys"
|
|
3875
3956
|
],
|
|
@@ -3905,9 +3986,9 @@
|
|
|
3905
3986
|
"description": "A React/Preact prop is forwarded unchanged through 3+ pass-through components to a distant consumer",
|
|
3906
3987
|
"label": "Prop Drilling",
|
|
3907
3988
|
"config_key": "prop-drilling",
|
|
3908
|
-
"registry_index":
|
|
3989
|
+
"registry_index": 51,
|
|
3909
3990
|
"aliases": [],
|
|
3910
|
-
"lsp":
|
|
3991
|
+
"lsp": true,
|
|
3911
3992
|
"filter_flag": null,
|
|
3912
3993
|
"result_key": "prop_drilling_chains",
|
|
3913
3994
|
"summary_label": "Prop drilling",
|
|
@@ -3937,11 +4018,11 @@
|
|
|
3937
4018
|
"description": "A React/Preact component whose whole body is a single spread-forwarded child render (a candidate for inlining)",
|
|
3938
4019
|
"label": "Thin Wrappers",
|
|
3939
4020
|
"config_key": "thin-wrapper",
|
|
3940
|
-
"registry_index":
|
|
4021
|
+
"registry_index": 52,
|
|
3941
4022
|
"aliases": [
|
|
3942
4023
|
"thin-wrappers"
|
|
3943
4024
|
],
|
|
3944
|
-
"lsp":
|
|
4025
|
+
"lsp": true,
|
|
3945
4026
|
"filter_flag": null,
|
|
3946
4027
|
"result_key": "thin_wrappers",
|
|
3947
4028
|
"summary_label": "Thin wrappers",
|
|
@@ -3971,11 +4052,11 @@
|
|
|
3971
4052
|
"description": "Three or more React/Preact components across two or more files declare an identical prop-name set (a missing shared Props type)",
|
|
3972
4053
|
"label": "Duplicate Prop Shapes",
|
|
3973
4054
|
"config_key": "duplicate-prop-shape",
|
|
3974
|
-
"registry_index":
|
|
4055
|
+
"registry_index": 53,
|
|
3975
4056
|
"aliases": [
|
|
3976
4057
|
"duplicate-prop-shapes"
|
|
3977
4058
|
],
|
|
3978
|
-
"lsp":
|
|
4059
|
+
"lsp": true,
|
|
3979
4060
|
"filter_flag": null,
|
|
3980
4061
|
"result_key": "duplicate_prop_shapes",
|
|
3981
4062
|
"summary_label": "Duplicate prop shapes",
|
|
@@ -4005,7 +4086,7 @@
|
|
|
4005
4086
|
"description": "Two or more Next.js App Router route files resolve to the same URL",
|
|
4006
4087
|
"label": "Route Collisions",
|
|
4007
4088
|
"config_key": "route-collision",
|
|
4008
|
-
"registry_index":
|
|
4089
|
+
"registry_index": 37,
|
|
4009
4090
|
"aliases": [
|
|
4010
4091
|
"route-collisions"
|
|
4011
4092
|
],
|
|
@@ -4043,7 +4124,7 @@
|
|
|
4043
4124
|
"description": "Sibling Next.js dynamic route segments use different slug names at the same position",
|
|
4044
4125
|
"label": "Dynamic Segment Conflicts",
|
|
4045
4126
|
"config_key": "dynamic-segment-name-conflict",
|
|
4046
|
-
"registry_index":
|
|
4127
|
+
"registry_index": 38,
|
|
4047
4128
|
"aliases": [
|
|
4048
4129
|
"dynamic-segment-name-conflicts"
|
|
4049
4130
|
],
|
|
@@ -4231,7 +4312,7 @@
|
|
|
4231
4312
|
"description": "CSS or CSS-in-JS hardcoded styling value bypasses the design token system",
|
|
4232
4313
|
"label": "CSS Token Drift",
|
|
4233
4314
|
"config_key": "css-token-drift",
|
|
4234
|
-
"registry_index":
|
|
4315
|
+
"registry_index": 54,
|
|
4235
4316
|
"aliases": [],
|
|
4236
4317
|
"lsp": false,
|
|
4237
4318
|
"filter_flag": null,
|
|
@@ -4261,7 +4342,7 @@
|
|
|
4261
4342
|
"description": "CSS or CSS-in-JS declaration block is duplicated across rules",
|
|
4262
4343
|
"label": "CSS Duplicate Block",
|
|
4263
4344
|
"config_key": "css-duplicate-block",
|
|
4264
|
-
"registry_index":
|
|
4345
|
+
"registry_index": 55,
|
|
4265
4346
|
"aliases": [],
|
|
4266
4347
|
"lsp": false,
|
|
4267
4348
|
"filter_flag": null,
|
|
@@ -4291,7 +4372,7 @@
|
|
|
4291
4372
|
"description": "CSS selector, nesting, or important usage is structurally complex",
|
|
4292
4373
|
"label": "CSS Selector Complexity",
|
|
4293
4374
|
"config_key": "css-selector-complexity",
|
|
4294
|
-
"registry_index":
|
|
4375
|
+
"registry_index": 56,
|
|
4295
4376
|
"aliases": [],
|
|
4296
4377
|
"lsp": false,
|
|
4297
4378
|
"filter_flag": null,
|
|
@@ -4321,7 +4402,7 @@
|
|
|
4321
4402
|
"description": "CSS or CSS-in-JS surface appears unused",
|
|
4322
4403
|
"label": "CSS Dead Surface",
|
|
4323
4404
|
"config_key": "css-dead-surface",
|
|
4324
|
-
"registry_index":
|
|
4405
|
+
"registry_index": 57,
|
|
4325
4406
|
"aliases": [],
|
|
4326
4407
|
"lsp": false,
|
|
4327
4408
|
"filter_flag": null,
|
|
@@ -4351,7 +4432,7 @@
|
|
|
4351
4432
|
"description": "CSS or CSS-in-JS reference resolves to no stylesheet definition",
|
|
4352
4433
|
"label": "CSS Broken Reference",
|
|
4353
4434
|
"config_key": "css-broken-reference",
|
|
4354
|
-
"registry_index":
|
|
4435
|
+
"registry_index": 58,
|
|
4355
4436
|
"aliases": [],
|
|
4356
4437
|
"lsp": false,
|
|
4357
4438
|
"filter_flag": null,
|
|
@@ -4741,7 +4822,7 @@
|
|
|
4741
4822
|
"description": "Detected feature flag pattern",
|
|
4742
4823
|
"label": "Feature Flags",
|
|
4743
4824
|
"config_key": "feature-flags",
|
|
4744
|
-
"registry_index":
|
|
4825
|
+
"registry_index": 49,
|
|
4745
4826
|
"aliases": [],
|
|
4746
4827
|
"lsp": false,
|
|
4747
4828
|
"filter_flag": null,
|
|
@@ -6290,6 +6371,7 @@
|
|
|
6290
6371
|
"FALLOW_API_RETRY_DELAY": "Floor delay in seconds between HTTP retry attempts (default 2); a server-supplied Retry-After overrides it on 429 responses.",
|
|
6291
6372
|
"FALLOW_CACHE_DIR": "Directory for fallow's persistent analysis cache. Relative paths resolve from the project root and override cache.dir.",
|
|
6292
6373
|
"FALLOW_CACHE_MAX_SIZE": "Extraction cache size cap in megabytes (default 256). Wins over the cache.maxSizeMb config field.",
|
|
6374
|
+
"FALLOW_PACKAGE_BASELINES": "Set to false, 0, no or off to ignore workspaces.changedSince for every run of the process, like --no-package-baselines.",
|
|
6293
6375
|
"FALLOW_EXTENDS_TIMEOUT_SECS": "Timeout in seconds for fetching https:// configs referenced via the extends field (default 5).",
|
|
6294
6376
|
"FALLOW_COVERAGE": "Path to Istanbul coverage data (coverage-final.json) or raw V8 coverage (a NODE_V8_COVERAGE directory or one V8 JSON file) for accurate per-function CRAP scores. CLI --coverage flag overrides this; it wins over the health.coverage config field. Honored by the health, bare fallow, audit, and viz CLI commands and by the MCP audit and check_health tools on both their typed route and their CLI fallback, where the explicit coverage parameter overrides it. Viz reads it through the same precedence and has no coverage flag of its own.",
|
|
6295
6377
|
"FALLOW_COVERAGE_ROOT": "Absolute coverage-data path prefix for rebasing Istanbul paths in CI or containers. CLI --coverage-root flag overrides this; it wins over the health.coverageRoot config field. Honored by the health, bare fallow, audit, and viz CLI commands and by the MCP audit and check_health tools on both their typed route and their CLI fallback, where the explicit coverage_root parameter overrides it. Viz reads it through the same precedence and has no coverage flag of its own.",
|
|
@@ -6301,16 +6383,16 @@
|
|
|
6301
6383
|
"FALLOW_AUDIT_CACHE_MAX_AGE_DAYS": "GC threshold in days for reusable audit base-snapshot caches (default 30; 0 disables the sweep).",
|
|
6302
6384
|
"FALLOW_IMPACT_STORE_MAX_AGE_DAYS": "GC threshold in days for per-project fallow impact stores; a recorded run reclaims stores older than this (unset/0 keeps every store forever).",
|
|
6303
6385
|
"FALLOW_ROOT": "Project root used by the review-github/review-gitlab renderers to read source for suggestion blocks. Set it alongside --root when rendering review formats outside the bundled CI integrations.",
|
|
6304
|
-
"FALLOW_LICENSE": "License JWT (full string) for the paid
|
|
6386
|
+
"FALLOW_LICENSE": "License JWT (full string) for Fallow Cloud, the paid product; intended for shared CI runners.",
|
|
6305
6387
|
"FALLOW_LICENSE_PATH": "File path containing the license JWT.",
|
|
6306
6388
|
"FALLOW_LICENSE_SKEW_TOLERANCE_SECONDS": "Clock-skew tolerance applied to the license JWT's iat claim (default 86400).",
|
|
6307
6389
|
"FALLOW_COV_BIN": "Explicit path override for the fallow-cov runtime-coverage sidecar binary.",
|
|
6308
6390
|
"FALLOW_COV_BINARY_PATH": "Secondary explicit path override for the fallow-cov sidecar, checked after FALLOW_COV_BIN (air-gapped installs, distro-packaged sidecars, shared Docker images).",
|
|
6309
6391
|
"FALLOW_RUNTIME_COVERAGE_SOURCE": "Set to cloud to select cloud runtime coverage in fallow coverage analyze without passing --cloud.",
|
|
6310
6392
|
"FALLOW_REPO": "owner/repo fallback for fallow coverage analyze --cloud when --repo is not passed (otherwise parsed from the git origin remote).",
|
|
6311
|
-
"FALLOW_API_URL": "Base URL override for
|
|
6312
|
-
"FALLOW_API_KEY": "
|
|
6313
|
-
"FALLOW_CA_BUNDLE": "Path to a PEM certificate bundle for
|
|
6393
|
+
"FALLOW_API_URL": "Base URL override for Fallow Cloud API calls (license refresh, trial, coverage uploads).",
|
|
6394
|
+
"FALLOW_API_KEY": "Fallow Cloud bearer token for coverage upload commands, and the fallback bearer for fallow license refresh when the stored license JWT is missing or too stale.",
|
|
6395
|
+
"FALLOW_CA_BUNDLE": "Path to a PEM certificate bundle for Fallow Cloud and provider HTTP calls (replaces the default WebPKI roots).",
|
|
6314
6396
|
"FALLOW_UPDATE_CHECK": "Set to off/0/false to disable the human-TTY upgrade nudge and its background version check.",
|
|
6315
6397
|
"FALLOW_SUGGESTIONS": "Set to off/0/false/no/disabled to suppress the next_steps[] array of read-only follow-up commands in JSON output (and the human Next: line). Useful for CI consumers that snapshot-diff raw --format json output. Default on.",
|
|
6316
6398
|
"FALLOW_TELEMETRY": "Opt-in telemetry mode: off, on, or inspect (print the payload to stderr without sending). Telemetry is off by default.",
|
|
@@ -6820,7 +6902,7 @@
|
|
|
6820
6902
|
{
|
|
6821
6903
|
"name": "analyze",
|
|
6822
6904
|
"kind": "analysis",
|
|
6823
|
-
"description": "Full dead-code analysis: unused files, exports, types, dependencies, circular dependencies, and boundary violations",
|
|
6905
|
+
"description": "Full dead-code analysis: unused files, exports, types, dependencies, circular dependencies, and boundary violations, each with a stable finding_id",
|
|
6824
6906
|
"cli_command": "fallow dead-code --format json --quiet",
|
|
6825
6907
|
"key_params": [
|
|
6826
6908
|
"issue_types",
|
|
@@ -6838,7 +6920,7 @@
|
|
|
6838
6920
|
{
|
|
6839
6921
|
"name": "check_changed",
|
|
6840
6922
|
"kind": "analysis",
|
|
6841
|
-
"description": "Incremental dead-code analysis scoped to files changed since a git ref (ideal for PR review)",
|
|
6923
|
+
"description": "Incremental dead-code analysis scoped to files changed since a git ref (ideal for PR review); findings keep their finding_id",
|
|
6842
6924
|
"cli_command": "fallow dead-code --changed-since <ref> --format json --quiet",
|
|
6843
6925
|
"key_params": [
|
|
6844
6926
|
"since",
|
|
@@ -7041,7 +7123,7 @@
|
|
|
7041
7123
|
{
|
|
7042
7124
|
"name": "get_cloud_runtime_context",
|
|
7043
7125
|
"kind": "runtime-coverage",
|
|
7044
|
-
"description": "Runtime coverage pulled from
|
|
7126
|
+
"description": "Runtime coverage pulled from Fallow Cloud for a repository, merged into the same runtime_coverage block the local runtime-coverage tools return",
|
|
7045
7127
|
"cli_command": "fallow coverage analyze --cloud --repo <owner/repo> --format json --quiet",
|
|
7046
7128
|
"key_params": [
|
|
7047
7129
|
"repo",
|
|
@@ -7051,7 +7133,40 @@
|
|
|
7051
7133
|
"top"
|
|
7052
7134
|
],
|
|
7053
7135
|
"license": "freemium",
|
|
7054
|
-
"license_note": "Reading runtime coverage from
|
|
7136
|
+
"license_note": "Reading runtime coverage from Fallow Cloud needs a FALLOW_API_KEY for an org on the Team tier; the cloud refuses the request otherwise. No local license is involved.",
|
|
7137
|
+
"read_only": true,
|
|
7138
|
+
"code_mode_alias": null
|
|
7139
|
+
},
|
|
7140
|
+
{
|
|
7141
|
+
"name": "get_cloud_review_packet",
|
|
7142
|
+
"kind": "runtime-coverage",
|
|
7143
|
+
"description": "Production facts of a few changed files or functions, read from fallow cloud without the full runtime-context pull",
|
|
7144
|
+
"cli_command": "fallow coverage review-packet --repo <owner/repo> --file <path> --format json --quiet",
|
|
7145
|
+
"key_params": [
|
|
7146
|
+
"repo",
|
|
7147
|
+
"files",
|
|
7148
|
+
"functions",
|
|
7149
|
+
"period_days",
|
|
7150
|
+
"project_id"
|
|
7151
|
+
],
|
|
7152
|
+
"license": "freemium",
|
|
7153
|
+
"license_note": "Reading runtime coverage from Fallow Cloud needs a FALLOW_API_KEY for an org on the Team tier; the cloud refuses the request otherwise. No local license is involved.",
|
|
7154
|
+
"read_only": true,
|
|
7155
|
+
"code_mode_alias": null
|
|
7156
|
+
},
|
|
7157
|
+
{
|
|
7158
|
+
"name": "get_cloud_deployment_changes",
|
|
7159
|
+
"kind": "runtime-coverage",
|
|
7160
|
+
"description": "How production behavior changed between two deployments, read from the fallow cloud change report",
|
|
7161
|
+
"cli_command": "fallow coverage deployment-changes --repo <owner/repo> --sha <sha> --format json --quiet",
|
|
7162
|
+
"key_params": [
|
|
7163
|
+
"repo",
|
|
7164
|
+
"sha",
|
|
7165
|
+
"base",
|
|
7166
|
+
"change"
|
|
7167
|
+
],
|
|
7168
|
+
"license": "freemium",
|
|
7169
|
+
"license_note": "Reading runtime coverage from Fallow Cloud needs a FALLOW_API_KEY for an org on the Team tier; the cloud refuses the request otherwise. No local license is involved.",
|
|
7055
7170
|
"read_only": true,
|
|
7056
7171
|
"code_mode_alias": null
|
|
7057
7172
|
},
|