fallow 3.40.0 → 3.42.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 +117 -4
- package/issue-registry.json +30 -0
- package/package.json +10 -10
- package/schema.json +66 -5
- package/skills/fallow/SKILL.md +4 -2
- package/skills/fallow/references/cli-reference.md +14 -13
- package/skills/fallow/references/issue-types.md +1 -0
- package/skills/fallow/references/mcp.md +2 -1
- package/types/output-contract.d.ts +334 -15
package/capabilities.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fallow",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.42.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": [
|
|
@@ -1261,6 +1261,22 @@
|
|
|
1261
1261
|
"required": false,
|
|
1262
1262
|
"description": "Run at most N covered mutants, in rank order. Uncovered mutants do not count. The others are `pending`"
|
|
1263
1263
|
},
|
|
1264
|
+
{
|
|
1265
|
+
"name": "--mutants-per-line",
|
|
1266
|
+
"type": "string",
|
|
1267
|
+
"required": false,
|
|
1268
|
+
"description": "Keep at most N mutants on each source line. The plan keeps the most productive mutants of the line (relational, condition, arithmetic and logical operators first). The others are `pending` with the reason `sampled-out` and do not run (default: the `mutation.mutantsPerLine` key, else each mutant)"
|
|
1269
|
+
},
|
|
1270
|
+
{
|
|
1271
|
+
"name": "--function-scope",
|
|
1272
|
+
"type": "bool",
|
|
1273
|
+
"required": false,
|
|
1274
|
+
"description": "Widen each changed line to the whole function that holds it, so that a changed parameter or signature selects the mutants of the function. Only the changed-code scope uses it (default: the `mutation.functionScope` key, else the changed lines only)",
|
|
1275
|
+
"possible_values": [
|
|
1276
|
+
"true",
|
|
1277
|
+
"false"
|
|
1278
|
+
]
|
|
1279
|
+
},
|
|
1264
1280
|
{
|
|
1265
1281
|
"name": "--time-budget",
|
|
1266
1282
|
"type": "string",
|
|
@@ -1309,7 +1325,7 @@
|
|
|
1309
1325
|
"name": "--operators",
|
|
1310
1326
|
"type": "string",
|
|
1311
1327
|
"required": false,
|
|
1312
|
-
"description": "The operators to use, comma-separated
|
|
1328
|
+
"description": "The operators to use, comma-separated. Default: the default set. The opt-in operators (block-statement, array-literal, object-literal, method-expression, switch-case, call-expression, throw-statement, regex-constructor, regex-assertion) run only when named here"
|
|
1313
1329
|
},
|
|
1314
1330
|
{
|
|
1315
1331
|
"name": "--verdicts",
|
|
@@ -1333,7 +1349,7 @@
|
|
|
1333
1349
|
"name": "--typecheck",
|
|
1334
1350
|
"type": "bool",
|
|
1335
1351
|
"required": false,
|
|
1336
|
-
"description": "Type-check each survived mutant through the `--type-aware` companion. A survivor that does not type-check becomes `compile_error` and leaves the score",
|
|
1352
|
+
"description": "Type-check each survived mutant through the `--type-aware` companion. A survivor that does not type-check becomes `compile_error` and leaves the score. An optional-chaining survivor on a receiver whose type excludes `null` and `undefined` gets an advisory `equivalence_hint`. Its status and the score do not change",
|
|
1337
1353
|
"possible_values": [
|
|
1338
1354
|
"true",
|
|
1339
1355
|
"false"
|
|
@@ -1365,6 +1381,34 @@
|
|
|
1365
1381
|
"required": false,
|
|
1366
1382
|
"description": "Check whether this test is redundant: a test file (each test in it) or a test id (`file::name`). Repeat the flag for more targets. Only the mutants that a target covers run: first the target tests without a stop at a failure, then the other covering tests up to the first failure"
|
|
1367
1383
|
},
|
|
1384
|
+
{
|
|
1385
|
+
"name": "--recheck",
|
|
1386
|
+
"type": "bool",
|
|
1387
|
+
"required": false,
|
|
1388
|
+
"description": "Rerun the open tasks of a saved report (its `survived` and `no_coverage` mutants) against the current tests. The worktree may change test files only. The run replaces the saved report, so `fallow mutation tasks` then lists the mutants that are still open",
|
|
1389
|
+
"possible_values": [
|
|
1390
|
+
"true",
|
|
1391
|
+
"false"
|
|
1392
|
+
]
|
|
1393
|
+
},
|
|
1394
|
+
{
|
|
1395
|
+
"name": "--report",
|
|
1396
|
+
"type": "string",
|
|
1397
|
+
"required": false,
|
|
1398
|
+
"description": "The saved report of `--recheck` (default: the report of the last run). A recheck without `--mutant` replaces the saved report"
|
|
1399
|
+
},
|
|
1400
|
+
{
|
|
1401
|
+
"name": "--mutant",
|
|
1402
|
+
"type": "string",
|
|
1403
|
+
"required": false,
|
|
1404
|
+
"description": "Recheck only these mutant ids of the report, comma-separated or repeated (default: each open task). The saved report then stays as it is, so `fallow mutation tasks` keeps the other open tasks"
|
|
1405
|
+
},
|
|
1406
|
+
{
|
|
1407
|
+
"name": "--compare",
|
|
1408
|
+
"type": "string",
|
|
1409
|
+
"required": false,
|
|
1410
|
+
"description": "Compare this run with a saved complete report: list each mutant that the report detects (`killed` or `timeout`) and this run does not (`survived` or `no_coverage`), with its earlier killing tests. A report or a run that is not complete exits 2"
|
|
1411
|
+
},
|
|
1368
1412
|
{
|
|
1369
1413
|
"name": "paths",
|
|
1370
1414
|
"type": "string",
|
|
@@ -2664,6 +2708,24 @@
|
|
|
2664
2708
|
"type": "string",
|
|
2665
2709
|
"required": true,
|
|
2666
2710
|
"description": "Path to a fallow JSON results file produced by `--format json` (dead-code, architecture, dupes, health, audit, security, or bare combined)"
|
|
2711
|
+
},
|
|
2712
|
+
{
|
|
2713
|
+
"name": "--mutation-report",
|
|
2714
|
+
"type": "string",
|
|
2715
|
+
"required": false,
|
|
2716
|
+
"description": "A saved `fallow mutation --format json` report, or the JSON error envelope of a failed run, to render with the results. Applies to the pr-comment, review, github-summary, github-annotations and codeclimate formats only. The paths in the report are relative to the root of the mutation run, which must be the `--root` of this call"
|
|
2717
|
+
},
|
|
2718
|
+
{
|
|
2719
|
+
"name": "--mutation-not-run",
|
|
2720
|
+
"type": "string",
|
|
2721
|
+
"required": false,
|
|
2722
|
+
"description": "Why mutation testing did not run in this job, so the render states it. Applies to the same formats as `--mutation-report`",
|
|
2723
|
+
"possible_values": [
|
|
2724
|
+
"event-refused",
|
|
2725
|
+
"fork-refused",
|
|
2726
|
+
"no-change-scope",
|
|
2727
|
+
"interrupted"
|
|
2728
|
+
]
|
|
2667
2729
|
}
|
|
2668
2730
|
]
|
|
2669
2731
|
},
|
|
@@ -7221,6 +7283,36 @@
|
|
|
7221
7283
|
"license": "free",
|
|
7222
7284
|
"license_note": null,
|
|
7223
7285
|
"docs_url": "https://fallow.tools/docs/cli/audit/#diff-risk-rules"
|
|
7286
|
+
},
|
|
7287
|
+
{
|
|
7288
|
+
"id": "mutation-survived",
|
|
7289
|
+
"rule_id": "fallow/mutation-survived",
|
|
7290
|
+
"command": "mutation",
|
|
7291
|
+
"category": "Tests",
|
|
7292
|
+
"description": "A small code change made no test fail",
|
|
7293
|
+
"label": null,
|
|
7294
|
+
"config_key": null,
|
|
7295
|
+
"registry_index": null,
|
|
7296
|
+
"aliases": [],
|
|
7297
|
+
"lsp": false,
|
|
7298
|
+
"filter_flag": null,
|
|
7299
|
+
"result_key": null,
|
|
7300
|
+
"summary_label": null,
|
|
7301
|
+
"summary_docs_anchor": null,
|
|
7302
|
+
"sarif_rule_ids": null,
|
|
7303
|
+
"codeclimate_check_names": null,
|
|
7304
|
+
"ts_alias": null,
|
|
7305
|
+
"counts_in_total": false,
|
|
7306
|
+
"fixable": false,
|
|
7307
|
+
"suppressible": false,
|
|
7308
|
+
"suppress_comment": null,
|
|
7309
|
+
"default_severity": null,
|
|
7310
|
+
"opt_in": null,
|
|
7311
|
+
"frameworks": [],
|
|
7312
|
+
"note": null,
|
|
7313
|
+
"license": "free",
|
|
7314
|
+
"license_note": null,
|
|
7315
|
+
"docs_url": "https://fallow.tools/docs/cli/mutation/"
|
|
7224
7316
|
}
|
|
7225
7317
|
],
|
|
7226
7318
|
"suppression_comments": {
|
|
@@ -7918,6 +8010,8 @@
|
|
|
7918
8010
|
"all",
|
|
7919
8011
|
"paths",
|
|
7920
8012
|
"max_mutants",
|
|
8013
|
+
"mutants_per_line",
|
|
8014
|
+
"function_scope",
|
|
7921
8015
|
"operators"
|
|
7922
8016
|
],
|
|
7923
8017
|
"license": "free",
|
|
@@ -7939,6 +8033,19 @@
|
|
|
7939
8033
|
"read_only": true,
|
|
7940
8034
|
"code_mode_alias": null
|
|
7941
8035
|
},
|
|
8036
|
+
{
|
|
8037
|
+
"name": "mutation_tasks",
|
|
8038
|
+
"kind": "trace",
|
|
8039
|
+
"description": "The open tasks of a saved mutation report (default: the last run report) as one batch: each survived or uncovered mutant with its source lines before and after the change; runs no tests",
|
|
8040
|
+
"cli_command": "fallow mutation tasks [--report <report.json>] --format json --quiet",
|
|
8041
|
+
"key_params": [
|
|
8042
|
+
"report"
|
|
8043
|
+
],
|
|
8044
|
+
"license": "free",
|
|
8045
|
+
"license_note": null,
|
|
8046
|
+
"read_only": true,
|
|
8047
|
+
"code_mode_alias": null
|
|
8048
|
+
},
|
|
7942
8049
|
{
|
|
7943
8050
|
"name": "inspect_target",
|
|
7944
8051
|
"kind": "analysis",
|
|
@@ -8535,7 +8642,7 @@
|
|
|
8535
8642
|
]
|
|
8536
8643
|
},
|
|
8537
8644
|
"plugins": {
|
|
8538
|
-
"count":
|
|
8645
|
+
"count": 156,
|
|
8539
8646
|
"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",
|
|
8540
8647
|
"names": [
|
|
8541
8648
|
"nextjs",
|
|
@@ -8551,6 +8658,7 @@
|
|
|
8551
8658
|
"redwoodsdk",
|
|
8552
8659
|
"tanstack-router",
|
|
8553
8660
|
"waku",
|
|
8661
|
+
"solid-start",
|
|
8554
8662
|
"react-native",
|
|
8555
8663
|
"expo",
|
|
8556
8664
|
"expo-router",
|
|
@@ -8571,6 +8679,7 @@
|
|
|
8571
8679
|
"supabase",
|
|
8572
8680
|
"vitepress",
|
|
8573
8681
|
"rspress",
|
|
8682
|
+
"dumi",
|
|
8574
8683
|
"next-intl",
|
|
8575
8684
|
"relay",
|
|
8576
8685
|
"electron",
|
|
@@ -8589,6 +8698,7 @@
|
|
|
8589
8698
|
"ember",
|
|
8590
8699
|
"eve",
|
|
8591
8700
|
"vite",
|
|
8701
|
+
"vite-plugin-pages",
|
|
8592
8702
|
"vscode",
|
|
8593
8703
|
"webpack",
|
|
8594
8704
|
"rollup",
|
|
@@ -8632,6 +8742,7 @@
|
|
|
8632
8742
|
"tailwind",
|
|
8633
8743
|
"postcss",
|
|
8634
8744
|
"unocss",
|
|
8745
|
+
"unplugin-icons",
|
|
8635
8746
|
"pandacss",
|
|
8636
8747
|
"prisma",
|
|
8637
8748
|
"drizzle",
|
|
@@ -8669,10 +8780,12 @@
|
|
|
8669
8780
|
"typedoc",
|
|
8670
8781
|
"openapi-ts",
|
|
8671
8782
|
"plop",
|
|
8783
|
+
"gulp",
|
|
8672
8784
|
"c8",
|
|
8673
8785
|
"nyc",
|
|
8674
8786
|
"msw",
|
|
8675
8787
|
"napi-rs",
|
|
8788
|
+
"n8n",
|
|
8676
8789
|
"opencode",
|
|
8677
8790
|
"nodemon",
|
|
8678
8791
|
"pm2",
|
package/issue-registry.json
CHANGED
|
@@ -3336,6 +3336,36 @@
|
|
|
3336
3336
|
"license_note": null,
|
|
3337
3337
|
"docs_url": "https://fallow.tools/docs/cli/security/"
|
|
3338
3338
|
},
|
|
3339
|
+
{
|
|
3340
|
+
"id": "mutation-survived",
|
|
3341
|
+
"rule_id": "fallow/mutation-survived",
|
|
3342
|
+
"command": "mutation",
|
|
3343
|
+
"category": "Tests",
|
|
3344
|
+
"description": "A small code change made no test fail",
|
|
3345
|
+
"label": null,
|
|
3346
|
+
"config_key": null,
|
|
3347
|
+
"registry_index": null,
|
|
3348
|
+
"aliases": [],
|
|
3349
|
+
"lsp": false,
|
|
3350
|
+
"filter_flag": null,
|
|
3351
|
+
"result_key": null,
|
|
3352
|
+
"summary_label": null,
|
|
3353
|
+
"summary_docs_anchor": null,
|
|
3354
|
+
"sarif_rule_ids": null,
|
|
3355
|
+
"codeclimate_check_names": null,
|
|
3356
|
+
"ts_alias": null,
|
|
3357
|
+
"counts_in_total": false,
|
|
3358
|
+
"fixable": false,
|
|
3359
|
+
"suppressible": false,
|
|
3360
|
+
"suppress_comment": null,
|
|
3361
|
+
"default_severity": null,
|
|
3362
|
+
"opt_in": null,
|
|
3363
|
+
"frameworks": [],
|
|
3364
|
+
"note": null,
|
|
3365
|
+
"license": "free",
|
|
3366
|
+
"license_note": null,
|
|
3367
|
+
"docs_url": "https://fallow.tools/docs/cli/mutation/"
|
|
3368
|
+
},
|
|
3339
3369
|
{
|
|
3340
3370
|
"id": "mysql-multiple-statements",
|
|
3341
3371
|
"rule_id": "security/mysql-multiple-statements",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fallow",
|
|
3
|
-
"version": "3.
|
|
3
|
+
"version": "3.42.0",
|
|
4
4
|
"mcpName": "io.github.fallow-rs/fallow",
|
|
5
5
|
"description": "Codebase intelligence for TypeScript and JavaScript: health, complexity, duplication, architecture, styling drift, and unused code from one graph. CLI, LSP, and MCP server. Zero config for over 100 frameworks.",
|
|
6
6
|
"license": "MIT",
|
|
@@ -92,14 +92,14 @@
|
|
|
92
92
|
"@tanstack/intent": "0.5.6"
|
|
93
93
|
},
|
|
94
94
|
"optionalDependencies": {
|
|
95
|
-
"@fallow-cli/darwin-arm64": "3.
|
|
96
|
-
"@fallow-cli/darwin-x64": "3.
|
|
97
|
-
"@fallow-cli/linux-x64-gnu": "3.
|
|
98
|
-
"@fallow-cli/linux-arm64-gnu": "3.
|
|
99
|
-
"@fallow-cli/linux-x64-musl": "3.
|
|
100
|
-
"@fallow-cli/linux-arm64-musl": "3.
|
|
101
|
-
"@fallow-cli/win32-arm64-msvc": "3.
|
|
102
|
-
"@fallow-cli/win32-x64-msvc": "3.
|
|
103
|
-
"fallow-type-aware": "3.
|
|
95
|
+
"@fallow-cli/darwin-arm64": "3.42.0",
|
|
96
|
+
"@fallow-cli/darwin-x64": "3.42.0",
|
|
97
|
+
"@fallow-cli/linux-x64-gnu": "3.42.0",
|
|
98
|
+
"@fallow-cli/linux-arm64-gnu": "3.42.0",
|
|
99
|
+
"@fallow-cli/linux-x64-musl": "3.42.0",
|
|
100
|
+
"@fallow-cli/linux-arm64-musl": "3.42.0",
|
|
101
|
+
"@fallow-cli/win32-arm64-msvc": "3.42.0",
|
|
102
|
+
"@fallow-cli/win32-x64-msvc": "3.42.0",
|
|
103
|
+
"fallow-type-aware": "3.42.0"
|
|
104
104
|
}
|
|
105
105
|
}
|
package/schema.json
CHANGED
|
@@ -189,7 +189,7 @@
|
|
|
189
189
|
}
|
|
190
190
|
},
|
|
191
191
|
"mutation": {
|
|
192
|
-
"description": "Configures the explicit `fallow mutation` workflow: `runner` (`auto`\nor `vitest`), `operators` (kebab-case names, default
|
|
192
|
+
"description": "Configures the explicit `fallow mutation` workflow: `runner` (`auto`\nor `vitest`), `operators` (kebab-case names, default the default set),\n`minScore` (0 to 100; a lower score exits with code 1), and\n`concurrency` (half the logical cores). No key starts a run, and the\nside-effect override is a CLI flag only.",
|
|
193
193
|
"$ref": "#/$defs/MutationConfig"
|
|
194
194
|
},
|
|
195
195
|
"health": {
|
|
@@ -1174,7 +1174,7 @@
|
|
|
1174
1174
|
"default": "auto"
|
|
1175
1175
|
},
|
|
1176
1176
|
"operators": {
|
|
1177
|
-
"description": "The operators to use. Unset uses
|
|
1177
|
+
"description": "The operators to use. Unset uses the default set. An opt-in operator\nruns only when this list or `--operators` names it. `--operators`\nwins.",
|
|
1178
1178
|
"type": [
|
|
1179
1179
|
"array",
|
|
1180
1180
|
"null"
|
|
@@ -1202,8 +1202,24 @@
|
|
|
1202
1202
|
"format": "uint",
|
|
1203
1203
|
"minimum": 1
|
|
1204
1204
|
},
|
|
1205
|
+
"mutantsPerLine": {
|
|
1206
|
+
"description": "The maximum number of mutants on one source line. The plan keeps the\nmost productive mutants of the line (relational, condition,\narithmetic and logical operators first). The others are `pending`\nwith the reason `sampled-out`. Unset keeps each mutant.\n`--mutants-per-line` wins.",
|
|
1207
|
+
"type": [
|
|
1208
|
+
"integer",
|
|
1209
|
+
"null"
|
|
1210
|
+
],
|
|
1211
|
+
"format": "uint",
|
|
1212
|
+
"minimum": 1
|
|
1213
|
+
},
|
|
1214
|
+
"functionScope": {
|
|
1215
|
+
"description": "Widen each changed line to the whole function that holds it, so that a\nchange to a parameter or a signature selects the mutants of the\nfunction. Only the changed-code scope uses it. Unset or `false` mutates\nthe changed lines only. `--function-scope` turns it on.",
|
|
1216
|
+
"type": [
|
|
1217
|
+
"boolean",
|
|
1218
|
+
"null"
|
|
1219
|
+
]
|
|
1220
|
+
},
|
|
1205
1221
|
"typecheck": {
|
|
1206
|
-
"description": "Type-check each survived mutant through the TypeScript-Go companion\nof `--type-aware`. A survivor that does not type-check becomes\n`compile_error` and does not count in the score. Unset or `false
|
|
1222
|
+
"description": "Type-check each survived mutant through the TypeScript-Go companion\nof `--type-aware`. A survivor that does not type-check becomes\n`compile_error` and does not count in the score. A survivor that\nremoves an optional-chaining link from a receiver whose type excludes\n`null` and `undefined` gets an advisory `equivalence_hint`. Its status\nand the score do not change. Unset or `false` checks no survivor.\n`--typecheck` turns the check on.",
|
|
1207
1223
|
"type": [
|
|
1208
1224
|
"boolean",
|
|
1209
1225
|
"null"
|
|
@@ -1293,7 +1309,7 @@
|
|
|
1293
1309
|
"const": "boolean-literal"
|
|
1294
1310
|
},
|
|
1295
1311
|
{
|
|
1296
|
-
"description": "A string literal emptied or filled.",
|
|
1312
|
+
"description": "A string or template literal emptied or filled.",
|
|
1297
1313
|
"type": "string",
|
|
1298
1314
|
"const": "string-literal"
|
|
1299
1315
|
},
|
|
@@ -1303,7 +1319,7 @@
|
|
|
1303
1319
|
"const": "optional-chaining"
|
|
1304
1320
|
},
|
|
1305
1321
|
{
|
|
1306
|
-
"description": "One token of a regular expression literal changed: an anchor\
|
|
1322
|
+
"description": "One token of a regular expression literal changed: an anchor or a\nquantifier removed, a `{n,m}` range shortened to `{n}`, a character\nclass negated, or a class escape with the opposite case.",
|
|
1307
1323
|
"type": "string",
|
|
1308
1324
|
"const": "regex-literal"
|
|
1309
1325
|
},
|
|
@@ -1311,6 +1327,51 @@
|
|
|
1311
1327
|
"description": "`z.number().int()` to `z.number()` in a module-level `const`\ninitializer: one call link of a fluent chain removed.",
|
|
1312
1328
|
"type": "string",
|
|
1313
1329
|
"const": "removed-chain-link"
|
|
1330
|
+
},
|
|
1331
|
+
{
|
|
1332
|
+
"description": "Opt-in. The statements of a block or function body removed.",
|
|
1333
|
+
"type": "string",
|
|
1334
|
+
"const": "block-statement"
|
|
1335
|
+
},
|
|
1336
|
+
{
|
|
1337
|
+
"description": "Opt-in. `[x]` to `[]`, and `[]` to `[\"fallow\"]`.",
|
|
1338
|
+
"type": "string",
|
|
1339
|
+
"const": "array-literal"
|
|
1340
|
+
},
|
|
1341
|
+
{
|
|
1342
|
+
"description": "Opt-in. A non-empty object literal to `{}`.",
|
|
1343
|
+
"type": "string",
|
|
1344
|
+
"const": "object-literal"
|
|
1345
|
+
},
|
|
1346
|
+
{
|
|
1347
|
+
"description": "Opt-in. `startsWith` to `endsWith` and the other method pairs, or\n`s.trim()` to `s`.",
|
|
1348
|
+
"type": "string",
|
|
1349
|
+
"const": "method-expression"
|
|
1350
|
+
},
|
|
1351
|
+
{
|
|
1352
|
+
"description": "Opt-in. The statements of a `case` clause removed.",
|
|
1353
|
+
"type": "string",
|
|
1354
|
+
"const": "switch-case"
|
|
1355
|
+
},
|
|
1356
|
+
{
|
|
1357
|
+
"description": "Opt-in. A call in an expression position to `void 0`.",
|
|
1358
|
+
"type": "string",
|
|
1359
|
+
"const": "call-expression"
|
|
1360
|
+
},
|
|
1361
|
+
{
|
|
1362
|
+
"description": "Opt-in. A `throw new X(...)` statement removed.",
|
|
1363
|
+
"type": "string",
|
|
1364
|
+
"const": "throw-statement"
|
|
1365
|
+
},
|
|
1366
|
+
{
|
|
1367
|
+
"description": "Opt-in. The regex changes applied to a `new RegExp(\"...\")` pattern.",
|
|
1368
|
+
"type": "string",
|
|
1369
|
+
"const": "regex-constructor"
|
|
1370
|
+
},
|
|
1371
|
+
{
|
|
1372
|
+
"description": "Opt-in. A lookaround negated, or `\\b` and `\\B` swapped.",
|
|
1373
|
+
"type": "string",
|
|
1374
|
+
"const": "regex-assertion"
|
|
1314
1375
|
}
|
|
1315
1376
|
]
|
|
1316
1377
|
},
|
package/skills/fallow/SKILL.md
CHANGED
|
@@ -307,10 +307,12 @@ fallow dead-code --format json --quiet --save-regression-baseline
|
|
|
307
307
|
# 2. In CI: fail only if issues increase beyond tolerance
|
|
308
308
|
fallow dead-code --format json --quiet --fail-on-regression --tolerance 0
|
|
309
309
|
# Identity-based baseline (fail only on NEW findings, not raw counts)
|
|
310
|
-
fallow dead-code --format json --quiet --save-baseline
|
|
311
|
-
fallow dead-code --format json --quiet --baseline
|
|
310
|
+
fallow dead-code --format json --quiet --save-baseline fallow-baselines/dead-code.json
|
|
311
|
+
fallow dead-code --format json --quiet --baseline fallow-baselines/dead-code.json
|
|
312
312
|
```
|
|
313
313
|
|
|
314
|
+
Commit the baseline file. Do not save it in `.fallow/`: fallow tells Git to ignore that cache directory, so the baseline is not committed and `fallow` prints a warning.
|
|
315
|
+
|
|
314
316
|
`--save-regression-baseline` / `--regression-baseline` / `--fail-on-regression` / `--tolerance` are count-based gates for `dead-code`, `architecture`, bare combined mode, and `flags --retirement` (a flags baseline needs a PATH; without `--retirement` the options have no effect on `flags` and it warns). `--save-baseline` / `--baseline` are identity-based (track finding identity, fail on new). On bare `fallow` they hold the dead-code baseline only; pass health and duplication baselines with `--health-baseline` / `--dupes-baseline`. `audit` rejects the global baseline flags and uses `--dead-code-baseline` / `--health-baseline` / `--dupes-baseline` instead.
|
|
315
317
|
|
|
316
318
|
With no path, `--save-regression-baseline` updates `regression.baseline` in the discovered fallow config, or creates `.fallowrc.json` when none exists. Pass a path only when a standalone baseline file is preferred.
|
|
@@ -53,7 +53,7 @@ Every fallow command with its purpose and key flags. The table is regenerated fr
|
|
|
53
53
|
| `type-aware` | Inspect the optional TypeScript semantic companion | |
|
|
54
54
|
| `doctor` | Diagnose project readiness without analysis or mutation | |
|
|
55
55
|
| `similar-code` | Find semantically similar functions with a pinned local model (opt-in) | `--threshold`, `--min-lines`, `--top`, `--file` |
|
|
56
|
-
| `mutation` | Measure how well the tests detect changes in the code (opt-in) | `--all`, `--plan`, `--max-mutants`, `--time-budget`, `--concurrency`, `--runtime`, `--runner-config`, `--allow-dirty`, `--allow-side-effects` |
|
|
56
|
+
| `mutation` | Measure how well the tests detect changes in the code (opt-in) | `--all`, `--plan`, `--max-mutants`, `--mutants-per-line`, `--function-scope`, `--time-budget`, `--concurrency`, `--runtime`, `--runner-config`, `--allow-dirty`, `--allow-side-effects` |
|
|
57
57
|
| `inspect` | Compose one evidence bundle for a file or exported symbol, with optional Fallow Cloud production data | `--file <path>`, `--symbol <file>:<export>`, `--cloud`, `--repo <owner/repo>` |
|
|
58
58
|
| `cloud` | Log in to Fallow Cloud with the device flow and store a read-only API key (login, logout) | `login --machine-name <name>`, `login --api-url <url>`, `logout` |
|
|
59
59
|
| `trace` | Trace a symbol's call chain, or with `--path` the shortest import path between two modules (best-effort, syntactic; OFF the ranked path) | `symbol`, `--path <FROM> <TO>`, `--eager-only`, `--callers`, `--callees`, `--depth` |
|
|
@@ -85,7 +85,7 @@ Every fallow command with its purpose and key flags. The table is regenerated fr
|
|
|
85
85
|
| `decision-surface` | Surface the consequential structural DECISIONS a change embeds (the apex of the review brief), each framed as a judgment question with the routed expert to ask | `--max-decisions` |
|
|
86
86
|
| `impact` | Show what fallow has done for you: how many issues it is surfacing, the trend since the last recorded run, and how many commits it contained at the pre-commit gate | `--all`, `--sort`, `--limit` |
|
|
87
87
|
| `security` | Surface opt-in local security candidates for agent verification (not confirmed vulnerabilities). Rule families include the graph rule `client-server-leak`, a data-driven `tainted-sink` catalogue, and the include-required `hardcoded-secret` category for provider-prefix credentials and high-entropy literals assigned to secret-shaped identifiers. Most catalogue rows require non-literal input; narrowly literal-aware rows flag deterministic unsafe literals. Rules default off; suppress a file with `// fallow-ignore-file security-sink`; scope categories with `security.categories`. Add project-local request object names with `security.requestReceivers`; it extends the built-in `req` / `request` / `ctx` / `context` / `event` allowlist for HTTP `query`, `params`, and `body` reads. `hardcoded-secret` runs only when listed in `security.categories.include`. | `--format human\|json\|sarif`, `--changed-since`, `--file`, `--diff-file`, `--workspace`, `--changed-workspaces`, `--surface`, `--ci`, `--fail-on-issues`, `--sarif-file`, `--summary` |
|
|
88
|
-
| `report` | Render a saved `--format json` results file in another format without re-running analysis (analyze once, render annotations and the job summary from the same file). | `--from` |
|
|
88
|
+
| `report` | Render a saved `--format json` results file in another format without re-running analysis (analyze once, render annotations and the job summary from the same file). With a CI format, `--mutation-report` adds a saved `fallow mutation --format json` report, and `--mutation-not-run` states why mutation testing did not run. | `--from`, `--mutation-report`, `--mutation-not-run` |
|
|
89
89
|
| `schema` | Dump CLI definition as JSON | |
|
|
90
90
|
| `ci-template` | Print or vendor CI integration templates | |
|
|
91
91
|
| `migrate` | Convert knip/jscpd config | `--dry-run`, `--from PATH` |
|
|
@@ -530,7 +530,7 @@ Human output groups paths under "Shared with your team (commit these)" and "Loca
|
|
|
530
530
|
{
|
|
531
531
|
"kind": "agent-install",
|
|
532
532
|
"schema_version": 1,
|
|
533
|
-
"fallow_version": "3.
|
|
533
|
+
"fallow_version": "3.42.0",
|
|
534
534
|
"root": "/abs/path",
|
|
535
535
|
"mode": "install",
|
|
536
536
|
"dry_run": false,
|
|
@@ -742,7 +742,7 @@ fallow health --format json --quiet --trend
|
|
|
742
742
|
{
|
|
743
743
|
"kind": "health",
|
|
744
744
|
"schema_version": 7,
|
|
745
|
-
"version": "3.
|
|
745
|
+
"version": "3.42.0",
|
|
746
746
|
"elapsed_ms": 32,
|
|
747
747
|
"summary": {
|
|
748
748
|
"files_analyzed": 482,
|
|
@@ -1217,7 +1217,7 @@ fallow audit \
|
|
|
1217
1217
|
{
|
|
1218
1218
|
"kind": "audit",
|
|
1219
1219
|
"schema_version": 7,
|
|
1220
|
-
"version": "3.
|
|
1220
|
+
"version": "3.42.0",
|
|
1221
1221
|
"command": "audit",
|
|
1222
1222
|
"verdict": "fail",
|
|
1223
1223
|
"changed_files_count": 12,
|
|
@@ -1305,7 +1305,7 @@ fallow flags --format json --quiet --workspace my-package
|
|
|
1305
1305
|
```json
|
|
1306
1306
|
{
|
|
1307
1307
|
"schema_version": 7,
|
|
1308
|
-
"version": "3.
|
|
1308
|
+
"version": "3.42.0",
|
|
1309
1309
|
"elapsed_ms": 116,
|
|
1310
1310
|
"feature_flags": [],
|
|
1311
1311
|
"total_flags": 0
|
|
@@ -1406,7 +1406,7 @@ fallow security --gate newly-reachable --changed-since origin/main
|
|
|
1406
1406
|
{
|
|
1407
1407
|
"kind": "security",
|
|
1408
1408
|
"schema_version": "4",
|
|
1409
|
-
"version": "3.
|
|
1409
|
+
"version": "3.42.0",
|
|
1410
1410
|
"elapsed_ms": 42,
|
|
1411
1411
|
"config": {
|
|
1412
1412
|
"rules": {
|
|
@@ -1435,7 +1435,7 @@ fallow security --gate newly-reachable --changed-since origin/main
|
|
|
1435
1435
|
{
|
|
1436
1436
|
"kind": "security",
|
|
1437
1437
|
"schema_version": "4",
|
|
1438
|
-
"version": "3.
|
|
1438
|
+
"version": "3.42.0",
|
|
1439
1439
|
"elapsed_ms": 42,
|
|
1440
1440
|
"config": {
|
|
1441
1441
|
"rules": {
|
|
@@ -2263,7 +2263,8 @@ Use this mode to check whether specific tests are redundant without a full kill
|
|
|
2263
2263
|
|
|
2264
2264
|
- Only the mutants that a target test covers run. The other mutants are `pruned` with `prune_reason: "no-target-coverage"`.
|
|
2265
2265
|
- Each mutant runs its target tests with bail disabled, then its other covering tests with bail enabled, up to the first failure.
|
|
2266
|
-
- `kill_matrix.targets` lists each target with the `test_ids` that it selects. A target that selects no test exits `2` with `FALLOW_MUTATION_TARGET_UNMATCHED`.
|
|
2266
|
+
- `kill_matrix.targets` lists each target with the `test_ids` that it selects. A target that selects no test exits `2` with `FALLOW_MUTATION_TARGET_UNMATCHED`. A test ID target that names a duplicate test ID (two tests of one file with the same title) exits `2` with `FALLOW_MUTATION_TARGET_DUPLICATE_TEST_ID`. A file target drops the duplicate IDs, and the `duplicate-test-ids` entry of `errors` names them.
|
|
2267
|
+
- Each target has its own `status` (`complete` or `incomplete`) and `reasons`. Only the tests of a complete target can be candidates. `candidates` can be nonempty while the top-level `status` is `incomplete`.
|
|
2267
2268
|
- `kill_matrix.tests` has rows for target tests only. `unique_kills` are kills that no other test detects, target or not. `target_only_kills` lists kills that only other targets share, each with those `targets`. `subsuming_tests` is empty (note `subsumers-not-computed`).
|
|
2268
2269
|
- A target with kills and no `unique_kills` is a candidate. With `target_only_kills`, it stays redundant only while one of the sharing targets stays. Do not remove all sharing targets together.
|
|
2269
2270
|
- The evidence covers the planned scope only. A unique kill outside the scope is not visible.
|
|
@@ -2330,7 +2331,7 @@ The HTTP layer mirrors the bash `gh_api_retry` / `curl_retry` helpers: `FALLOW_A
|
|
|
2330
2331
|
{
|
|
2331
2332
|
"kind": "dead-code",
|
|
2332
2333
|
"schema_version": 7,
|
|
2333
|
-
"version": "3.
|
|
2334
|
+
"version": "3.42.0",
|
|
2334
2335
|
"elapsed_ms": 45,
|
|
2335
2336
|
"total_issues": 12,
|
|
2336
2337
|
"entry_points": {
|
|
@@ -2490,7 +2491,7 @@ When `--baseline` is used in combined output, the JSON includes a `baseline_delt
|
|
|
2490
2491
|
{
|
|
2491
2492
|
"kind": "dupes",
|
|
2492
2493
|
"schema_version": 7,
|
|
2493
|
-
"version": "3.
|
|
2494
|
+
"version": "3.42.0",
|
|
2494
2495
|
"elapsed_ms": 82,
|
|
2495
2496
|
"total_clones": 15,
|
|
2496
2497
|
"total_lines_duplicated": 230,
|
|
@@ -2534,11 +2535,11 @@ When running `fallow` with no subcommand (all analyses), the JSON output combine
|
|
|
2534
2535
|
{
|
|
2535
2536
|
"kind": "combined",
|
|
2536
2537
|
"schema_version": 7,
|
|
2537
|
-
"version": "3.
|
|
2538
|
+
"version": "3.42.0",
|
|
2538
2539
|
"elapsed_ms": 159,
|
|
2539
2540
|
"check": {
|
|
2540
2541
|
"schema_version": 7,
|
|
2541
|
-
"version": "3.
|
|
2542
|
+
"version": "3.42.0",
|
|
2542
2543
|
"elapsed_ms": 45,
|
|
2543
2544
|
"total_issues": 12,
|
|
2544
2545
|
"unused_files": [],
|
|
@@ -90,6 +90,7 @@ The `generated:issue-types` table below is regenerated from `fallow schema` by s
|
|
|
90
90
|
| `test-only-branch` | - | - | `// fallow-ignore-next-line test-only-branch` | The change adds a test-environment branch to source code |
|
|
91
91
|
| `diverged-clone-sibling` | - | - | `// fallow-ignore-next-line diverged-clone-sibling` | The change edits one copy of duplicated code but not its siblings |
|
|
92
92
|
| `added-dependency` | - | - | - | The change adds a dependency. Config suppression only, because `package.json` cannot hold a comment: set `added-dependency` to `off` for the path in an `overrides` entry. |
|
|
93
|
+
| `mutation-survived` | - | - | - | A small code change made no test fail |
|
|
93
94
|
|
|
94
95
|
Runtime-coverage verdicts and the full security sink catalogue are listed by `fallow schema` (`issue_types`).
|
|
95
96
|
<!-- generated:issue-types:end -->
|
|
@@ -18,8 +18,9 @@ When using fallow via MCP (`fallow-mcp`), the following tools are available:
|
|
|
18
18
|
| `security_candidates` | analysis | free | `fallow security --format json --quiet` | `gate`, `surface`, `changed_since`, `paths` | Unverified local security candidates, not confirmed vulnerabilities (`fallow security --format json`). Read `security_findings[]` for category, CWE, severity, evidence, trace, optional `reachability`, blind-spot counters, and optional `unresolved_callee_diagnostics` samples for dynamic callee follow-up. `severity` is a review-priority tier, not a verified vulnerability verdict. Each finding also carries an agent-actionable `candidate` (`source_kind`/`sink`/`boundary`), where URL-category sinks may include `url_shape` (`fixed-origin-dynamic-path` or `dynamic-origin`), an optional `taint_flow` source-to-sink triple, and a stable `finding_id` (equal to the SARIF fingerprint) for cross-run correlation; there is no `impact` field (deciding exploitability is the agent's job). Set `surface: true` to include top-level `attack_surface[]` entries with defensive-boundary prompts for a verifier. Set `gate` to `new` for changed-line candidates or `newly-reachable` for candidates that became reachable from entry points; `newly-reachable` requires `changed_since`. `reachability.untrusted_source_trace` is module-level import context only and does not prove value flow; `reachability.taint_confidence` tiers each reachable candidate as `arg-level` (sink argument traces to a same-module source read, strong) or `module-level` (only the module is import-reachable from a source, weak), so tier from this field instead of the evidence text. Verify trace, reachability context, severity, and evidence before editing code. Supports `root`, `config`, `workspace`, `paths`, `changed_since`, `changed_workspaces`, `surface`, `gate`, `no_cache`, and `threads`; `paths` forwards repeated `fallow security --file` filters for finding anchors, trace hops, untrusted-source reachability trace hops, and unresolved-callee diagnostics. See <https://fallow.tools/docs/cli/security-agent-verification/> for the verifier packet and verdict recipe. Inherits `FALLOW_DIFF_FILE` from the server environment for line-level diff scoping; raise `FALLOW_TIMEOUT_SECS` for large repos. |
|
|
19
19
|
| `find_similar_code` | analysis | free | `fallow similar-code --format json --quiet` | `threshold`, `min_lines`, `top`, `changed_since`, `paths` | Find unverified semantically similar function candidates with the exact pinned local model. Discovery is read-only and never authorizes or performs model setup. Scoped output materializes the exact admitted files once in `generation.scope.paths` as provenance. Ask the user to run `fallow similar-code setup --local` when setup is missing. Cold local inference has a dedicated 15-minute subprocess window. |
|
|
20
20
|
| `inspect_similar_code` | trace | free | `fallow similar-code inspect <candidate-id> --candidates <report.json> --format json --quiet` | `candidate_id`, `snapshot` | Inspect one exact unverified candidate without rerunning provider retrieval or global ranking. Pass `candidate_id` plus a bounded typed snapshot containing the unchanged discovery `schema_version`, `generation`, selected `candidate`, `completion`, and `diagnostics`. Current source is re-extracted and both endpoint hashes must still match, so stale source fails closed. Keep candidate worthiness, behavioral equivalence, and refactor safety as separate verdicts, and abstain when evidence is incomplete. |
|
|
21
|
-
| `mutation_plan` | analysis | free | `fallow mutation --plan --format json --quiet` | `changed_since`, `all`, `paths`, `max_mutants`, `operators` | Static mutation plan for changed code: mutant ids, operators, dispositions, and static test files; runs no tests |
|
|
21
|
+
| `mutation_plan` | analysis | free | `fallow mutation --plan --format json --quiet` | `changed_since`, `all`, `paths`, `max_mutants`, `mutants_per_line`, `function_scope`, `operators` | Static mutation plan for changed code: mutant ids, operators, dispositions, and static test files; runs no tests |
|
|
22
22
|
| `mutation_inspect` | trace | free | `fallow mutation inspect <mutant-id> [--report <report.json>] --format json --quiet` | `mutant_id`, `report` | Inspect one mutant of a saved mutation report (default: the last run report), with a stale status when its source changed; runs no tests |
|
|
23
|
+
| `mutation_tasks` | trace | free | `fallow mutation tasks [--report <report.json>] --format json --quiet` | `report` | The open tasks of a saved mutation report (default: the last run report) as one batch: each survived or uncovered mutant with its source lines before and after the change; runs no tests |
|
|
23
24
|
| `inspect_target` | analysis | free | `fallow inspect --format json --quiet` | `target`, `production`, `include_churn`, `cloud` | Compose one evidence bundle for a file or exported symbol. File targets use `target: { type: "file", file }`; symbol targets use `target: { type: "symbol", file, export_name }`. Returns `kind: "inspect_target"`, normalized target identity, `trace_file`, optional `trace_export`, file-scoped dead-code actions, duplication groups filtered to the file, complexity findings filtered to the file, and security candidates scoped to the file. Set `include_churn: true` to add target-level git churn from the health hotspot subsystem. Churn is off by default, and unavailable git history or analysis failures remain explicit section states. Evidence sections carry `status` and `scope`; symbol targets warn when supporting evidence is file-scoped. Set `cloud: true` on a file target to add the `cloud` evidence section of `fallow inspect --cloud` (production data per local function). The CLI reads the key: `FALLOW_API_KEY` in the server environment, else the key that `fallow cloud login` stored; the key is never a parameter. `repo` (`owner/repo`) selects the repository and needs `cloud: true`. The section `status` is `ok`, `no_key`, `plan_required`, `unavailable` or `untracked`; a status other than `ok` never fails the call. `cloud: true` with a symbol target is refused. Set `format: "compact"` to get the plain text of `fallow inspect --format compact` (about 1 KB, no JSON) instead of the JSON bundle. Supports `root`, `config`, `production`, `workspace`, `include_churn`, `cloud`, `repo`, `format`, `no_cache`, and `threads`; `production` applies to trace, dead-code, and health evidence only. Raise `FALLOW_TIMEOUT_SECS` for large repos. |
|
|
24
25
|
| `guard` | introspection | free | `fallow guard <file> --format json --quiet` | `files` | Report the architecture rules that apply to given files before editing them: boundary zone, allowed import zones, forbidden calls, and rule-pack policies |
|
|
25
26
|
| `find_dupes` | analysis | free | `fallow dupes --format json --quiet` | `mode`, `near`, `min_tokens`, `min_occurrences`, `top`, `threshold` | Code duplication detection. Set `near: true` for function-level clones with small structural edits. Set `changed_since` to scope to changed files since a git ref. Set `min_occurrences` (≥ 2, default 2) to hide pair-only clones and focus on widespread copy-paste. Each `clone_groups[]` entry carries a normalized `fingerprint` and `spread`; near groups also carry `similarity`. `stats.clone_groups_ignored` reports reviewed groups hidden by config, while `stats.near_candidates_skipped` signals bounded near comparisons that were skipped. Pass the fingerprint to `trace_clone` to inspect the group |
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
|
-
* Schemas for the JSON output of fallow commands. Object-shaped envelopes covered by the `FallowOutput` contract carry a top-level `kind` discriminator. Current kind values: `audit`, `explain`, `inspect_target`, `trace`, `trace-error`, `review-envelope`, `review-reconcile`, `coverage-setup`, `coverage-analyze`, `list-boundaries`, `list-workspaces`, `health`, `dupes`, `dead-code-grouped`, `architecture-grouped`, `impact`, `impact-cross-repo`, `security`, `security-survivors`, `security-blind-spots`, `dead-code`, `architecture`, `combined`, `feature-flags`, `audit-brief`, `decision-surface`, `review-walkthrough-guide`, `review-walkthrough-validation`, `suppression-inventory`, `doctor`, `type-aware-status`, `similar-code`, `similar-code-inspect`, `similar-code-review`, `similar-code-status`, `similar-code-cache-clear`, `mutation`, `mutation-plan`, `mutation-inspect`. Consumers should branch on `kind` instead of probing for unique field presence. `CodeClimateOutput` is a bare JSON array (per the Code Climate / GitLab Code Quality spec) and stays a sibling root branch discriminated by checking whether the document root is an array. `ErrorOutput` is the `--format json` failure document, emitted on stdout with a non-zero exit; it carries no `kind` and is discriminated by the `error: true` field. A `--lean` document is not a root branch: it validates against `LeanOutput`.
|
|
27
|
+
* Schemas for the JSON output of fallow commands. Object-shaped envelopes covered by the `FallowOutput` contract carry a top-level `kind` discriminator. Current kind values: `audit`, `explain`, `inspect_target`, `trace`, `trace-error`, `review-envelope`, `review-reconcile`, `coverage-setup`, `coverage-analyze`, `list-boundaries`, `list-workspaces`, `health`, `dupes`, `dead-code-grouped`, `architecture-grouped`, `impact`, `impact-cross-repo`, `security`, `security-survivors`, `security-blind-spots`, `dead-code`, `architecture`, `combined`, `feature-flags`, `audit-brief`, `decision-surface`, `review-walkthrough-guide`, `review-walkthrough-validation`, `suppression-inventory`, `doctor`, `type-aware-status`, `similar-code`, `similar-code-inspect`, `similar-code-review`, `similar-code-status`, `similar-code-cache-clear`, `mutation`, `mutation-plan`, `mutation-inspect`, `mutation-tasks`. Consumers should branch on `kind` instead of probing for unique field presence. `CodeClimateOutput` is a bare JSON array (per the Code Climate / GitLab Code Quality spec) and stays a sibling root branch discriminated by checking whether the document root is an array. `ErrorOutput` is the `--format json` failure document, emitted on stdout with a non-zero exit; it carries no `kind` and is discriminated by the `error: true` field. A `--lean` document is not a root branch: it validates against `LeanOutput`.
|
|
28
28
|
*/
|
|
29
29
|
export type FallowJsonOutput = (FallowOutput | CodeClimateOutput | ErrorOutput)
|
|
30
30
|
/**
|
|
@@ -122,6 +122,8 @@ kind: "mutation"
|
|
|
122
122
|
kind: "mutation-plan"
|
|
123
123
|
}) | (MutationInspectOutput & {
|
|
124
124
|
kind: "mutation-inspect"
|
|
125
|
+
}) | (MutationTasksOutput & {
|
|
126
|
+
kind: "mutation-tasks"
|
|
125
127
|
}))
|
|
126
128
|
/**
|
|
127
129
|
* Schema projection for the audit envelope's exact version.
|
|
@@ -1809,11 +1811,15 @@ export type MutationSchemaVersion = "2"
|
|
|
1809
1811
|
/**
|
|
1810
1812
|
* Why a run is partial.
|
|
1811
1813
|
*/
|
|
1812
|
-
export type MutationIncompleteReason = ("runtime-error" | "mutant-limit" | "time-budget" | "skipped-files" | "unloaded-files" | "test-files-not-discovered" | "baseline-failure" | "worktree-changed" | "typecheck-failed" | "worktree-unchecked")
|
|
1814
|
+
export type MutationIncompleteReason = ("runtime-error" | "mutant-limit" | "sampled-out" | "time-budget" | "skipped-files" | "unloaded-files" | "test-files-not-discovered" | "baseline-failure" | "worktree-changed" | "typecheck-failed" | "worktree-unchecked")
|
|
1813
1815
|
/**
|
|
1814
1816
|
* The quality of observed test-to-mutant evidence.
|
|
1815
1817
|
*/
|
|
1816
1818
|
export type MutationKillMatrixStatus = ("complete" | "incomplete" | "unavailable")
|
|
1819
|
+
/**
|
|
1820
|
+
* The quality of the evidence of one `--kill-matrix-for` target.
|
|
1821
|
+
*/
|
|
1822
|
+
export type MutationKillMatrixTargetStatus = ("complete" | "incomplete")
|
|
1817
1823
|
/**
|
|
1818
1824
|
* Which code a run mutates.
|
|
1819
1825
|
*/
|
|
@@ -1826,10 +1832,22 @@ export type MutantStatus = ("killed" | "timeout" | "survived" | "no_coverage" |
|
|
|
1826
1832
|
* How a run detected a mutant.
|
|
1827
1833
|
*/
|
|
1828
1834
|
export type MutantFailureKind = ("assertion" | "error" | "timeout")
|
|
1835
|
+
/**
|
|
1836
|
+
* Why a survivor may be equivalent, as far as the type check can tell.
|
|
1837
|
+
*/
|
|
1838
|
+
export type MutantEquivalenceHint = "type-non-nullish"
|
|
1829
1839
|
/**
|
|
1830
1840
|
* Why the type check did not check a survivor.
|
|
1831
1841
|
*/
|
|
1832
1842
|
export type MutationTypecheckSkipReason = ("no-project" | "not-type-checked" | "source-changed" | "file-missing" | "unsupported-file")
|
|
1843
|
+
/**
|
|
1844
|
+
* What a recheck shows for one mutant of the earlier report.
|
|
1845
|
+
*/
|
|
1846
|
+
export type MutationRecheckOutcome = ("killed" | "survived" | "no_coverage" | "tests_fail_on_original" | "unsettled")
|
|
1847
|
+
/**
|
|
1848
|
+
* How one mutant of a compare differs from the saved report.
|
|
1849
|
+
*/
|
|
1850
|
+
export type MutationCompareChange = ("regressed" | "inconclusive" | "added" | "removed")
|
|
1833
1851
|
/**
|
|
1834
1852
|
* Version singleton for a mutation plan.
|
|
1835
1853
|
*/
|
|
@@ -1850,6 +1868,10 @@ export type MutationInspectStatus = ("fresh" | "stale")
|
|
|
1850
1868
|
* Why an inspect packet is stale.
|
|
1851
1869
|
*/
|
|
1852
1870
|
export type MutationStaleReason = ("file-missing" | "no-digest" | "source-changed" | "mutant-not-reproduced")
|
|
1871
|
+
/**
|
|
1872
|
+
* Version singleton for the open tasks of a mutation report.
|
|
1873
|
+
*/
|
|
1874
|
+
export type MutationTasksSchemaVersion = "1"
|
|
1853
1875
|
/**
|
|
1854
1876
|
* Discriminator value for [`CodeClimateIssue::kind`].
|
|
1855
1877
|
*/
|
|
@@ -2036,7 +2058,7 @@ diff_risk_introduced: number
|
|
|
2036
2058
|
* The key set is OPEN. A name that a consumer does not recognize means "some
|
|
2037
2059
|
* gate", not an error.
|
|
2038
2060
|
*
|
|
2039
|
-
* The names that this build can emit are `error-severity-findings`, `regression`, `stale-baseline`, `baseline-growth`, `duplication-threshold`, `duplication-findings`, `health-min-score`, `health-min-severity`, `health-findings`, `health-coverage-gaps`, `health-runtime-coverage`, `security`, `security-advisory`, `audit-verdict`, `type-aware-require` and `
|
|
2061
|
+
* The names that this build can emit are `error-severity-findings`, `regression`, `stale-baseline`, `baseline-growth`, `duplication-threshold`, `duplication-findings`, `health-min-score`, `health-min-severity`, `health-findings`, `health-coverage-gaps`, `health-runtime-coverage`, `security`, `security-advisory`, `audit-verdict`, `type-aware-require`, `parse-error` and `mutation-min-score`. `GateName` describes each name and the default entries of each command.
|
|
2040
2062
|
*/
|
|
2041
2063
|
export interface GateOutcomes {
|
|
2042
2064
|
[k: string]: GateOutcome
|
|
@@ -7910,11 +7932,11 @@ start_line: number
|
|
|
7910
7932
|
*/
|
|
7911
7933
|
end_line: number
|
|
7912
7934
|
/**
|
|
7913
|
-
* 0-based
|
|
7935
|
+
* 0-based byte column offset of the start.
|
|
7914
7936
|
*/
|
|
7915
7937
|
start_col: number
|
|
7916
7938
|
/**
|
|
7917
|
-
* 0-based
|
|
7939
|
+
* 0-based byte column offset of the end.
|
|
7918
7940
|
*/
|
|
7919
7941
|
end_col: number
|
|
7920
7942
|
/**
|
|
@@ -11564,6 +11586,15 @@ keyframes_unreferenced: number
|
|
|
11564
11586
|
* a removed animation.
|
|
11565
11587
|
*/
|
|
11566
11588
|
keyframes_undefined: number
|
|
11589
|
+
/**
|
|
11590
|
+
* `@keyframes` with no literal reference that a Sass or Less source
|
|
11591
|
+
* defines and that the unreferenced check skips. A Sass or Less
|
|
11592
|
+
* animation value with a variable or an interpolation that fallow cannot
|
|
11593
|
+
* resolve can name any such block. These are not in
|
|
11594
|
+
* `keyframes_unreferenced`. A `@keyframes` block in plain CSS is always
|
|
11595
|
+
* checked.
|
|
11596
|
+
*/
|
|
11597
|
+
keyframes_unchecked: number
|
|
11567
11598
|
/**
|
|
11568
11599
|
* Total Vue `<style scoped>` classes used nowhere else in their component
|
|
11569
11600
|
* (cleanup candidates), across all SFCs.
|
|
@@ -13108,6 +13139,12 @@ imported_by: string[]
|
|
|
13108
13139
|
* Re-exports declared by this file.
|
|
13109
13140
|
*/
|
|
13110
13141
|
re_exports: TracedReExport[]
|
|
13142
|
+
/**
|
|
13143
|
+
* The package.json script key that makes this file an entry point, e.g.
|
|
13144
|
+
* `build`. Absent when no script makes the file an entry point
|
|
13145
|
+
* (issue #4175).
|
|
13146
|
+
*/
|
|
13147
|
+
entry_script?: (string | null)
|
|
13111
13148
|
/**
|
|
13112
13149
|
* The configs that make this file an entry point through Module
|
|
13113
13150
|
* Federation `exposes`, one per config. Absent when no Federation config
|
|
@@ -14631,8 +14668,8 @@ name: string
|
|
|
14631
14668
|
*/
|
|
14632
14669
|
path: string
|
|
14633
14670
|
/**
|
|
14634
|
-
* Whether the
|
|
14635
|
-
*
|
|
14671
|
+
* Whether another workspace of the project lists this package as a
|
|
14672
|
+
* dependency.
|
|
14636
14673
|
*/
|
|
14637
14674
|
is_internal_dependency: boolean
|
|
14638
14675
|
}
|
|
@@ -15203,11 +15240,11 @@ start_line: number
|
|
|
15203
15240
|
*/
|
|
15204
15241
|
end_line: number
|
|
15205
15242
|
/**
|
|
15206
|
-
* 0-based
|
|
15243
|
+
* 0-based byte column offset of the start.
|
|
15207
15244
|
*/
|
|
15208
15245
|
start_col: number
|
|
15209
15246
|
/**
|
|
15210
|
-
* 0-based
|
|
15247
|
+
* 0-based byte column offset of the end.
|
|
15211
15248
|
*/
|
|
15212
15249
|
end_col: number
|
|
15213
15250
|
/**
|
|
@@ -20688,6 +20725,22 @@ verdicts?: (MutationVerdictJoin | null)
|
|
|
20688
20725
|
* them (`--typecheck` not set).
|
|
20689
20726
|
*/
|
|
20690
20727
|
typecheck?: (MutationTypecheckOutput | null)
|
|
20728
|
+
/**
|
|
20729
|
+
* The result of each rechecked mutant against its status in the earlier
|
|
20730
|
+
* report. Absent outside `--recheck`.
|
|
20731
|
+
*/
|
|
20732
|
+
recheck?: (MutationRecheck | null)
|
|
20733
|
+
/**
|
|
20734
|
+
* The mutants whose result differs from a saved report. Absent outside
|
|
20735
|
+
* `--compare`, and absent when this run is not complete.
|
|
20736
|
+
*/
|
|
20737
|
+
compare?: (MutationCompare | null)
|
|
20738
|
+
/**
|
|
20739
|
+
* The verdict of the `mutation-min-score` gate. Present only when a
|
|
20740
|
+
* minimum applies: from `--min-score`, or from `mutation.minScore` when
|
|
20741
|
+
* the run is not a recheck. The exit code of the run reads this entry.
|
|
20742
|
+
*/
|
|
20743
|
+
gate_outcomes?: (GateOutcomes | null)
|
|
20691
20744
|
}
|
|
20692
20745
|
/**
|
|
20693
20746
|
* The completion status of a run.
|
|
@@ -20715,6 +20768,7 @@ reasons: string[]
|
|
|
20715
20768
|
tests: MutationTestKillRow[]
|
|
20716
20769
|
/**
|
|
20717
20770
|
* Tests with nonempty kills and no unique kills, sorted by test id.
|
|
20771
|
+
* In target mode, only the tests of complete targets.
|
|
20718
20772
|
*/
|
|
20719
20773
|
candidates: string[]
|
|
20720
20774
|
/**
|
|
@@ -20790,6 +20844,16 @@ target: string
|
|
|
20790
20844
|
* The dry-run test ids that the target selects, sorted.
|
|
20791
20845
|
*/
|
|
20792
20846
|
test_ids: string[]
|
|
20847
|
+
status: MutationKillMatrixTargetStatus
|
|
20848
|
+
/**
|
|
20849
|
+
* Why the evidence of this target is incomplete, sorted. The run-wide
|
|
20850
|
+
* reasons `partial-mutation-run`, `baseline-failure`, and
|
|
20851
|
+
* `missing-test-file-metadata` apply to each target.
|
|
20852
|
+
* `incomplete-mutant-results` means that a test of this target covers a
|
|
20853
|
+
* mutant with incomplete evidence. `unmatched-target` means that the
|
|
20854
|
+
* target selects no test.
|
|
20855
|
+
*/
|
|
20856
|
+
reasons: string[]
|
|
20793
20857
|
}
|
|
20794
20858
|
/**
|
|
20795
20859
|
* The scope of a plan or a run.
|
|
@@ -20915,6 +20979,11 @@ score?: (number | null)
|
|
|
20915
20979
|
* mutants never count. `null` when no mutant is covered or unreached.
|
|
20916
20980
|
*/
|
|
20917
20981
|
coverage?: (number | null)
|
|
20982
|
+
/**
|
|
20983
|
+
* The `pending` mutants that the `--mutants-per-line` limit left out of
|
|
20984
|
+
* the plan. They are part of `counts.pending`.
|
|
20985
|
+
*/
|
|
20986
|
+
sampled_out: number
|
|
20918
20987
|
}
|
|
20919
20988
|
/**
|
|
20920
20989
|
* One mutant of a run.
|
|
@@ -20969,6 +21038,13 @@ status: MutantStatus
|
|
|
20969
21038
|
* The static rule of a `pruned` mutant, kebab-case.
|
|
20970
21039
|
*/
|
|
20971
21040
|
prune_reason?: (string | null)
|
|
21041
|
+
/**
|
|
21042
|
+
* Why a `pending` mutant did not run, kebab-case. Only `sampled-out` has
|
|
21043
|
+
* a reason: the `--mutants-per-line` limit left the mutant out of the
|
|
21044
|
+
* plan. A mutant that the mutant limit or the time budget left out has
|
|
21045
|
+
* no reason.
|
|
21046
|
+
*/
|
|
21047
|
+
pending_reason?: (string | null)
|
|
20972
21048
|
/**
|
|
20973
21049
|
* The test that killed the mutant in this run. Absent for a kill by an
|
|
20974
21050
|
* error outside a test.
|
|
@@ -21038,14 +21114,23 @@ resumed?: boolean
|
|
|
21038
21114
|
* `compile_error` mutant, sorted, at most 8.
|
|
21039
21115
|
*/
|
|
21040
21116
|
type_error_codes?: number[]
|
|
21117
|
+
/**
|
|
21118
|
+
* An advisory hint that the mutant may be equivalent to the original
|
|
21119
|
+
* code. The hint never changes the status: the mutant stays `survived`
|
|
21120
|
+
* and counts in the score. A person decides, and records the decision in
|
|
21121
|
+
* a verdict file. The hint can be wrong.
|
|
21122
|
+
*/
|
|
21123
|
+
equivalence_hint?: (MutantEquivalenceHint | null)
|
|
21041
21124
|
}
|
|
21042
21125
|
/**
|
|
21043
21126
|
* The edit of a mutant, without project text.
|
|
21044
21127
|
*
|
|
21045
21128
|
* Each side is an operator token (for example `??` or `<=`), a fixed literal
|
|
21046
21129
|
* (`true`, `undefined`, `""`, `"fallow"`, `void 0`), a regular expression
|
|
21047
|
-
* token (`^`, `$`, `[`, `[^`, `\d`), or a placeholder for a
|
|
21048
|
-
* project code: `<condition>`, `<call>`, `<expression
|
|
21130
|
+
* token (`^`, `$`, `[`, `[^`, `+`, `{n,m}`, `\d`), or a placeholder for a
|
|
21131
|
+
* side that is project code: `<condition>`, `<call>`, `<expression>`,
|
|
21132
|
+
* `<string>`, `<template>`, `<statement>`, `<statements>`, `<array>` or
|
|
21133
|
+
* `<object>`. An
|
|
21049
21134
|
* empty side means that the edit removes the token.
|
|
21050
21135
|
*/
|
|
21051
21136
|
export interface MutantChange {
|
|
@@ -21230,9 +21315,9 @@ changed_paths: string[]
|
|
|
21230
21315
|
export interface MutationRunIssue {
|
|
21231
21316
|
/**
|
|
21232
21317
|
* A stable kebab-case code: `cache-write-failed`,
|
|
21233
|
-
* `journal-write-failed`, `runtime-error`,
|
|
21234
|
-
* `
|
|
21235
|
-
* or `worktree-check-failed`.
|
|
21318
|
+
* `duplicate-test-ids`, `journal-write-failed`, `runtime-error`,
|
|
21319
|
+
* `skipped-tests`, `static-map-miss`, `test-files-not-discovered`,
|
|
21320
|
+
* `typecheck-failed`, `worktree-changed` or `worktree-check-failed`.
|
|
21236
21321
|
*/
|
|
21237
21322
|
code: string
|
|
21238
21323
|
/**
|
|
@@ -21347,6 +21432,12 @@ checked: number
|
|
|
21347
21432
|
* `compile_error`.
|
|
21348
21433
|
*/
|
|
21349
21434
|
compile_errors: number
|
|
21435
|
+
/**
|
|
21436
|
+
* The mutants of the final report that have an `equivalence_hint`. They
|
|
21437
|
+
* keep the status `survived`. A verdict that makes a mutant `equivalent`
|
|
21438
|
+
* removes its hint and lowers this count.
|
|
21439
|
+
*/
|
|
21440
|
+
hinted?: number
|
|
21350
21441
|
/**
|
|
21351
21442
|
* The survivors that the checker did not check, by reason.
|
|
21352
21443
|
*/
|
|
@@ -21362,6 +21453,125 @@ reason: MutationTypecheckSkipReason
|
|
|
21362
21453
|
*/
|
|
21363
21454
|
count: number
|
|
21364
21455
|
}
|
|
21456
|
+
/**
|
|
21457
|
+
* The recheck facts of a `--recheck` run.
|
|
21458
|
+
*/
|
|
21459
|
+
export interface MutationRecheck {
|
|
21460
|
+
/**
|
|
21461
|
+
* The SHA-256 digest of the earlier report.
|
|
21462
|
+
*/
|
|
21463
|
+
report_sha256: string
|
|
21464
|
+
/**
|
|
21465
|
+
* The number of mutants for each outcome.
|
|
21466
|
+
*/
|
|
21467
|
+
killed: number
|
|
21468
|
+
/**
|
|
21469
|
+
* See `killed`.
|
|
21470
|
+
*/
|
|
21471
|
+
survived: number
|
|
21472
|
+
/**
|
|
21473
|
+
* See `killed`.
|
|
21474
|
+
*/
|
|
21475
|
+
no_coverage: number
|
|
21476
|
+
/**
|
|
21477
|
+
* See `killed`.
|
|
21478
|
+
*/
|
|
21479
|
+
tests_fail_on_original: number
|
|
21480
|
+
/**
|
|
21481
|
+
* See `killed`.
|
|
21482
|
+
*/
|
|
21483
|
+
unsettled: number
|
|
21484
|
+
/**
|
|
21485
|
+
* The rechecked mutants, sorted by file, line and mutant id.
|
|
21486
|
+
*/
|
|
21487
|
+
mutants: MutationRecheckMutant[]
|
|
21488
|
+
}
|
|
21489
|
+
/**
|
|
21490
|
+
* One rechecked mutant.
|
|
21491
|
+
*/
|
|
21492
|
+
export interface MutationRecheckMutant {
|
|
21493
|
+
/**
|
|
21494
|
+
* The id of the mutant.
|
|
21495
|
+
*/
|
|
21496
|
+
mutant_id: string
|
|
21497
|
+
/**
|
|
21498
|
+
* The project-root-relative path of the mutated file.
|
|
21499
|
+
*/
|
|
21500
|
+
file: string
|
|
21501
|
+
/**
|
|
21502
|
+
* The 1-based line of the mutant.
|
|
21503
|
+
*/
|
|
21504
|
+
line: number
|
|
21505
|
+
previous_status: MutantStatus
|
|
21506
|
+
status: MutantStatus
|
|
21507
|
+
outcome: MutationRecheckOutcome
|
|
21508
|
+
}
|
|
21509
|
+
/**
|
|
21510
|
+
* The compare facts of a `--compare` run.
|
|
21511
|
+
*/
|
|
21512
|
+
export interface MutationCompare {
|
|
21513
|
+
/**
|
|
21514
|
+
* The SHA-256 digest of the saved report.
|
|
21515
|
+
*/
|
|
21516
|
+
report_sha256: string
|
|
21517
|
+
/**
|
|
21518
|
+
* The number of mutant ids in both runs.
|
|
21519
|
+
*/
|
|
21520
|
+
compared: number
|
|
21521
|
+
/**
|
|
21522
|
+
* The number of mutants for each change.
|
|
21523
|
+
*/
|
|
21524
|
+
regressed: number
|
|
21525
|
+
/**
|
|
21526
|
+
* See `regressed`.
|
|
21527
|
+
*/
|
|
21528
|
+
inconclusive: number
|
|
21529
|
+
/**
|
|
21530
|
+
* See `regressed`.
|
|
21531
|
+
*/
|
|
21532
|
+
added: number
|
|
21533
|
+
/**
|
|
21534
|
+
* See `regressed`.
|
|
21535
|
+
*/
|
|
21536
|
+
removed: number
|
|
21537
|
+
/**
|
|
21538
|
+
* Each mutant with a change, sorted by file, line and mutant id. A
|
|
21539
|
+
* mutant in both runs without a change is not in the list.
|
|
21540
|
+
*/
|
|
21541
|
+
mutants: MutationCompareMutant[]
|
|
21542
|
+
}
|
|
21543
|
+
/**
|
|
21544
|
+
* One mutant of a compare.
|
|
21545
|
+
*/
|
|
21546
|
+
export interface MutationCompareMutant {
|
|
21547
|
+
/**
|
|
21548
|
+
* The id of the mutant.
|
|
21549
|
+
*/
|
|
21550
|
+
mutant_id: string
|
|
21551
|
+
/**
|
|
21552
|
+
* The project-root-relative path of the mutated file.
|
|
21553
|
+
*/
|
|
21554
|
+
file: string
|
|
21555
|
+
/**
|
|
21556
|
+
* The 1-based line of the mutant.
|
|
21557
|
+
*/
|
|
21558
|
+
line: number
|
|
21559
|
+
change: MutationCompareChange
|
|
21560
|
+
/**
|
|
21561
|
+
* The status in the saved report. Absent for an `added` mutant.
|
|
21562
|
+
*/
|
|
21563
|
+
previous_status?: (MutantStatus | null)
|
|
21564
|
+
/**
|
|
21565
|
+
* The status in this run. Absent for a `removed` mutant.
|
|
21566
|
+
*/
|
|
21567
|
+
status?: (MutantStatus | null)
|
|
21568
|
+
/**
|
|
21569
|
+
* The tests that killed the mutant in the saved report, sorted: its
|
|
21570
|
+
* `killing_tests`, else its `killed_by`. Empty when the saved report
|
|
21571
|
+
* names no killing test.
|
|
21572
|
+
*/
|
|
21573
|
+
previous_killing_tests: string[]
|
|
21574
|
+
}
|
|
21365
21575
|
/**
|
|
21366
21576
|
* The envelope of `fallow mutation --plan`. It runs no user code.
|
|
21367
21577
|
*/
|
|
@@ -21413,9 +21623,13 @@ total: number
|
|
|
21413
21623
|
*/
|
|
21414
21624
|
planned: number
|
|
21415
21625
|
/**
|
|
21416
|
-
* Mutants after the mutant limit.
|
|
21626
|
+
* Mutants after the mutant limit, and the sampled-out mutants.
|
|
21417
21627
|
*/
|
|
21418
21628
|
pending: number
|
|
21629
|
+
/**
|
|
21630
|
+
* The `pending` mutants that the `--mutants-per-line` limit left out.
|
|
21631
|
+
*/
|
|
21632
|
+
sampled_out: number
|
|
21419
21633
|
/**
|
|
21420
21634
|
* Mutants that no test file reaches.
|
|
21421
21635
|
*/
|
|
@@ -21490,6 +21704,13 @@ disposition: MutationPlanDisposition
|
|
|
21490
21704
|
* The static rule of a `pruned` mutant, kebab-case.
|
|
21491
21705
|
*/
|
|
21492
21706
|
prune_reason?: (string | null)
|
|
21707
|
+
/**
|
|
21708
|
+
* Why a `pending` mutant did not run, kebab-case. Only `sampled-out` has
|
|
21709
|
+
* a reason: the `--mutants-per-line` limit left the mutant out of the
|
|
21710
|
+
* plan. A mutant that the mutant limit or the time budget left out has
|
|
21711
|
+
* no reason.
|
|
21712
|
+
*/
|
|
21713
|
+
pending_reason?: (string | null)
|
|
21493
21714
|
/**
|
|
21494
21715
|
* How tests reach the code of the mutant in the module graph. Only a
|
|
21495
21716
|
* `no_coverage` mutant has this field.
|
|
@@ -21611,6 +21832,104 @@ original_lines: string
|
|
|
21611
21832
|
*/
|
|
21612
21833
|
mutated_lines: string
|
|
21613
21834
|
}
|
|
21835
|
+
/**
|
|
21836
|
+
* The envelope of `fallow mutation tasks`: the open tasks of one saved
|
|
21837
|
+
* report, as one batch. It runs no user code.
|
|
21838
|
+
*/
|
|
21839
|
+
export interface MutationTasksOutput {
|
|
21840
|
+
schema_version: MutationTasksSchemaVersion
|
|
21841
|
+
version: ToolVersion
|
|
21842
|
+
/**
|
|
21843
|
+
* The completion status of the report. A `partial` report can miss
|
|
21844
|
+
* tasks: a `pending` mutant is not a task.
|
|
21845
|
+
*/
|
|
21846
|
+
report_completion?: (MutationCompletionStatus | null)
|
|
21847
|
+
summary: MutationTasksSummary
|
|
21848
|
+
/**
|
|
21849
|
+
* The tasks, sorted by file, line, column and mutant id.
|
|
21850
|
+
*/
|
|
21851
|
+
tasks: MutationTask[]
|
|
21852
|
+
}
|
|
21853
|
+
/**
|
|
21854
|
+
* The number of tasks for each status.
|
|
21855
|
+
*/
|
|
21856
|
+
export interface MutationTasksSummary {
|
|
21857
|
+
/**
|
|
21858
|
+
* The number of tasks.
|
|
21859
|
+
*/
|
|
21860
|
+
tasks: number
|
|
21861
|
+
/**
|
|
21862
|
+
* The tasks with the status `survived`.
|
|
21863
|
+
*/
|
|
21864
|
+
survived: number
|
|
21865
|
+
/**
|
|
21866
|
+
* The tasks with the status `no_coverage`.
|
|
21867
|
+
*/
|
|
21868
|
+
no_coverage: number
|
|
21869
|
+
/**
|
|
21870
|
+
* The tasks whose file changed after the report. They have no code.
|
|
21871
|
+
*/
|
|
21872
|
+
stale: number
|
|
21873
|
+
}
|
|
21874
|
+
/**
|
|
21875
|
+
* One open task: a `survived` or `no_coverage` mutant of a saved report.
|
|
21876
|
+
* A task holds no source text other than the source lines of the mutant.
|
|
21877
|
+
*/
|
|
21878
|
+
export interface MutationTask {
|
|
21879
|
+
/**
|
|
21880
|
+
* The id of the mutant. `fallow mutation inspect` takes this id.
|
|
21881
|
+
*/
|
|
21882
|
+
mutant_id: string
|
|
21883
|
+
/**
|
|
21884
|
+
* The project-root-relative path of the mutated file.
|
|
21885
|
+
*/
|
|
21886
|
+
file: string
|
|
21887
|
+
/**
|
|
21888
|
+
* The 1-based line of the mutant.
|
|
21889
|
+
*/
|
|
21890
|
+
line: number
|
|
21891
|
+
/**
|
|
21892
|
+
* The 1-based column of the mutant.
|
|
21893
|
+
*/
|
|
21894
|
+
column: number
|
|
21895
|
+
/**
|
|
21896
|
+
* The operator, kebab-case.
|
|
21897
|
+
*/
|
|
21898
|
+
operator: string
|
|
21899
|
+
/**
|
|
21900
|
+
* The name of the enclosing function. Absent at the top level of a
|
|
21901
|
+
* module and for an anonymous function.
|
|
21902
|
+
*/
|
|
21903
|
+
function?: (string | null)
|
|
21904
|
+
status: MutantStatus
|
|
21905
|
+
/**
|
|
21906
|
+
* The source lines that contain the mutant, from the current file.
|
|
21907
|
+
* `null` when the task is stale.
|
|
21908
|
+
*/
|
|
21909
|
+
original_lines?: (string | null)
|
|
21910
|
+
/**
|
|
21911
|
+
* The same lines with the mutation applied. `null` when the task is
|
|
21912
|
+
* stale.
|
|
21913
|
+
*/
|
|
21914
|
+
mutated_lines?: (string | null)
|
|
21915
|
+
/**
|
|
21916
|
+
* An advisory hint that the mutant may be equivalent. The task stays
|
|
21917
|
+
* open: a person decides, and records an equivalent mutant in a verdict
|
|
21918
|
+
* file.
|
|
21919
|
+
*/
|
|
21920
|
+
equivalence_hint?: (MutantEquivalenceHint | null)
|
|
21921
|
+
/**
|
|
21922
|
+
* Why the current file no longer gives the mutant. Absent for a fresh
|
|
21923
|
+
* task.
|
|
21924
|
+
*/
|
|
21925
|
+
stale_reason?: (MutationStaleReason | null)
|
|
21926
|
+
/**
|
|
21927
|
+
* The test files of the tests that reached the mutant in the dry run,
|
|
21928
|
+
* sorted. Empty for `no_coverage`. `fallow mutation inspect` gives the
|
|
21929
|
+
* test ids and the static test files of one mutant.
|
|
21930
|
+
*/
|
|
21931
|
+
covering_test_files: string[]
|
|
21932
|
+
}
|
|
21614
21933
|
/**
|
|
21615
21934
|
* Single CodeClimate-compatible issue inside [`CodeClimateOutput`].
|
|
21616
21935
|
*/
|