code-auditor-mcp 3.9.6 → 3.9.11
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/.claude-plugin/marketplace.json +1 -1
- package/CHANGELOG.md +220 -0
- package/README.md +18 -0
- package/dist/analyzers/reactAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/reactAnalyzer.js +4 -1
- package/dist/analyzers/reactAnalyzer.js.map +1 -1
- package/dist/analyzers/ruleRegistry.d.ts +8 -0
- package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
- package/dist/analyzers/ruleRegistry.js +32 -10
- package/dist/analyzers/ruleRegistry.js.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +23 -20
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +1 -0
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +19 -5
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/schema/codeAnalysis.d.ts +44 -2
- package/dist/analyzers/universal/schema/codeAnalysis.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/codeAnalysis.js +153 -8
- package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -1
- package/dist/analyzers/universal/schema/config.d.ts +8 -0
- package/dist/analyzers/universal/schema/config.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/config.js +9 -0
- package/dist/analyzers/universal/schema/config.js.map +1 -1
- package/dist/analyzers/universal/schema/types.d.ts +5 -0
- package/dist/analyzers/universal/schema/types.d.ts.map +1 -1
- package/dist/auditRouter.d.ts.map +1 -1
- package/dist/auditRouter.js +6 -1
- package/dist/auditRouter.js.map +1 -1
- package/dist/auditRunner.d.ts.map +1 -1
- package/dist/auditRunner.js +62 -8
- package/dist/auditRunner.js.map +1 -1
- package/dist/cli.js +157 -13
- package/dist/cli.js.map +1 -1
- package/dist/codeIndexDB.d.ts.map +1 -1
- package/dist/codeIndexDB.js +29 -7
- package/dist/codeIndexDB.js.map +1 -1
- package/dist/config/defaults.d.ts +2 -0
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +15 -6
- package/dist/config/defaults.js.map +1 -1
- package/dist/config/effectiveConfig.d.ts +22 -1
- package/dist/config/effectiveConfig.d.ts.map +1 -1
- package/dist/config/effectiveConfig.js +69 -2
- package/dist/config/effectiveConfig.js.map +1 -1
- package/dist/config/lintConfigReader.d.ts +56 -0
- package/dist/config/lintConfigReader.d.ts.map +1 -0
- package/dist/config/lintConfigReader.js +263 -0
- package/dist/config/lintConfigReader.js.map +1 -0
- package/dist/constants.d.ts +9 -2
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +10 -6
- package/dist/constants.js.map +1 -1
- package/dist/dataPaths.d.ts +8 -0
- package/dist/dataPaths.d.ts.map +1 -1
- package/dist/dataPaths.js +21 -0
- package/dist/dataPaths.js.map +1 -1
- package/dist/dismissals.d.ts +59 -0
- package/dist/dismissals.d.ts.map +1 -0
- package/dist/dismissals.js +128 -0
- package/dist/dismissals.js.map +1 -0
- package/dist/enforcement/gate.d.ts.map +1 -1
- package/dist/enforcement/gate.js +5 -0
- package/dist/enforcement/gate.js.map +1 -1
- package/dist/hooks/codex.d.ts.map +1 -1
- package/dist/hooks/codex.js +18 -6
- package/dist/hooks/codex.js.map +1 -1
- package/dist/hooks/core.d.ts +12 -0
- package/dist/hooks/core.d.ts.map +1 -1
- package/dist/hooks/core.js +12 -3
- package/dist/hooks/core.js.map +1 -1
- package/dist/hooks/cursor.d.ts.map +1 -1
- package/dist/hooks/cursor.js +17 -10
- package/dist/hooks/cursor.js.map +1 -1
- package/dist/installConfig.d.ts +40 -0
- package/dist/installConfig.d.ts.map +1 -0
- package/dist/installConfig.js +84 -0
- package/dist/installConfig.js.map +1 -0
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +2 -15
- package/dist/installer.js.map +1 -1
- package/dist/languages/go/analyzer +0 -0
- package/dist/languages/go/analyzer-src/solid.go +14 -6
- package/dist/mcp.js +54 -0
- package/dist/mcp.js.map +1 -1
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +12 -1
- package/dist/pipeline.js.map +1 -1
- package/dist/pipelineAdapters.d.ts.map +1 -1
- package/dist/pipelineAdapters.js +87 -7
- package/dist/pipelineAdapters.js.map +1 -1
- package/dist/reporting/csvReportGenerator.d.ts.map +1 -1
- package/dist/reporting/csvReportGenerator.js +1 -0
- package/dist/reporting/csvReportGenerator.js.map +1 -1
- package/dist/reporting/htmlReportGenerator.d.ts.map +1 -1
- package/dist/reporting/htmlReportGenerator.js +5 -0
- package/dist/reporting/htmlReportGenerator.js.map +1 -1
- package/dist/reporting/jsonReportGenerator.d.ts.map +1 -1
- package/dist/reporting/jsonReportGenerator.js +6 -0
- package/dist/reporting/jsonReportGenerator.js.map +1 -1
- package/dist/reporting/sarifReportGenerator.d.ts.map +1 -1
- package/dist/reporting/sarifReportGenerator.js +3 -0
- package/dist/reporting/sarifReportGenerator.js.map +1 -1
- package/dist/services/auditJobService.d.ts.map +1 -1
- package/dist/services/auditJobService.js +4 -7
- package/dist/services/auditJobService.js.map +1 -1
- package/dist/structuralSignature.d.ts +41 -0
- package/dist/structuralSignature.d.ts.map +1 -0
- package/dist/structuralSignature.js +93 -0
- package/dist/structuralSignature.js.map +1 -0
- package/dist/telemetry.d.ts +80 -0
- package/dist/telemetry.d.ts.map +1 -0
- package/dist/telemetry.js +148 -0
- package/dist/telemetry.js.map +1 -0
- package/dist/types.d.ts +72 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/version.generated.d.ts +2 -0
- package/dist/version.generated.d.ts.map +1 -0
- package/dist/version.generated.js +7 -0
- package/dist/version.generated.js.map +1 -0
- package/package.json +3 -2
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/scripts/hook-common.sh +37 -9
- package/plugin/skills/code-auditor/SKILL.md +24 -2
- package/server.json +2 -2
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
"name": "code-auditor",
|
|
11
11
|
"source": "./plugin",
|
|
12
12
|
"description": "Diff-scoped code quality auditing on every edit. Indexes your codebase, enforces invariants, and feeds violations back to the agent so fixes happen inline.",
|
|
13
|
-
"version": "3.9.
|
|
13
|
+
"version": "3.9.11",
|
|
14
14
|
"author": {
|
|
15
15
|
"name": "Ben Hammond"
|
|
16
16
|
},
|
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,226 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to the Code Auditor MCP project.
|
|
4
4
|
|
|
5
|
+
## [3.9.11] — 2026-09-15
|
|
6
|
+
|
|
7
|
+
### SQL assembled in a variable is no longer read as table-free
|
|
8
|
+
|
|
9
|
+
The schema table extractor (`extractDbCallRefs`) used to read only a *direct*
|
|
10
|
+
string/template-literal argument to a DB call, so `db.prepare(UPSERT_SQL)` — SQL
|
|
11
|
+
held in a module-level `const` — contributed no table references and the table was
|
|
12
|
+
misreported as read-never-written / written-never-read. The identifier now resolves
|
|
13
|
+
via the adapter's `resolveLocalConstant` (same-module `const` bound to a
|
|
14
|
+
string/template literal, template substitutions preserved). When it cannot resolve —
|
|
15
|
+
imported constant, concatenated/ternary expression, call result, or a language with
|
|
16
|
+
no constant-resolution capability — the query is reported as a new
|
|
17
|
+
`schema-code::unresolved-query` finding (severity `high`) instead of being silently
|
|
18
|
+
treated as absent. Reporting rather than skipping is what keeps the cross-domain
|
|
19
|
+
lifecycle rules from over-claiming on a file whose DB access is only partly visible.
|
|
20
|
+
|
|
21
|
+
The identifier-resolution path is method-gated: only SQL-carrying methods
|
|
22
|
+
(`exec`/`prepare`/`query`/`raw`/`execute`) resolve a bare-identifier argument, because
|
|
23
|
+
`batch`/`run`/`all`/`first` take a statements array or bound-parameter object — a bare
|
|
24
|
+
identifier there is not SQL and must not be reported as unresolvable. A direct
|
|
25
|
+
string/template literal is parsed for *every* method, since node-sqlite3's
|
|
26
|
+
`db.all(sql)`/`db.run(sql)` pass SQL as a literal just as D1's `db.prepare(sql)` does.
|
|
27
|
+
`reportUnresolvedQueries` defaults on and is configurable per-analyzer.
|
|
28
|
+
|
|
29
|
+
### Dynamic `import()`/`require()` now contribute import edges
|
|
30
|
+
|
|
31
|
+
`clCollectFileInfo` — the file-level reachability graph behind `unreferenced-module` —
|
|
32
|
+
indexed only static `import`/`export … from` statements, so a module reached *only* by
|
|
33
|
+
`await import('../lib/email')` looked dead. A dynamic `import('./x')` or
|
|
34
|
+
`require('./x')` with a static string argument now records an import edge, so its
|
|
35
|
+
target counts as live.
|
|
36
|
+
|
|
37
|
+
Computed-specifier decision (recorded, not silenced): a bare variable
|
|
38
|
+
(`import(someVar)`), an interpolated template (`` import(`./${name}.js`) ``), or a call
|
|
39
|
+
(`import(path.join(...))`) cannot resolve into an edge. These are reported as a new
|
|
40
|
+
`dependency-graph::unresolved-dynamic-import` finding (severity `high`) at the call
|
|
41
|
+
site — a live dependency might be missed, so `unreferenced-module` is not exhaustive
|
|
42
|
+
on that corpus. A *no-interpolation* template literal (`` import(`./x`) ``) is a
|
|
43
|
+
compile-time constant and resolves to an edge just like a quoted string.
|
|
44
|
+
|
|
45
|
+
Survey of other reference forms — verified against `clCollectFileInfo` (file-level
|
|
46
|
+
reachability, feeds `unreferenced-module`) and `clCollectFileReferences` (entity-level
|
|
47
|
+
reference set, feeds `orphaned-nodes`). Each form is handled or recorded as a gap:
|
|
48
|
+
|
|
49
|
+
- `require('./x')` — **handled**: `clDynamicImport` treats a static-string `require`
|
|
50
|
+
identically to `import()`; it records an import edge (computed → `unresolved-dynamic-import`).
|
|
51
|
+
- Re-export chains (`export {x} from './y'`, `export * from './y'`) — **handled**:
|
|
52
|
+
`clCollectFileInfo` reads the `source` field of an `export_statement` as an import edge,
|
|
53
|
+
so a barrel re-export marks its target live rather than dead.
|
|
54
|
+
- JSX usage (`<Component/>`) — **handled at the entity level**: `clCollectFileReferences`
|
|
55
|
+
collects `jsx_opening_element` / `jsx_self_closing_element` names as references, so a
|
|
56
|
+
component reached only through JSX is not orphaned. Correctly *not* a file-level edge —
|
|
57
|
+
JSX does not import; the component is in scope via a separate static import (already an
|
|
58
|
+
edge) or a same-file definition.
|
|
59
|
+
- Decorators (`@Foo`, `@Component()`) — **known gap at the entity level**: a decorator
|
|
60
|
+
does not import, so it is correctly absent from file-level reachability, but it is also
|
|
61
|
+
not collected by `clCollectFileReferences`, so a symbol referenced *only* as a decorator
|
|
62
|
+
can be misreported as orphaned. Decorator *table* extraction (`@Entity('tbl')`) is handled
|
|
63
|
+
separately by the schema analyzer (`extractDecoratorTables`); the decorator-reference gap
|
|
64
|
+
in the entity set is recorded here rather than claimed closed. No new reference form is
|
|
65
|
+
silently dropped.
|
|
66
|
+
|
|
67
|
+
### Follow-up — `unresolved-query` / `unresolved-dynamic-import` reclassified as coverage diagnostics
|
|
68
|
+
|
|
69
|
+
The two `high`-severity findings introduced above were on the wrong channel. They are
|
|
70
|
+
not defects — "the code is wrong" — they say "my visibility ends here," and every
|
|
71
|
+
severity in the findings model is blocking, so unresolvable-but-legitimate code
|
|
72
|
+
(`` import(path.join(...)) ``, SQL held in an imported constant) was gating edits it
|
|
73
|
+
could never fix. Both are moved to the diagnostics channel:
|
|
74
|
+
|
|
75
|
+
- `schema-code::unresolved-query` → `CoverageDiagnostic { analyzerName: 'schema', kind: 'unresolved-query' }`.
|
|
76
|
+
- `dependency-graph::unresolved-dynamic-import` → `CoverageDiagnostic { analyzerName: 'dependency-graph', kind: 'unresolved-dynamic-import' }`.
|
|
77
|
+
|
|
78
|
+
They land in `metadata.diagnostics`, still **visible, counted, with file + line**
|
|
79
|
+
(`details` carries the identifier/expression), rendered in the "Coverage gaps" report
|
|
80
|
+
section that leads the report, and carried through `changed --json` (whose output is now
|
|
81
|
+
a `{ violations, diagnostics }` envelope) — but they never gate. The two rules are
|
|
82
|
+
removed from the rule registry and the near-miss executor. This is a category boundary,
|
|
83
|
+
not a softening of the gate: a *finding* still says the code is wrong; a *diagnostic*
|
|
84
|
+
says the analyzer could not see.
|
|
85
|
+
|
|
86
|
+
## [3.9.10] — 2026-09-15
|
|
87
|
+
|
|
88
|
+
### The version a binary reports is now stamped at build time
|
|
89
|
+
|
|
90
|
+
`code-audit --version` (and every `toolVersion` in a report) read `package.json`
|
|
91
|
+
at runtime, so a stale build announced the source tree's version — a binary
|
|
92
|
+
running pre-3.9.4 analyzer code reported 3.9.9 and produced findings that looked
|
|
93
|
+
like eight rules reverting at once. The version is now a compile-time literal:
|
|
94
|
+
`scripts/write-version.mjs` stamps `package.json`'s version into
|
|
95
|
+
`src/version.generated.ts`, and the CLI, MCP server, audit runner, job service,
|
|
96
|
+
and installer read that. A stale binary now reports the version it actually is.
|
|
97
|
+
A new `version.spec.ts` fails the suite if a version bump is not rebuilt, so a
|
|
98
|
+
"lying binary" cannot ship.
|
|
99
|
+
|
|
100
|
+
### The plugin version pin actually fires
|
|
101
|
+
|
|
102
|
+
`assert_compatible` compared the plugin's bare semver (`3.9.9`) against the CLI's
|
|
103
|
+
full `--version` banner (`3.9.9 (sqlite: node-sqlite)`), so it could never match,
|
|
104
|
+
and it returned 0 on an empty result — a guard that can only fail, failing open.
|
|
105
|
+
That is why it never fired, and why it looked like it was working since 3.6.0.
|
|
106
|
+
The pin now extracts the semver from `--version`, compares semver-vs-semver, and
|
|
107
|
+
fails loudly (exit 1, naming both versions) on a mismatch or when either version
|
|
108
|
+
cannot be determined. The plugin cache ships no bundled `dist/` (marketplace
|
|
109
|
+
installs), so this pin is the guard for the global/PATH fallback.
|
|
110
|
+
|
|
111
|
+
### Diff detection no longer flakes on unchanged files
|
|
112
|
+
|
|
113
|
+
`detectModifiedFiles` compared a file's live mtime against a `last_modified`
|
|
114
|
+
timestamp recorded as wall clock at index time rather than the file's mtime —
|
|
115
|
+
an apples-to-oranges comparison that intermittently flagged an unchanged file as
|
|
116
|
+
modified. Indexing now stores the file's actual mtime, so the stored baseline is
|
|
117
|
+
the same value the check compares against and unchanged files round-trip cleanly.
|
|
118
|
+
|
|
119
|
+
## [3.9.9] — 2026-09-15
|
|
120
|
+
|
|
121
|
+
### Telemetry opt-in is a one-step toggle
|
|
122
|
+
|
|
123
|
+
The feedback-service opt-in required an endpoint URL, so enabling it was
|
|
124
|
+
"turn on *and* paste the URL". The client now ships a default ingest endpoint
|
|
125
|
+
(`https://code-auditor-dismissals.ben-a-hammond.workers.dev/ingest`), so the
|
|
126
|
+
`telemetry` `enable` action needs no arguments — opt-in is a one-step toggle
|
|
127
|
+
with a known destination. The endpoint remains overridable (self-hosting and
|
|
128
|
+
the `--telemetry-endpoint` flag).
|
|
129
|
+
|
|
130
|
+
### Feedback service is ingest-only
|
|
131
|
+
|
|
132
|
+
The operator-facing `/report` access layer described in 3.9.8 is withdrawn:
|
|
133
|
+
the service is write-only `/ingest`, and the data is read directly from D1 when
|
|
134
|
+
needed — no `/report`, no `REPORT_SECRET`. The access layer is not designed
|
|
135
|
+
yet; this keeps the client and service inside the ingest scope.
|
|
136
|
+
|
|
137
|
+
## [3.9.8] — 2026-09-13
|
|
138
|
+
|
|
139
|
+
### Spec 57 — Dismissals and feedback
|
|
140
|
+
|
|
141
|
+
The tool produces false positives. An agent needs a way past one, and the reason
|
|
142
|
+
it gives is the most useful signal available. A dismissal clears one finding; an
|
|
143
|
+
opt-in endpoint collects the dismissal and its reason.
|
|
144
|
+
|
|
145
|
+
**Dismissals.** `code-audit dismiss <fingerprint> --reason "…"` clears exactly
|
|
146
|
+
one finding, scoped by its fingerprint (rule + file + symbol — the same tuple the
|
|
147
|
+
baseline uses). A written reason is required; the finding clears as an *instance*,
|
|
148
|
+
never the rule everywhere (the same rule still fires elsewhere). Dismissals live
|
|
149
|
+
in a committed `.codeauditor.dismissals.json` (reviewable in a diff), are counted
|
|
150
|
+
in every report ("43 findings, 3 dismissed", never a silently reduced total), and
|
|
151
|
+
never gate. New `src/dismissals.ts` plus wiring through `auditRunner.run()`, the Go
|
|
152
|
+
polyglot branch, the gate, and all four report generators; the fingerprint is
|
|
153
|
+
surfaced in the JSON report and `changed --json` so it can be copied exactly.
|
|
154
|
+
|
|
155
|
+
**Opt-in feedback.** Dismissals can be sent to a feedback service — off by default,
|
|
156
|
+
turned on only by an explicit opt-in: the new `telemetry` MCP tool
|
|
157
|
+
(`status`/`enable`/`disable`), persisted to the user's config dir. When enabled,
|
|
158
|
+
each dismissal sends a small anonymized payload: schema version, an **anonymous
|
|
159
|
+
install ID** (a random value generated locally, never derived from the machine,
|
|
160
|
+
user, or project — it groups submissions by source without tracking anything
|
|
161
|
+
personal), tool version, rule ID, urgency, reason (verbatim), a structural AST
|
|
162
|
+
signature, and a coarse language hint. The signature is built from grammar kinds
|
|
163
|
+
only (a node's `type`, never its text), so identifiers, literals, paths, and source
|
|
164
|
+
text are structurally impossible to include. Sending is best-effort: offline or a
|
|
165
|
+
dead endpoint is silent and never blocks or fails a gate. New
|
|
166
|
+
`src/installConfig.ts`, `src/structuralSignature.ts`, `src/telemetry.ts`.
|
|
167
|
+
|
|
168
|
+
**The service.** A Cloudflare Worker + D1 in `services/` (separate repo): a flat
|
|
169
|
+
dismissals table (`install_id`, `version`, `rule_id`, `level`, `reason`,
|
|
170
|
+
`signature`, `lang`, `created_at`), write-only `/ingest` with a per-IP
|
|
171
|
+
Durable-Object rate limit (10,000/hour — a provisional ceiling a large team never
|
|
172
|
+
trips, with bot protection carrying the abuse-detection weight) and a hard size cap,
|
|
173
|
+
and an operator-gated `/report` returning most-dismissed rules + reasons grouped by
|
|
174
|
+
install ID. Deployment requires Cloudflare auth and is a flagged manual step (not
|
|
175
|
+
performed here). The payload carries a pinned `schema` version — now `2`, bumped for
|
|
176
|
+
the `install_id` field — with a pinned-shape test on each side, so a cross-repo wire
|
|
177
|
+
contract drift fails loudly instead of being silently stored.
|
|
178
|
+
|
|
179
|
+
Fix contracts: `dismissals.spec.ts` (instance-scoped positive / near-miss / guard /
|
|
180
|
+
absence), `installConfig.spec.ts` (random stable ID, opt-in default-off + round-trip),
|
|
181
|
+
`structuralSignature.spec.ts` and `telemetry.spec.ts` (the acceptance-4 boundary test
|
|
182
|
+
— a secret, a table name, and a distinctive identifier none of which enter the
|
|
183
|
+
signature or payload — plus offline safety). The service type-checks against
|
|
184
|
+
`@cloudflare/workers-types`.
|
|
185
|
+
|
|
186
|
+
## [3.9.7] — 2026-09-12
|
|
187
|
+
|
|
188
|
+
### Spec 50 — size-threshold defaults recalculated, project lint config as authority
|
|
189
|
+
|
|
190
|
+
The size-threshold rules fired on idiomatic code because their numbers were never
|
|
191
|
+
chosen deliberately — `function-length` at 50 produced 23 findings on a small
|
|
192
|
+
React project where every correctness rule was at zero. Three changes:
|
|
193
|
+
|
|
194
|
+
1. **Defaults raised to defensible numbers**, each with a written rationale
|
|
195
|
+
recorded in the rule registry (`thresholdRationale`), not just the number.
|
|
196
|
+
Headliners: `function-length` 50→200, `parameter-count` 4→6, `class-size`
|
|
197
|
+
15→20 methods / 100→150 aggregate complexity, `interface-size` 20→25,
|
|
198
|
+
`react::complexity` 10→20, and the Go size rules (`function-size` complexity
|
|
199
|
+
10→20 / params 5→6, `struct-size` 10→15, `switch-size` 5→8, `interface-size`
|
|
200
|
+
5→10). `method-complexity` (McCC 50) and `tight-coupling` (0.7) are kept, with
|
|
201
|
+
rationale recorded for why.
|
|
202
|
+
2. **Project lint config is now the authoritative threshold source.** New
|
|
203
|
+
`src/config/lintConfigReader.ts` reads the project's own ESLint config (flat
|
|
204
|
+
`eslint.config.*` or legacy `.eslintrc.*`) and maps `max-lines-per-function`,
|
|
205
|
+
`max-params`, and `complexity` onto the SOLID size thresholds; `max-depth` /
|
|
206
|
+
`max-statements` are recognized but unmapped (no equivalent), surfaced for
|
|
207
|
+
transparency. Precedence: `.codeauditor.json` > project lint config > presets >
|
|
208
|
+
defaults. Every size threshold reports its source in
|
|
209
|
+
`metadata.thresholdSources` (`project-config` / `project-lint-config` /
|
|
210
|
+
`preset:<id>` / `default`).
|
|
211
|
+
3. **Re-measured all five corpora** — every delta attributed to a default raise.
|
|
212
|
+
None of the five corpora configures a size rule in ESLint, so the lint reader
|
|
213
|
+
contributed no corpus delta (validated by the fix contract, not a corpus).
|
|
214
|
+
|
|
215
|
+
Corpus totals: recall-protocol 4,080→3,157 (−923), hhra-org 1,125→743 (−382),
|
|
216
|
+
knex 188→112 (−76), primer-css 19→16 (−3), blitz 818→721 (−97). Five survivors
|
|
217
|
+
sampled and confirmed genuine outliers: a 12-param `executePipeline`, the 675-line
|
|
218
|
+
build-editor `reducer`, knex's 191-member `QueryInterface`, hhra's 1,103-line /
|
|
219
|
+
McCC-120 `EtlPageClient`, and blitz's 1,383-line `upgradeLegacy` codemod.
|
|
220
|
+
|
|
221
|
+
Fix contract (`lintConfigReader.spec.ts`, unit + integration): positive (lint
|
|
222
|
+
`max-params` beats the default), near-miss (unrelated rules → defaults), guard
|
|
223
|
+
(`.codeauditor.json` wins over lint), absence (no config → defaults, no error).
|
|
224
|
+
|
|
5
225
|
## [3.9.6] — 2026-09-12
|
|
6
226
|
|
|
7
227
|
### Spec 56 R4 fix — `DELETE FROM` is a write, not a read
|
package/README.md
CHANGED
|
@@ -130,6 +130,24 @@ The `sql-injection-risk` rule is **disabled by default** (`off`) after recalibra
|
|
|
130
130
|
|
|
131
131
|
With `sql-injection-risk: critical` (and the rule marked `gating`), your agent's hook will block edits that introduce AST-level SQL injection patterns.
|
|
132
132
|
|
|
133
|
+
## Dismissals
|
|
134
|
+
|
|
135
|
+
Every finding is a measurement, not a verdict — but measurements are occasionally wrong. When the agent hits a **false positive** (the rule is right in general, wrong for this specific code), it can dismiss *that one instance* rather than work around it:
|
|
136
|
+
|
|
137
|
+
```bash
|
|
138
|
+
code-audit dismiss <fingerprint> --reason "generated code, not hand-written"
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
The `<fingerprint>` comes from the JSON report (every violation carries a `fingerprint` field). A **written `--reason` is required**, and the dismissal clears exactly one finding — rule + file + symbol — so the same rule still fires everywhere else. Dismissals live in a committed `.codeauditor.dismissals.json`, reviewable in a diff.
|
|
142
|
+
|
|
143
|
+
## Anonymous dismissal feedback (opt-in)
|
|
144
|
+
|
|
145
|
+
The reason an agent gives for dismissing a finding is the most useful signal for improving the rules. Code Auditor can send dismissed findings to an anonymous feedback service that collects them.
|
|
146
|
+
|
|
147
|
+
It is **off by default** and turned on only by an explicit opt-in — the `telemetry` MCP tool (`status` / `enable` / `disable`), which records the choice in your user config dir. `enable` needs no arguments: it opts in against the built-in service endpoint (overridable for self-hosting). Opting in generates an **anonymous install ID**: a random value generated locally, never derived from your machine, user, or project, used only to group submissions by source.
|
|
148
|
+
|
|
149
|
+
**What is sent** — the reason (verbatim) plus a structural AST signature (grammar kinds only, built from a node's `type` — never its text) and a coarse language hint. **What is never sent** — source code, identifiers, literals, file paths, or anything derived from your code or environment. Sending is best-effort: offline or an unreachable endpoint is silent and never blocks an edit or fails a gate.
|
|
150
|
+
|
|
133
151
|
## Style Intelligence
|
|
134
152
|
|
|
135
153
|
Code Auditor indexes every style declaration in your project — CSS, SCSS, Tailwind, inline styles, and CSS-in-JS. The styles analyzer reads global distributions and flags fragmentation that no single-file linter can see.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/reactAnalyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAIrB;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,
|
|
1
|
+
{"version":3,"file":"reactAnalyzer.d.ts","sourceRoot":"","sources":["../../src/analyzers/reactAnalyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAEL,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,mBAAmB,EACpB,MAAM,aAAa,CAAC;AAIrB;;GAEG;AACH,eAAO,MAAM,oBAAoB,EAAE,mBA4BlC,CAAC;AAEF;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,iBAAiB,EAC5B,MAAM,EAAE,mBAAmB,EAC3B,UAAU,EAAE,mBAAmB,GAC9B,cAAc,EAAE,CAkClB;AAyVD;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,GACtC,cAAc,EAAE,CA2BlB;AAkBD;;;;;;;;;;;;GAYG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,mBAAmB,EAAE,GAAG,cAAc,EAAE,CAsC5F;AAyID;;;;;;;;;;GAUG;AACH,wBAAgB,gBAAgB,CAC9B,WAAW,EAAE,mBAAmB,EAAE,EAClC,MAAM,EAAE,mBAAmB,GAC1B,cAAc,EAAE,CA4ClB"}
|
|
@@ -16,7 +16,10 @@ export const DEFAULT_REACT_CONFIG = {
|
|
|
16
16
|
requirePropTypes: false, // TypeScript provides type safety
|
|
17
17
|
requireErrorBoundaries: true,
|
|
18
18
|
checkHooksRules: true,
|
|
19
|
-
|
|
19
|
+
// Raised 2026-09-12 (size-threshold calibration) — 10 flagged ordinary
|
|
20
|
+
// components with a few conditionals (66 findings on recall-protocol, where
|
|
21
|
+
// every correctness rule is at zero). ESLint's own `complexity` default is 20.
|
|
22
|
+
maxComponentComplexity: 20,
|
|
20
23
|
// Performance
|
|
21
24
|
checkUnnecessaryRerenders: true,
|
|
22
25
|
requireMemoization: false, // Only suggest, don't require
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reactAnalyzer.js","sourceRoot":"","sources":["../../src/analyzers/reactAnalyzer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"reactAnalyzer.js","sourceRoot":"","sources":["../../src/analyzers/reactAnalyzer.ts"],"names":[],"mappings":"AAAA;;;GAGG;AASH,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAwB;IACvD,sBAAsB;IACtB,0BAA0B,EAAE,IAAI;IAChC,qBAAqB,EAAE,IAAI;IAC3B,oBAAoB,EAAE,IAAI;IAE1B,iBAAiB;IACjB,gBAAgB,EAAE,KAAK,EAAE,kCAAkC;IAC3D,sBAAsB,EAAE,IAAI;IAC5B,eAAe,EAAE,IAAI;IACrB,uEAAuE;IACvE,4EAA4E;IAC5E,+EAA+E;IAC/E,sBAAsB,EAAE,EAAE;IAE1B,cAAc;IACd,yBAAyB,EAAE,IAAI;IAC/B,kBAAkB,EAAE,KAAK,EAAE,8BAA8B;IAEzD,iBAAiB;IACjB,kBAAkB,EAAE,IAAI;IACxB,sBAAsB,EAAE,IAAI;IAC5B,eAAe,EAAE,IAAI;IAErB,qCAAqC;IACrC,eAAe,EAAE,IAAI;IACrB,gBAAgB,EAAE,CAAC;IACnB,mBAAmB,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC;CACxE,CAAC;AAEF;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAC9B,SAA4B,EAC5B,MAA2B,EAC3B,UAA+B;IAE/B,MAAM,UAAU,GAAqB,EAAE,CAAC;IAExC,UAAU,CAAC,IAAI,CAAC,GAAG,wBAAwB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAEhE,8CAA8C;IAC9C,IAAI,MAAM,CAAC,eAAe,IAAI,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5E,UAAU,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,wEAAwE;IACxE,UAAU,CAAC,IAAI,CAAC,GAAG,oBAAoB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAE5D,6EAA6E;IAC7E,8EAA8E;IAC9E,6EAA6E;IAC7E,2DAA2D;IAE3D,+BAA+B;IAC/B,IAAI,MAAM,CAAC,yBAAyB,EAAE,CAAC;QACrC,UAAU,CAAC,IAAI,CAAC,GAAG,sBAAsB,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,iCAAiC;IACjC,IAAI,MAAM,CAAC,kBAAkB,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;QACvD,UAAU,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,SAAS,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,kCAAkC;IAClC,IAAI,MAAM,CAAC,eAAe,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;QACpD,UAAU,CAAC,IAAI,CAAC,GAAG,gBAAgB,CAAC,SAAS,CAAC,CAAC,CAAC;IAClD,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,2EAA2E;AAC3E,SAAS,wBAAwB,CAC/B,SAA4B,EAC5B,MAA2B;IAE3B,IAAI,CAAC,CAAC,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,GAAG,MAAM,CAAC,sBAAsB,CAAC,EAAE,CAAC;QACpF,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,CAAC;YACN,IAAI,EAAE,SAAS,CAAC,QAAQ;YACxB,IAAI,EAAE,SAAS,CAAC,UAAU;YAC1B,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,cAAc,SAAS,CAAC,IAAI,0BAA0B,SAAS,CAAC,UAAU,GAAG;YACtF,aAAa,EAAE,SAAS,CAAC,IAAI;YAC7B,IAAI,EAAE,YAAY;YAClB,aAAa,EAAE,YAAY;YAC3B,OAAO,EAAE;gBACP,iBAAiB,EAAE,SAAS,CAAC,UAAU;gBACvC,aAAa,EAAE,MAAM,CAAC,sBAAsB;aAC7C;YACD,UAAU,EAAE,wEAAwE;SACrF,CAAC,CAAC;AACL,CAAC;AAED,2EAA2E;AAC3E,SAAS,oBAAoB,CAC3B,SAA4B,EAC5B,MAA2B;IAE3B,IAAI,CAAC,MAAM,CAAC,gBAAgB,IAAI,kBAAkB,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9D,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,CAAC;YACN,IAAI,EAAE,SAAS,CAAC,QAAQ;YACxB,IAAI,EAAE,SAAS,CAAC,UAAU;YAC1B,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,cAAc,SAAS,CAAC,IAAI,oCAAoC;YACzE,aAAa,EAAE,SAAS,CAAC,IAAI;YAC7B,IAAI,EAAE,eAAe;YACrB,aAAa,EAAE,eAAe;YAC9B,UAAU,EAAE,2DAA2D;SACxE,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,SAAS,eAAe,CAAC,SAA4B;IACnD,MAAM,UAAU,GAAqB,EAAE,CAAC;IAExC,IAAI,CAAC,SAAS,CAAC,KAAK;QAAE,OAAO,UAAU,CAAC;IAExC,+EAA+E;IAC/E,0EAA0E;IAC1E,0EAA0E;IAC1E,uEAAuE;IACvE,kDAAkD;IAClD,wCAAwC;IAExC,iDAAiD;IACjD,MAAM,kBAAkB,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CACvD,IAAI,CAAC,UAAU,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAChD,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,kBAAkB,EAAE,CAAC;QACtC,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,SAAS,CAAC,QAAQ;YACxB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,gBAAgB,IAAI,CAAC,IAAI,2BAA2B;YAC7D,aAAa,EAAE,SAAS,CAAC,IAAI;YAC7B,IAAI,EAAE,cAAc;YACpB,aAAa,EAAE,cAAc;YAC7B,OAAO,EAAE;gBACP,QAAQ,EAAE,IAAI,CAAC,IAAI;aACpB;YACD,UAAU,EAAE,iBAAiB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG;SACvF,CAAC,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,SAA4B;IACtD,yDAAyD;IACzD,IAAI,SAAS,CAAC,KAAK,IAAI,SAAS,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,IAAI,CAAC;IACd,CAAC;IAED,oEAAoE;IACpE,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,SAAS,sBAAsB,CAC7B,SAA4B,EAC5B,MAA2B;IAE3B,MAAM,UAAU,GAAqB,EAAE,CAAC;IAExC,iEAAiE;IACjE,IAAI,MAAM,CAAC,kBAAkB;QACzB,SAAS,CAAC,aAAa,KAAK,YAAY;QACxC,SAAS,CAAC,UAAU,IAAI,SAAS,CAAC,UAAU,GAAG,CAAC,EAAE,CAAC;QACrD,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,SAAS,CAAC,QAAQ;YACxB,IAAI,EAAE,SAAS,CAAC,UAAU;YAC1B,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,iCAAiC,SAAS,CAAC,IAAI,0BAA0B;YAClF,aAAa,EAAE,SAAS,CAAC,IAAI;YAC7B,IAAI,EAAE,aAAa;YACnB,aAAa,EAAE,aAAa;YAC5B,OAAO,EAAE;gBACP,UAAU,EAAE,SAAS,CAAC,UAAU;gBAChC,aAAa,EAAE,SAAS,CAAC,aAAa;aACvC;YACD,UAAU,EAAE,+DAA+D;SAC5E,CAAC,CAAC;IACL,CAAC;IAED,uDAAuD;IACvD,8EAA8E;IAC9E,4EAA4E;IAC5E,2EAA2E;IAC3E,yEAAyE;IACzE,kDAAkD;IAClD,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,MAAM,IAAI,qBAAqB,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,CAAC;QACvD,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,SAAS,CAAC,QAAQ;YACxB,IAAI,EAAE,SAAS,CAAC,UAAU;YAC1B,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,cAAc,SAAS,CAAC,IAAI,2EAA2E;YAChH,aAAa,EAAE,SAAS,CAAC,IAAI;YAC7B,IAAI,EAAE,aAAa;YACnB,aAAa,EAAE,aAAa;YAC5B,UAAU,EAAE,2DAA2D;SACxE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,SAAS,kBAAkB,CAAC,SAA4B;IACtD,MAAM,UAAU,GAAqB,EAAE,CAAC;IAExC,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,MAAM;QAAE,OAAO,UAAU,CAAC;IAE/B,2EAA2E;IAC3E,0EAA0E;IAC1E,6EAA6E;IAC7E,6EAA6E;IAC7E,2BAA2B;IAC3B,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,SAAS,CAAC,QAAQ;YACxB,IAAI,EAAE,SAAS,CAAC,UAAU;YAC1B,QAAQ,EAAE,QAAQ;YAClB,OAAO,EAAE,cAAc,SAAS,CAAC,IAAI,iDAAiD;YACtF,aAAa,EAAE,SAAS,CAAC,IAAI;YAC7B,IAAI,EAAE,eAAe;YACrB,aAAa,EAAE,eAAe;YAC9B,UAAU,EAAE,8EAA8E;SAC3F,CAAC,CAAC;IACL,CAAC;IAED,6EAA6E;IAC7E,8EAA8E;IAC9E,iDAAiD;IACjD,MAAM,sBAAsB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;IAC1D,KAAK,MAAM,OAAO,IAAI,sBAAsB,EAAE,CAAC;QAC7C,IAAI,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;YACzC,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,SAAS,CAAC,QAAQ;gBACxB,IAAI,EAAE,SAAS,CAAC,UAAU;gBAC1B,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,cAAc,SAAS,CAAC,IAAI,uCAAuC,OAAO,WAAW;gBAC9F,aAAa,EAAE,SAAS,CAAC,IAAI;gBAC7B,IAAI,EAAE,eAAe;gBACrB,aAAa,EAAE,eAAe;gBAC9B,UAAU,EAAE,iFAAiF;aAC9F,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;GAEG;AACH,SAAS,gBAAgB,CAAC,SAA4B;IACpD,MAAM,UAAU,GAAqB,EAAE,CAAC;IAExC,4EAA4E;IAC5E,sEAAsE;IACtE,yEAAyE;IACzE,MAAM,MAAM,GAAG,eAAe,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,MAAM,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QAClC,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC;QACzD,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,UAAU,CAAC,IAAI,CAAC;YACd,IAAI,EAAE,SAAS,CAAC,QAAQ;YACxB,IAAI,EAAE,SAAS,CAAC,UAAU;YAC1B,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,cAAc,SAAS,CAAC,IAAI,uCAAuC;YAC5E,aAAa,EAAE,SAAS,CAAC,IAAI;YAC7B,IAAI,EAAE,aAAa;YACnB,aAAa,EAAE,aAAa;YAC5B,UAAU,EAAE,4DAA4D;SACzE,CAAC,CAAC;IACL,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,iFAAiF;AACjF,SAAS,eAAe,CAAC,SAA4B;IACnD,OAAO,SAAS,CAAC,IAAI,IAAI,SAAS,CAAC,OAAO,IAAI,EAAE,CAAC;AACnD,CAAC;AAED;;;;GAIG;AACH,SAAS,gBAAgB,CAAC,MAAc;IACtC,MAAM,KAAK,GAAG,UAAU,CAAC;IACzB,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC7C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1E,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IAC5C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAS,mBAAmB,CAAC,MAAc,EAAE,OAAe;IAC1D,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,OAAO,KAAK,EAAE,IAAI,CAAC,CAAC;IAClD,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,aAAa,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC;QAC1E,IAAI,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;IAC3C,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;GAIG;AACH,SAAS,qBAAqB,CAAC,MAAc,EAAE,IAAY;IACzD,MAAM,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,IAAI,cAAc,EAAE,GAAG,CAAC,CAAC;IACzD,IAAI,KAA6B,CAAC;IAClC,OAAO,CAAC,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9C,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACzD,uEAAuE;QACvE,IAAI,yCAAyC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACxF,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;GAKG;AACH,SAAS,aAAa,CAAC,MAAc,EAAE,KAAa;IAClD,IAAI,CAAC,GAAG,KAAK,CAAC;IACd,IAAI,QAAQ,GAA2B,IAAI,CAAC;IAC5C,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,QAAQ,EAAE,CAAC;YACb,IAAI,EAAE,KAAK,QAAQ;gBAAE,QAAQ,GAAG,IAAI,CAAC;YACrC,CAAC,EAAE,CAAC;YACJ,SAAS;QACX,CAAC;QACD,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAAC,QAAQ,GAAG,EAAE,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAC7E,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAAC,UAAU,EAAE,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAChD,IAAI,EAAE,KAAK,GAAG,EAAE,CAAC;YAAC,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,UAAU,GAAG,CAAC,CAAC,CAAC;YAAC,CAAC,EAAE,CAAC;YAAC,SAAS;QAAC,CAAC;QAC5E,IAAI,EAAE,KAAK,GAAG,IAAI,UAAU,KAAK,CAAC;YAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QACjD,CAAC,EAAE,CAAC;IACN,CAAC;IACD,OAAO,MAAM,CAAC,MAAM,CAAC;AACvB,CAAC;AASD,iEAAiE;AACjE,SAAS,SAAS,CAChB,GAA0B,EAC1B,SAAiB,EACjB,IAAI,GAAa,EAAE;IAEnB,IAAI,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QACtC,OAAO,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;QAC/B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAC3B,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAElC,MAAM,YAAY,GAAG,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtD,IAAI,YAAY,EAAE,CAAC;QACjB,KAAK,MAAM,GAAG,IAAI,YAAY,EAAE,CAAC;YAC/B,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC;YAC1D,IAAI,KAAK,EAAE,CAAC;gBACV,OAAO,KAAK,CAAC;YACf,CAAC;QACH,CAAC;IACH,CAAC;IAED,GAAG,CAAC,cAAc,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACrC,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB,CACvC,aAAuC;IAEvC,MAAM,UAAU,GAAqB,EAAE,CAAC;IACxC,MAAM,GAAG,GAA0B;QACjC,aAAa;QACb,OAAO,EAAE,IAAI,GAAG,EAAU;QAC1B,cAAc,EAAE,IAAI,GAAG,EAAU;KAClC,CAAC;IAEF,kCAAkC;IAClC,KAAK,MAAM,CAAC,SAAS,CAAC,IAAI,aAAa,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;QACxC,IAAI,KAAK,EAAE,CAAC;YACV,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,wBAAwB;gBAC9B,QAAQ,EAAE,MAAM;gBAChB,OAAO,EAAE,iCAAiC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAC7D,IAAI,EAAE,YAAY;gBAClB,aAAa,EAAE,YAAY;gBAC3B,UAAU,EAAE,qDAAqD;aAClE,CAAC,CAAC;YAEH,qEAAqE;YACrE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;;GAIG;AACH,MAAM,6BAA6B,GAAG,IAAI,GAAG,CAAC;IAC5C,WAAW;IACX,UAAU;IACV,WAAW;IACX,UAAU;IACV,kBAAkB;IAClB,iBAAiB;IACjB,kBAAkB;IAClB,iBAAiB;CAClB,CAAC,CAAC;AAEH;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,uBAAuB,CAAC,WAAkC;IACxE,MAAM,UAAU,GAAqB,EAAE,CAAC;IAExC,4CAA4C;IAC5C,MAAM,2BAA2B,GAAG,IAAI,GAAG,EAAU,CAAC;IACtD,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;QACjC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAC1C,IAAI,SAAS,CAAC,gBAAgB,EAAE,CAAC;gBAC/B,2BAA2B,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;YAClD,CAAC;QACH,CAAC;IACH,CAAC;IAED,iEAAiE;IACjE,yEAAyE;IACzE,sEAAsE;IACtE,MAAM,0BAA0B,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,MAAM,EAAE,EAAE,CAC7D,6BAA6B,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAC7D,CAAC;IAEF,0DAA0D;IAC1D,IAAI,2BAA2B,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC;QAC1E,MAAM,eAAe,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,UAAU,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;QAErF,IAAI,eAAe,GAAG,EAAE,EAAE,CAAC,CAAC,iDAAiD;YAC3E,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,WAAW;gBACjB,IAAI,EAAE,CAAC;gBACP,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,8CAA8C;gBACvD,IAAI,EAAE,mBAAmB;gBACzB,aAAa,EAAE,mBAAmB;gBAClC,UAAU,EAAE,kFAAkF;aAC/F,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAkBD;;;;GAIG;AACH,SAAS,yBAAyB,CAChC,WAAkC,EAClC,MAA2B,EAC3B,QAAqB;IAErB,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,uDAAuD;QACvD,OAAO,yBAAyB,CAAC,WAAW,EAAE,MAAM,CAAC,YAAY,CAAC,CAAC;IACrE,CAAC;IAED,4EAA4E;IAC5E,0DAA0D;IAC1D,OAAO,oBAAoB,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;AACrD,CAAC;AAED,yFAAyF;AACzF,SAAS,yBAAyB,CAChC,WAAkC,EAClC,YAAoC;IAEpC,MAAM,UAAU,GAAG,IAAI,GAAG,EAA6B,CAAC;IAExD,KAAK,MAAM,CAAC,OAAO,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;QAClE,6DAA6D;QAC7D,IAAI,WAAW,GAAG,SAAS,CAAC;QAC5B,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;YAClE,IAAI,KAAK,EAAE,CAAC;gBAAC,WAAW,GAAG,KAAK,CAAC,QAAQ,CAAC;gBAAC,MAAM;YAAC,CAAC;QACrD,CAAC;QACD,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,WAAW,EAAE,CAAC,CAAC;IACxD,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,2FAA2F;AAC3F,SAAS,oBAAoB,CAC3B,WAAkC,EAClC,QAAqB;IAErB,MAAM,UAAU,GAAG,IAAI,GAAG,EAA6B,CAAC;IAExD,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;QACjC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAC1C,IAAI,CAAC,SAAS,CAAC,UAAU;gBAAE,SAAS;YACpC,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,SAAS,CAAC,WAAW,CAAC,MAAM,KAAK,CAAC;gBAAE,SAAS;YAE3E,qEAAqE;YACrE,MAAM,iBAAiB,GAAG,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE;gBAC1D,MAAM,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBAC/B,OAAO,SAAS,KAAK,SAAS,CAAC,WAAW,EAAE,IAAI,SAAS,KAAK,SAAS,CAAC,WAAW,EAAE,CAAC;YACxF,CAAC,CAAC,CAAC;YAEH,6DAA6D;YAC7D,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,IAAI,QAAQ,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACzE,MAAM,OAAO,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;gBACrC,gEAAgE;gBAChE,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBACzC,IAAI,CAAC,QAAQ,IAAI,SAAS,CAAC,IAAI,CAAC,MAAM,GAAG,QAAQ,CAAC,WAAW,CAAC,MAAM,EAAE,CAAC;oBACrE,UAAU,CAAC,GAAG,CAAC,OAAO,EAAE;wBACtB,WAAW,EAAE,SAAS,CAAC,IAAI;wBAC3B,WAAW,EAAE,MAAM,CAAC,QAAQ;qBAC7B,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED;;;GAGG;AACH,SAAS,uBAAuB,CAC9B,WAAkC,EAClC,QAAqB,EACrB,UAA0C;IAE1C,MAAM,cAAc,GAAG,IAAI,GAAG,EAAkB,CAAC;IACjD,MAAM,iBAAiB,GAAuB,EAAE,CAAC;IAEjD,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;QACjC,KAAK,MAAM,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAC;YAC1C,IAAI,CAAC,SAAS,CAAC,WAAW;gBAAE,SAAS;YAErC,KAAK,MAAM,KAAK,IAAI,SAAS,CAAC,WAAW,EAAE,CAAC;gBAC1C,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC;oBAAE,SAAS;gBAE7D,MAAM,OAAO,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,CAAE,CAAC;gBAEvC,0CAA0C;gBAC1C,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,CAAC,WAAW;oBACtC,SAAS,CAAC,QAAQ,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC;oBAC/C,SAAS;gBACX,CAAC;gBAED,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;gBAChE,iBAAiB,CAAC,IAAI,CAAC;oBACrB,OAAO,EAAE,KAAK;oBACd,aAAa,EAAE,SAAS,CAAC,IAAI;oBAC7B,QAAQ,EAAE,SAAS,CAAC,QAAQ;oBAC5B,IAAI,EAAE,SAAS,CAAC,UAAU,IAAI,CAAC;oBAC/B,WAAW,EAAE,OAAO,CAAC,WAAW;oBAChC,WAAW,EAAE,OAAO,CAAC,WAAW;iBACjC,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,CAAC;AAC/C,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,gBAAgB,CAC9B,WAAkC,EAClC,MAA2B;IAE3B,OAAO,cAAc,CAAC,aAAa,EAAE,GAAG,EAAE;QACxC,MAAM,UAAU,GAAqB,EAAE,CAAC;QAExC,MAAM,SAAS,GAAG,MAAM,CAAC,mBAAmB,IAAI,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;QACnG,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC;QAEpC,0EAA0E;QAC1E,MAAM,UAAU,GAAG,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC5E,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO,UAAU,CAAC;QAE7C,0EAA0E;QAC1E,MAAM,EAAE,cAAc,EAAE,iBAAiB,EAAE,GACzC,uBAAuB,CAAC,WAAW,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;QAE7D,yEAAyE;QACzE,MAAM,SAAS,GAAG,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;QAC/C,MAAM,QAAQ,GAAW,MAAM,CAAC;QAEhC,KAAK,MAAM,GAAG,IAAI,iBAAiB,EAAE,CAAC;YACpC,MAAM,KAAK,GAAG,cAAc,CAAC,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YACnD,IAAI,KAAK,GAAG,SAAS;gBAAE,SAAS;YAEhC,UAAU,CAAC,IAAI,CAAC;gBACd,IAAI,EAAE,GAAG,CAAC,QAAQ;gBAClB,IAAI,EAAE,GAAG,CAAC,IAAI;gBACd,QAAQ;gBACR,OAAO,EAAE,UAAU,GAAG,CAAC,OAAO,6BAA6B,GAAG,CAAC,WAAW,OAAO,GAAG,CAAC,WAAW,GAAG;gBACnG,aAAa,EAAE,GAAG,CAAC,aAAa;gBAChC,IAAI,EAAE,aAAa;gBACnB,aAAa,EAAE,aAAa;gBAC5B,UAAU,EAAE,gBAAgB,GAAG,CAAC,OAAO,yBAAyB,GAAG,CAAC,WAAW,aAAa;gBAC5F,UAAU,EAAE;oBACV,MAAM,EAAE,aAAa;oBACrB,OAAO,EAAE,gBAAgB,GAAG,CAAC,OAAO,QAAQ,GAAG,CAAC,aAAa,wBAAwB,GAAG,CAAC,WAAW,gBAAgB,GAAG,CAAC,WAAW,IAAI;oBACvI,OAAO,EAAE,CAAC,GAAG,CAAC,WAAW,CAAC;oBAC1B,KAAK,EAAE,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,WAAW,CAAC;oBACtC,KAAK,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC;iBAClB;aACF,CAAC,CAAC;QACL,CAAC;QAED,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -85,6 +85,14 @@ export interface RuleRegistryEntry {
|
|
|
85
85
|
* rules with no tunable threshold.
|
|
86
86
|
*/
|
|
87
87
|
thresholds: string[];
|
|
88
|
+
/**
|
|
89
|
+
* Why the thresholds are set where they are. Required whenever a rule carries a
|
|
90
|
+
* tunable size threshold — a number must never be an unexplained magic value.
|
|
91
|
+
* For a re-calibration, record the "old → new → why" so the decision is auditable
|
|
92
|
+
* (the Spec 33 failure: 50→100 / 4→6 silently dropped 660 single-responsibility
|
|
93
|
+
* findings because the change was a side effect, not a reasoned decision).
|
|
94
|
+
*/
|
|
95
|
+
thresholdRationale?: string;
|
|
88
96
|
/**
|
|
89
97
|
* Spec 37 R3 — inline valid/invalid samples for this rule. At least one
|
|
90
98
|
* valid sample must be a near-miss (syntactically close to an invalid case
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ruleRegistry.d.ts","sourceRoot":"","sources":["../../src/analyzers/ruleRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,MAAM,WAAW,iBAAiB;IAChC,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,MAAM,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC/F;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB;;;;;;OAMG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB;;;;;OAKG;IACH,OAAO,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,+FAA+F;IAC/F,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4FAA4F;IAC5F,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,8DAA8D;AAC9D,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,
|
|
1
|
+
{"version":3,"file":"ruleRegistry.d.ts","sourceRoot":"","sources":["../../src/analyzers/ruleRegistry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG;AAEH,MAAM,WAAW,iBAAiB;IAChC,4CAA4C;IAC5C,QAAQ,EAAE,MAAM,CAAC;IACjB,4DAA4D;IAC5D,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,eAAe,GAAG,MAAM,GAAG,cAAc,GAAG,QAAQ,GAAG,SAAS,CAAC;IAC/F;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB;;;;;;OAMG;IACH,UAAU,EAAE,OAAO,CAAC;IACpB;;;;OAIG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,IAAI,EAAE,MAAM,CAAC;IACb;;;;;OAKG;IACH,UAAU,EAAE,MAAM,EAAE,CAAC;IACrB;;;;;;OAMG;IACH,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B;;;;;OAKG;IACH,OAAO,EAAE,WAAW,CAAC;CACtB;AAED;;;;;;;;;GASG;AACH,MAAM,WAAW,UAAU;IACzB,+FAA+F;IAC/F,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,4FAA4F;IAC5F,UAAU,CAAC,EAAE,UAAU,CAAC;CACzB;AAED,8DAA8D;AAC9D,MAAM,WAAW,WAAW;IAC1B,KAAK,EAAE,UAAU,EAAE,CAAC;IACpB,OAAO,EAAE,UAAU,EAAE,CAAC;CACvB;AAED;;;;;;GAMG;AACH,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CA61DrE,CAAC;AAEF;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,aAAa,EAAE,SAAS,MAAM,EAEnC,CAAC;AAET;;;;;GAKG;AACH,eAAO,MAAM,qBAAqB,EAAE,SAAS,MAAM,EAMlD,CAAC;AAEF;;;GAGG;AACH,UAAU,aAAa;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,aAAa,GAAG,QAAQ,CAAC,iBAAiB,CAAC,GAAG,SAAS,CAQ/F"}
|
|
@@ -15,13 +15,14 @@ export const RULE_REGISTRY = {
|
|
|
15
15
|
message: 'Class "{name}" has {methods} methods, exceeding the maximum of {max}. Consider splitting into smaller classes.',
|
|
16
16
|
docs: 'solid/class-size',
|
|
17
17
|
thresholds: ['maxMethodsPerClass', 'classMethodsThreshold', 'classAggregateComplexity'],
|
|
18
|
+
thresholdRationale: 'A class is a god-object boundary, not a style nit. 20 methods / 150 aggregate cyclomatic complexity are where a class unambiguously holds too much. The old 15/100 flagged ordinary domain models and controllers (31 findings on knex).',
|
|
18
19
|
samples: {
|
|
19
20
|
valid: [
|
|
20
21
|
{ code: 'class Small {\n load() { return this.fetch(); }\n save() { return this.persist(); }\n}', nearMiss: true },
|
|
21
22
|
],
|
|
22
23
|
invalid: [
|
|
23
24
|
{
|
|
24
|
-
code: 'class Big {\n m1() {} m2() {} m3() {} m4() {} m5() {} m6() {} m7() {}
|
|
25
|
+
code: 'class Big {\n m1() {} m2() {} m3() {} m4() {} m5() {} m6() {} m7() {}\n m8() {} m9() {} m10() {} m11() {} m12() {} m13() {} m14() {}\n m15() {} m16() {} m17() {} m18() {} m19() {} m20() {} m21() {}\n}',
|
|
25
26
|
resolution: { action: 'extract-methods', summary: 'Extract the methods that touch only migration state into a separate class and delegate to it.', symbols: ['Big'] },
|
|
26
27
|
},
|
|
27
28
|
],
|
|
@@ -35,6 +36,7 @@ export const RULE_REGISTRY = {
|
|
|
35
36
|
message: 'Method "{name}" has cyclomatic complexity {complexity}, exceeding the maximum of {max}.',
|
|
36
37
|
docs: 'solid/method-complexity',
|
|
37
38
|
thresholds: ['maxMethodComplexity'],
|
|
39
|
+
thresholdRationale: 'McCC 50 is already a genuinely large function, not idiomatic code (33 findings on recall-protocol, all real outliers). Kept at 50 — the cyclomatic-complexity ceiling where a function cannot be held in working memory; no raise needed.',
|
|
38
40
|
samples: {
|
|
39
41
|
valid: [
|
|
40
42
|
{ code: 'function simple(x) {\n if (x > 0) return x;\n return -x;\n}', nearMiss: true },
|
|
@@ -91,13 +93,14 @@ export const RULE_REGISTRY = {
|
|
|
91
93
|
message: 'Function "{name}" has {lines} lines, exceeding the maximum of {max}. Consider breaking it down.',
|
|
92
94
|
docs: 'function-length',
|
|
93
95
|
thresholds: ['maxLinesPerMethod'],
|
|
96
|
+
thresholdRationale: '50 flagged any function over ~one screen; idiomatic handlers/setup/config builders run 50–150 lines (23 findings on a small React project with every correctness rule at zero). 200 is the working-memory ceiling where a function is unambiguously too long.',
|
|
94
97
|
samples: {
|
|
95
98
|
valid: [
|
|
96
99
|
{ code: 'function short(x) {\n const a = transform(x);\n const b = validate(a);\n return b;\n}', nearMiss: true },
|
|
97
100
|
],
|
|
98
101
|
invalid: [
|
|
99
102
|
{
|
|
100
|
-
code: 'function long(input) {\n let
|
|
103
|
+
code: 'function long(input) {\n let v1 = step1(input);\n let v2 = step2(v1);\n let v3 = step3(v2);\n let v4 = step4(v3);\n let v5 = step5(v4);\n let v6 = step6(v5);\n let v7 = step7(v6);\n let v8 = step8(v7);\n let v9 = step9(v8);\n let v10 = step10(v9);\n let v11 = step11(v10);\n let v12 = step12(v11);\n let v13 = step13(v12);\n let v14 = step14(v13);\n let v15 = step15(v14);\n let v16 = step16(v15);\n let v17 = step17(v16);\n let v18 = step18(v17);\n let v19 = step19(v18);\n let v20 = step20(v19);\n let v21 = step21(v20);\n let v22 = step22(v21);\n let v23 = step23(v22);\n let v24 = step24(v23);\n let v25 = step25(v24);\n let v26 = step26(v25);\n let v27 = step27(v26);\n let v28 = step28(v27);\n let v29 = step29(v28);\n let v30 = step30(v29);\n let v31 = step31(v30);\n let v32 = step32(v31);\n let v33 = step33(v32);\n let v34 = step34(v33);\n let v35 = step35(v34);\n let v36 = step36(v35);\n let v37 = step37(v36);\n let v38 = step38(v37);\n let v39 = step39(v38);\n let v40 = step40(v39);\n let v41 = step41(v40);\n let v42 = step42(v41);\n let v43 = step43(v42);\n let v44 = step44(v43);\n let v45 = step45(v44);\n let v46 = step46(v45);\n let v47 = step47(v46);\n let v48 = step48(v47);\n let v49 = step49(v48);\n let v50 = step50(v49);\n let v51 = step51(v50);\n let v52 = step52(v51);\n let v53 = step53(v52);\n let v54 = step54(v53);\n let v55 = step55(v54);\n let v56 = step56(v55);\n let v57 = step57(v56);\n let v58 = step58(v57);\n let v59 = step59(v58);\n let v60 = step60(v59);\n let v61 = step61(v60);\n let v62 = step62(v61);\n let v63 = step63(v62);\n let v64 = step64(v63);\n let v65 = step65(v64);\n let v66 = step66(v65);\n let v67 = step67(v66);\n let v68 = step68(v67);\n let v69 = step69(v68);\n let v70 = step70(v69);\n let v71 = step71(v70);\n let v72 = step72(v71);\n let v73 = step73(v72);\n let v74 = step74(v73);\n let v75 = step75(v74);\n let v76 = step76(v75);\n let v77 = step77(v76);\n let v78 = step78(v77);\n let v79 = step79(v78);\n let v80 = step80(v79);\n let v81 = step81(v80);\n let v82 = step82(v81);\n let v83 = step83(v82);\n let v84 = step84(v83);\n let v85 = step85(v84);\n let v86 = step86(v85);\n let v87 = step87(v86);\n let v88 = step88(v87);\n let v89 = step89(v88);\n let v90 = step90(v89);\n let v91 = step91(v90);\n let v92 = step92(v91);\n let v93 = step93(v92);\n let v94 = step94(v93);\n let v95 = step95(v94);\n let v96 = step96(v95);\n let v97 = step97(v96);\n let v98 = step98(v97);\n let v99 = step99(v98);\n let v100 = step100(v99);\n let v101 = step101(v100);\n let v102 = step102(v101);\n let v103 = step103(v102);\n let v104 = step104(v103);\n let v105 = step105(v104);\n let v106 = step106(v105);\n let v107 = step107(v106);\n let v108 = step108(v107);\n let v109 = step109(v108);\n let v110 = step110(v109);\n let v111 = step111(v110);\n let v112 = step112(v111);\n let v113 = step113(v112);\n let v114 = step114(v113);\n let v115 = step115(v114);\n let v116 = step116(v115);\n let v117 = step117(v116);\n let v118 = step118(v117);\n let v119 = step119(v118);\n let v120 = step120(v119);\n let v121 = step121(v120);\n let v122 = step122(v121);\n let v123 = step123(v122);\n let v124 = step124(v123);\n let v125 = step125(v124);\n let v126 = step126(v125);\n let v127 = step127(v126);\n let v128 = step128(v127);\n let v129 = step129(v128);\n let v130 = step130(v129);\n let v131 = step131(v130);\n let v132 = step132(v131);\n let v133 = step133(v132);\n let v134 = step134(v133);\n let v135 = step135(v134);\n let v136 = step136(v135);\n let v137 = step137(v136);\n let v138 = step138(v137);\n let v139 = step139(v138);\n let v140 = step140(v139);\n let v141 = step141(v140);\n let v142 = step142(v141);\n let v143 = step143(v142);\n let v144 = step144(v143);\n let v145 = step145(v144);\n let v146 = step146(v145);\n let v147 = step147(v146);\n let v148 = step148(v147);\n let v149 = step149(v148);\n let v150 = step150(v149);\n let v151 = step151(v150);\n let v152 = step152(v151);\n let v153 = step153(v152);\n let v154 = step154(v153);\n let v155 = step155(v154);\n let v156 = step156(v155);\n let v157 = step157(v156);\n let v158 = step158(v157);\n let v159 = step159(v158);\n let v160 = step160(v159);\n let v161 = step161(v160);\n let v162 = step162(v161);\n let v163 = step163(v162);\n let v164 = step164(v163);\n let v165 = step165(v164);\n let v166 = step166(v165);\n let v167 = step167(v166);\n let v168 = step168(v167);\n let v169 = step169(v168);\n let v170 = step170(v169);\n let v171 = step171(v170);\n let v172 = step172(v171);\n let v173 = step173(v172);\n let v174 = step174(v173);\n let v175 = step175(v174);\n let v176 = step176(v175);\n let v177 = step177(v176);\n let v178 = step178(v177);\n let v179 = step179(v178);\n let v180 = step180(v179);\n let v181 = step181(v180);\n let v182 = step182(v181);\n let v183 = step183(v182);\n let v184 = step184(v183);\n let v185 = step185(v184);\n let v186 = step186(v185);\n let v187 = step187(v186);\n let v188 = step188(v187);\n let v189 = step189(v188);\n let v190 = step190(v189);\n let v191 = step191(v190);\n let v192 = step192(v191);\n let v193 = step193(v192);\n let v194 = step194(v193);\n let v195 = step195(v194);\n let v196 = step196(v195);\n let v197 = step197(v196);\n let v198 = step198(v197);\n let v199 = step199(v198);\n let v200 = step200(v199);\n let v201 = step201(v200);\n let v202 = step202(v201);\n let v203 = step203(v202);\n let v204 = step204(v203);\n let v205 = step205(v204);\n return v205;\n}',
|
|
101
104
|
resolution: { action: 'break-down-function', summary: 'Break "long" into smaller functions, extracting named helper blocks for each pipeline stage.', symbols: ['long'] },
|
|
102
105
|
},
|
|
103
106
|
],
|
|
@@ -111,14 +114,15 @@ export const RULE_REGISTRY = {
|
|
|
111
114
|
message: 'Function "{name}" has {params} parameters, exceeding the maximum of {max}. Consider using an options object.',
|
|
112
115
|
docs: 'parameter-count',
|
|
113
116
|
thresholds: ['maxParametersPerMethod'],
|
|
117
|
+
thresholdRationale: '4 flagged ordinary dependency-injected constructors and config functions. 6 is where an options object is clearly warranted.',
|
|
114
118
|
samples: {
|
|
115
119
|
valid: [
|
|
116
120
|
{ code: 'function combine(a, b, c, d) {\n return a + b + c + d;\n}', nearMiss: true },
|
|
117
121
|
],
|
|
118
122
|
invalid: [
|
|
119
123
|
{
|
|
120
|
-
code: 'function combine(a, b, c, d, e) {\n return a + b + c + d + e;\n}',
|
|
121
|
-
resolution: { action: 'bundle-params', summary: 'Bundle the
|
|
124
|
+
code: 'function combine(a, b, c, d, e, f, g) {\n return a + b + c + d + e + f + g;\n}',
|
|
125
|
+
resolution: { action: 'bundle-params', summary: 'Bundle the 7 parameters of "combine" into an options object.', symbols: ['a', 'b', 'c', 'd', 'e', 'f', 'g'] },
|
|
122
126
|
},
|
|
123
127
|
],
|
|
124
128
|
},
|
|
@@ -130,13 +134,14 @@ export const RULE_REGISTRY = {
|
|
|
130
134
|
resolvable: false,
|
|
131
135
|
message: 'Interface "{name}" has many members.',
|
|
132
136
|
docs: 'interface-size',
|
|
133
|
-
thresholds: [],
|
|
137
|
+
thresholds: ['maxInterfaceMembers'],
|
|
138
|
+
thresholdRationale: '20 flagged a legitimate service/repository interface; 25 method-bearing members is where splitting into smaller, more focused interfaces is warranted.',
|
|
134
139
|
samples: {
|
|
135
140
|
valid: [
|
|
136
141
|
{ code: 'interface Printer {\n print(doc) { return doc; }\n}', nearMiss: true },
|
|
137
142
|
],
|
|
138
143
|
invalid: [
|
|
139
|
-
{ code: 'interface Machine {\n
|
|
144
|
+
{ code: 'interface Machine {\n op1() {}\n op2() {}\n op3() {}\n op4() {}\n op5() {}\n op6() {}\n op7() {}\n op8() {}\n op9() {}\n op10() {}\n op11() {}\n op12() {}\n op13() {}\n op14() {}\n op15() {}\n op16() {}\n op17() {}\n op18() {}\n op19() {}\n op20() {}\n op21() {}\n op22() {}\n op23() {}\n op24() {}\n op25() {}\n op26() {}\n}' },
|
|
140
145
|
],
|
|
141
146
|
},
|
|
142
147
|
},
|
|
@@ -154,6 +159,7 @@ export const RULE_REGISTRY = {
|
|
|
154
159
|
message: 'Switch or type switch has many case clauses.',
|
|
155
160
|
docs: 'switch-size',
|
|
156
161
|
thresholds: [],
|
|
162
|
+
thresholdRationale: 'Go analyzer: 5 flagged idiomatic dispatch switches (HTTP status / command maps). 8 cases suggests a table-driven lookup. Hardcoded in the Go analyzer (not a TS config key).',
|
|
157
163
|
samples: {
|
|
158
164
|
valid: [
|
|
159
165
|
{
|
|
@@ -162,7 +168,7 @@ export const RULE_REGISTRY = {
|
|
|
162
168
|
},
|
|
163
169
|
],
|
|
164
170
|
invalid: [
|
|
165
|
-
{ code: 'package main\n\nfunc dispatch(x int) int {\n\tswitch x {\n\tcase 1:\n\t\treturn 1\n\tcase 2:\n\t\treturn 2\n\tcase 3:\n\t\treturn 3\n\tcase 4:\n\t\treturn 4\n\tcase 5:\n\t\treturn 5\n\tcase 6:\n\t\treturn 6\n\tcase 7:\n\t\treturn 7\n\t}\n\treturn 0\n}' },
|
|
171
|
+
{ code: 'package main\n\nfunc dispatch(x int) int {\n\tswitch x {\n\tcase 1:\n\t\treturn 1\n\tcase 2:\n\t\treturn 2\n\tcase 3:\n\t\treturn 3\n\tcase 4:\n\t\treturn 4\n\tcase 5:\n\t\treturn 5\n\tcase 6:\n\t\treturn 6\n\tcase 7:\n\t\treturn 7\n\tcase 8:\n\t\treturn 8\n\tcase 9:\n\t\treturn 9\n\t}\n\treturn 0\n}' },
|
|
166
172
|
],
|
|
167
173
|
},
|
|
168
174
|
},
|
|
@@ -174,6 +180,7 @@ export const RULE_REGISTRY = {
|
|
|
174
180
|
message: 'Function has many parameters, multiple returns, and high complexity.',
|
|
175
181
|
docs: 'function-size',
|
|
176
182
|
thresholds: [],
|
|
183
|
+
thresholdRationale: 'Go analyzer: AND-combined (complexity > 20 && returns > 2 && params > 6) — a function large in every dimension. Complexity raised 10→20 and params 5→6 to align with the TS ceilings while staying conservative (all three must exceed).',
|
|
177
184
|
samples: {
|
|
178
185
|
valid: [
|
|
179
186
|
{
|
|
@@ -182,7 +189,7 @@ export const RULE_REGISTRY = {
|
|
|
182
189
|
},
|
|
183
190
|
],
|
|
184
191
|
invalid: [
|
|
185
|
-
{ code: 'package main\n\nfunc doEverything(a int, b int, c int, d int, e int, f int) (int, string, bool) {\n\tx := 0\n\tif a >
|
|
192
|
+
{ code: 'package main\n\nfunc doEverything(a int, b int, c int, d int, e int, f int, g int) (int, string, bool) {\n\tx := 0\n\tif b > 1 { x++ }\n\tif c > 2 { x++ }\n\tif d > 3 { x++ }\n\tif e > 4 { x++ }\n\tif f > 5 { x++ }\n\tif g > 6 { x++ }\n\tif a > 7 { x++ }\n\tif b > 8 { x++ }\n\tif c > 9 { x++ }\n\tif d > 10 { x++ }\n\tif e > 11 { x++ }\n\tif f > 12 { x++ }\n\tif g > 13 { x++ }\n\tif a > 14 { x++ }\n\tif b > 15 { x++ }\n\tif c > 16 { x++ }\n\tif d > 17 { x++ }\n\tif e > 18 { x++ }\n\tif f > 19 { x++ }\n\tif g > 20 { x++ }\n\treturn x, "ok", true\n}' },
|
|
186
193
|
],
|
|
187
194
|
},
|
|
188
195
|
},
|
|
@@ -194,6 +201,7 @@ export const RULE_REGISTRY = {
|
|
|
194
201
|
message: 'Struct has many fields.',
|
|
195
202
|
docs: 'struct-size',
|
|
196
203
|
thresholds: [],
|
|
204
|
+
thresholdRationale: 'Go analyzer: 10 flagged ordinary config/model structs; 15 fields is a god-struct. Hardcoded in the Go analyzer (not a TS config key).',
|
|
197
205
|
samples: {
|
|
198
206
|
valid: [
|
|
199
207
|
{
|
|
@@ -202,7 +210,7 @@ export const RULE_REGISTRY = {
|
|
|
202
210
|
},
|
|
203
211
|
],
|
|
204
212
|
invalid: [
|
|
205
|
-
{ code: 'package main\n\ntype Everything struct {\n\tField1 string\n\tField2 string\n\tField3 string\n\tField4 int\n\tField5 int\n\tField6 int\n\tField7 string\n\tField8 string\n\tField9 int\n\tField10 string\n\tField11 string\n}' },
|
|
213
|
+
{ code: 'package main\n\ntype Everything struct {\n\tField1 string\n\tField2 string\n\tField3 string\n\tField4 int\n\tField5 int\n\tField6 int\n\tField7 string\n\tField8 string\n\tField9 int\n\tField10 string\n\tField11 string\n\tField12 int\n\tField13 int\n\tField14 string\n\tField15 string\n\tField16 int\n}' },
|
|
206
214
|
],
|
|
207
215
|
},
|
|
208
216
|
},
|
|
@@ -985,6 +993,13 @@ export const RULE_REGISTRY = {
|
|
|
985
993
|
],
|
|
986
994
|
},
|
|
987
995
|
},
|
|
996
|
+
// Spec 58 R1 — DB-call SQL held in an unresolvable identifier (imported
|
|
997
|
+
// constant, computed/concatenated expression, call result) is no longer a
|
|
998
|
+
// violation rule. It moved to the coverage-diagnostics channel
|
|
999
|
+
// (`CoverageDiagnostic`, kind `unresolved-query`) — surfaced in the report
|
|
1000
|
+
// with file+line, never blocking. The registry entry is removed so
|
|
1001
|
+
// `buildCoverageReport` doesn't classify it `clean` (which would assert the
|
|
1002
|
+
// tool checked something it no longer checks as a finding).
|
|
988
1003
|
// ── react (reactAnalyzer) ───────────────────────────────────────────────
|
|
989
1004
|
'hooks-naming': {
|
|
990
1005
|
analyzer: 'react',
|
|
@@ -1010,7 +1025,8 @@ export const RULE_REGISTRY = {
|
|
|
1010
1025
|
resolvable: false,
|
|
1011
1026
|
message: 'React component "{name}" has complexity {complexity}, exceeding the maximum.',
|
|
1012
1027
|
docs: 'complexity',
|
|
1013
|
-
thresholds: [],
|
|
1028
|
+
thresholds: ['maxComponentComplexity'],
|
|
1029
|
+
thresholdRationale: '10 flagged ordinary components with a few conditionals (66 findings on recall-protocol). ESLint\'s own `complexity` default is 20; a component with 20 branches is genuinely complex.',
|
|
1014
1030
|
samples: {
|
|
1015
1031
|
valid: [
|
|
1016
1032
|
{ code: 'function Simple({ x }) {\n return <div>{x}</div>;\n}', nearMiss: true },
|
|
@@ -1395,6 +1411,7 @@ export const RULE_REGISTRY = {
|
|
|
1395
1411
|
message: 'Tight coupling detected between {a} and {b}.',
|
|
1396
1412
|
docs: 'tight-coupling',
|
|
1397
1413
|
thresholds: [],
|
|
1414
|
+
thresholdRationale: 'Cohesion (internal edges / incident edges) > 0.7 — 70% of a cluster\'s edges staying internal is genuinely tight. A density ratio, not a "size" number; fires once per corpus. Kept at 0.7.',
|
|
1398
1415
|
samples: {
|
|
1399
1416
|
valid: [
|
|
1400
1417
|
{ code: 'import { one } from "./m";', nearMiss: true },
|
|
@@ -1506,6 +1523,11 @@ export const RULE_REGISTRY = {
|
|
|
1506
1523
|
],
|
|
1507
1524
|
},
|
|
1508
1525
|
},
|
|
1526
|
+
// Spec 58 R2 — a dynamic import()/require() with a computed (non-static)
|
|
1527
|
+
// specifier is no longer a violation rule. It moved to the coverage-
|
|
1528
|
+
// diagnostics channel (`CoverageDiagnostic`, kind `unresolved-dynamic-import`)
|
|
1529
|
+
// — surfaced with file+line, never blocking. Removed from the registry so
|
|
1530
|
+
// `buildCoverageReport` doesn't flip it to a false `clean`.
|
|
1509
1531
|
// ── styles (UniversalStylesAnalyzer) ─────────────────────────────────────
|
|
1510
1532
|
'styles/value-drift': {
|
|
1511
1533
|
analyzer: 'styles',
|