code-auditor-mcp 4.0.0 ā 4.0.2
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 +80 -0
- package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.d.ts.map +1 -1
- package/dist/__tests__/fixtures/spec-52/item-05-upsert-forms.d.ts +4 -4
- package/dist/__tests__/fixtures/spec-52/item-05-upsert-forms.d.ts.map +1 -1
- package/dist/analyzers/analyzerUtils.d.ts.map +1 -1
- package/dist/analyzers/analyzerUtils.js +2 -2
- package/dist/analyzers/analyzerUtils.js.map +1 -1
- package/dist/analyzers/applicability.d.ts +13 -0
- package/dist/analyzers/applicability.d.ts.map +1 -1
- package/dist/analyzers/applicability.js +1 -1
- package/dist/analyzers/applicability.js.map +1 -1
- package/dist/analyzers/cross-language/APIContractAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js +3 -3
- package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
- package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +1 -1
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +28 -7
- package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
- package/dist/analyzers/documentationAnalyzer.js +5 -5
- package/dist/analyzers/documentationAnalyzer.js.map +1 -1
- package/dist/analyzers/orm/adapterRegistry.d.ts.map +1 -1
- package/dist/analyzers/orm/drizzleAdapter.d.ts.map +1 -1
- package/dist/analyzers/orm/prismaAdapter.d.ts.map +1 -1
- package/dist/analyzers/provenance.d.ts +10 -1
- package/dist/analyzers/provenance.d.ts.map +1 -1
- package/dist/analyzers/provenance.js +138 -1
- package/dist/analyzers/provenance.js.map +1 -1
- package/dist/analyzers/reactAnalyzer.js +8 -8
- package/dist/analyzers/reactAnalyzer.js.map +1 -1
- package/dist/analyzers/ruleRegistry.js +2 -2
- package/dist/analyzers/ruleRegistry.js.map +1 -1
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts +2 -2
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +7 -7
- package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +4 -4
- package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js +10 -10
- package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +283 -39
- package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +7 -7
- package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +18 -0
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +57 -11
- package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +1 -0
- package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/UniversalSecretsAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js +66 -31
- package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
- package/dist/analyzers/universal/schema/codeAnalysis.d.ts +21 -21
- package/dist/analyzers/universal/schema/codeAnalysis.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/codeAnalysis.js +199 -45
- package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -1
- package/dist/analyzers/universal/schema/config.d.ts +6 -6
- package/dist/analyzers/universal/schema/config.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/jsonSchema.js +1 -1
- package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -1
- package/dist/analyzers/universal/schema/types.d.ts +10 -0
- package/dist/analyzers/universal/schema/types.d.ts.map +1 -1
- package/dist/analyzers/universal/schema/violations.d.ts +1 -1
- package/dist/analyzers/universal/schema/violations.d.ts.map +1 -1
- package/dist/auditRouter.js +2 -2
- package/dist/auditRouter.js.map +1 -1
- package/dist/auditRunner.d.ts +1 -1
- package/dist/auditRunner.d.ts.map +1 -1
- package/dist/auditRunner.js +46 -13
- package/dist/auditRunner.js.map +1 -1
- package/dist/churn/churnExtractor.js.map +1 -1
- package/dist/cli.js +93 -28
- package/dist/cli.js.map +1 -1
- package/dist/codeIndexDB.d.ts.map +1 -1
- package/dist/codeIndexDB.js +19 -3
- package/dist/codeIndexDB.js.map +1 -1
- package/dist/codeIndexService.d.ts.map +1 -1
- package/dist/codeIndexService.js.map +1 -1
- package/dist/componentScanner.js.map +1 -1
- package/dist/config/configLoader.js +1 -1
- package/dist/config/configLoader.js.map +1 -1
- package/dist/config/defaults.d.ts +2 -2
- package/dist/config/defaults.d.ts.map +1 -1
- package/dist/config/defaults.js +10 -3
- package/dist/config/defaults.js.map +1 -1
- package/dist/constants.d.ts +1 -1
- package/dist/conventions/conventionMiner.js.map +1 -1
- package/dist/coverage/lcovParser.js.map +1 -1
- package/dist/daemon/args.js.map +1 -1
- package/dist/daemon/core.d.ts.map +1 -1
- package/dist/daemon/core.js +18 -9
- package/dist/daemon/core.js.map +1 -1
- package/dist/daemon/lspServer.d.ts.map +1 -1
- package/dist/daemon/lspServer.js +1 -1
- package/dist/daemon/lspServer.js.map +1 -1
- package/dist/daemon/main.js.map +1 -1
- package/dist/daemon/resolve.js.map +1 -1
- package/dist/daemon/socketServer.d.ts.map +1 -1
- package/dist/enforcement/gate.js +2 -2
- package/dist/functionScanner.d.ts.map +1 -1
- package/dist/generators/AWSQConfigGenerator.d.ts.map +1 -1
- package/dist/generators/AiderConfigGenerator.d.ts.map +1 -1
- package/dist/generators/BaseConfigGenerator.d.ts.map +1 -1
- package/dist/generators/BaseConfigGenerator.js.map +1 -1
- package/dist/generators/ClaudeConfigGenerator.d.ts.map +1 -1
- package/dist/generators/ClineConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CodeiumConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CodexConfigGenerator.d.ts.map +1 -1
- package/dist/generators/ConfigGeneratorFactory.d.ts.map +1 -1
- package/dist/generators/ConfigGeneratorFactory.js.map +1 -1
- package/dist/generators/ContinueConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CopilotConfigGenerator.d.ts.map +1 -1
- package/dist/generators/CursorConfigGenerator.d.ts.map +1 -1
- package/dist/generators/GeminiConfigGenerator.d.ts.map +1 -1
- package/dist/generators/JetBrainsConfigGenerator.d.ts.map +1 -1
- package/dist/generators/VSCodeConfigGenerator.d.ts.map +1 -1
- package/dist/generators/ZCodeConfigGenerator.d.ts.map +1 -1
- package/dist/graph/importClassification.d.ts +46 -8
- package/dist/graph/importClassification.d.ts.map +1 -1
- package/dist/graph/importClassification.js +207 -35
- package/dist/graph/importClassification.js.map +1 -1
- package/dist/graph/outputFormatter.js.map +1 -1
- package/dist/hooks/codex.d.ts.map +1 -1
- package/dist/hooks/codex.js +1 -1
- package/dist/hooks/codex.js.map +1 -1
- package/dist/hooks/core.d.ts +1 -1
- package/dist/hooks/core.d.ts.map +1 -1
- package/dist/hooks/core.js +4 -4
- package/dist/hooks/core.js.map +1 -1
- package/dist/hooks/cursor.d.ts.map +1 -1
- package/dist/hooks/cursor.js +2 -2
- package/dist/hooks/cursor.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/installer.js.map +1 -1
- package/dist/invariants/invariant-rules.schema.json +1 -1
- package/dist/invariants/ruleEngine.js.map +1 -1
- package/dist/invariants/ruleValidator.js +1 -1
- package/dist/invariants/ruleValidator.js.map +1 -1
- package/dist/invariants/types.d.ts +1 -1
- package/dist/invariants/types.d.ts.map +1 -1
- package/dist/languages/LanguageOrchestrator.d.ts +2 -2
- package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
- package/dist/languages/LanguageOrchestrator.js.map +1 -1
- package/dist/languages/LanguageRegistry.d.ts.map +1 -1
- package/dist/languages/RuntimeManager.d.ts.map +1 -1
- package/dist/languages/RuntimeManager.js +2 -2
- package/dist/languages/RuntimeManager.js.map +1 -1
- package/dist/languages/UniversalAnalyzer.d.ts.map +1 -1
- package/dist/languages/UniversalAnalyzer.js.map +1 -1
- package/dist/languages/adapterBridge.js.map +1 -1
- package/dist/languages/go/GoAdapter.d.ts.map +1 -1
- package/dist/languages/go/GoAdapter.js.map +1 -1
- package/dist/languages/go/analyzer +0 -0
- package/dist/languages/go/analyzer-src/analyzer.go +3 -3
- package/dist/languages/go/analyzer-src/solid.go +5 -5
- package/dist/languages/goBinary.js.map +1 -1
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.d.ts.map +1 -1
- package/dist/languages/tree-sitter/TreeSitterCssAdapter.js.map +1 -1
- package/dist/languages/tree-sitter/converter.js.map +1 -1
- package/dist/languages/tree-sitter/parser.js.map +1 -1
- package/dist/languages/types.d.ts +15 -0
- package/dist/languages/types.d.ts.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts +11 -0
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.d.ts.map +1 -1
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js +34 -0
- package/dist/languages/typescript/TreeSitterTypeScriptAdapter.js.map +1 -1
- package/dist/ledger.js +1 -1
- package/dist/ledger.js.map +1 -1
- package/dist/mcp-tools/projectTasks.d.ts +37 -37
- package/dist/mcp-tools/projectTasks.js +2 -2
- package/dist/mcp-tools/projectTasks.js.map +1 -1
- package/dist/mcp-tools/whitelistTools.d.ts +17 -17
- package/dist/mcp-tools/whitelistTools.d.ts.map +1 -1
- package/dist/mcp-tools/workflowGuide.js +3 -3
- package/dist/mcp-tools/workflowGuide.js.map +1 -1
- package/dist/mcp-tools-shared.d.ts.map +1 -1
- package/dist/mcp-tools-shared.js +13 -13
- package/dist/mcp-tools-shared.js.map +1 -1
- package/dist/mcp-ui-simple.js +6 -6
- package/dist/mcp-ui-simple.js.map +1 -1
- package/dist/mcp.js +14 -14
- package/dist/mcp.js.map +1 -1
- package/dist/mcpAuditJobs.js +7 -7
- package/dist/mcpAuditJobs.js.map +1 -1
- package/dist/mcpAutoIndex.js +1 -1
- package/dist/mcpAutoIndex.js.map +1 -1
- package/dist/mcpToolErrors.d.ts.map +1 -1
- package/dist/mcpToolErrors.js.map +1 -1
- package/dist/native-bootstrap.js.map +1 -1
- package/dist/nextFile.d.ts +2 -2
- package/dist/nextFile.d.ts.map +1 -1
- package/dist/nextFile.js +3 -3
- package/dist/nextFile.js.map +1 -1
- package/dist/nextFileIncremental.d.ts +9 -2
- package/dist/nextFileIncremental.d.ts.map +1 -1
- package/dist/nextFileIncremental.js +41 -23
- package/dist/nextFileIncremental.js.map +1 -1
- package/dist/pipeline.d.ts +2 -2
- package/dist/pipeline.d.ts.map +1 -1
- package/dist/pipeline.js +45 -0
- package/dist/pipeline.js.map +1 -1
- package/dist/pipelineAdapters.d.ts +39 -2
- package/dist/pipelineAdapters.d.ts.map +1 -1
- package/dist/pipelineAdapters.js +230 -29
- package/dist/pipelineAdapters.js.map +1 -1
- package/dist/reporting/csvReportGenerator.d.ts.map +1 -1
- package/dist/reporting/csvReportGenerator.js +6 -6
- package/dist/reporting/csvReportGenerator.js.map +1 -1
- package/dist/reporting/htmlReportGenerator.d.ts.map +1 -1
- package/dist/reporting/htmlReportGenerator.js +11 -11
- package/dist/reporting/htmlReportGenerator.js.map +1 -1
- package/dist/reporting/jsonReportGenerator.d.ts.map +1 -1
- package/dist/reporting/jsonReportGenerator.js +1 -1
- package/dist/reporting/jsonReportGenerator.js.map +1 -1
- package/dist/reporting/reportGenerator.d.ts.map +1 -1
- package/dist/reporting/sarifReportGenerator.d.ts.map +1 -1
- package/dist/reporting/sarifReportGenerator.js +1 -1
- package/dist/reporting/sarifReportGenerator.js.map +1 -1
- package/dist/reporting/sizeDistribution.d.ts +17 -0
- package/dist/reporting/sizeDistribution.d.ts.map +1 -0
- package/dist/reporting/sizeDistribution.js +93 -0
- package/dist/reporting/sizeDistribution.js.map +1 -0
- package/dist/scripts/benchmarkWorkers.js +1 -1
- package/dist/scripts/benchmarkWorkers.js.map +1 -1
- package/dist/search/QueryParser.d.ts.map +1 -1
- package/dist/search/QueryParser.js.map +1 -1
- package/dist/services/CodeMapGenerator.d.ts.map +1 -1
- package/dist/services/CodeMapGenerator.js.map +1 -1
- package/dist/services/ProjectTaskRepository.d.ts.map +1 -1
- package/dist/services/ProjectTaskRepository.js.map +1 -1
- package/dist/services/auditJobService.js.map +1 -1
- package/dist/services/fileAccounting.d.ts.map +1 -1
- package/dist/services/projectTaskHelpers.js.map +1 -1
- package/dist/services/whitelistService.d.ts.map +1 -1
- package/dist/sqlite/betterSqlite3.d.ts.map +1 -1
- package/dist/sqlite/betterSqlite3.js.map +1 -1
- package/dist/sqlite/nodeSqlite.d.ts.map +1 -1
- package/dist/sqlite/nodeSqlite.js.map +1 -1
- package/dist/structuralSignature.js.map +1 -1
- package/dist/styles/styleExtractor.js.map +1 -1
- package/dist/styles/styleIndexer.js.map +1 -1
- package/dist/styles/tailwindConfigLoader.js.map +1 -1
- package/dist/styles/tailwindProbe.d.ts.map +1 -1
- package/dist/styles/tailwindUtilityExpander.d.ts.map +1 -1
- package/dist/styles/tailwindUtilityExpander.js.map +1 -1
- package/dist/telemetry.d.ts +1 -1
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js.map +1 -1
- package/dist/tool-registry.d.ts.map +1 -1
- package/dist/types/crossLanguage.d.ts +1 -1
- package/dist/types/crossLanguage.d.ts.map +1 -1
- package/dist/types.d.ts +99 -5
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +3 -3
- package/dist/types.js.map +1 -1
- package/dist/ui/InteractivePrompts.d.ts.map +1 -1
- package/dist/ui/InteractivePrompts.js.map +1 -1
- package/dist/utils/componentPatterns.js.map +1 -1
- package/dist/utils/fileDiscovery.js.map +1 -1
- package/dist/utils/jsDocParser.js.map +1 -1
- package/dist/version.generated.d.ts +1 -1
- package/dist/version.generated.js +1 -1
- package/dist/workers/auditWorker.js.map +1 -1
- package/package.json +4 -3
- package/plugin/.claude-plugin/plugin.json +1 -1
- package/plugin/skills/code-auditor/SKILL-RULE-KINDS.md +7 -7
- package/plugin/skills/code-auditor/SKILL.md +9 -9
- package/server.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"churnExtractor.js","sourceRoot":"","sources":["../../src/churn/churnExtractor.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAa7B,MAAM,CAAC,MAAM,oBAAoB,GAAgB;IAC/C,iBAAiB,EAAE,EAAE;CACtB,CAAC;AAEF;;;;;;;;GAQG;AACH,MAAM,UAAU,YAAY,CAC1B,KAAU,EACV,UAAkB,EAClB,
|
|
1
|
+
{"version":3,"file":"churnExtractor.js","sourceRoot":"","sources":["../../src/churn/churnExtractor.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -30,10 +30,12 @@ import { rankFilesByPriority, orderFindingsWithinFile } from './nextFile.js';
|
|
|
30
30
|
import { runNextFile } from './nextFileIncremental.js';
|
|
31
31
|
import { describeSqliteBackend } from './sqlite/driver.js';
|
|
32
32
|
const program = new Command();
|
|
33
|
-
// Legacy severity names that were renamed
|
|
34
|
-
//
|
|
35
|
-
//
|
|
36
|
-
|
|
33
|
+
// Legacy severity names that were renamed off Spec-54's "advisory" back to "high"
|
|
34
|
+
// (Spec-54's third tier rendered as "advisory", which read as optional ā the very
|
|
35
|
+
// word shape the rename was meant to eliminate ā so it is now "high").
|
|
36
|
+
// `--fail-on advisory` must fail loudly and name the new tier, not emit a generic
|
|
37
|
+
// "must be one of" list that leaves the user guessing what `advisory` became.
|
|
38
|
+
const LEGACY_SEVERITY_NAMES = { advisory: 'high' };
|
|
37
39
|
// Spec 44 R4 ā file accounting summary line + `--explain-skipped` breakdown.
|
|
38
40
|
// The full per-reason file lists live in the JSON report (`metadata.fileAccounting`);
|
|
39
41
|
// the CLI preview is bounded to the first ~20 files per reason.
|
|
@@ -97,7 +99,7 @@ program
|
|
|
97
99
|
.option('--fail-on <severity>', 'Exit code 2 when violations at or above this severity exist')
|
|
98
100
|
.option('--full', 'Show full violation inventory (overrides default delta view when baseline exists)')
|
|
99
101
|
.option('--include-baseline', 'Evaluate baseline-known violations in --fail-on checks')
|
|
100
|
-
.option('--fail-on-regression', 'Exit code 2 when total
|
|
102
|
+
.option('--fail-on-regression', 'Exit code 2 when total high debt exceeds the baseline snapshot')
|
|
101
103
|
.option('--preset <id>', 'Apply a shareable preset (repeatable)', (v, prev) => prev.concat([v]), [])
|
|
102
104
|
.option('--detach', 'Run the audit in a detached background process and print the job ID')
|
|
103
105
|
.option('--partition-strategy <strategy>', 'Partition strategy for detached runs: none, auto, or top-level')
|
|
@@ -116,7 +118,7 @@ program
|
|
|
116
118
|
try {
|
|
117
119
|
await initParsers();
|
|
118
120
|
// Validate --fail-on severity
|
|
119
|
-
const validSeverities = ['critical', 'severe', '
|
|
121
|
+
const validSeverities = ['critical', 'severe', 'high'];
|
|
120
122
|
const failOnSeverity = options.failOn;
|
|
121
123
|
if (failOnSeverity && !validSeverities.includes(failOnSeverity)) {
|
|
122
124
|
const renamed = LEGACY_SEVERITY_NAMES[failOnSeverity];
|
|
@@ -147,6 +149,18 @@ program
|
|
|
147
149
|
// subtracted from it ("43 findings, 3 dismissed").
|
|
148
150
|
const dismissedCount = result.summary.dismissed ?? 0;
|
|
149
151
|
const dismissedSuffix = dismissedCount > 0 ? `, ${dismissedCount} dismissed` : '';
|
|
152
|
+
// Spec 36 R4 ā a path-profile-excluded finding reports at its real
|
|
153
|
+
// severity but never gates. When any finding is gate-excluded, surface
|
|
154
|
+
// the gating count next to the total so a clean exit doesn't read as
|
|
155
|
+
// "0 findings" beside a non-zero critical count (e.g. knex: 38 critical,
|
|
156
|
+
// all test-dir, exit 0). The excluded total still reads in full ā the
|
|
157
|
+
// distinction is gating vs. reporting, never subtraction.
|
|
158
|
+
const gateExcludedCount = violations.filter((v) => v.gateExcluded).length;
|
|
159
|
+
const gatingCount = (severity) => violations.filter((v) => v.severity === severity && !v.gateExcluded && !v.dismissed).length;
|
|
160
|
+
const findingsSuffix = `${dismissedSuffix}${gateExcludedCount > 0 ? ` (${gateExcludedCount.toLocaleString()} excluded from gate)` : ''}`;
|
|
161
|
+
const summaryLine = (label, total, severity) => gateExcludedCount > 0
|
|
162
|
+
? `${label}: ${total} (${gatingCount(severity)} gating)`
|
|
163
|
+
: `${label}: ${total}`;
|
|
150
164
|
// āā Coverage panel leads the report (Spec 47 R2) āāāāāāāāāāāāā
|
|
151
165
|
// A diagnostic report opens with what was measured before it lists any
|
|
152
166
|
// readings, so a zero-reading report can't be mistaken for a clean tree.
|
|
@@ -166,7 +180,7 @@ program
|
|
|
166
180
|
// not "the code is wrong". They lead with counts, then per-occurrence
|
|
167
181
|
// file:line ā visible and counted, never blocking (they never reach the
|
|
168
182
|
// gate). Rendered alongside the coverage panel that leads the report.
|
|
169
|
-
const coverageDiagnostics = (result.metadata?.diagnostics ?? []).filter((d) => d.kind === 'unresolved-query' || d.kind === 'unresolved-dynamic-import');
|
|
183
|
+
const coverageDiagnostics = (result.metadata?.diagnostics ?? []).filter((d) => d.kind === 'unresolved-query' || d.kind === 'unresolved-dynamic-import' || d.kind === 'undefined-class-not-found');
|
|
170
184
|
if (coverageDiagnostics.length > 0) {
|
|
171
185
|
const byKind = {};
|
|
172
186
|
for (const d of coverageDiagnostics)
|
|
@@ -183,6 +197,47 @@ program
|
|
|
183
197
|
console.log(chalk.gray(` ⦠and ${coverageDiagnostics.length - 20} more`));
|
|
184
198
|
}
|
|
185
199
|
}
|
|
200
|
+
// āā Spec 60 R1 ā test coverage (reporting, not detection) āāāāā
|
|
201
|
+
// Classifies every non-test module as tested / untested-live /
|
|
202
|
+
// untested-dead off the file-level import edges. The dead count is
|
|
203
|
+
// post-entry-point-exception, with the drop attributed.
|
|
204
|
+
const testCoverage = result.metadata?.testCoverage;
|
|
205
|
+
if (testCoverage) {
|
|
206
|
+
const pct = testCoverage.total > 0
|
|
207
|
+
? ((testCoverage.tested / testCoverage.total) * 100).toFixed(1)
|
|
208
|
+
: '0.0';
|
|
209
|
+
let line = `tested ${testCoverage.tested}/${testCoverage.total} (${pct}%)` +
|
|
210
|
+
` Ā· untested-live ${testCoverage.untestedLive}` +
|
|
211
|
+
` Ā· untested-dead ${testCoverage.untestedDead}`;
|
|
212
|
+
if (testCoverage.deadDrop > 0) {
|
|
213
|
+
line += ` (was ${testCoverage.deadPreException} pre-exception; ā${testCoverage.deadDrop} entry points exempted)`;
|
|
214
|
+
}
|
|
215
|
+
console.log(chalk.gray(`āā Test coverage āā ${line}`));
|
|
216
|
+
}
|
|
217
|
+
// āā Spec 60 R2 ā size distributions (median / p95 / max) āāāāāā
|
|
218
|
+
const sizeDistributions = result.metadata?.sizeDistributions;
|
|
219
|
+
if (sizeDistributions && sizeDistributions.length > 0) {
|
|
220
|
+
console.log(chalk.gray(`āā Size distributions āā`));
|
|
221
|
+
for (const d of sizeDistributions) {
|
|
222
|
+
const fmt = (n) => Number.isInteger(n) ? String(n) : n.toFixed(1);
|
|
223
|
+
const tail = d.maxEntry
|
|
224
|
+
? ` (${d.maxEntry.name}${d.maxEntry.fileType ? ` Ā· ${d.maxEntry.fileType}` : ''} Ā· ${d.maxEntry.entityType})`
|
|
225
|
+
: '';
|
|
226
|
+
const pop = d.population ? `${d.population}, n=${d.count}` : `n=${d.count}`;
|
|
227
|
+
console.log(chalk.gray(` ${d.measure} [${pop}]: median ${fmt(d.median)} Ā· p95 ${fmt(d.p95)} Ā· max ${fmt(d.max)}${tail}`));
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
// āā Spec 60 R3 ā dead-and-duplicated clusters āāāāāāāāāāāāāāāāā
|
|
231
|
+
const deadClusters = result.metadata?.deadClusters;
|
|
232
|
+
if (deadClusters && deadClusters.length > 0) {
|
|
233
|
+
console.log(chalk.gray(`āā Dead-and-duplicated āā ${deadClusters.length} clusters`));
|
|
234
|
+
for (const c of deadClusters.slice(0, 10)) {
|
|
235
|
+
console.log(chalk.gray(` ${c.count} Ć ${c.basename}`));
|
|
236
|
+
}
|
|
237
|
+
if (deadClusters.length > 10) {
|
|
238
|
+
console.log(chalk.gray(` ⦠and ${deadClusters.length - 10} more clusters`));
|
|
239
|
+
}
|
|
240
|
+
}
|
|
186
241
|
// āā Delta output (Spec 18 R2) āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
187
242
|
if (baseline && !options.full) {
|
|
188
243
|
const newViolations = violations.filter((v) => v.new === true);
|
|
@@ -245,19 +300,19 @@ program
|
|
|
245
300
|
}
|
|
246
301
|
else if (!baseline) {
|
|
247
302
|
// No baseline: current behavior + hint
|
|
248
|
-
console.log(`\nFound ${result.summary.totalViolations} findings${
|
|
249
|
-
console.log(
|
|
250
|
-
console.log(
|
|
251
|
-
console.log(
|
|
303
|
+
console.log(`\nFound ${result.summary.totalViolations} findings${findingsSuffix}`);
|
|
304
|
+
console.log(summaryLine('Critical', result.summary.criticalIssues, 'critical'));
|
|
305
|
+
console.log(summaryLine('Severe', result.summary.severe, 'severe'));
|
|
306
|
+
console.log(summaryLine('High', result.summary.high, 'high'));
|
|
252
307
|
console.log(chalk.gray(`\nEvery reading is a defect ā severity is urgency, the order to act.`));
|
|
253
308
|
console.log(chalk.gray(`\nš” Run ${chalk.cyan('code-audit baseline')} to adopt the ratchet and track changes over time.`));
|
|
254
309
|
}
|
|
255
310
|
else {
|
|
256
311
|
// --full with baseline: full itemized inventory (current behavior)
|
|
257
|
-
console.log(`\nFound ${result.summary.totalViolations} findings${
|
|
258
|
-
console.log(
|
|
259
|
-
console.log(
|
|
260
|
-
console.log(
|
|
312
|
+
console.log(`\nFound ${result.summary.totalViolations} findings${findingsSuffix}`);
|
|
313
|
+
console.log(summaryLine('Critical', result.summary.criticalIssues, 'critical'));
|
|
314
|
+
console.log(summaryLine('Severe', result.summary.severe, 'severe'));
|
|
315
|
+
console.log(summaryLine('High', result.summary.high, 'high'));
|
|
261
316
|
console.log(chalk.gray(`\nEvery reading is a defect ā severity is urgency, the order to act.`));
|
|
262
317
|
}
|
|
263
318
|
// Spec 44 R4 ā file accounting: analyzed/dropped totals + optional breakdown.
|
|
@@ -373,7 +428,7 @@ program
|
|
|
373
428
|
console.log(chalk.green(`\nReport written to ${reportPath}`));
|
|
374
429
|
}
|
|
375
430
|
// āā Fail-on logic (Spec 18 R3) āāāāāāāāāāāāāāāāāāāāāāāāāāāāāāā
|
|
376
|
-
// --fail-on-regression: compare total
|
|
431
|
+
// --fail-on-regression: compare total high debt to baseline snapshot
|
|
377
432
|
if (baseline && options.failOnRegression) {
|
|
378
433
|
const currentDebt = violations.filter((v) => v.new || v.new === false).length;
|
|
379
434
|
const snapshotDebt = baseline.previousKnownCount ?? 0;
|
|
@@ -408,12 +463,18 @@ program
|
|
|
408
463
|
const evaluableViolations = (baseline && !options.includeBaseline)
|
|
409
464
|
? violations.filter((v) => v.new || v.analyzer === 'invariants')
|
|
410
465
|
: violations;
|
|
411
|
-
const severityOrder = ['critical', 'severe', '
|
|
466
|
+
const severityOrder = ['critical', 'severe', 'high'];
|
|
412
467
|
const failIndex = severityOrder.indexOf(failOnSeverity);
|
|
413
468
|
const hasAtOrAbove = evaluableViolations.some((v) => {
|
|
414
469
|
// Spec 57 ā a dismissed finding never blocks the gate.
|
|
415
470
|
if (v.dismissed)
|
|
416
471
|
return false;
|
|
472
|
+
// Spec 36 R4 ā a finding from a path-profile-excluded file (e.g. a
|
|
473
|
+
// test/script under "scripts-and-tests") never blocks the gate,
|
|
474
|
+
// whatever its severity. The file is doing its job; a hardcoded
|
|
475
|
+
// connection string in a stress-test script is not a defect to block on.
|
|
476
|
+
if (v.gateExcluded)
|
|
477
|
+
return false;
|
|
417
478
|
const vIndex = severityOrder.indexOf(v.severity);
|
|
418
479
|
return vIndex >= 0 && vIndex <= failIndex;
|
|
419
480
|
});
|
|
@@ -507,7 +568,7 @@ program
|
|
|
507
568
|
// agent-facing before/after count (Spec 45 A2) and the exit code agree on
|
|
508
569
|
// the same number. Every registered rule participates (R1); enforcement is
|
|
509
570
|
// not diff-scoped (R4). Spec 54: the blocking set is the fixed all-three
|
|
510
|
-
// {critical, severe,
|
|
571
|
+
// {critical, severe, high} ā every finding is a defect and every finding
|
|
511
572
|
// blocks; there is no configurable gate.
|
|
512
573
|
const { blocking, resolutionGaps } = computeGatingDecision(violations, BLOCKING_SEVERITIES);
|
|
513
574
|
// JSON output
|
|
@@ -698,7 +759,7 @@ async function buildChangedResultFromDiagnostics(violations, projectRoot) {
|
|
|
698
759
|
}
|
|
699
760
|
// Self-audit gate (Spec 33 Item 15 + Spec 44 remediation). Runs the full
|
|
700
761
|
// analyzer pipeline over the tool's own production source and asserts zero
|
|
701
|
-
// *blocking* (critical/severe/
|
|
762
|
+
// *blocking* (critical/severe/high) findings in the self-audit scope ā the same
|
|
702
763
|
// scope + severity contract as scripts/verify-self.mjs, but callable from the
|
|
703
764
|
// shipped CLI so the edit-time plugin hook can enforce it. `verify:self` (the
|
|
704
765
|
// release gate) stays authoritative; this command is its per-edit sibling.
|
|
@@ -731,11 +792,11 @@ program
|
|
|
731
792
|
.option('--json', 'Output violations as machine-readable JSON to stdout')
|
|
732
793
|
.option('--stdin', 'Read file paths from stdin (one per line)')
|
|
733
794
|
.option('-p, --path <projectPath>', 'Project root path', process.cwd())
|
|
734
|
-
.option('--fail-on <severity>', 'Blocking severity floor: critical, severe, or
|
|
795
|
+
.option('--fail-on <severity>', 'Blocking severity floor: critical, severe, or high', 'high')
|
|
735
796
|
.action(async (paths, options) => {
|
|
736
797
|
try {
|
|
737
798
|
await initParsers();
|
|
738
|
-
const validSeverities = ['critical', 'severe', '
|
|
799
|
+
const validSeverities = ['critical', 'severe', 'high'];
|
|
739
800
|
const failOnSeverity = options.failOn;
|
|
740
801
|
if (!validSeverities.includes(failOnSeverity)) {
|
|
741
802
|
const renamed = LEGACY_SEVERITY_NAMES[failOnSeverity];
|
|
@@ -773,7 +834,7 @@ program
|
|
|
773
834
|
});
|
|
774
835
|
const result = await runner.run();
|
|
775
836
|
const violations = Object.values(result.analyzerResults).flatMap((r) => r.violations || []);
|
|
776
|
-
const severityOrder = ['critical', 'severe', '
|
|
837
|
+
const severityOrder = ['critical', 'severe', 'high'];
|
|
777
838
|
const failIndex = severityOrder.indexOf(failOnSeverity);
|
|
778
839
|
const blocking = violations.filter((v) => {
|
|
779
840
|
if (!isSelfAuditInScope(v.file ?? ''))
|
|
@@ -890,7 +951,7 @@ function printNextFile(violations, summary, projectDir, json) {
|
|
|
890
951
|
return;
|
|
891
952
|
}
|
|
892
953
|
const top = ranked[0];
|
|
893
|
-
// Every issue on the file, ordered critical ā severe ā
|
|
954
|
+
// Every issue on the file, ordered critical ā severe ā high.
|
|
894
955
|
const ordered = orderFindingsWithinFile(top.violations);
|
|
895
956
|
const relativize = (filePath) => {
|
|
896
957
|
if (!filePath)
|
|
@@ -922,6 +983,10 @@ function printNextFile(violations, summary, projectDir, json) {
|
|
|
922
983
|
enclosingSymbol: v.symbol || v.enclosingFunction || '',
|
|
923
984
|
suggestion: v.suggestion || '',
|
|
924
985
|
details: v.details || '',
|
|
986
|
+
// Structured next action ā the full report (`audit --json`) carries this
|
|
987
|
+
// as `resolution`; next-file was dropping it, leaving an agent with an
|
|
988
|
+
// empty `suggestion`/`details` and no actionable guidance (defect #49).
|
|
989
|
+
resolution: v.resolution ?? null,
|
|
925
990
|
...(v.new !== undefined && { new: v.new }),
|
|
926
991
|
})),
|
|
927
992
|
};
|
|
@@ -1946,7 +2011,7 @@ tasksCmd
|
|
|
1946
2011
|
.command('from-audit')
|
|
1947
2012
|
.description('Populate tasks from audit violations')
|
|
1948
2013
|
.option('--auditJobId <id>', 'Specific audit result ID')
|
|
1949
|
-
.option('--severities <severities>', 'Comma-separated severities (critical,severe,
|
|
2014
|
+
.option('--severities <severities>', 'Comma-separated severities (critical,severe,high)', 'critical,severe,high')
|
|
1950
2015
|
.option('--json', 'Output as JSON')
|
|
1951
2016
|
.action(async (options) => {
|
|
1952
2017
|
try {
|
|
@@ -2376,7 +2441,7 @@ async function runDetachedAudit(options) {
|
|
|
2376
2441
|
});
|
|
2377
2442
|
const defaultsJson = JSON.stringify({
|
|
2378
2443
|
defaultAnalyzers: DETACHED_DEFAULT_ANALYZERS,
|
|
2379
|
-
defaultMinSeverity: '
|
|
2444
|
+
defaultMinSeverity: 'high',
|
|
2380
2445
|
defaultGenerateCodeMap: false,
|
|
2381
2446
|
});
|
|
2382
2447
|
patchLedgerRun(db.rawDb, job.jobId, { stderrLog: logPath });
|
|
@@ -2457,7 +2522,7 @@ program
|
|
|
2457
2522
|
.option('--rule <rule>', 'Filter by rule id')
|
|
2458
2523
|
.option('--analyzer <analyzer>', 'Filter by analyzer')
|
|
2459
2524
|
.option('--file <file>', 'Filter by file path (substring match)')
|
|
2460
|
-
.option('--severity <severity>', 'Filter by severity (critical|severe|
|
|
2525
|
+
.option('--severity <severity>', 'Filter by severity (critical|severe|high)')
|
|
2461
2526
|
.option('--state [state]', 'Query coverage by state (fired|clean|notApplicable|cannot-fire|unassessed); omit value for all')
|
|
2462
2527
|
.option('--count', 'Group findings by analyzer/rule with counts')
|
|
2463
2528
|
.option('--limit <n>', 'Max findings to return (0 = unbounded)', '50')
|
|
@@ -3553,9 +3618,9 @@ async function buildRulesInteractively() {
|
|
|
3553
3618
|
choices: [
|
|
3554
3619
|
{ name: chalk.red('Critical ā exploitable or broken now'), value: 'critical' },
|
|
3555
3620
|
{ name: chalk.yellow('Severe ā wrong, and it will surface'), value: 'severe' },
|
|
3556
|
-
{ name: chalk.blue('
|
|
3621
|
+
{ name: chalk.blue('High ā correct but off-convention'), value: 'high' },
|
|
3557
3622
|
],
|
|
3558
|
-
default: '
|
|
3623
|
+
default: 'high',
|
|
3559
3624
|
},
|
|
3560
3625
|
message: {
|
|
3561
3626
|
type: 'input',
|