fallow 3.22.0 → 3.23.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 CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fallow",
3
- "version": "3.22.0",
3
+ "version": "3.23.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": [
@@ -906,6 +906,11 @@
906
906
  "description": "Inspect the optional TypeScript semantic companion",
907
907
  "flags": []
908
908
  },
909
+ {
910
+ "name": "doctor",
911
+ "description": "Diagnose project readiness without analysis or mutation",
912
+ "flags": []
913
+ },
909
914
  {
910
915
  "name": "similar-code",
911
916
  "description": "Find semantically similar functions with a pinned local model (opt-in)",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fallow",
3
- "version": "3.22.0",
3
+ "version": "3.23.0",
4
4
  "mcpName": "io.github.fallow-rs/fallow",
5
5
  "description": "Codebase intelligence for TypeScript and JavaScript. Free static analysis of code and styles, optional paid runtime intelligence (Fallow Runtime). Quality, risk, architecture, dependencies, duplication, and design-system drift for humans, CI, and the agents writing your code. Zero-config framework support.",
6
6
  "license": "MIT",
@@ -88,14 +88,14 @@
88
88
  "@tanstack/intent": "0.3.6"
89
89
  },
90
90
  "optionalDependencies": {
91
- "@fallow-cli/darwin-arm64": "3.22.0",
92
- "@fallow-cli/darwin-x64": "3.22.0",
93
- "@fallow-cli/linux-x64-gnu": "3.22.0",
94
- "@fallow-cli/linux-arm64-gnu": "3.22.0",
95
- "@fallow-cli/linux-x64-musl": "3.22.0",
96
- "@fallow-cli/linux-arm64-musl": "3.22.0",
97
- "@fallow-cli/win32-arm64-msvc": "3.22.0",
98
- "@fallow-cli/win32-x64-msvc": "3.22.0",
99
- "fallow-type-aware": "3.22.0"
91
+ "@fallow-cli/darwin-arm64": "3.23.0",
92
+ "@fallow-cli/darwin-x64": "3.23.0",
93
+ "@fallow-cli/linux-x64-gnu": "3.23.0",
94
+ "@fallow-cli/linux-arm64-gnu": "3.23.0",
95
+ "@fallow-cli/linux-x64-musl": "3.23.0",
96
+ "@fallow-cli/linux-arm64-musl": "3.23.0",
97
+ "@fallow-cli/win32-arm64-msvc": "3.23.0",
98
+ "@fallow-cli/win32-x64-msvc": "3.23.0",
99
+ "fallow-type-aware": "3.23.0"
100
100
  }
101
101
  }
package/schema.json CHANGED
@@ -905,7 +905,7 @@
905
905
  "type": "array",
906
906
  "items": {
907
907
  "type": "string",
908
- "pattern": "^dup:(?:[0-9a-f]{8}|[0-9a-f]{16}(?:-[1-9][0-9]*)?):(?:[2-9]|[1-9][0-9]+)$"
908
+ "pattern": "^dup:(?:[0-9a-f]{8}|[0-9a-f]{16}(?:-r?[1-9][0-9]*)?):(?:[2-9]|[1-9][0-9]+)$"
909
909
  },
910
910
  "default": []
911
911
  },
@@ -87,6 +87,7 @@ Route by intent before reaching for the big analysis commands. Same matrix as `f
87
87
  | `dead-code` | Dead code analysis (`check` is an alias) | `--unused-exports`, `--changed-since`, `--changed-workspaces`, `--production`, `--file`, `--include-entry-exports`, `--stale-suppressions`, `--ci`, `--group-by`, `--summary`, `--fail-on-regression`, `--tolerance`, `--regression-baseline`, `--save-regression-baseline` |
88
88
  | `watch` | Watch for changes and re-run analysis | `--no-clear` |
89
89
  | `type-aware` | Inspect the optional TypeScript semantic companion | |
90
+ | `doctor` | Diagnose project readiness without analysis or mutation | |
90
91
  | `similar-code` | Find semantically similar functions with a pinned local model (opt-in) | `--threshold`, `--min-lines`, `--top`, `--file` |
91
92
  | `inspect` | Compose one evidence bundle for a file or exported symbol | `--file <path>`, `--symbol <file>:<export>` |
92
93
  | `trace` | Trace a symbol's call chain (best-effort, syntactic; OFF the ranked path) | `symbol`, `--callers`, `--callees`, `--depth` |
@@ -385,7 +385,7 @@ Human output groups paths under "Shared with your team (commit these)" and "Loca
385
385
  {
386
386
  "kind": "agent-install",
387
387
  "schema_version": 1,
388
- "fallow_version": "3.22.0",
388
+ "fallow_version": "3.23.0",
389
389
  "root": "/abs/path",
390
390
  "mode": "install",
391
391
  "dry_run": false,
@@ -589,7 +589,7 @@ fallow health --format json --quiet --trend
589
589
  {
590
590
  "kind": "health",
591
591
  "schema_version": 7,
592
- "version": "3.22.0",
592
+ "version": "3.23.0",
593
593
  "elapsed_ms": 32,
594
594
  "summary": {
595
595
  "files_analyzed": 482,
@@ -987,7 +987,7 @@ fallow audit \
987
987
  {
988
988
  "kind": "audit",
989
989
  "schema_version": 7,
990
- "version": "3.22.0",
990
+ "version": "3.23.0",
991
991
  "command": "audit",
992
992
  "verdict": "fail",
993
993
  "changed_files_count": 12,
@@ -1064,7 +1064,7 @@ fallow flags --format json --quiet --workspace my-package
1064
1064
  ```json
