fallow 2.95.0 → 2.96.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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fallow",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.96.0",
|
|
4
4
|
"description": "Deterministic codebase intelligence for TypeScript and JavaScript. Quality, risk, architecture, dependencies, duplication, and safe cleanup evidence for humans, CI, and agents. Optional runtime intelligence layer (Fallow Runtime) adds production execution evidence. Rust-native, sub-second, zero-config framework support.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -83,13 +83,13 @@
|
|
|
83
83
|
"@tanstack/intent": "0.0.41"
|
|
84
84
|
},
|
|
85
85
|
"optionalDependencies": {
|
|
86
|
-
"@fallow-cli/darwin-arm64": "2.
|
|
87
|
-
"@fallow-cli/darwin-x64": "2.
|
|
88
|
-
"@fallow-cli/linux-x64-gnu": "2.
|
|
89
|
-
"@fallow-cli/linux-arm64-gnu": "2.
|
|
90
|
-
"@fallow-cli/linux-x64-musl": "2.
|
|
91
|
-
"@fallow-cli/linux-arm64-musl": "2.
|
|
92
|
-
"@fallow-cli/win32-arm64-msvc": "2.
|
|
93
|
-
"@fallow-cli/win32-x64-msvc": "2.
|
|
86
|
+
"@fallow-cli/darwin-arm64": "2.96.0",
|
|
87
|
+
"@fallow-cli/darwin-x64": "2.96.0",
|
|
88
|
+
"@fallow-cli/linux-x64-gnu": "2.96.0",
|
|
89
|
+
"@fallow-cli/linux-arm64-gnu": "2.96.0",
|
|
90
|
+
"@fallow-cli/linux-x64-musl": "2.96.0",
|
|
91
|
+
"@fallow-cli/linux-arm64-musl": "2.96.0",
|
|
92
|
+
"@fallow-cli/win32-arm64-msvc": "2.96.0",
|
|
93
|
+
"@fallow-cli/win32-x64-msvc": "2.96.0"
|
|
94
94
|
}
|
|
95
95
|
}
|
package/schema.json
CHANGED
|
@@ -112,7 +112,7 @@
|
|
|
112
112
|
"ignoreDefaults": true,
|
|
113
113
|
"skipLocal": false,
|
|
114
114
|
"crossLanguage": false,
|
|
115
|
-
"ignoreImports":
|
|
115
|
+
"ignoreImports": true,
|
|
116
116
|
"normalization": {},
|
|
117
117
|
"minCorpusSizeForShingleFilter": 1024,
|
|
118
118
|
"minCorpusSizeForTokenCache": 5000
|
|
@@ -697,9 +697,9 @@
|
|
|
697
697
|
"default": false
|
|
698
698
|
},
|
|
699
699
|
"ignoreImports": {
|
|
700
|
-
"description": "Exclude ES `import` declarations from clone detection.\n\nWhen enabled, all `import` statements (value imports, type imports, and\nside-effect imports) are stripped from the token stream before clone\ndetection.
|
|
700
|
+
"description": "Exclude ES `import` declarations from clone detection.\n\nDefaults to `true`: token-identical sorted import blocks are a structural\nproperty of well-formatted code, not copy-paste, so they should not\nsurface as clone groups. Set to `false` to count import blocks again.\nWhen enabled, all `import` statements (value imports, type imports, and\nside-effect imports) are stripped from the token stream before clone\ndetection. Only affects ES `import` declarations; CommonJS `require()`\ncalls and `export ... from` re-export blocks are still counted.",
|
|
701
701
|
"type": "boolean",
|
|
702
|
-
"default":
|
|
702
|
+
"default": true
|
|
703
703
|
},
|
|
704
704
|
"normalization": {
|
|
705
705
|
"description": "Fine-grained normalization overrides on top of the detection mode.",
|
package/skills/fallow/SKILL.md
CHANGED
|
@@ -106,7 +106,7 @@ Route by intent before reaching for the big analysis commands. Same matrix as `f
|
|
|
106
106
|
| `config` | Show the loaded config path and resolved config (verifies which `.fallowrc.json` is in effect) | `--path` |
|
|
107
107
|
| `list` | Inspect project structure | `--files`, `--entry-points`, `--plugins`, `--boundaries`, `--workspaces` |
|
|
108
108
|
| `workspaces` | Inspect monorepo workspaces + discovery diagnostics (shorthand for `list --workspaces`) | (no flags) |
|
|
109
|
-
| `dupes` | Code duplication detection | `--mode`, `--threshold`, `--top`, `--changed-since`, `--workspace`, `--changed-workspaces`, `--skip-local`, `--cross-language`, `--ignore-imports`, `--explain-skipped`, `--fail-on-regression`, `--tolerance`, `--regression-baseline`, `--save-regression-baseline` |
|
|
109
|
+
| `dupes` | Code duplication detection | `--mode`, `--threshold`, `--top`, `--changed-since`, `--workspace`, `--changed-workspaces`, `--skip-local`, `--cross-language`, `--ignore-imports`, `--no-ignore-imports`, `--explain-skipped`, `--fail-on-regression`, `--tolerance`, `--regression-baseline`, `--save-regression-baseline` |
|
|
110
110
|
| `health` | Function complexity analysis (also covers Angular templates as synthetic `<template>` findings: external `.html` files via `templateUrl` AND inline `@Component({ template: \`...\` })` literals; suppress external with `<!-- fallow-ignore-file complexity -->` at the top of the `.html` file, suppress inline with `// fallow-ignore-next-line complexity` directly above the `@Component` decorator) | `--complexity`, `--max-cyclomatic`, `--max-cognitive`, `--max-crap`, `--top`, `--sort`, `--file-scores`, `--hotspots`, `--ownership`, `--ownership-emails`, `--targets`, `--effort`, `--score`, `--min-score`, `--since`, `--min-commits`, `--save-snapshot`, `--trend`, `--coverage-gaps`, `--coverage`, `--coverage-root`, `--runtime-coverage`, `--min-invocations-hot`, `--min-observation-volume`, `--low-traffic-threshold`, `--workspace`, `--changed-workspaces`, `--baseline`, `--save-baseline` |
|
|
111
111
|
| `flags` | Detect feature flag patterns (env vars, SDK calls, config objects) | `--top` |
|
|
112
112
|
| `explain` | Explain one issue type without running analysis | `<issue-type>`, `--format json` |
|
|
@@ -198,7 +198,7 @@ When using fallow via MCP (`fallow-mcp`), the following tools are available:
|
|
|
198
198
|
| `project_info` | introspection | free | `entry_points`, `files`, `plugins`, `boundaries` | Project metadata. Set `entry_points`, `files`, `plugins`, or `boundaries` to `true` to request specific sections |
|
|
199
199
|
| `list_boundaries` | introspection | free | - | Architecture boundary zones, access rules, and pre-expansion `autoDiscover` `logical_groups[]` (user-authored parent name, verbatim paths, discovered children, `status` enum, summed `file_count`). Returns `{"configured": false}` if no boundaries configured |
|
|
200
200
|
| `feature_flags` | analysis | free | `workspace`, `production` | Detect feature flag patterns (env vars, SDK calls, config objects). Set `top` to limit results |
|
|
201
|
-
| `impact` | introspection | free | `root` | Read the local, opt-in Fallow Impact value report (`fallow impact --format json`). Runs no analysis: current surfacing counts, trend since the last recorded run, pre-commit gate containment, and (on impact v1.5+) resolved/suppressed attribution. Read-only and `root`-only; the mutating `enable` / `disable` lifecycle is not exposed. A never-enabled project returns a populated `{"enabled": false, ...}` report (never `{}`); branch on `enabled`
|
|
201
|
+
| `impact` | introspection | free | `root` | Read the local, opt-in Fallow Impact value report (`fallow impact --format json`). Runs no analysis: current surfacing counts, trend since the last recorded run, pre-commit gate containment, and (on impact v1.5+) resolved/suppressed attribution. History is read from a per-project file in the user's private config dir (never inside the repo). Read-only and `root`-only; the mutating `enable` / `disable` / `default` lifecycle is not exposed. A never-enabled project returns a populated `{"enabled": false, ...}` report (never `{}`); branch on `enabled` and `enabled_source` (`project` / `user` / `default`) then `record_count`, recommending `fallow impact enable` only when `explicit_decision` is `false` (never asked) and staying silent when `true` (deliberately disabled here). Local-developer signal: fallow never records in CI, so empty there and not a CI metric |
|
|
202
202
|
| `trace_export` | trace | free | `file`, `export_name` | Trace why an export is used or unused (`fallow dead-code --trace FILE:EXPORT_NAME --format json`). Required `file` and `export_name`. Returns file reachability, entry-point status, direct references, re-export chains, and a reason string. Use before deleting a supposedly-unused export |
|
|
203
203
|
| `trace_file` | trace | free | `file` | Trace all graph edges for a file (`fallow dead-code --trace-file PATH --format json`). Required `file`. Returns reachability, exports, imports-from, imported-by, and re-exports. Use to decide whether a file is isolated, barrel-only, or imported by live entry points |
|
|
204
204
|
| `trace_dependency` | trace | free | `package_name` | Trace where a dependency is imported (`fallow dead-code --trace-dependency PACKAGE --format json`). Required `package_name`. Returns importing files, type-only importers, total import count, `used_in_scripts` (true when invoked from package.json scripts or CI configs), and `is_used` (combined import + script signal; mirrors the unused-deps detector so build tools like `microbundle` or `vitest` are not falsely flagged as unused). Use before removing a dependency or moving between `dependencies` and `devDependencies` |
|
|
@@ -400,7 +400,7 @@ fallow impact enable
|
|
|
400
400
|
fallow impact --format json --quiet
|
|
401
401
|
```
|
|
402
402
|
|
|
403
|
-
`fallow impact enable` is a one-time, user-owned local action; the agent-facing line is the read step.
|
|
403
|
+
`fallow impact enable` is a one-time, user-owned local action; the agent-facing line is the read step. History is stored per-project in the user's private config dir (never inside the repo, so no `.fallow/` or `.gitignore` changes); `fallow impact default on` enables it for every project at once. The report is read-only and is empty in CI (fallow never records there).
|
|
404
404
|
|
|
405
405
|
### Debug why something is flagged
|
|
406
406
|
|
|
@@ -147,6 +147,7 @@ By default, `fallow dupes` skips generated framework output matching `**/.next/*
|
|
|
147
147
|
| `--skip-local` | `bool` | `false` | Only report cross-directory duplicates |
|
|
148
148
|
| `--cross-language` | `bool` | `false` | Strip type annotations for TS↔JS matching |
|
|
149
149
|
| `--ignore-imports` | `bool` | `false` | Exclude import declarations from clone detection |
|
|
150
|
+
| `--no-ignore-imports` | `bool` | `false` | Count import declarations as clone candidates (opt out of the default import exclusion) |
|
|
150
151
|
| `--top` | `string` | - | Show only the N most-duplicated clone groups (sorted by instance count desc, tiebreak: line count desc, then path/line). Summary stats reflect the full project. |
|
|
151
152
|
| `--trace` | `string` | - | Deep-dive clones. `FILE:LINE` traces all clones at a location; `dup:<id>` traces a clone group by the stable fingerprint shown in the listing and on `clone_groups[].fingerprint` in JSON. Fingerprints are usually `dup:<8hex>` and widen only on rare report collisions. Trace output adds an extract-function suggestion, estimated savings, and a best-effort proposed name per group |
|
|
152
153
|
|
|
@@ -492,7 +493,7 @@ fallow health --format json --quiet --trend
|
|
|
492
493
|
{
|
|
493
494
|
"kind": "health",
|
|
494
495
|
"schema_version": 7,
|
|
495
|
-
"version": "2.
|
|
496
|
+
"version": "2.96.0",
|
|
496
497
|
"elapsed_ms": 32,
|
|
497
498
|
"summary": {
|
|
498
499
|
"files_analyzed": 482,
|
|
@@ -879,7 +880,7 @@ fallow audit \
|
|
|
879
880
|
{
|
|
880
881
|
"kind": "audit",
|
|
881
882
|
"schema_version": 7,
|
|
882
|
-
"version": "2.
|
|
883
|
+
"version": "2.96.0",
|
|
883
884
|
"command": "audit",
|
|
884
885
|
"verdict": "fail",
|
|
885
886
|
"changed_files_count": 12,
|
|
@@ -954,7 +955,7 @@ fallow flags --format json --quiet --workspace my-package
|
|
|
954
955
|
```json
|
|
955
956
|
{
|
|
956
957
|
"schema_version": 7,
|
|
957
|
-
"version": "2.
|
|
958
|
+
"version": "2.96.0",
|
|
958
959
|
"elapsed_ms": 116,
|
|
959
960
|
"feature_flags": [],
|
|
960
961
|
"total_flags": 0
|
|
@@ -1054,7 +1055,7 @@ fallow security --gate newly-reachable --changed-since origin/main
|
|
|
1054
1055
|
{
|
|
1055
1056
|
"kind": "security",
|
|
1056
1057
|
"schema_version": "4",
|
|
1057
|
-
"version": "2.
|
|
1058
|
+
"version": "2.96.0",
|
|
1058
1059
|
"elapsed_ms": 42,
|
|
1059
1060
|
"config": {
|
|
1060
1061
|
"rules": {
|
|
@@ -1083,7 +1084,7 @@ fallow security --gate newly-reachable --changed-since origin/main
|
|
|
1083
1084
|
{
|
|
1084
1085
|
"kind": "security",
|
|
1085
1086
|
"schema_version": "4",
|
|
1086
|
-
"version": "2.
|
|
1087
|
+
"version": "2.96.0",
|
|
1087
1088
|
"elapsed_ms": 42,
|
|
1088
1089
|
"config": {
|
|
1089
1090
|
"rules": {
|
|
@@ -1545,6 +1546,7 @@ Available on all commands:
|
|
|
1545
1546
|
| `--dupes-skip-local` | `bool` | `false` | Only report cross-directory duplicates in combined mode |
|
|
1546
1547
|
| `--dupes-cross-language` | `bool` | `false` | Enable cross-language duplicate detection in combined mode |
|
|
1547
1548
|
| `--dupes-ignore-imports` | `bool` | `false` | Exclude import declarations from duplicate detection in combined mode |
|
|
1549
|
+
| `--dupes-no-ignore-imports` | `bool` | `false` | Count import declarations as clone candidates in combined mode (opt out of the default import exclusion) |
|
|
1548
1550
|
| `--score` | `bool` | `false` | Compute health score (0-100 with letter grade) in combined mode. Enables the health delta header in PR comments. JSON includes `health_score` object with `score`, `grade`, and `penalties` breakdown |
|
|
1549
1551
|
| `--trend` | `bool` | `false` | Compare current health metrics against saved snapshot. Implies `--score`. Shows per-metric deltas with directional indicators. Requires at least one saved snapshot in `.fallow/snapshots/` |
|
|
1550
1552
|
| `--save-snapshot` | `string` | - | Save vital signs snapshot for trend tracking. Default path: `.fallow/snapshots/<timestamp>.json`. Forces file-scores + hotspot computation |
|
|
@@ -1699,7 +1701,7 @@ The HTTP layer mirrors the bash `gh_api_retry` / `curl_retry` helpers: `FALLOW_A
|
|
|
1699
1701
|
{
|
|
1700
1702
|
"kind": "dead-code",
|
|
1701
1703
|
"schema_version": 7,
|
|
1702
|
-
"version": "2.
|
|
1704
|
+
"version": "2.96.0",
|
|
1703
1705
|
"elapsed_ms": 45,
|
|
1704
1706
|
"total_issues": 12,
|
|
1705
1707
|
"entry_points": {
|
|
@@ -1859,7 +1861,7 @@ When `--baseline` is used in combined output, the JSON includes a `baseline_delt
|
|
|
1859
1861
|
{
|
|
1860
1862
|
"kind": "dupes",
|
|
1861
1863
|
"schema_version": 7,
|
|
1862
|
-
"version": "2.
|
|
1864
|
+
"version": "2.96.0",
|
|
1863
1865
|
"elapsed_ms": 82,
|
|
1864
1866
|
"total_clones": 15,
|
|
1865
1867
|
"total_lines_duplicated": 230,
|
|
@@ -1903,11 +1905,11 @@ When running `fallow` with no subcommand (all analyses), the JSON output combine
|
|
|
1903
1905
|
{
|
|
1904
1906
|
"kind": "combined",
|
|
1905
1907
|
"schema_version": 7,
|
|
1906
|
-
"version": "2.
|
|
1908
|
+
"version": "2.96.0",
|
|
1907
1909
|
"elapsed_ms": 159,
|
|
1908
1910
|
"check": {
|
|
1909
1911
|
"schema_version": 7,
|
|
1910
|
-
"version": "2.
|
|
1912
|
+
"version": "2.96.0",
|
|
1911
1913
|
"elapsed_ms": 45,
|
|
1912
1914
|
"total_issues": 12,
|
|
1913
1915
|
"unused_files": [],
|
|
@@ -623,6 +623,12 @@ export type GroupByMode = ("owner" | "directory" | "package" | "section")
|
|
|
623
623
|
* `CoverageAnalyzeSchemaVersion`).
|
|
624
624
|
*/
|
|
625
625
|
export type ImpactReportSchemaVersion = "1"
|
|
626
|
+
/**
|
|
627
|
+
* Why Impact tracking is (or is not) active for a project. `Project` = an
|
|
628
|
+
* explicit per-repo `enable`; `User` = the user-global default with no per-repo
|
|
629
|
+
* decision; `Default` = off (no per-repo decision and no global default).
|
|
630
|
+
*/
|
|
631
|
+
export type EnabledSource = ("project" | "user" | "default")
|
|
626
632
|
/**
|
|
627
633
|
* Direction of a count trend between two recorded runs.
|
|
628
634
|
*/
|
|
@@ -5209,6 +5215,7 @@ misconfigured_dependency_overrides?: MisconfiguredDependencyOverrideFinding[]
|
|
|
5209
5215
|
export interface ImpactReport {
|
|
5210
5216
|
schema_version: ImpactReportSchemaVersion
|
|
5211
5217
|
enabled: boolean
|
|
5218
|
+
enabled_source: EnabledSource
|
|
5212
5219
|
record_count: number
|
|
5213
5220
|
_meta?: (Meta | null)
|
|
5214
5221
|
first_recorded?: (string | null)
|
|
@@ -5272,7 +5279,8 @@ recent_resolved: ResolutionEvent[]
|
|
|
5272
5279
|
attribution_active: boolean
|
|
5273
5280
|
/**
|
|
5274
5281
|
* Whether the local agent onboarding prompt has been explicitly declined.
|
|
5275
|
-
* Stored
|
|
5282
|
+
* Stored in the user config dir (per project) so agents avoid cross-session
|
|
5283
|
+
* nags without writing into the repo.
|
|
5276
5284
|
*/
|
|
5277
5285
|
onboarding_declined: boolean
|
|
5278
5286
|
/**
|