fallow 3.13.0 → 3.15.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 +29 -4
- package/package.json +10 -10
- package/schema.json +173 -16
- package/scripts/run-binary.js +10 -3
- package/scripts/run-binary.test.js +33 -0
- package/skills/fallow/SKILL.md +3 -3
- package/skills/fallow/references/cli-reference.md +26 -17
- package/skills/fallow/references/mcp.md +3 -3
- package/types/output-contract.d.ts +1431 -57
package/schema.json
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
3
|
"title": "FallowConfig",
|
|
4
|
+
"description": "The user-facing fallow configuration as authored in `.fallowrc.json` /\n`.fallowrc.jsonc` / `fallow.toml` (or the `fallow` key of `package.json`).\n\nEvery field documents its serialized meaning, default, and precedence\nagainst CLI flags and environment variables where they exist.\n`FallowConfig::resolve` compiles the loaded config (globs, regexes,\nplugin and rule-pack discovery) into a [`ResolvedConfig`] for analysis.\nUnknown keys are rejected at load so typos fail loud.",
|
|
4
5
|
"type": "object",
|
|
5
6
|
"properties": {
|
|
6
7
|
"$schema": {
|
|
@@ -121,16 +122,18 @@
|
|
|
121
122
|
"default": []
|
|
122
123
|
},
|
|
123
124
|
"duplicates": {
|
|
124
|
-
"description": "Configures clone detection: `enabled` (default true), `mode` (`strict`, `mild` default, `weak`, `semantic`, from least to most identifier/literal blinding; `strict` and `mild` are equivalent under fallow's AST tokenizer, `weak` blinds string literals, `semantic` blinds all identifiers and literals for Type-2 renamed-variable detection), `minTokens` (50), `minLines` (5), `minOccurrences` (integer >= 2, deserialization fails below 2), `threshold` (max duplication percentage, 0 = no limit), `ignore` globs, `ignoreDefaults` (true, merge built-in generated-file ignores), `skipLocal` (only report cross-directory clones), `crossLanguage` (strip TS type annotations to match .ts against .js), `ignoreImports` (true, strip ES import/re-export/top-level require wiring from the token stream), and `normalization` (per-flag `ignoreIdentifiers`/`ignoreStringValues`/`ignoreNumericValues` overrides on top of `mode`). Raise `minOccurrences` to focus on widespread copy-paste, or set `mode` to `semantic` to catch renamed-variable clones.",
|
|
125
|
+
"description": "Configures clone detection: `enabled` (default true), `mode` (`strict`, `mild` default, `weak`, `semantic`, from least to most identifier/literal blinding; `strict` and `mild` are equivalent under fallow's AST tokenizer, `weak` blinds string literals, `semantic` blinds all identifiers and literals for Type-2 renamed-variable detection), `near` (false, add bounded function-scoped near-miss detection), `minTokens` (50), `minLines` (5), `minOccurrences` (integer >= 2, deserialization fails below 2), `threshold` (max duplication percentage, 0 = no limit), `ignore` globs, `ignoredClones` (reviewed clone keys to hide until their content or occurrence count changes), `ignoreDefaults` (true, merge built-in generated-file ignores), `skipLocal` (only report cross-directory clones), `crossLanguage` (strip TS type annotations to match .ts against .js), `ignoreImports` (true, strip ES import/re-export/top-level require wiring from the token stream), and `normalization` (per-flag `ignoreIdentifiers`/`ignoreStringValues`/`ignoreNumericValues` overrides on top of `mode`). Raise `minOccurrences` to focus on widespread copy-paste, enable `near` for gapped structural clones, or set `mode` to `semantic` to catch renamed-variable exact clones.",
|
|
125
126
|
"$ref": "#/$defs/DuplicatesConfig",
|
|
126
127
|
"default": {
|
|
127
128
|
"enabled": true,
|
|
128
129
|
"mode": "mild",
|
|
130
|
+
"near": false,
|
|
129
131
|
"minTokens": 50,
|
|
130
132
|
"minLines": 5,
|
|
131
133
|
"minOccurrences": 2,
|
|
132
134
|
"threshold": 0.0,
|
|
133
135
|
"ignore": [],
|
|
136
|
+
"ignoredClones": [],
|
|
134
137
|
"ignoreDefaults": true,
|
|
135
138
|
"skipLocal": false,
|
|
136
139
|
"crossLanguage": false,
|
|
@@ -141,7 +144,7 @@
|
|
|
141
144
|
}
|
|
142
145
|
},
|
|
143
146
|
"health": {
|
|
144
|
-
"description": "Sets complexity and health thresholds for `fallow health` (also applied in combined `fallow` and `fallow audit`): `maxCyclomatic` (20), `maxCognitive` (15), `maxCrap` (30.0, findings at or above this are reported), `crapRefactorBand` (5, cyclomatic band below `maxCyclomatic` where a secondary refactor action is added), `maxUnitSize` (max function lines before a large-function finding, 60), `coverage`/`coverageRoot` (Istanbul coverage path and path-prefix strip for accurate CRAP), `ignore` globs (remove files from findings AND the health score), `thresholdOverrides` (per-file/per-function ceilings via `files`/`functions`/`maxCyclomatic`/`maxCognitive`/`maxCrap`/`maxUnitSize`/`reason`), `ownership` (`botPatterns` and `emailMode` for `--ownership`), and `suggestInlineSuppression` (true, emit `suppress-line` action hints in JSON). Raise thresholds to relax which functions are flagged, wire `coverage` for real CRAP scores, or exempt generated/test files via `ignore` (drops them from the score too) or `thresholdOverrides` (keeps them visible under a higher ceiling).",
|
|
147
|
+
"description": "Sets complexity and health thresholds for `fallow health` (also applied in combined `fallow` and `fallow audit`): `maxCyclomatic` (20), `maxCognitive` (15), `maxCrap` (30.0, findings at or above this are reported), `crapRefactorBand` (5, cyclomatic band below `maxCyclomatic` where a secondary refactor action is added), `maxUnitSize` (max function lines before a large-function finding, 60), `coverage`/`coverageRoot` (Istanbul coverage path and path-prefix strip for accurate CRAP), `ignore` globs (remove files from findings AND the health score), `thresholdOverrides` (per-file/per-function ceilings via `files`/`functions`/`maxCyclomatic`/`maxCognitive`/`maxCrap`/`maxUnitSize`/`reason`), `ownership` (`botPatterns` and `emailMode` for `--ownership`), and `suggestInlineSuppression` (true, emit `suppress-line` action hints in JSON). Raise thresholds to relax which functions are flagged, wire `coverage` for real CRAP scores, or exempt generated/test files via `ignore` (drops them from the score too) or `thresholdOverrides` (keeps them visible under a higher ceiling). The four `max*` thresholds govern findings only and never move `health_score`: its penalties use fixed calibration so grades stay comparable across projects, and `ignore` is the lever that removes files from the score.",
|
|
145
148
|
"$ref": "#/$defs/HealthConfig",
|
|
146
149
|
"default": {
|
|
147
150
|
"maxCyclomatic": 20,
|
|
@@ -457,6 +460,7 @@
|
|
|
457
460
|
"type": "object",
|
|
458
461
|
"properties": {
|
|
459
462
|
"package": {
|
|
463
|
+
"description": "Exact package name looked up in the project's declared dependencies.",
|
|
460
464
|
"type": "string"
|
|
461
465
|
},
|
|
462
466
|
"type": {
|
|
@@ -474,6 +478,7 @@
|
|
|
474
478
|
"type": "object",
|
|
475
479
|
"properties": {
|
|
476
480
|
"pattern": {
|
|
481
|
+
"description": "Project-root-relative glob; the plugin activates when any\ndiscovered file matches it. Validated at load like other user\nglobs (no absolute paths or `..` segments).",
|
|
477
482
|
"type": "string"
|
|
478
483
|
},
|
|
479
484
|
"type": {
|
|
@@ -491,6 +496,7 @@
|
|
|
491
496
|
"type": "object",
|
|
492
497
|
"properties": {
|
|
493
498
|
"conditions": {
|
|
499
|
+
"description": "Sub-conditions combined with logical AND.",
|
|
494
500
|
"type": "array",
|
|
495
501
|
"items": {
|
|
496
502
|
"$ref": "#/$defs/PluginDetection"
|
|
@@ -511,6 +517,7 @@
|
|
|
511
517
|
"type": "object",
|
|
512
518
|
"properties": {
|
|
513
519
|
"conditions": {
|
|
520
|
+
"description": "Sub-conditions combined with logical OR.",
|
|
514
521
|
"type": "array",
|
|
515
522
|
"items": {
|
|
516
523
|
"$ref": "#/$defs/PluginDetection"
|
|
@@ -709,6 +716,7 @@
|
|
|
709
716
|
}
|
|
710
717
|
}
|
|
711
718
|
},
|
|
719
|
+
"additionalProperties": false,
|
|
712
720
|
"required": [
|
|
713
721
|
"file",
|
|
714
722
|
"exports"
|
|
@@ -764,16 +772,20 @@
|
|
|
764
772
|
]
|
|
765
773
|
},
|
|
766
774
|
"IgnoreExportsUsedInFileConfig": {
|
|
775
|
+
"description": "Value of the `ignoreExportsUsedInFile` config key: whether an export\nreferenced elsewhere in its own file is suppressed from `unused-export`.",
|
|
767
776
|
"anyOf": [
|
|
768
777
|
{
|
|
778
|
+
"description": "Blanket toggle: `true` suppresses any export with a same-file use,\nregardless of kind. The default is `false`.",
|
|
769
779
|
"type": "boolean"
|
|
770
780
|
},
|
|
771
781
|
{
|
|
782
|
+
"description": "Knip-parity object form restricting the suppression to type-only\nexports.",
|
|
772
783
|
"$ref": "#/$defs/IgnoreExportsUsedInFileByKind"
|
|
773
784
|
}
|
|
774
785
|
]
|
|
775
786
|
},
|
|
776
787
|
"IgnoreExportsUsedInFileByKind": {
|
|
788
|
+
"description": "Object form of `ignoreExportsUsedInFile` (`{ \"type\": ..., \"interface\": ... }`),\nrestricting the same-file-use suppression to type-only exports.",
|
|
777
789
|
"type": "object",
|
|
778
790
|
"properties": {
|
|
779
791
|
"type": {
|
|
@@ -802,6 +814,11 @@
|
|
|
802
814
|
"$ref": "#/$defs/DetectionMode",
|
|
803
815
|
"default": "mild"
|
|
804
816
|
},
|
|
817
|
+
"near": {
|
|
818
|
+
"description": "Detect structurally similar function bodies with small edits.",
|
|
819
|
+
"type": "boolean",
|
|
820
|
+
"default": false
|
|
821
|
+
},
|
|
805
822
|
"minTokens": {
|
|
806
823
|
"description": "Minimum number of tokens for a clone.",
|
|
807
824
|
"type": "integer",
|
|
@@ -837,6 +854,15 @@
|
|
|
837
854
|
},
|
|
838
855
|
"default": []
|
|
839
856
|
},
|
|
857
|
+
"ignoredClones": {
|
|
858
|
+
"description": "Reviewed clone groups to omit from duplication results.\n\nEach entry is `<fingerprint>:<instance_count>`, for example\n`dup:6f12ab34:2`. A content or occurrence-count change produces a new key\nand makes the group reportable again.",
|
|
859
|
+
"type": "array",
|
|
860
|
+
"items": {
|
|
861
|
+
"type": "string",
|
|
862
|
+
"pattern": "^dup:(?:[0-9a-f]{8}|[0-9a-f]{16}(?:-[1-9][0-9]*)?):(?:[2-9]|[1-9][0-9]+)$"
|
|
863
|
+
},
|
|
864
|
+
"default": []
|
|
865
|
+
},
|
|
840
866
|
"ignoreDefaults": {
|
|
841
867
|
"description": "Merge built-in generated-framework ignore patterns with `ignore`.\n\nSet to `false` to use only the user-provided `ignore` list.",
|
|
842
868
|
"type": "boolean",
|
|
@@ -935,7 +961,7 @@
|
|
|
935
961
|
"type": "object",
|
|
936
962
|
"properties": {
|
|
937
963
|
"maxCyclomatic": {
|
|
938
|
-
"description": "Maximum allowed cyclomatic complexity per function (default: 20).\nFunctions exceeding this threshold are reported.",
|
|
964
|
+
"description": "Maximum allowed cyclomatic complexity per function (default: 20).\nFunctions exceeding this threshold are reported. Governs findings\nonly; the health score's complexity penalties use fixed calibration\n(use `health.ignore` to remove a file from the score).",
|
|
939
965
|
"type": "integer",
|
|
940
966
|
"format": "uint16",
|
|
941
967
|
"minimum": 0,
|
|
@@ -943,7 +969,7 @@
|
|
|
943
969
|
"default": 20
|
|
944
970
|
},
|
|
945
971
|
"maxCognitive": {
|
|
946
|
-
"description": "Maximum allowed cognitive complexity per function (default: 15).\nFunctions exceeding this threshold are reported.",
|
|
972
|
+
"description": "Maximum allowed cognitive complexity per function (default: 15).\nFunctions exceeding this threshold are reported. Governs findings\nonly, never the health score.",
|
|
947
973
|
"type": "integer",
|
|
948
974
|
"format": "uint16",
|
|
949
975
|
"minimum": 0,
|
|
@@ -951,7 +977,7 @@
|
|
|
951
977
|
"default": 15
|
|
952
978
|
},
|
|
953
979
|
"maxCrap": {
|
|
954
|
-
"description": "Maximum allowed CRAP (Change Risk Anti-Patterns) score per function\n(default: 30.0). CRAP combines cyclomatic complexity with test\ncoverage: high complexity plus low coverage produces a high CRAP\nscore. Functions meeting or exceeding this threshold are reported.\nUse `--coverage` with Istanbul data for accurate per-function CRAP;\notherwise fallow estimates coverage from the module graph.",
|
|
980
|
+
"description": "Maximum allowed CRAP (Change Risk Anti-Patterns) score per function\n(default: 30.0). CRAP combines cyclomatic complexity with test\ncoverage: high complexity plus low coverage produces a high CRAP\nscore. Functions meeting or exceeding this threshold are reported.\nUse `--coverage` with Istanbul data for accurate per-function CRAP;\notherwise fallow estimates coverage from the module graph. Governs\nfindings only, never the health score.",
|
|
955
981
|
"type": "number",
|
|
956
982
|
"format": "double",
|
|
957
983
|
"default": 30.0
|
|
@@ -965,7 +991,7 @@
|
|
|
965
991
|
"default": 5
|
|
966
992
|
},
|
|
967
993
|
"maxUnitSize": {
|
|
968
|
-
"description": "Maximum function length in lines of code before it is reported as an\noversized \"large function\" (default: 60). Raise it globally, or per file\nvia `thresholdOverrides[].maxUnitSize`, to relax the bar for generated or\ntest files (where a `describe()` block spans hundreds of lines) without\ndisabling complexity checks on those files. This filters the reported\nlarge-functions list only; the descriptive unit-size profile and the\nhealth score still reflect raw sizes (use `health.ignore` to remove a\
|
|
994
|
+
"description": "Maximum function length in lines of code before it is reported as an\noversized \"large function\" (default: 60). Raise it globally, or per file\nvia `thresholdOverrides[].maxUnitSize`, to relax the bar for generated or\ntest files (where a `describe()` block spans hundreds of lines) without\ndisabling complexity checks on those files. This filters the reported\nlarge-functions list only; the descriptive unit-size profile and the\nhealth score still reflect raw sizes against fixed calibration (the\n`unit_size` penalty keeps its `>60` LOC very-high-risk edge so grades\nstay comparable across projects; use `health.ignore` to remove a file\nfrom the score entirely).",
|
|
969
995
|
"type": "integer",
|
|
970
996
|
"format": "uint32",
|
|
971
997
|
"minimum": 0,
|
|
@@ -1187,38 +1213,47 @@
|
|
|
1187
1213
|
"type": "object",
|
|
1188
1214
|
"properties": {
|
|
1189
1215
|
"unused-files": {
|
|
1216
|
+
"description": "A file reachable from no entry point. Defaults to `error`.",
|
|
1190
1217
|
"$ref": "#/$defs/Severity",
|
|
1191
1218
|
"default": "error"
|
|
1192
1219
|
},
|
|
1193
1220
|
"unused-exports": {
|
|
1221
|
+
"description": "An exported symbol no other module imports. Defaults to `error`.",
|
|
1194
1222
|
"$ref": "#/$defs/Severity",
|
|
1195
1223
|
"default": "error"
|
|
1196
1224
|
},
|
|
1197
1225
|
"unused-types": {
|
|
1226
|
+
"description": "An exported type no other module uses. Defaults to `error`.",
|
|
1198
1227
|
"$ref": "#/$defs/Severity",
|
|
1199
1228
|
"default": "error"
|
|
1200
1229
|
},
|
|
1201
1230
|
"private-type-leaks": {
|
|
1231
|
+
"description": "An exported signature referencing a same-file private type. Opt-in;\ndefaults to `off`.",
|
|
1202
1232
|
"$ref": "#/$defs/Severity",
|
|
1203
1233
|
"default": "off"
|
|
1204
1234
|
},
|
|
1205
1235
|
"unused-dependencies": {
|
|
1236
|
+
"description": "A declared `dependencies` entry never observed used. Defaults to\n`error`.",
|
|
1206
1237
|
"$ref": "#/$defs/Severity",
|
|
1207
1238
|
"default": "error"
|
|
1208
1239
|
},
|
|
1209
1240
|
"unused-dev-dependencies": {
|
|
1241
|
+
"description": "A declared `devDependencies` entry never observed used. Defaults to\n`warn`; production mode forces it to `off`.",
|
|
1210
1242
|
"$ref": "#/$defs/Severity",
|
|
1211
1243
|
"default": "warn"
|
|
1212
1244
|
},
|
|
1213
1245
|
"unused-optional-dependencies": {
|
|
1246
|
+
"description": "A declared `optionalDependencies` entry never observed used. Defaults\nto `warn`; production mode forces it to `off`.",
|
|
1214
1247
|
"$ref": "#/$defs/Severity",
|
|
1215
1248
|
"default": "warn"
|
|
1216
1249
|
},
|
|
1217
1250
|
"unused-enum-members": {
|
|
1251
|
+
"description": "An enum member read nowhere in the project. Defaults to `error`.",
|
|
1218
1252
|
"$ref": "#/$defs/Severity",
|
|
1219
1253
|
"default": "error"
|
|
1220
1254
|
},
|
|
1221
1255
|
"unused-class-members": {
|
|
1256
|
+
"description": "A class member used nowhere; `usedClassMembers` and decorator\nexemptions carve out framework-invoked members. Defaults to `error`.",
|
|
1222
1257
|
"$ref": "#/$defs/Severity",
|
|
1223
1258
|
"default": "error"
|
|
1224
1259
|
},
|
|
@@ -1313,50 +1348,62 @@
|
|
|
1313
1348
|
"default": "warn"
|
|
1314
1349
|
},
|
|
1315
1350
|
"unresolved-imports": {
|
|
1351
|
+
"description": "An import specifier that resolves to no file or package. Defaults to\n`error`.",
|
|
1316
1352
|
"$ref": "#/$defs/Severity",
|
|
1317
1353
|
"default": "error"
|
|
1318
1354
|
},
|
|
1319
1355
|
"unlisted-dependencies": {
|
|
1356
|
+
"description": "An imported package not declared in any relevant `package.json`.\nDefaults to `error`.",
|
|
1320
1357
|
"$ref": "#/$defs/Severity",
|
|
1321
1358
|
"default": "error"
|
|
1322
1359
|
},
|
|
1323
1360
|
"duplicate-exports": {
|
|
1361
|
+
"description": "The same export name provided by multiple modules; `ignoreExports`\nexcludes intentional barrel re-exports. Defaults to `error`.",
|
|
1324
1362
|
"$ref": "#/$defs/Severity",
|
|
1325
1363
|
"default": "error"
|
|
1326
1364
|
},
|
|
1327
1365
|
"type-only-dependencies": {
|
|
1366
|
+
"description": "A production dependency imported only via type-only imports (a\n`devDependencies` candidate). Defaults to `warn`.",
|
|
1328
1367
|
"$ref": "#/$defs/Severity",
|
|
1329
1368
|
"default": "warn"
|
|
1330
1369
|
},
|
|
1331
1370
|
"test-only-dependencies": {
|
|
1371
|
+
"description": "A production dependency imported only by test files. Defaults to\n`warn`.",
|
|
1332
1372
|
"$ref": "#/$defs/Severity",
|
|
1333
1373
|
"default": "warn"
|
|
1334
1374
|
},
|
|
1335
1375
|
"dev-dependencies-in-production": {
|
|
1376
|
+
"description": "A `devDependencies` entry imported by production code, which a\nproduction-only install would omit and break at runtime. Defaults to\n`warn`.",
|
|
1336
1377
|
"$ref": "#/$defs/Severity",
|
|
1337
1378
|
"default": "warn"
|
|
1338
1379
|
},
|
|
1339
1380
|
"circular-dependencies": {
|
|
1381
|
+
"description": "A circular import chain between modules. Defaults to `error`.",
|
|
1340
1382
|
"$ref": "#/$defs/Severity",
|
|
1341
1383
|
"default": "error"
|
|
1342
1384
|
},
|
|
1343
1385
|
"re-export-cycle": {
|
|
1386
|
+
"description": "A cycle or self-loop in the re-export subgraph (barrel files\nre-exporting from each other in a loop). Defaults to `warn`.",
|
|
1344
1387
|
"$ref": "#/$defs/Severity",
|
|
1345
1388
|
"default": "warn"
|
|
1346
1389
|
},
|
|
1347
1390
|
"boundary-violation": {
|
|
1391
|
+
"description": "An import crossing a forbidden architecture-boundary edge declared in\nthe `boundaries` config. Defaults to `error`.",
|
|
1348
1392
|
"$ref": "#/$defs/Severity",
|
|
1349
1393
|
"default": "error"
|
|
1350
1394
|
},
|
|
1351
1395
|
"coverage-gaps": {
|
|
1396
|
+
"description": "A runtime file or export with no test dependency path. Opt-in;\ndefaults to `off`.",
|
|
1352
1397
|
"$ref": "#/$defs/Severity",
|
|
1353
1398
|
"default": "off"
|
|
1354
1399
|
},
|
|
1355
1400
|
"feature-flags": {
|
|
1401
|
+
"description": "A detected feature-flag pattern (tuned via the `flags` config).\nOpt-in; defaults to `off`.",
|
|
1356
1402
|
"$ref": "#/$defs/Severity",
|
|
1357
1403
|
"default": "off"
|
|
1358
1404
|
},
|
|
1359
1405
|
"stale-suppressions": {
|
|
1406
|
+
"description": "A `fallow-ignore` comment or `@expected-unused` tag that no longer\nmatches any issue. Defaults to `warn`.",
|
|
1360
1407
|
"$ref": "#/$defs/Severity",
|
|
1361
1408
|
"default": "warn"
|
|
1362
1409
|
},
|
|
@@ -1366,22 +1413,27 @@
|
|
|
1366
1413
|
"default": "off"
|
|
1367
1414
|
},
|
|
1368
1415
|
"unused-catalog-entries": {
|
|
1416
|
+
"description": "A `pnpm-workspace.yaml` catalog entry referenced by no workspace\npackage. Defaults to `warn`.",
|
|
1369
1417
|
"$ref": "#/$defs/Severity",
|
|
1370
1418
|
"default": "warn"
|
|
1371
1419
|
},
|
|
1372
1420
|
"empty-catalog-groups": {
|
|
1421
|
+
"description": "A named pnpm catalog group declaring no entries. Defaults to `warn`.",
|
|
1373
1422
|
"$ref": "#/$defs/Severity",
|
|
1374
1423
|
"default": "warn"
|
|
1375
1424
|
},
|
|
1376
1425
|
"unresolved-catalog-references": {
|
|
1426
|
+
"description": "A workspace `package.json` `catalog:` / `catalog:<name>` reference\npointing at a catalog that does not declare the consumed package.\nDefaults to `error`; suppressible only via `ignoreCatalogReferences`.",
|
|
1377
1427
|
"$ref": "#/$defs/Severity",
|
|
1378
1428
|
"default": "error"
|
|
1379
1429
|
},
|
|
1380
1430
|
"unused-dependency-overrides": {
|
|
1431
|
+
"description": "A pnpm `overrides:` / `pnpm.overrides` entry whose target package no\nworkspace `package.json` declares. Defaults to `warn`.",
|
|
1381
1432
|
"$ref": "#/$defs/Severity",
|
|
1382
1433
|
"default": "warn"
|
|
1383
1434
|
},
|
|
1384
1435
|
"misconfigured-dependency-overrides": {
|
|
1436
|
+
"description": "A pnpm `overrides:` / `pnpm.overrides` entry whose key or value cannot\nbe parsed into a valid pnpm shape. Defaults to `error`.",
|
|
1385
1437
|
"$ref": "#/$defs/Severity",
|
|
1386
1438
|
"default": "error"
|
|
1387
1439
|
},
|
|
@@ -1758,6 +1810,7 @@
|
|
|
1758
1810
|
"additionalProperties": false
|
|
1759
1811
|
},
|
|
1760
1812
|
"FixConfig": {
|
|
1813
|
+
"description": "The `fix` config section: settings for `fallow fix` apply behavior.",
|
|
1761
1814
|
"type": "object",
|
|
1762
1815
|
"properties": {
|
|
1763
1816
|
"catalog": {
|
|
@@ -1770,6 +1823,7 @@
|
|
|
1770
1823
|
}
|
|
1771
1824
|
},
|
|
1772
1825
|
"CatalogFixConfig": {
|
|
1826
|
+
"description": "The `fix.catalog` section: how `fallow fix` cleans up unused\n`pnpm-workspace.yaml` catalog entries.",
|
|
1773
1827
|
"type": "object",
|
|
1774
1828
|
"properties": {
|
|
1775
1829
|
"deletePrecedingComments": {
|
|
@@ -1780,11 +1834,23 @@
|
|
|
1780
1834
|
}
|
|
1781
1835
|
},
|
|
1782
1836
|
"CatalogPrecedingCommentPolicy": {
|
|
1783
|
-
"
|
|
1784
|
-
"
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1837
|
+
"description": "Value of `fix.catalog.deletePrecedingComments`: what happens to comment\nlines directly above a catalog entry that `fallow fix` removes. A\n`fallow-keep` marker in the block always preserves it regardless of policy.",
|
|
1838
|
+
"oneOf": [
|
|
1839
|
+
{
|
|
1840
|
+
"description": "Delete the adjacent comment block only when heuristics attribute it to\nthe entry (preceded by a blank line or directly under the catalog\nheader) and it is not a section banner. The default.",
|
|
1841
|
+
"type": "string",
|
|
1842
|
+
"const": "auto"
|
|
1843
|
+
},
|
|
1844
|
+
{
|
|
1845
|
+
"description": "Always delete the adjacent comment block with the entry.",
|
|
1846
|
+
"type": "string",
|
|
1847
|
+
"const": "always"
|
|
1848
|
+
},
|
|
1849
|
+
{
|
|
1850
|
+
"description": "Never delete preceding comments.",
|
|
1851
|
+
"type": "string",
|
|
1852
|
+
"const": "never"
|
|
1853
|
+
}
|
|
1788
1854
|
]
|
|
1789
1855
|
},
|
|
1790
1856
|
"ResolveConfig": {
|
|
@@ -1801,16 +1867,20 @@
|
|
|
1801
1867
|
}
|
|
1802
1868
|
},
|
|
1803
1869
|
"ProductionConfig": {
|
|
1870
|
+
"description": "Value of the `production` config key: excludes test/spec/story/dev files\nfrom discovery, either globally or per analysis family.",
|
|
1804
1871
|
"anyOf": [
|
|
1805
1872
|
{
|
|
1873
|
+
"description": "Boolean form applying to every analysis. The default is `false`.",
|
|
1806
1874
|
"type": "boolean"
|
|
1807
1875
|
},
|
|
1808
1876
|
{
|
|
1877
|
+
"description": "Object form (`{ deadCode?, health?, dupes? }`) scoping production mode\nper analysis family.",
|
|
1809
1878
|
"$ref": "#/$defs/PerAnalysisProductionConfig"
|
|
1810
1879
|
}
|
|
1811
1880
|
]
|
|
1812
1881
|
},
|
|
1813
1882
|
"PerAnalysisProductionConfig": {
|
|
1883
|
+
"description": "Object form of the `production` config key, scoping production mode to\nindividual analysis families in combined `fallow` and `fallow audit`.",
|
|
1814
1884
|
"type": "object",
|
|
1815
1885
|
"properties": {
|
|
1816
1886
|
"deadCode": {
|
|
@@ -1848,6 +1918,7 @@
|
|
|
1848
1918
|
"default": {}
|
|
1849
1919
|
}
|
|
1850
1920
|
},
|
|
1921
|
+
"additionalProperties": false,
|
|
1851
1922
|
"required": [
|
|
1852
1923
|
"files"
|
|
1853
1924
|
]
|
|
@@ -1857,6 +1928,7 @@
|
|
|
1857
1928
|
"type": "object",
|
|
1858
1929
|
"properties": {
|
|
1859
1930
|
"unused-files": {
|
|
1931
|
+
"description": "Optional override for [`RulesConfig::unused_files`].",
|
|
1860
1932
|
"anyOf": [
|
|
1861
1933
|
{
|
|
1862
1934
|
"$ref": "#/$defs/Severity"
|
|
@@ -1867,6 +1939,7 @@
|
|
|
1867
1939
|
]
|
|
1868
1940
|
},
|
|
1869
1941
|
"unused-exports": {
|
|
1942
|
+
"description": "Optional override for [`RulesConfig::unused_exports`].",
|
|
1870
1943
|
"anyOf": [
|
|
1871
1944
|
{
|
|
1872
1945
|
"$ref": "#/$defs/Severity"
|
|
@@ -1877,6 +1950,7 @@
|
|
|
1877
1950
|
]
|
|
1878
1951
|
},
|
|
1879
1952
|
"unused-types": {
|
|
1953
|
+
"description": "Optional override for [`RulesConfig::unused_types`].",
|
|
1880
1954
|
"anyOf": [
|
|
1881
1955
|
{
|
|
1882
1956
|
"$ref": "#/$defs/Severity"
|
|
@@ -1887,6 +1961,7 @@
|
|
|
1887
1961
|
]
|
|
1888
1962
|
},
|
|
1889
1963
|
"private-type-leaks": {
|
|
1964
|
+
"description": "Optional override for [`RulesConfig::private_type_leaks`].",
|
|
1890
1965
|
"anyOf": [
|
|
1891
1966
|
{
|
|
1892
1967
|
"$ref": "#/$defs/Severity"
|
|
@@ -1897,6 +1972,7 @@
|
|
|
1897
1972
|
]
|
|
1898
1973
|
},
|
|
1899
1974
|
"unused-dependencies": {
|
|
1975
|
+
"description": "Optional override for [`RulesConfig::unused_dependencies`].",
|
|
1900
1976
|
"anyOf": [
|
|
1901
1977
|
{
|
|
1902
1978
|
"$ref": "#/$defs/Severity"
|
|
@@ -1907,6 +1983,7 @@
|
|
|
1907
1983
|
]
|
|
1908
1984
|
},
|
|
1909
1985
|
"unused-dev-dependencies": {
|
|
1986
|
+
"description": "Optional override for [`RulesConfig::unused_dev_dependencies`].",
|
|
1910
1987
|
"anyOf": [
|
|
1911
1988
|
{
|
|
1912
1989
|
"$ref": "#/$defs/Severity"
|
|
@@ -1917,6 +1994,7 @@
|
|
|
1917
1994
|
]
|
|
1918
1995
|
},
|
|
1919
1996
|
"unused-optional-dependencies": {
|
|
1997
|
+
"description": "Optional override for [`RulesConfig::unused_optional_dependencies`].",
|
|
1920
1998
|
"anyOf": [
|
|
1921
1999
|
{
|
|
1922
2000
|
"$ref": "#/$defs/Severity"
|
|
@@ -1927,6 +2005,7 @@
|
|
|
1927
2005
|
]
|
|
1928
2006
|
},
|
|
1929
2007
|
"unused-enum-members": {
|
|
2008
|
+
"description": "Optional override for [`RulesConfig::unused_enum_members`].",
|
|
1930
2009
|
"anyOf": [
|
|
1931
2010
|
{
|
|
1932
2011
|
"$ref": "#/$defs/Severity"
|
|
@@ -1937,6 +2016,7 @@
|
|
|
1937
2016
|
]
|
|
1938
2017
|
},
|
|
1939
2018
|
"unused-class-members": {
|
|
2019
|
+
"description": "Optional override for [`RulesConfig::unused_class_members`].",
|
|
1940
2020
|
"anyOf": [
|
|
1941
2021
|
{
|
|
1942
2022
|
"$ref": "#/$defs/Severity"
|
|
@@ -1947,6 +2027,7 @@
|
|
|
1947
2027
|
]
|
|
1948
2028
|
},
|
|
1949
2029
|
"unused-store-members": {
|
|
2030
|
+
"description": "Optional override for [`RulesConfig::unused_store_members`].",
|
|
1950
2031
|
"anyOf": [
|
|
1951
2032
|
{
|
|
1952
2033
|
"$ref": "#/$defs/Severity"
|
|
@@ -1957,6 +2038,7 @@
|
|
|
1957
2038
|
]
|
|
1958
2039
|
},
|
|
1959
2040
|
"unprovided-injects": {
|
|
2041
|
+
"description": "Optional override for [`RulesConfig::unprovided_injects`].",
|
|
1960
2042
|
"anyOf": [
|
|
1961
2043
|
{
|
|
1962
2044
|
"$ref": "#/$defs/Severity"
|
|
@@ -1967,6 +2049,7 @@
|
|
|
1967
2049
|
]
|
|
1968
2050
|
},
|
|
1969
2051
|
"unrendered-components": {
|
|
2052
|
+
"description": "Optional override for [`RulesConfig::unrendered_components`].",
|
|
1970
2053
|
"anyOf": [
|
|
1971
2054
|
{
|
|
1972
2055
|
"$ref": "#/$defs/Severity"
|
|
@@ -1977,6 +2060,7 @@
|
|
|
1977
2060
|
]
|
|
1978
2061
|
},
|
|
1979
2062
|
"unused-component-props": {
|
|
2063
|
+
"description": "Optional override for [`RulesConfig::unused_component_props`].",
|
|
1980
2064
|
"anyOf": [
|
|
1981
2065
|
{
|
|
1982
2066
|
"$ref": "#/$defs/Severity"
|
|
@@ -1987,6 +2071,7 @@
|
|
|
1987
2071
|
]
|
|
1988
2072
|
},
|
|
1989
2073
|
"unused-component-emits": {
|
|
2074
|
+
"description": "Optional override for [`RulesConfig::unused_component_emits`].",
|
|
1990
2075
|
"anyOf": [
|
|
1991
2076
|
{
|
|
1992
2077
|
"$ref": "#/$defs/Severity"
|
|
@@ -1997,6 +2082,7 @@
|
|
|
1997
2082
|
]
|
|
1998
2083
|
},
|
|
1999
2084
|
"unused-component-inputs": {
|
|
2085
|
+
"description": "Optional override for [`RulesConfig::unused_component_inputs`].",
|
|
2000
2086
|
"anyOf": [
|
|
2001
2087
|
{
|
|
2002
2088
|
"$ref": "#/$defs/Severity"
|
|
@@ -2007,6 +2093,7 @@
|
|
|
2007
2093
|
]
|
|
2008
2094
|
},
|
|
2009
2095
|
"unused-component-outputs": {
|
|
2096
|
+
"description": "Optional override for [`RulesConfig::unused_component_outputs`].",
|
|
2010
2097
|
"anyOf": [
|
|
2011
2098
|
{
|
|
2012
2099
|
"$ref": "#/$defs/Severity"
|
|
@@ -2017,6 +2104,7 @@
|
|
|
2017
2104
|
]
|
|
2018
2105
|
},
|
|
2019
2106
|
"unused-svelte-events": {
|
|
2107
|
+
"description": "Optional override for [`RulesConfig::unused_svelte_events`].",
|
|
2020
2108
|
"anyOf": [
|
|
2021
2109
|
{
|
|
2022
2110
|
"$ref": "#/$defs/Severity"
|
|
@@ -2027,6 +2115,7 @@
|
|
|
2027
2115
|
]
|
|
2028
2116
|
},
|
|
2029
2117
|
"unused-server-actions": {
|
|
2118
|
+
"description": "Optional override for [`RulesConfig::unused_server_actions`].",
|
|
2030
2119
|
"anyOf": [
|
|
2031
2120
|
{
|
|
2032
2121
|
"$ref": "#/$defs/Severity"
|
|
@@ -2037,6 +2126,7 @@
|
|
|
2037
2126
|
]
|
|
2038
2127
|
},
|
|
2039
2128
|
"unused-load-data-keys": {
|
|
2129
|
+
"description": "Optional override for [`RulesConfig::unused_load_data_keys`].",
|
|
2040
2130
|
"anyOf": [
|
|
2041
2131
|
{
|
|
2042
2132
|
"$ref": "#/$defs/Severity"
|
|
@@ -2047,6 +2137,7 @@
|
|
|
2047
2137
|
]
|
|
2048
2138
|
},
|
|
2049
2139
|
"prop-drilling": {
|
|
2140
|
+
"description": "Optional override for [`RulesConfig::prop_drilling`].",
|
|
2050
2141
|
"anyOf": [
|
|
2051
2142
|
{
|
|
2052
2143
|
"$ref": "#/$defs/Severity"
|
|
@@ -2057,6 +2148,7 @@
|
|
|
2057
2148
|
]
|
|
2058
2149
|
},
|
|
2059
2150
|
"thin-wrapper": {
|
|
2151
|
+
"description": "Optional override for [`RulesConfig::thin_wrapper`].",
|
|
2060
2152
|
"anyOf": [
|
|
2061
2153
|
{
|
|
2062
2154
|
"$ref": "#/$defs/Severity"
|
|
@@ -2067,6 +2159,7 @@
|
|
|
2067
2159
|
]
|
|
2068
2160
|
},
|
|
2069
2161
|
"duplicate-prop-shape": {
|
|
2162
|
+
"description": "Optional override for [`RulesConfig::duplicate_prop_shape`].",
|
|
2070
2163
|
"anyOf": [
|
|
2071
2164
|
{
|
|
2072
2165
|
"$ref": "#/$defs/Severity"
|
|
@@ -2077,6 +2170,7 @@
|
|
|
2077
2170
|
]
|
|
2078
2171
|
},
|
|
2079
2172
|
"css-token-drift": {
|
|
2173
|
+
"description": "Optional override for [`RulesConfig::css_token_drift`].",
|
|
2080
2174
|
"anyOf": [
|
|
2081
2175
|
{
|
|
2082
2176
|
"$ref": "#/$defs/Severity"
|
|
@@ -2087,6 +2181,7 @@
|
|
|
2087
2181
|
]
|
|
2088
2182
|
},
|
|
2089
2183
|
"css-duplicate-block": {
|
|
2184
|
+
"description": "Optional override for [`RulesConfig::css_duplicate_block`].",
|
|
2090
2185
|
"anyOf": [
|
|
2091
2186
|
{
|
|
2092
2187
|
"$ref": "#/$defs/Severity"
|
|
@@ -2097,6 +2192,7 @@
|
|
|
2097
2192
|
]
|
|
2098
2193
|
},
|
|
2099
2194
|
"css-selector-complexity": {
|
|
2195
|
+
"description": "Optional override for [`RulesConfig::css_selector_complexity`].",
|
|
2100
2196
|
"anyOf": [
|
|
2101
2197
|
{
|
|
2102
2198
|
"$ref": "#/$defs/Severity"
|
|
@@ -2107,6 +2203,7 @@
|
|
|
2107
2203
|
]
|
|
2108
2204
|
},
|
|
2109
2205
|
"css-dead-surface": {
|
|
2206
|
+
"description": "Optional override for [`RulesConfig::css_dead_surface`].",
|
|
2110
2207
|
"anyOf": [
|
|
2111
2208
|
{
|
|
2112
2209
|
"$ref": "#/$defs/Severity"
|
|
@@ -2117,6 +2214,7 @@
|
|
|
2117
2214
|
]
|
|
2118
2215
|
},
|
|
2119
2216
|
"css-broken-reference": {
|
|
2217
|
+
"description": "Optional override for [`RulesConfig::css_broken_reference`].",
|
|
2120
2218
|
"anyOf": [
|
|
2121
2219
|
{
|
|
2122
2220
|
"$ref": "#/$defs/Severity"
|
|
@@ -2127,6 +2225,7 @@
|
|
|
2127
2225
|
]
|
|
2128
2226
|
},
|
|
2129
2227
|
"unresolved-imports": {
|
|
2228
|
+
"description": "Optional override for [`RulesConfig::unresolved_imports`].",
|
|
2130
2229
|
"anyOf": [
|
|
2131
2230
|
{
|
|
2132
2231
|
"$ref": "#/$defs/Severity"
|
|
@@ -2137,6 +2236,7 @@
|
|
|
2137
2236
|
]
|
|
2138
2237
|
},
|
|
2139
2238
|
"unlisted-dependencies": {
|
|
2239
|
+
"description": "Optional override for [`RulesConfig::unlisted_dependencies`].",
|
|
2140
2240
|
"anyOf": [
|
|
2141
2241
|
{
|
|
2142
2242
|
"$ref": "#/$defs/Severity"
|
|
@@ -2147,6 +2247,7 @@
|
|
|
2147
2247
|
]
|
|
2148
2248
|
},
|
|
2149
2249
|
"duplicate-exports": {
|
|
2250
|
+
"description": "Optional override for [`RulesConfig::duplicate_exports`].",
|
|
2150
2251
|
"anyOf": [
|
|
2151
2252
|
{
|
|
2152
2253
|
"$ref": "#/$defs/Severity"
|
|
@@ -2157,6 +2258,7 @@
|
|
|
2157
2258
|
]
|
|
2158
2259
|
},
|
|
2159
2260
|
"type-only-dependencies": {
|
|
2261
|
+
"description": "Optional override for [`RulesConfig::type_only_dependencies`].",
|
|
2160
2262
|
"anyOf": [
|
|
2161
2263
|
{
|
|
2162
2264
|
"$ref": "#/$defs/Severity"
|
|
@@ -2167,6 +2269,7 @@
|
|
|
2167
2269
|
]
|
|
2168
2270
|
},
|
|
2169
2271
|
"test-only-dependencies": {
|
|
2272
|
+
"description": "Optional override for [`RulesConfig::test_only_dependencies`].",
|
|
2170
2273
|
"anyOf": [
|
|
2171
2274
|
{
|
|
2172
2275
|
"$ref": "#/$defs/Severity"
|
|
@@ -2177,6 +2280,7 @@
|
|
|
2177
2280
|
]
|
|
2178
2281
|
},
|
|
2179
2282
|
"dev-dependencies-in-production": {
|
|
2283
|
+
"description": "Optional override for [`RulesConfig::dev_dependencies_in_production`].",
|
|
2180
2284
|
"anyOf": [
|
|
2181
2285
|
{
|
|
2182
2286
|
"$ref": "#/$defs/Severity"
|
|
@@ -2187,6 +2291,7 @@
|
|
|
2187
2291
|
]
|
|
2188
2292
|
},
|
|
2189
2293
|
"circular-dependencies": {
|
|
2294
|
+
"description": "Optional override for [`RulesConfig::circular_dependencies`].",
|
|
2190
2295
|
"anyOf": [
|
|
2191
2296
|
{
|
|
2192
2297
|
"$ref": "#/$defs/Severity"
|
|
@@ -2197,6 +2302,7 @@
|
|
|
2197
2302
|
]
|
|
2198
2303
|
},
|
|
2199
2304
|
"re-export-cycle": {
|
|
2305
|
+
"description": "Optional override for [`RulesConfig::re_export_cycle`].",
|
|
2200
2306
|
"anyOf": [
|
|
2201
2307
|
{
|
|
2202
2308
|
"$ref": "#/$defs/Severity"
|
|
@@ -2207,6 +2313,7 @@
|
|
|
2207
2313
|
]
|
|
2208
2314
|
},
|
|
2209
2315
|
"boundary-violation": {
|
|
2316
|
+
"description": "Optional override for [`RulesConfig::boundary_violation`].",
|
|
2210
2317
|
"anyOf": [
|
|
2211
2318
|
{
|
|
2212
2319
|
"$ref": "#/$defs/Severity"
|
|
@@ -2217,6 +2324,7 @@
|
|
|
2217
2324
|
]
|
|
2218
2325
|
},
|
|
2219
2326
|
"coverage-gaps": {
|
|
2327
|
+
"description": "Optional override for [`RulesConfig::coverage_gaps`].",
|
|
2220
2328
|
"anyOf": [
|
|
2221
2329
|
{
|
|
2222
2330
|
"$ref": "#/$defs/Severity"
|
|
@@ -2227,6 +2335,7 @@
|
|
|
2227
2335
|
]
|
|
2228
2336
|
},
|
|
2229
2337
|
"feature-flags": {
|
|
2338
|
+
"description": "Optional override for [`RulesConfig::feature_flags`].",
|
|
2230
2339
|
"anyOf": [
|
|
2231
2340
|
{
|
|
2232
2341
|
"$ref": "#/$defs/Severity"
|
|
@@ -2237,6 +2346,7 @@
|
|
|
2237
2346
|
]
|
|
2238
2347
|
},
|
|
2239
2348
|
"stale-suppressions": {
|
|
2349
|
+
"description": "Optional override for [`RulesConfig::stale_suppressions`].",
|
|
2240
2350
|
"anyOf": [
|
|
2241
2351
|
{
|
|
2242
2352
|
"$ref": "#/$defs/Severity"
|
|
@@ -2247,6 +2357,7 @@
|
|
|
2247
2357
|
]
|
|
2248
2358
|
},
|
|
2249
2359
|
"require-suppression-reason": {
|
|
2360
|
+
"description": "Optional override for [`RulesConfig::require_suppression_reason`].",
|
|
2250
2361
|
"anyOf": [
|
|
2251
2362
|
{
|
|
2252
2363
|
"$ref": "#/$defs/Severity"
|
|
@@ -2257,6 +2368,7 @@
|
|
|
2257
2368
|
]
|
|
2258
2369
|
},
|
|
2259
2370
|
"unused-catalog-entries": {
|
|
2371
|
+
"description": "Optional override for [`RulesConfig::unused_catalog_entries`].",
|
|
2260
2372
|
"anyOf": [
|
|
2261
2373
|
{
|
|
2262
2374
|
"$ref": "#/$defs/Severity"
|
|
@@ -2267,6 +2379,7 @@
|
|
|
2267
2379
|
]
|
|
2268
2380
|
},
|
|
2269
2381
|
"empty-catalog-groups": {
|
|
2382
|
+
"description": "Optional override for [`RulesConfig::empty_catalog_groups`].",
|
|
2270
2383
|
"anyOf": [
|
|
2271
2384
|
{
|
|
2272
2385
|
"$ref": "#/$defs/Severity"
|
|
@@ -2277,6 +2390,7 @@
|
|
|
2277
2390
|
]
|
|
2278
2391
|
},
|
|
2279
2392
|
"unresolved-catalog-references": {
|
|
2393
|
+
"description": "Optional override for [`RulesConfig::unresolved_catalog_references`].",
|
|
2280
2394
|
"anyOf": [
|
|
2281
2395
|
{
|
|
2282
2396
|
"$ref": "#/$defs/Severity"
|
|
@@ -2287,6 +2401,7 @@
|
|
|
2287
2401
|
]
|
|
2288
2402
|
},
|
|
2289
2403
|
"unused-dependency-overrides": {
|
|
2404
|
+
"description": "Optional override for [`RulesConfig::unused_dependency_overrides`].",
|
|
2290
2405
|
"anyOf": [
|
|
2291
2406
|
{
|
|
2292
2407
|
"$ref": "#/$defs/Severity"
|
|
@@ -2297,6 +2412,7 @@
|
|
|
2297
2412
|
]
|
|
2298
2413
|
},
|
|
2299
2414
|
"misconfigured-dependency-overrides": {
|
|
2415
|
+
"description": "Optional override for [`RulesConfig::misconfigured_dependency_overrides`].",
|
|
2300
2416
|
"anyOf": [
|
|
2301
2417
|
{
|
|
2302
2418
|
"$ref": "#/$defs/Severity"
|
|
@@ -2307,6 +2423,7 @@
|
|
|
2307
2423
|
]
|
|
2308
2424
|
},
|
|
2309
2425
|
"security-client-server-leak": {
|
|
2426
|
+
"description": "Optional override for [`RulesConfig::security_client_server_leak`].",
|
|
2310
2427
|
"anyOf": [
|
|
2311
2428
|
{
|
|
2312
2429
|
"$ref": "#/$defs/Severity"
|
|
@@ -2317,6 +2434,7 @@
|
|
|
2317
2434
|
]
|
|
2318
2435
|
},
|
|
2319
2436
|
"security-sink": {
|
|
2437
|
+
"description": "Optional override for [`RulesConfig::security_sink`].",
|
|
2320
2438
|
"anyOf": [
|
|
2321
2439
|
{
|
|
2322
2440
|
"$ref": "#/$defs/Severity"
|
|
@@ -2327,6 +2445,7 @@
|
|
|
2327
2445
|
]
|
|
2328
2446
|
},
|
|
2329
2447
|
"policy-violation": {
|
|
2448
|
+
"description": "Optional override for [`RulesConfig::policy_violation`].",
|
|
2330
2449
|
"anyOf": [
|
|
2331
2450
|
{
|
|
2332
2451
|
"$ref": "#/$defs/Severity"
|
|
@@ -2337,6 +2456,7 @@
|
|
|
2337
2456
|
]
|
|
2338
2457
|
},
|
|
2339
2458
|
"invalid-client-export": {
|
|
2459
|
+
"description": "Optional override for [`RulesConfig::invalid_client_export`].",
|
|
2340
2460
|
"anyOf": [
|
|
2341
2461
|
{
|
|
2342
2462
|
"$ref": "#/$defs/Severity"
|
|
@@ -2347,6 +2467,7 @@
|
|
|
2347
2467
|
]
|
|
2348
2468
|
},
|
|
2349
2469
|
"mixed-client-server-barrel": {
|
|
2470
|
+
"description": "Optional override for [`RulesConfig::mixed_client_server_barrel`].",
|
|
2350
2471
|
"anyOf": [
|
|
2351
2472
|
{
|
|
2352
2473
|
"$ref": "#/$defs/Severity"
|
|
@@ -2357,6 +2478,7 @@
|
|
|
2357
2478
|
]
|
|
2358
2479
|
},
|
|
2359
2480
|
"misplaced-directive": {
|
|
2481
|
+
"description": "Optional override for [`RulesConfig::misplaced_directive`].",
|
|
2360
2482
|
"anyOf": [
|
|
2361
2483
|
{
|
|
2362
2484
|
"$ref": "#/$defs/Severity"
|
|
@@ -2367,6 +2489,7 @@
|
|
|
2367
2489
|
]
|
|
2368
2490
|
},
|
|
2369
2491
|
"route-collision": {
|
|
2492
|
+
"description": "Optional override for [`RulesConfig::route_collision`].",
|
|
2370
2493
|
"anyOf": [
|
|
2371
2494
|
{
|
|
2372
2495
|
"$ref": "#/$defs/Severity"
|
|
@@ -2377,6 +2500,7 @@
|
|
|
2377
2500
|
]
|
|
2378
2501
|
},
|
|
2379
2502
|
"dynamic-segment-name-conflict": {
|
|
2503
|
+
"description": "Optional override for [`RulesConfig::dynamic_segment_name_conflict`].",
|
|
2380
2504
|
"anyOf": [
|
|
2381
2505
|
{
|
|
2382
2506
|
"$ref": "#/$defs/Severity"
|
|
@@ -2389,6 +2513,7 @@
|
|
|
2389
2513
|
}
|
|
2390
2514
|
},
|
|
2391
2515
|
"RegressionConfig": {
|
|
2516
|
+
"description": "The `regression` config section holding the saved issue-count baseline for\nthe `--fail-on-regression` gate.",
|
|
2392
2517
|
"type": "object",
|
|
2393
2518
|
"properties": {
|
|
2394
2519
|
"baseline": {
|
|
@@ -2405,6 +2530,7 @@
|
|
|
2405
2530
|
}
|
|
2406
2531
|
},
|
|
2407
2532
|
"RegressionBaseline": {
|
|
2533
|
+
"description": "Saved per-issue-type counts written by `--save-baseline` and compared by\n`--fail-on-regression`. Every count defaults to `0` when its key is missing,\nso hand-trimmed baselines stay loadable.",
|
|
2408
2534
|
"type": "object",
|
|
2409
2535
|
"properties": {
|
|
2410
2536
|
"analysisIdentity": {
|
|
@@ -2420,126 +2546,147 @@
|
|
|
2420
2546
|
}
|
|
2421
2547
|
},
|
|
2422
2548
|
"totalIssues": {
|
|
2549
|
+
"description": "Baseline count across all issue types.",
|
|
2423
2550
|
"type": "integer",
|
|
2424
2551
|
"format": "uint",
|
|
2425
2552
|
"minimum": 0,
|
|
2426
2553
|
"default": 0
|
|
2427
2554
|
},
|
|
2428
2555
|
"unusedFiles": {
|
|
2556
|
+
"description": "Baseline count of `unused-files` findings.",
|
|
2429
2557
|
"type": "integer",
|
|
2430
2558
|
"format": "uint",
|
|
2431
2559
|
"minimum": 0,
|
|
2432
2560
|
"default": 0
|
|
2433
2561
|
},
|
|
2434
2562
|
"unusedExports": {
|
|
2563
|
+
"description": "Baseline count of `unused-exports` findings.",
|
|
2435
2564
|
"type": "integer",
|
|
2436
2565
|
"format": "uint",
|
|
2437
2566
|
"minimum": 0,
|
|
2438
2567
|
"default": 0
|
|
2439
2568
|
},
|
|
2440
2569
|
"unusedTypes": {
|
|
2570
|
+
"description": "Baseline count of `unused-types` findings.",
|
|
2441
2571
|
"type": "integer",
|
|
2442
2572
|
"format": "uint",
|
|
2443
2573
|
"minimum": 0,
|
|
2444
2574
|
"default": 0
|
|
2445
2575
|
},
|
|
2446
2576
|
"unusedDependencies": {
|
|
2577
|
+
"description": "Baseline count of `unused-dependencies` findings.",
|
|
2447
2578
|
"type": "integer",
|
|
2448
2579
|
"format": "uint",
|
|
2449
2580
|
"minimum": 0,
|
|
2450
2581
|
"default": 0
|
|
2451
2582
|
},
|
|
2452
2583
|
"unusedDevDependencies": {
|
|
2584
|
+
"description": "Baseline count of `unused-dev-dependencies` findings.",
|
|
2453
2585
|
"type": "integer",
|
|
2454
2586
|
"format": "uint",
|
|
2455
2587
|
"minimum": 0,
|
|
2456
2588
|
"default": 0
|
|
2457
2589
|
},
|
|
2458
2590
|
"unusedOptionalDependencies": {
|
|
2591
|
+
"description": "Baseline count of `unused-optional-dependencies` findings.",
|
|
2459
2592
|
"type": "integer",
|
|
2460
2593
|
"format": "uint",
|
|
2461
2594
|
"minimum": 0,
|
|
2462
2595
|
"default": 0
|
|
2463
2596
|
},
|
|
2464
2597
|
"unusedEnumMembers": {
|
|
2598
|
+
"description": "Baseline count of `unused-enum-members` findings.",
|
|
2465
2599
|
"type": "integer",
|
|
2466
2600
|
"format": "uint",
|
|
2467
2601
|
"minimum": 0,
|
|
2468
2602
|
"default": 0
|
|
2469
2603
|
},
|
|
2470
2604
|
"unusedClassMembers": {
|
|
2605
|
+
"description": "Baseline count of `unused-class-members` findings.",
|
|
2471
2606
|
"type": "integer",
|
|
2472
2607
|
"format": "uint",
|
|
2473
2608
|
"minimum": 0,
|
|
2474
2609
|
"default": 0
|
|
2475
2610
|
},
|
|
2476
2611
|
"unresolvedImports": {
|
|
2612
|
+
"description": "Baseline count of `unresolved-imports` findings.",
|
|
2477
2613
|
"type": "integer",
|
|
2478
2614
|
"format": "uint",
|
|
2479
2615
|
"minimum": 0,
|
|
2480
2616
|
"default": 0
|
|
2481
2617
|
},
|
|
2482
2618
|
"unlistedDependencies": {
|
|
2619
|
+
"description": "Baseline count of `unlisted-dependencies` findings.",
|
|
2483
2620
|
"type": "integer",
|
|
2484
2621
|
"format": "uint",
|
|
2485
2622
|
"minimum": 0,
|
|
2486
2623
|
"default": 0
|
|
2487
2624
|
},
|
|
2488
2625
|
"duplicateExports": {
|
|
2626
|
+
"description": "Baseline count of `duplicate-exports` findings.",
|
|
2489
2627
|
"type": "integer",
|
|
2490
2628
|
"format": "uint",
|
|
2491
2629
|
"minimum": 0,
|
|
2492
2630
|
"default": 0
|
|
2493
2631
|
},
|
|
2494
2632
|
"circularDependencies": {
|
|
2633
|
+
"description": "Baseline count of `circular-dependencies` findings.",
|
|
2495
2634
|
"type": "integer",
|
|
2496
2635
|
"format": "uint",
|
|
2497
2636
|
"minimum": 0,
|
|
2498
2637
|
"default": 0
|
|
2499
2638
|
},
|
|
2500
2639
|
"reExportCycles": {
|
|
2640
|
+
"description": "Baseline count of `re-export-cycle` findings.",
|
|
2501
2641
|
"type": "integer",
|
|
2502
2642
|
"format": "uint",
|
|
2503
2643
|
"minimum": 0,
|
|
2504
2644
|
"default": 0
|
|
2505
2645
|
},
|
|
2506
2646
|
"typeOnlyDependencies": {
|
|
2647
|
+
"description": "Baseline count of `type-only-dependencies` findings.",
|
|
2507
2648
|
"type": "integer",
|
|
2508
2649
|
"format": "uint",
|
|
2509
2650
|
"minimum": 0,
|
|
2510
2651
|
"default": 0
|
|
2511
2652
|
},
|
|
2512
2653
|
"testOnlyDependencies": {
|
|
2654
|
+
"description": "Baseline count of `test-only-dependencies` findings.",
|
|
2513
2655
|
"type": "integer",
|
|
2514
2656
|
"format": "uint",
|
|
2515
2657
|
"minimum": 0,
|
|
2516
2658
|
"default": 0
|
|
2517
2659
|
},
|
|
2518
2660
|
"devDependenciesInProduction": {
|
|
2661
|
+
"description": "Baseline count of `dev-dependencies-in-production` findings.",
|
|
2519
2662
|
"type": "integer",
|
|
2520
2663
|
"format": "uint",
|
|
2521
2664
|
"minimum": 0,
|
|
2522
2665
|
"default": 0
|
|
2523
2666
|
},
|
|
2524
2667
|
"boundaryViolations": {
|
|
2668
|
+
"description": "Baseline count of `boundary-violation` findings.",
|
|
2525
2669
|
"type": "integer",
|
|
2526
2670
|
"format": "uint",
|
|
2527
2671
|
"minimum": 0,
|
|
2528
2672
|
"default": 0
|
|
2529
2673
|
},
|
|
2530
2674
|
"boundaryCoverageViolations": {
|
|
2675
|
+
"description": "Baseline count of boundary-coverage-violation findings.",
|
|
2531
2676
|
"type": "integer",
|
|
2532
2677
|
"format": "uint",
|
|
2533
2678
|
"minimum": 0,
|
|
2534
2679
|
"default": 0
|
|
2535
2680
|
},
|
|
2536
2681
|
"boundaryCallViolations": {
|
|
2682
|
+
"description": "Baseline count of boundary-call-violation findings.",
|
|
2537
2683
|
"type": "integer",
|
|
2538
2684
|
"format": "uint",
|
|
2539
2685
|
"minimum": 0,
|
|
2540
2686
|
"default": 0
|
|
2541
2687
|
},
|
|
2542
2688
|
"policyViolations": {
|
|
2689
|
+
"description": "Baseline count of `policy-violation` findings.",
|
|
2543
2690
|
"type": "integer",
|
|
2544
2691
|
"format": "uint",
|
|
2545
2692
|
"minimum": 0,
|
|
@@ -2656,6 +2803,7 @@
|
|
|
2656
2803
|
]
|
|
2657
2804
|
},
|
|
2658
2805
|
"AuditConfig": {
|
|
2806
|
+
"description": "The `audit` config section: in-repo defaults for `fallow audit`, each\noverridable by its matching CLI flag.",
|
|
2659
2807
|
"type": "object",
|
|
2660
2808
|
"properties": {
|
|
2661
2809
|
"gate": {
|
|
@@ -2698,7 +2846,7 @@
|
|
|
2698
2846
|
]
|
|
2699
2847
|
},
|
|
2700
2848
|
"cacheMaxAgeDays": {
|
|
2701
|
-
"description": "Garbage-collection threshold, in whole days, for the persistent reusable base-snapshot worktree caches `fallow audit` creates: entries older than this window are swept on each audit run. Set to control cache accumulation; `0` disables the sweep and unset defaults to 30 days. The `FALLOW_AUDIT_CACHE_MAX_AGE_DAYS` environment variable overrides this field.",
|
|
2849
|
+
"description": "Garbage-collection threshold, in whole days, for the persistent reusable base-snapshot worktree caches `fallow audit` creates: entries older than this window are swept on each audit run. Set to control cache accumulation; `0` disables the sweep and unset defaults to 30 days. Each sweep also reclaims abandoned entries minted under other repo identities (deleted or moved repos, other git worktrees) once they age past this repo's threshold; entries whose recorded owner root still exists are skipped and stay governed by that repo's own setting. The `FALLOW_AUDIT_CACHE_MAX_AGE_DAYS` environment variable overrides this field.",
|
|
2702
2850
|
"type": [
|
|
2703
2851
|
"integer",
|
|
2704
2852
|
"null"
|
|
@@ -2716,13 +2864,22 @@
|
|
|
2716
2864
|
}
|
|
2717
2865
|
},
|
|
2718
2866
|
"AuditGate": {
|
|
2719
|
-
"
|
|
2720
|
-
"
|
|
2721
|
-
|
|
2722
|
-
|
|
2867
|
+
"description": "Value of `audit.gate`: which findings drive the `fallow audit` verdict.",
|
|
2868
|
+
"oneOf": [
|
|
2869
|
+
{
|
|
2870
|
+
"description": "Fail only on findings the current changeset introduced, determined by\na base-snapshot attribution pass. The default.",
|
|
2871
|
+
"type": "string",
|
|
2872
|
+
"const": "new-only"
|
|
2873
|
+
},
|
|
2874
|
+
{
|
|
2875
|
+
"description": "Fail on every finding in changed files, skipping the attribution pass.",
|
|
2876
|
+
"type": "string",
|
|
2877
|
+
"const": "all"
|
|
2878
|
+
}
|
|
2723
2879
|
]
|
|
2724
2880
|
},
|
|
2725
2881
|
"CacheConfig": {
|
|
2882
|
+
"description": "The `cache` config section: location and size ceiling of fallow's\npersistent caches (default directory `<root>/.fallow`).",
|
|
2726
2883
|
"type": "object",
|
|
2727
2884
|
"properties": {
|
|
2728
2885
|
"dir": {
|