1065
1065
  {
1066
1066
  "schema_version": 7,
1067
- "version": "3.22.0",
1067
+ "version": "3.23.0",
1068
1068
  "elapsed_ms": 116,
1069
1069
  "feature_flags": [],
1070
1070
  "total_flags": 0
@@ -1165,7 +1165,7 @@ fallow security --gate newly-reachable --changed-since origin/main
1165
1165
  {
1166
1166
  "kind": "security",
1167
1167
  "schema_version": "4",
1168
- "version": "3.22.0",
1168
+ "version": "3.23.0",
1169
1169
  "elapsed_ms": 42,
1170
1170
  "config": {
1171
1171
  "rules": {
@@ -1194,7 +1194,7 @@ fallow security --gate newly-reachable --changed-since origin/main
1194
1194
  {
1195
1195
  "kind": "security",
1196
1196
  "schema_version": "4",
1197
- "version": "3.22.0",
1197
+ "version": "3.23.0",
1198
1198
  "elapsed_ms": 42,
1199
1199
  "config": {
1200
1200
  "rules": {
@@ -1959,7 +1959,7 @@ The HTTP layer mirrors the bash `gh_api_retry` / `curl_retry` helpers: `FALLOW_A
1959
1959
  {
1960
1960
  "kind": "dead-code",
1961
1961
  "schema_version": 7,
1962
- "version": "3.22.0",
1962
+ "version": "3.23.0",
1963
1963
  "elapsed_ms": 45,
1964
1964
  "total_issues": 12,
1965
1965
  "entry_points": {
@@ -2119,7 +2119,7 @@ When `--baseline` is used in combined output, the JSON includes a `baseline_delt
2119
2119
  {
2120
2120
  "kind": "dupes",
2121
2121
  "schema_version": 7,
2122
- "version": "3.22.0",
2122
+ "version": "3.23.0",
2123
2123
  "elapsed_ms": 82,
2124
2124
  "total_clones": 15,
2125
2125
  "total_lines_duplicated": 230,
@@ -2163,11 +2163,11 @@ When running `fallow` with no subcommand (all analyses), the JSON output combine
2163
2163
  {
2164
2164
  "kind": "combined",
2165
2165
  "schema_version": 7,
2166
- "version": "3.22.0",
2166
+ "version": "3.23.0",
2167
2167
  "elapsed_ms": 159,
2168
2168
  "check": {
2169
2169
  "schema_version": 7,
2170
- "version": "3.22.0",
2170
+ "version": "3.23.0",
2171
2171
  "elapsed_ms": 45,
2172
2172
  "total_issues": 12,
2173
2173
  "unused_files": [],
@@ -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`, `review-envelope`, `review-reconcile`, `coverage-setup`, `coverage-analyze`, `list-boundaries`, `list-workspaces`, `health`, `dupes`, `dead-code-grouped`, `impact`, `impact-cross-repo`, `security`, `security-survivors`, `security-blind-spots`, `dead-code`, `combined`, `feature-flags`, `audit-brief`, `decision-surface`, `review-walkthrough-guide`, `review-walkthrough-validation`, `suppression-inventory`, `type-aware-status`, `similar-code`, `similar-code-inspect`, `similar-code-review`. 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.
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`, `review-envelope`, `review-reconcile`, `coverage-setup`, `coverage-analyze`, `list-boundaries`, `list-workspaces`, `health`, `dupes`, `dead-code-grouped`, `impact`, `impact-cross-repo`, `security`, `security-survivors`, `security-blind-spots`, `dead-code`, `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`. 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.
28
28
  */
29
29
  export type FallowJsonOutput = (FallowOutput | CodeClimateOutput | ErrorOutput)
30
30
  /**
@@ -96,6 +96,8 @@ kind: "review-walkthrough-guide"
96
96
  kind: "review-walkthrough-validation"
97
97
  }) | (SuppressionInventoryOutput & {
98
98
  kind: "suppression-inventory"
99
+ }) | (DoctorOutput & {
100
+ kind: "doctor"
99
101
  }) | (TypeAwareStatusOutput & {
100
102
  kind: "type-aware-status"
101
103
  }) | (SimilarCodeOutput & {
@@ -1059,6 +1061,30 @@ export type SuppressionInventoryLevel = ("file" | "line")
1059
1061
  * How a suppression in the inventory was authored.
1060
1062
  */
1061
1063
  export type SuppressionInventoryOrigin = "comment"
1064
+ /**
1065
+ * Schema projection for the exact doctor envelope version.
1066
+ */
1067
+ export type DoctorSchemaVersion = 1
1068
+ /**
1069
+ * Schema projection for `.` as the privacy-safe diagnosed project root.
1070
+ */
1071
+ export type DoctorProjectRoot = "."
1072
+ /**
1073
+ * Aggregate readiness outcome.
1074
+ */
1075
+ export type DoctorStatus = ("pass" | "warn" | "fail")
1076
+ /**
1077
+ * Stable identifier for a doctor check. Declaration order is output order.
1078
+ */
1079
+ export type DoctorCheckId = ("root" | "config" | "workspaces" | "plugins" | "type-aware")
1080
+ /**
1081
+ * Stable category for a doctor check.
1082
+ */
1083
+ export type DoctorCheckCategory = ("project" | "configuration" | "workspace" | "plugin" | "companion")
1084
+ /**
1085
+ * Per-check readiness outcome.
1086
+ */
1087
+ export type DoctorCheckStatus = ("pass" | "warn" | "fail" | "skipped")
1062
1088
  /**
1063
1089
  * Schema projection for the type-aware status envelope's exact version.
1064
1090
  */
@@ -13516,6 +13542,75 @@ reason?: (string | null)
13516
13542
  */
13517
13543
  reason_present: boolean
13518
13544
  }
13545
+ /**
13546
+ * Versioned readiness envelope emitted by `fallow doctor --format json`.
13547
+ */
13548
+ export interface DoctorOutput {
13549
+ schema_version: DoctorSchemaVersion
13550
+ version: ToolVersion
13551
+ root: DoctorProjectRoot
13552
+ status: DoctorStatus
13553
+ summary: DoctorSummary
13554
+ /**
13555
+ * Checks in stable contract order.
13556
+ */
13557
+ checks: DoctorCheck[]
13558
+ }
13559
+ /**
13560
+ * Counts for every per-check status.
13561
+ */
13562
+ export interface DoctorSummary {
13563
+ /**
13564
+ * Successful checks.
13565
+ */
13566
+ pass: number
13567
+ /**
13568
+ * Advisory checks.
13569
+ */
13570
+ warn: number
13571
+ /**
13572
+ * Failed checks.
13573
+ */
13574
+ fail: number
13575
+ /**
13576
+ * Inapplicable or prerequisite-blocked checks.
13577
+ */
13578
+ skipped: number
13579
+ }
13580
+ /**
13581
+ * One deterministic doctor check result.
13582
+ */
13583
+ export interface DoctorCheck {
13584
+ id: DoctorCheckId
13585
+ category: DoctorCheckCategory
13586
+ status: DoctorCheckStatus
13587
+ /**
13588
+ * Whether failure makes the project not ready.
13589
+ */
13590
+ required: boolean
13591
+ /**
13592
+ * Human-readable result with no host-specific absolute paths.
13593
+ */
13594
+ message: string
13595
+ /**
13596
+ * Optional actionable next command.
13597
+ */
13598
+ remediation?: (DoctorRemediation | null)
13599
+ }
13600
+ /**
13601
+ * Actionable remediation attached to a doctor check.
13602
+ */
13603
+ export interface DoctorRemediation {
13604
+ /**
13605
+ * Command the user or agent can choose to run.
13606
+ */
13607
+ command: string
13608
+ cwd: DoctorProjectRoot
13609
+ /**
13610
+ * Whether running the command can modify project files or dependencies.
13611
+ */
13612
+ mutating: boolean
13613
+ }
13519
13614
  /**
13520
13615
  * Envelope emitted by `fallow type-aware status --format json`.
13521
13616
  */
@@ -14121,6 +14216,12 @@ severity: CodeClimateSeverity
14121
14216
  */
14122
14217
  fingerprint: string
14123
14218
  location: CodeClimateLocation
14219
+ /**
14220
+ * Other source locations that provide evidence for the finding. GitLab's
14221
+ * Code Quality widget ignores this standard CodeClimate field, but Fallow
14222
+ * preserves it for review-comment rendering.
14223
+ */
14224
+ other_locations?: CodeClimateLocation[]
14124
14225
  /**
14125
14226
  * Optional owner attribution used by grouped dead-code output.
14126
14227
  */
@@ -14142,13 +14243,17 @@ path: string
14142
14243
  lines: CodeClimateLines
14143
14244
  }
14144
14245
  /**
14145
- * `lines.begin` for [`CodeClimateLocation`].
14246
+ * Inclusive line range for [`CodeClimateLocation`].
14146
14247
  */
14147
14248
  export interface CodeClimateLines {
14148
14249
  /**
14149
14250
  * 1-based start line.
14150
14251
  */
14151
14252
  begin: number
14253
+ /**
14254
+ * Inclusive 1-based end line. Omitted for point findings.
14255
+ */
14256
+ end?: (number | null)
14152
14257
  }
14153
14258
  /**
14154
14259
  * Structured JSON error emitted on stdout when `--format json` is active and a