code-auditor-mcp 3.9.0 โ†’ 3.9.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.
Files changed (252) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/CHANGELOG.md +95 -0
  3. package/README.md +1 -0
  4. package/dist/__tests__/fixtures/spec-52/item-01-prepare-in-loop.d.ts +14 -0
  5. package/dist/__tests__/fixtures/spec-52/item-01-prepare-in-loop.d.ts.map +1 -0
  6. package/dist/__tests__/fixtures/spec-52/item-01-prepare-in-loop.js +16 -0
  7. package/dist/__tests__/fixtures/spec-52/item-01-prepare-in-loop.js.map +1 -0
  8. package/dist/__tests__/fixtures/spec-52/item-02-prepare-bind-accumulate-batch.d.ts +15 -0
  9. package/dist/__tests__/fixtures/spec-52/item-02-prepare-bind-accumulate-batch.d.ts.map +1 -0
  10. package/dist/__tests__/fixtures/spec-52/item-02-prepare-bind-accumulate-batch.js +17 -0
  11. package/dist/__tests__/fixtures/spec-52/item-02-prepare-bind-accumulate-batch.js.map +1 -0
  12. package/dist/__tests__/fixtures/spec-52/item-03-exec-in-loop.d.ts +14 -0
  13. package/dist/__tests__/fixtures/spec-52/item-03-exec-in-loop.d.ts.map +1 -0
  14. package/dist/__tests__/fixtures/spec-52/item-03-exec-in-loop.js +13 -0
  15. package/dist/__tests__/fixtures/spec-52/item-03-exec-in-loop.js.map +1 -0
  16. package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.d.ts +24 -0
  17. package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.d.ts.map +1 -0
  18. package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.js +19 -0
  19. package/dist/__tests__/fixtures/spec-52/item-04-storage-sql-exec-in-loop.js.map +1 -0
  20. package/dist/__tests__/fixtures/spec-52/item-05-upsert-forms.d.ts +19 -0
  21. package/dist/__tests__/fixtures/spec-52/item-05-upsert-forms.d.ts.map +1 -0
  22. package/dist/__tests__/fixtures/spec-52/item-05-upsert-forms.js +19 -0
  23. package/dist/__tests__/fixtures/spec-52/item-05-upsert-forms.js.map +1 -0
  24. package/dist/__tests__/fixtures/spec-52/item-06-chained-prepare-run-in-loop.d.ts +17 -0
  25. package/dist/__tests__/fixtures/spec-52/item-06-chained-prepare-run-in-loop.d.ts.map +1 -0
  26. package/dist/__tests__/fixtures/spec-52/item-06-chained-prepare-run-in-loop.js +19 -0
  27. package/dist/__tests__/fixtures/spec-52/item-06-chained-prepare-run-in-loop.js.map +1 -0
  28. package/dist/__tests__/fixtures/spec-52/item-07-chained-prepare-bind-first-in-loop.d.ts +25 -0
  29. package/dist/__tests__/fixtures/spec-52/item-07-chained-prepare-bind-first-in-loop.d.ts.map +1 -0
  30. package/dist/__tests__/fixtures/spec-52/item-07-chained-prepare-bind-first-in-loop.js +21 -0
  31. package/dist/__tests__/fixtures/spec-52/item-07-chained-prepare-bind-first-in-loop.js.map +1 -0
  32. package/dist/__tests__/fixtures/spec-52/item-08-promise-all-of-statements-in-loop.d.ts +15 -0
  33. package/dist/__tests__/fixtures/spec-52/item-08-promise-all-of-statements-in-loop.d.ts.map +1 -0
  34. package/dist/__tests__/fixtures/spec-52/item-08-promise-all-of-statements-in-loop.js +19 -0
  35. package/dist/__tests__/fixtures/spec-52/item-08-promise-all-of-statements-in-loop.js.map +1 -0
  36. package/dist/__tests__/fixtures/spec-52/item-09-promise-all-map-of-statements-in-loop.d.ts +14 -0
  37. package/dist/__tests__/fixtures/spec-52/item-09-promise-all-map-of-statements-in-loop.d.ts.map +1 -0
  38. package/dist/__tests__/fixtures/spec-52/item-09-promise-all-map-of-statements-in-loop.js +14 -0
  39. package/dist/__tests__/fixtures/spec-52/item-09-promise-all-map-of-statements-in-loop.js.map +1 -0
  40. package/dist/__tests__/fixtures/spec-52/item-10-promise-all-map-of-eager-all-in-loop.d.ts +15 -0
  41. package/dist/__tests__/fixtures/spec-52/item-10-promise-all-map-of-eager-all-in-loop.d.ts.map +1 -0
  42. package/dist/__tests__/fixtures/spec-52/item-10-promise-all-map-of-eager-all-in-loop.js +16 -0
  43. package/dist/__tests__/fixtures/spec-52/item-10-promise-all-map-of-eager-all-in-loop.js.map +1 -0
  44. package/dist/analyzers/analyzerUtils.js +2 -2
  45. package/dist/analyzers/analyzerUtils.js.map +1 -1
  46. package/dist/analyzers/applicability.d.ts +38 -0
  47. package/dist/analyzers/applicability.d.ts.map +1 -1
  48. package/dist/analyzers/applicability.js +55 -0
  49. package/dist/analyzers/applicability.js.map +1 -1
  50. package/dist/analyzers/cross-language/APIContractAnalyzer.js +5 -5
  51. package/dist/analyzers/cross-language/APIContractAnalyzer.js.map +1 -1
  52. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts +1 -1
  53. package/dist/analyzers/cross-language/DependencyGraphBuilder.d.ts.map +1 -1
  54. package/dist/analyzers/cross-language/DependencyGraphBuilder.js +7 -7
  55. package/dist/analyzers/cross-language/DependencyGraphBuilder.js.map +1 -1
  56. package/dist/analyzers/cross-language/SchemaValidator.d.ts +11 -0
  57. package/dist/analyzers/cross-language/SchemaValidator.d.ts.map +1 -1
  58. package/dist/analyzers/cross-language/SchemaValidator.js +35 -59
  59. package/dist/analyzers/cross-language/SchemaValidator.js.map +1 -1
  60. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts +3 -2
  61. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.d.ts.map +1 -1
  62. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js +9 -8
  63. package/dist/analyzers/crossDomain/CrossDomainAnalyzer.js.map +1 -1
  64. package/dist/analyzers/documentationAnalyzer.js +5 -5
  65. package/dist/analyzers/documentationAnalyzer.js.map +1 -1
  66. package/dist/analyzers/invariantsAnalyzer.js +1 -1
  67. package/dist/analyzers/invariantsAnalyzer.js.map +1 -1
  68. package/dist/analyzers/reactAnalyzer.d.ts +1 -1
  69. package/dist/analyzers/reactAnalyzer.js +13 -13
  70. package/dist/analyzers/reactAnalyzer.js.map +1 -1
  71. package/dist/analyzers/ruleRegistry.d.ts +3 -4
  72. package/dist/analyzers/ruleRegistry.d.ts.map +1 -1
  73. package/dist/analyzers/ruleRegistry.js.map +1 -1
  74. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts +2 -2
  75. package/dist/analyzers/universal/UniversalConventionsAnalyzer.d.ts.map +1 -1
  76. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js +7 -7
  77. package/dist/analyzers/universal/UniversalConventionsAnalyzer.js.map +1 -1
  78. package/dist/analyzers/universal/UniversalDRYAnalyzer.d.ts +6 -6
  79. package/dist/analyzers/universal/UniversalDRYAnalyzer.js +12 -12
  80. package/dist/analyzers/universal/UniversalDRYAnalyzer.js.map +1 -1
  81. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts +7 -0
  82. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.d.ts.map +1 -1
  83. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js +118 -12
  84. package/dist/analyzers/universal/UniversalDataAccessAnalyzer.js.map +1 -1
  85. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.d.ts +2 -2
  86. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js +8 -8
  87. package/dist/analyzers/universal/UniversalDocumentationAnalyzer.js.map +1 -1
  88. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts +9 -2
  89. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.d.ts.map +1 -1
  90. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js +77 -15
  91. package/dist/analyzers/universal/UniversalSOLIDAnalyzer.js.map +1 -1
  92. package/dist/analyzers/universal/UniversalSchemaAnalyzer.d.ts +1 -1
  93. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js +2 -2
  94. package/dist/analyzers/universal/UniversalSchemaAnalyzer.js.map +1 -1
  95. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts +1 -1
  96. package/dist/analyzers/universal/UniversalStylesAnalyzer.d.ts.map +1 -1
  97. package/dist/analyzers/universal/UniversalStylesAnalyzer.js +12 -24
  98. package/dist/analyzers/universal/UniversalStylesAnalyzer.js.map +1 -1
  99. package/dist/analyzers/universal/schema/codeAnalysis.d.ts +19 -5
  100. package/dist/analyzers/universal/schema/codeAnalysis.d.ts.map +1 -1
  101. package/dist/analyzers/universal/schema/codeAnalysis.js +42 -19
  102. package/dist/analyzers/universal/schema/codeAnalysis.js.map +1 -1
  103. package/dist/analyzers/universal/schema/discovery.js +1 -1
  104. package/dist/analyzers/universal/schema/discovery.js.map +1 -1
  105. package/dist/analyzers/universal/schema/jsonSchema.js +19 -19
  106. package/dist/analyzers/universal/schema/jsonSchema.js.map +1 -1
  107. package/dist/analyzers/universal/schema/violations.d.ts +1 -1
  108. package/dist/analyzers/universal/schema/violations.d.ts.map +1 -1
  109. package/dist/auditRouter.d.ts.map +1 -1
  110. package/dist/auditRouter.js +4 -6
  111. package/dist/auditRouter.js.map +1 -1
  112. package/dist/auditRunner.d.ts.map +1 -1
  113. package/dist/auditRunner.js +11 -12
  114. package/dist/auditRunner.js.map +1 -1
  115. package/dist/cli.js +42 -80
  116. package/dist/cli.js.map +1 -1
  117. package/dist/config/configLoader.d.ts.map +1 -1
  118. package/dist/config/configLoader.js +1 -16
  119. package/dist/config/configLoader.js.map +1 -1
  120. package/dist/config/defaults.d.ts +1 -8
  121. package/dist/config/defaults.d.ts.map +1 -1
  122. package/dist/config/defaults.js +8 -31
  123. package/dist/config/defaults.js.map +1 -1
  124. package/dist/config/effectiveConfig.d.ts +4 -4
  125. package/dist/config/effectiveConfig.js +4 -4
  126. package/dist/daemon/lspServer.js +2 -2
  127. package/dist/daemon/lspServer.js.map +1 -1
  128. package/dist/enforcement/gate.d.ts +1 -1
  129. package/dist/enforcement/gate.d.ts.map +1 -1
  130. package/dist/enforcement/gate.js +10 -9
  131. package/dist/enforcement/gate.js.map +1 -1
  132. package/dist/generators/AWSQConfigGenerator.js +1 -1
  133. package/dist/generators/AWSQConfigGenerator.js.map +1 -1
  134. package/dist/generators/AiderConfigGenerator.js +1 -1
  135. package/dist/generators/AiderConfigGenerator.js.map +1 -1
  136. package/dist/generators/ClaudeConfigGenerator.js +1 -1
  137. package/dist/generators/ClaudeConfigGenerator.js.map +1 -1
  138. package/dist/generators/ClineConfigGenerator.js +1 -1
  139. package/dist/generators/ClineConfigGenerator.js.map +1 -1
  140. package/dist/generators/CodeiumConfigGenerator.js +1 -1
  141. package/dist/generators/CodeiumConfigGenerator.js.map +1 -1
  142. package/dist/generators/CodexConfigGenerator.js +1 -1
  143. package/dist/generators/CodexConfigGenerator.js.map +1 -1
  144. package/dist/generators/ConfigGeneratorFactory.d.ts.map +1 -1
  145. package/dist/generators/ConfigGeneratorFactory.js +2 -0
  146. package/dist/generators/ConfigGeneratorFactory.js.map +1 -1
  147. package/dist/generators/ContinueConfigGenerator.js +1 -1
  148. package/dist/generators/CopilotConfigGenerator.js +1 -1
  149. package/dist/generators/CopilotConfigGenerator.js.map +1 -1
  150. package/dist/generators/CursorConfigGenerator.js +1 -1
  151. package/dist/generators/CursorConfigGenerator.js.map +1 -1
  152. package/dist/generators/GeminiConfigGenerator.js +2 -2
  153. package/dist/generators/GeminiConfigGenerator.js.map +1 -1
  154. package/dist/generators/JetBrainsConfigGenerator.js +1 -1
  155. package/dist/generators/JetBrainsConfigGenerator.js.map +1 -1
  156. package/dist/generators/VSCodeConfigGenerator.js +1 -1
  157. package/dist/generators/VSCodeConfigGenerator.js.map +1 -1
  158. package/dist/generators/ZCodeConfigGenerator.d.ts +21 -0
  159. package/dist/generators/ZCodeConfigGenerator.d.ts.map +1 -0
  160. package/dist/generators/ZCodeConfigGenerator.js +64 -0
  161. package/dist/generators/ZCodeConfigGenerator.js.map +1 -0
  162. package/dist/generators/index.d.ts +3 -2
  163. package/dist/generators/index.d.ts.map +1 -1
  164. package/dist/generators/index.js +3 -2
  165. package/dist/generators/index.js.map +1 -1
  166. package/dist/hooks/codex.d.ts +2 -2
  167. package/dist/hooks/codex.d.ts.map +1 -1
  168. package/dist/hooks/codex.js +22 -37
  169. package/dist/hooks/codex.js.map +1 -1
  170. package/dist/hooks/core.d.ts +2 -2
  171. package/dist/hooks/core.d.ts.map +1 -1
  172. package/dist/hooks/core.js +6 -6
  173. package/dist/hooks/core.js.map +1 -1
  174. package/dist/hooks/cursor.d.ts +1 -1
  175. package/dist/hooks/cursor.d.ts.map +1 -1
  176. package/dist/hooks/cursor.js +18 -37
  177. package/dist/hooks/cursor.js.map +1 -1
  178. package/dist/installer.d.ts.map +1 -1
  179. package/dist/installer.js +8 -0
  180. package/dist/installer.js.map +1 -1
  181. package/dist/invariants/invariant-rules.schema.json +1 -1
  182. package/dist/invariants/ruleValidator.js +1 -1
  183. package/dist/invariants/ruleValidator.js.map +1 -1
  184. package/dist/invariants/types.d.ts +1 -1
  185. package/dist/invariants/types.d.ts.map +1 -1
  186. package/dist/languages/LanguageOrchestrator.d.ts +2 -19
  187. package/dist/languages/LanguageOrchestrator.d.ts.map +1 -1
  188. package/dist/languages/LanguageOrchestrator.js +23 -50
  189. package/dist/languages/LanguageOrchestrator.js.map +1 -1
  190. package/dist/languages/RuntimeManager.js +2 -2
  191. package/dist/languages/RuntimeManager.js.map +1 -1
  192. package/dist/languages/UniversalAnalyzer.d.ts +2 -13
  193. package/dist/languages/UniversalAnalyzer.d.ts.map +1 -1
  194. package/dist/languages/UniversalAnalyzer.js +2 -23
  195. package/dist/languages/UniversalAnalyzer.js.map +1 -1
  196. package/dist/languages/go/analyzer +0 -0
  197. package/dist/languages/go/analyzer-src/analyzer.go +8 -8
  198. package/dist/languages/go/analyzer-src/solid.go +6 -6
  199. package/dist/ledger.js +1 -1
  200. package/dist/ledger.js.map +1 -1
  201. package/dist/mcp-tools/projectTasks.d.ts.map +1 -1
  202. package/dist/mcp-tools/projectTasks.js +4 -5
  203. package/dist/mcp-tools/projectTasks.js.map +1 -1
  204. package/dist/mcp-tools/whitelistTools.d.ts +1 -1
  205. package/dist/mcp-tools/workflowGuide.js +3 -3
  206. package/dist/mcp-tools/workflowGuide.js.map +1 -1
  207. package/dist/mcp-tools-shared.d.ts.map +1 -1
  208. package/dist/mcp-tools-shared.js +22 -21
  209. package/dist/mcp-tools-shared.js.map +1 -1
  210. package/dist/mcp-ui-simple.js +15 -15
  211. package/dist/mcp-ui-simple.js.map +1 -1
  212. package/dist/mcp.js +24 -22
  213. package/dist/mcp.js.map +1 -1
  214. package/dist/mcpAuditJobs.js +14 -14
  215. package/dist/mcpAuditJobs.js.map +1 -1
  216. package/dist/mcpAutoIndex.js +1 -1
  217. package/dist/mcpAutoIndex.js.map +1 -1
  218. package/dist/nextFile.d.ts +2 -2
  219. package/dist/nextFile.d.ts.map +1 -1
  220. package/dist/nextFile.js +4 -5
  221. package/dist/nextFile.js.map +1 -1
  222. package/dist/nextFileIncremental.d.ts +2 -2
  223. package/dist/nextFileIncremental.d.ts.map +1 -1
  224. package/dist/nextFileIncremental.js +7 -7
  225. package/dist/nextFileIncremental.js.map +1 -1
  226. package/dist/pipeline.d.ts.map +1 -1
  227. package/dist/pipeline.js +16 -9
  228. package/dist/pipeline.js.map +1 -1
  229. package/dist/pipelineAdapters.d.ts.map +1 -1
  230. package/dist/pipelineAdapters.js +25 -11
  231. package/dist/pipelineAdapters.js.map +1 -1
  232. package/dist/reporting/csvReportGenerator.js +7 -7
  233. package/dist/reporting/csvReportGenerator.js.map +1 -1
  234. package/dist/reporting/htmlReportGenerator.js +18 -18
  235. package/dist/reporting/htmlReportGenerator.js.map +1 -1
  236. package/dist/reporting/jsonReportGenerator.js +3 -3
  237. package/dist/reporting/jsonReportGenerator.js.map +1 -1
  238. package/dist/reporting/sarifReportGenerator.js +3 -3
  239. package/dist/reporting/sarifReportGenerator.js.map +1 -1
  240. package/dist/scripts/benchmarkWorkers.js +1 -1
  241. package/dist/scripts/benchmarkWorkers.js.map +1 -1
  242. package/dist/types/crossLanguage.d.ts +1 -1
  243. package/dist/types/crossLanguage.d.ts.map +1 -1
  244. package/dist/types.d.ts +26 -24
  245. package/dist/types.d.ts.map +1 -1
  246. package/dist/types.js +11 -0
  247. package/dist/types.js.map +1 -1
  248. package/package.json +6 -3
  249. package/plugin/.claude-plugin/plugin.json +1 -1
  250. package/plugin/skills/code-auditor/SKILL-RULE-KINDS.md +25 -23
  251. package/plugin/skills/code-auditor/SKILL.md +9 -9
  252. package/server.json +2 -2
package/dist/cli.js CHANGED
@@ -13,7 +13,6 @@ import { promises as fs } from 'fs';
13
13
  import { createInterface } from 'readline';
14
14
  import { fileURLToPath } from 'url';
15
15
  import { dirname, isAbsolute, join, relative, resolve } from 'path';
16
- import { DEFAULT_PORT } from './constants.js';
17
16
  import inquirer from 'inquirer';
18
17
  import { CodeMapGenerator } from './services/CodeMapGenerator.js';
19
18
  import { initParsers } from './languages/index.js';
@@ -23,7 +22,7 @@ import { getFilesProcessed, getFactsConsumed, isVisitorStatus, isReducerStatus }
23
22
  import { createBaselineFromFindings, saveBaseline, loadBaseline, diffBaselines } from './baseline.js';
24
23
  import { ALL_ANALYZERS } from './analyzers/ruleRegistry.js';
25
24
  import { computeGatingDecision } from './enforcement/gate.js';
26
- import { DEFAULT_BLOCKING_SEVERITIES } from './config/defaults.js';
25
+ import { BLOCKING_SEVERITIES } from './types.js';
27
26
  import { rankFilesByPriority, orderFindingsWithinFile } from './nextFile.js';
28
27
  import { runNextFile } from './nextFileIncremental.js';
29
28
  import { describeSqliteBackend } from './sqlite/driver.js';
@@ -114,7 +113,7 @@ program
114
113
  try {
115
114
  await initParsers();
116
115
  // Validate --fail-on severity
117
- const validSeverities = ['critical', 'warning', 'suggestion'];
116
+ const validSeverities = ['critical', 'severe', 'high'];
118
117
  const failOnSeverity = options.failOn;
119
118
  if (failOnSeverity && !validSeverities.includes(failOnSeverity)) {
120
119
  console.error(chalk.red(`Invalid --fail-on severity: "${failOnSeverity}". Must be one of: ${validSeverities.join(', ')}`));
@@ -173,7 +172,7 @@ program
173
172
  console.log(chalk.gray(`\nโ”€โ”€ New readings (${newViolations.length}) โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€`));
174
173
  for (const v of newViolations) {
175
174
  const icon = v.severity === 'critical' ? '๐Ÿ”ด' :
176
- v.severity === 'warning' ? '๐ŸŸก' : '๐Ÿ”ต';
175
+ v.severity === 'severe' ? '๐ŸŸ ' : '๐ŸŸก';
177
176
  console.log(`${icon} ${chalk.bold(v.file)}${v.line ? `:${v.line}` : ''} [${v.severity}] ${v.message}`);
178
177
  }
179
178
  }
@@ -218,18 +217,18 @@ program
218
217
  // No baseline: current behavior + hint
219
218
  console.log(`\nFound ${result.summary.totalViolations} readings`);
220
219
  console.log(`Critical: ${result.summary.criticalIssues}`);
221
- console.log(`Warnings: ${result.summary.warnings}`);
222
- console.log(`Suggestions: ${result.summary.suggestions}`);
223
- console.log(chalk.gray(`\nEvery reading is a measurement, not a verdict โ€” severity is triage, the order to act.`));
220
+ console.log(`Severe: ${result.summary.severe}`);
221
+ console.log(`High: ${result.summary.high}`);
222
+ console.log(chalk.gray(`\nEvery reading is a defect โ€” severity is urgency, the order to act.`));
224
223
  console.log(chalk.gray(`\n๐Ÿ’ก Run ${chalk.cyan('code-audit baseline')} to adopt the ratchet and track changes over time.`));
225
224
  }
226
225
  else {
227
226
  // --full with baseline: full itemized inventory (current behavior)
228
227
  console.log(`\nFound ${result.summary.totalViolations} readings`);
229
228
  console.log(`Critical: ${result.summary.criticalIssues}`);
230
- console.log(`Warnings: ${result.summary.warnings}`);
231
- console.log(`Suggestions: ${result.summary.suggestions}`);
232
- console.log(chalk.gray(`\nEvery reading is a measurement, not a verdict โ€” severity is triage, the order to act.`));
229
+ console.log(`Severe: ${result.summary.severe}`);
230
+ console.log(`High: ${result.summary.high}`);
231
+ console.log(chalk.gray(`\nEvery reading is a defect โ€” severity is urgency, the order to act.`));
233
232
  }
234
233
  // Spec 44 R4 โ€” file accounting: analyzed/dropped totals + optional breakdown.
235
234
  printFileAccounting(result, !!options.explainSkipped);
@@ -319,11 +318,12 @@ program
319
318
  }
320
319
  }
321
320
  // Spec-20 R4: built-in profile visibility โ€” silent behavior changes
322
- // are never acceptable. Notify when scripts-and-tests capped findings.
321
+ // are never acceptable. Notify when scripts-and-tests excludes findings
322
+ // from the blocking gate.
323
323
  const builtinCapped = Object.values(result.analyzerResults)
324
324
  .reduce((count, ar) => count + ar.violations.filter(v => v.profile === 'scripts-and-tests').length, 0);
325
325
  if (builtinCapped > 0) {
326
- console.log(chalk.blue(`\nโ„น๏ธ ${builtinCapped.toLocaleString()} readings capped by built-in profile "scripts-and-tests" (scripts/tests/fixtures โ†’ suggestion).`));
326
+ console.log(chalk.blue(`\nโ„น๏ธ ${builtinCapped.toLocaleString()} readings excluded from the blocking gate by built-in profile "scripts-and-tests" (scripts/tests/fixtures).`));
327
327
  console.log(chalk.gray(` Set ${chalk.cyan('"builtin": false')} in .codeauditor.json to disable.`));
328
328
  }
329
329
  // Generate formatted report if --format is specified
@@ -378,7 +378,7 @@ program
378
378
  const evaluableViolations = (baseline && !options.includeBaseline)
379
379
  ? violations.filter((v) => v.new || v.analyzer === 'invariants')
380
380
  : violations;
381
- const severityOrder = ['critical', 'warning', 'suggestion'];
381
+ const severityOrder = ['critical', 'severe', 'high'];
382
382
  const failIndex = severityOrder.indexOf(failOnSeverity);
383
383
  const hasAtOrAbove = evaluableViolations.some((v) => {
384
384
  const vIndex = severityOrder.indexOf(v.severity);
@@ -466,16 +466,13 @@ program
466
466
  }
467
467
  // Collect all violations
468
468
  const violations = Object.values(result.analyzerResults).flatMap((r) => r.violations || []);
469
- // Blocking gate decision (Spec 45 R1/R2/R4), computed once so the
469
+ // Blocking gate decision (Spec 45 R1/R4, Spec 54 R3), computed once so the
470
470
  // agent-facing before/after count (Spec 45 A2) and the exit code agree on
471
- // the same number. Every registered rule participates (R1); severity
472
- // decides (R2); enforcement is not diff-scoped (R4). No rule is removed
473
- // from the gate for speed (Spec 45 A1).
474
- const configuredGateSeverities = result.metadata.configUsed?.gateSeverities;
475
- const blockingSeverities = new Set(Array.isArray(configuredGateSeverities) && configuredGateSeverities.length > 0
476
- ? configuredGateSeverities
477
- : DEFAULT_BLOCKING_SEVERITIES);
478
- const { blocking, resolutionGaps } = computeGatingDecision(violations, blockingSeverities);
471
+ // the same number. Every registered rule participates (R1); enforcement is
472
+ // not diff-scoped (R4). Spec 54: the blocking set is the fixed all-three
473
+ // {critical, severe, high} โ€” every finding is a defect and every finding
474
+ // blocks; there is no configurable gate.
475
+ const { blocking, resolutionGaps } = computeGatingDecision(violations, BLOCKING_SEVERITIES);
479
476
  // JSON output
480
477
  if (options.format === 'sarif') {
481
478
  const { generateSARIFReport } = await import('./reporting/sarifReportGenerator.js');
@@ -528,7 +525,7 @@ program
528
525
  console.log(chalk.gray('โ”€โ”€ Violations โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€'));
529
526
  for (const v of violations) {
530
527
  const icon = v.severity === 'critical' ? '๐Ÿ”ด' :
531
- v.severity === 'warning' ? '๐ŸŸก' : '๐Ÿ”ต';
528
+ v.severity === 'severe' ? '๐ŸŸ ' : '๐ŸŸก';
532
529
  const statusTag = v.new === false
533
530
  ? chalk.dim(' [known โ€” still open]')
534
531
  : '';
@@ -631,9 +628,8 @@ function printCountSummary(violations) {
631
628
  }
632
629
  /**
633
630
  * Reconstruct a `changed`-compatible result from daemon-served diagnostics so the
634
- * gate/output logic below stays identical to the in-process path. Gate severities
635
- * are read from the project config (one JSON file, no parsing) so a custom
636
- * `gateSeverities` never diverges from what the in-process run would have used.
631
+ * gate/output logic below stays identical to the in-process path. The blocking
632
+ * set is the fixed all-three set (Spec 54 R3) โ€” there is no config to read.
637
633
  */
638
634
  async function buildChangedResultFromDiagnostics(violations, projectRoot) {
639
635
  const analyzerResults = {};
@@ -641,23 +637,11 @@ async function buildChangedResultFromDiagnostics(violations, projectRoot) {
641
637
  const key = v.analyzer || 'unknown';
642
638
  (analyzerResults[key] = analyzerResults[key] || { violations: [] }).violations.push(v);
643
639
  }
644
- let configUsed;
645
- try {
646
- const { findConfigFileUp, loadConfig } = await import('./config/configLoader.js');
647
- const configPath = await findConfigFileUp(projectRoot);
648
- const config = await loadConfig({ configPath: configPath ?? undefined });
649
- if (Array.isArray(config.gateSeverities) && config.gateSeverities.length > 0) {
650
- configUsed = { gateSeverities: config.gateSeverities };
651
- }
652
- }
653
- catch {
654
- // No config โ€” the gate falls back to DEFAULT_BLOCKING_SEVERITIES, matching in-process.
655
- }
656
- return { analyzerResults, metadata: { configUsed, diagnostics: [] } };
640
+ return { analyzerResults, metadata: { configUsed: undefined, diagnostics: [] } };
657
641
  }
658
642
  // Self-audit gate (Spec 33 Item 15 + Spec 44 remediation). Runs the full
659
643
  // analyzer pipeline over the tool's own production source and asserts zero
660
- // *blocking* (critical/warning) findings in the self-audit scope โ€” the same
644
+ // *blocking* (critical/severe/high) findings in the self-audit scope โ€” the same
661
645
  // scope + severity contract as scripts/verify-self.mjs, but callable from the
662
646
  // shipped CLI so the edit-time plugin hook can enforce it. `verify:self` (the
663
647
  // release gate) stays authoritative; this command is its per-edit sibling.
@@ -690,11 +674,11 @@ program
690
674
  .option('--json', 'Output violations as machine-readable JSON to stdout')
691
675
  .option('--stdin', 'Read file paths from stdin (one per line)')
692
676
  .option('-p, --path <projectPath>', 'Project root path', process.cwd())
693
- .option('--fail-on <severity>', 'Blocking severity floor: critical, warning, or suggestion', 'warning')
677
+ .option('--fail-on <severity>', 'Blocking severity floor: critical, severe, or high', 'high')
694
678
  .action(async (paths, options) => {
695
679
  try {
696
680
  await initParsers();
697
- const validSeverities = ['critical', 'warning', 'suggestion'];
681
+ const validSeverities = ['critical', 'severe', 'high'];
698
682
  const failOnSeverity = options.failOn;
699
683
  if (!validSeverities.includes(failOnSeverity)) {
700
684
  console.error(chalk.red(`Invalid --fail-on severity: "${failOnSeverity}". Must be one of: ${validSeverities.join(', ')}`));
@@ -731,7 +715,7 @@ program
731
715
  });
732
716
  const result = await runner.run();
733
717
  const violations = Object.values(result.analyzerResults).flatMap((r) => r.violations || []);
734
- const severityOrder = ['critical', 'warning', 'suggestion'];
718
+ const severityOrder = ['critical', 'severe', 'high'];
735
719
  const failIndex = severityOrder.indexOf(failOnSeverity);
736
720
  const blocking = violations.filter((v) => {
737
721
  if (!isSelfAuditInScope(v.file ?? ''))
@@ -771,7 +755,7 @@ program
771
755
  printCountSummary(blocking);
772
756
  for (const v of blocking) {
773
757
  const icon = v.severity === 'critical' ? '๐Ÿ”ด' :
774
- v.severity === 'warning' ? '๐ŸŸก' : '๐Ÿ”ต';
758
+ v.severity === 'severe' ? '๐ŸŸ ' : '๐ŸŸก';
775
759
  console.log(`${icon} ${v.file}${v.line ? `:${v.line}` : ''} [${v.severity}] ${v.message}`);
776
760
  }
777
761
  }
@@ -848,7 +832,7 @@ function printNextFile(violations, summary, projectDir, json) {
848
832
  return;
849
833
  }
850
834
  const top = ranked[0];
851
- // Every issue on the file, ordered critical โ†’ warning โ†’ suggestion.
835
+ // Every issue on the file, ordered critical โ†’ severe โ†’ high.
852
836
  const ordered = orderFindingsWithinFile(top.violations);
853
837
  const relativize = (filePath) => {
854
838
  if (!filePath)
@@ -892,7 +876,7 @@ function printNextFile(violations, summary, projectDir, json) {
892
876
  console.log(chalk.gray(`${ranked.length - 1} more file(s) with readings ยท ${violations.length - top.count} remaining reading(s)`));
893
877
  console.log(chalk.gray('\nโ”€โ”€ Readings โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€'));
894
878
  for (const v of ordered) {
895
- const icon = v.severity === 'critical' ? '๐Ÿ”ด' : v.severity === 'warning' ? '๐ŸŸก' : '๐Ÿ”ต';
879
+ const icon = v.severity === 'critical' ? '๐Ÿ”ด' : v.severity === 'severe' ? '๐ŸŸ ' : '๐ŸŸก';
896
880
  console.log(`${icon} ${chalk.bold(relativize(v.file || ''))}${v.line ? `:${v.line}` : ''} [${v.severity}] ${v.rule} โ€” ${v.message}`);
897
881
  }
898
882
  }
@@ -983,19 +967,6 @@ program
983
967
  process.exit(1);
984
968
  }
985
969
  });
986
- // Start server command (placeholder - will be implemented later)
987
- program
988
- .command('start')
989
- .description('Start the MCP server')
990
- .option('-p, --port <port>', 'Server port', String(DEFAULT_PORT))
991
- .option('-m, --mcp-mode', 'Start in MCP stdio mode')
992
- .option('-r, --rest-api', 'Enable REST API endpoints')
993
- .option('-i, --index <path>', 'Path to index on startup')
994
- .action(async (options) => {
995
- console.log(chalk.yellow('Server start will be implemented in a future task'));
996
- console.log('Options:', options);
997
- // TODO: Implement server start
998
- });
999
970
  // Index command
1000
971
  const indexCmd = program
1001
972
  .command('index')
@@ -1205,7 +1176,7 @@ configCmd
1205
1176
  console.log(chalk.blue(`\n${rules.length} rule(s) in ${configPath}`));
1206
1177
  console.log(chalk.gray('โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€'));
1207
1178
  for (const r of rules) {
1208
- const sevIcon = r.severity === 'critical' ? '๐Ÿ”ด' : r.severity === 'warning' ? '๐ŸŸก' : '๐Ÿ”ต';
1179
+ const sevIcon = r.severity === 'critical' ? '๐Ÿ”ด' : r.severity === 'severe' ? '๐ŸŸ ' : '๐ŸŸก';
1209
1180
  console.log(`${sevIcon} ${chalk.bold(r.id)} [${r.kind}] ${chalk.dim(r.severity)}`);
1210
1181
  if (r.message)
1211
1182
  console.log(` ${r.message}`);
@@ -1565,15 +1536,6 @@ program
1565
1536
  process.exit(1);
1566
1537
  }
1567
1538
  });
1568
- // Test command (placeholder - will be implemented later)
1569
- program
1570
- .command('test <tool>')
1571
- .description('Test connection to AI tool')
1572
- .action(async (tool) => {
1573
- console.log(chalk.yellow('Test command will be implemented in a future task'));
1574
- console.log('Tool:', tool);
1575
- // TODO: Implement connection testing
1576
- });
1577
1539
  // Code map command
1578
1540
  program
1579
1541
  .command('map')
@@ -1842,7 +1804,7 @@ tasksCmd
1842
1804
  .command('from-audit')
1843
1805
  .description('Populate tasks from audit violations')
1844
1806
  .option('--auditJobId <id>', 'Specific audit result ID')
1845
- .option('--severities <severities>', 'Comma-separated severities (critical,warning,suggestion)', 'critical,warning')
1807
+ .option('--severities <severities>', 'Comma-separated severities (critical,severe,high)', 'critical,severe,high')
1846
1808
  .option('--json', 'Output as JSON')
1847
1809
  .action(async (options) => {
1848
1810
  try {
@@ -2204,7 +2166,7 @@ function spec41StatusBadge(status) {
2204
2166
  function spec41SeverityColor(severity) {
2205
2167
  if (severity === 'critical')
2206
2168
  return chalk.red;
2207
- if (severity === 'warning')
2169
+ if (severity === 'severe')
2208
2170
  return chalk.yellow;
2209
2171
  return chalk.gray;
2210
2172
  }
@@ -2272,7 +2234,7 @@ async function runDetachedAudit(options) {
2272
2234
  });
2273
2235
  const defaultsJson = JSON.stringify({
2274
2236
  defaultAnalyzers: DETACHED_DEFAULT_ANALYZERS,
2275
- defaultMinSeverity: 'suggestion',
2237
+ defaultMinSeverity: 'high',
2276
2238
  defaultGenerateCodeMap: false,
2277
2239
  });
2278
2240
  patchLedgerRun(db.rawDb, job.jobId, { stderrLog: logPath });
@@ -2353,7 +2315,7 @@ program
2353
2315
  .option('--rule <rule>', 'Filter by rule id')
2354
2316
  .option('--analyzer <analyzer>', 'Filter by analyzer')
2355
2317
  .option('--file <file>', 'Filter by file path (substring match)')
2356
- .option('--severity <severity>', 'Filter by severity (critical|warning|suggestion)')
2318
+ .option('--severity <severity>', 'Filter by severity (critical|severe|high)')
2357
2319
  .option('--state [state]', 'Query coverage by state (fired|clean|notApplicable|cannot-fire|unassessed); omit value for all')
2358
2320
  .option('--count', 'Group findings by analyzer/rule with counts')
2359
2321
  .option('--limit <n>', 'Max findings to return (0 = unbounded)', '50')
@@ -2658,7 +2620,7 @@ function getNamingPattern(caseName) {
2658
2620
  program
2659
2621
  .command('install')
2660
2622
  .description('Install the code-auditor skill for AI coding tools')
2661
- .option('--agent <agent>', 'Target agent: claude, cursor, codex, gemini, agents, or all', 'all')
2623
+ .option('--agent <agent>', 'Target agent: claude, cursor, codex, gemini, agents, zcode, or all', 'all')
2662
2624
  .option('--scope <scope>', 'Install scope: user (~) or project (.)', 'user')
2663
2625
  .option('--hooks', 'Offer hook wiring (default)', true)
2664
2626
  .option('--no-hooks', 'Skip hook wiring prompt')
@@ -3089,7 +3051,7 @@ program
3089
3051
  console.log('');
3090
3052
  for (const v of sorted) {
3091
3053
  const icon = v.severity === 'critical' ? '๐Ÿ”ด' :
3092
- v.severity === 'warning' ? '๐ŸŸก' : '๐Ÿ”ต';
3054
+ v.severity === 'severe' ? '๐ŸŸ ' : '๐ŸŸก';
3093
3055
  console.log(`${icon} ${chalk.bold(v.file)}${v.line ? `:${v.line}` : ''} [${v.rule || v.severity}] ${v.message}`);
3094
3056
  }
3095
3057
  }
@@ -3303,7 +3265,7 @@ const SCAFFOLD_CONFIG = {
3303
3265
  {
3304
3266
  id: 'api-routes-naming',
3305
3267
  kind: 'naming',
3306
- severity: 'warning',
3268
+ severity: 'severe',
3307
3269
  message: 'API route files must export a handler matching the HTTP method.',
3308
3270
  path: 'src/api/**',
3309
3271
  exports: '^(get|post|put|delete|patch)\\b',
@@ -3439,11 +3401,11 @@ async function buildRulesInteractively() {
3439
3401
  type: 'list',
3440
3402
  message: 'Severity:',
3441
3403
  choices: [
3442
- { name: chalk.red('Critical โ€” exit code 2, blocks the edit'), value: 'critical' },
3443
- { name: chalk.yellow('Warning โ€” must fix; does not block the edit'), value: 'warning' },
3444
- { name: chalk.blue('Suggestion โ€” must fix; does not block the edit'), value: 'suggestion' },
3404
+ { name: chalk.red('Critical โ€” exploitable or broken now'), value: 'critical' },
3405
+ { name: chalk.yellow('Severe โ€” wrong, and it will surface'), value: 'severe' },
3406
+ { name: chalk.blue('High โ€” wrong, and it has not bitten yet'), value: 'high' },
3445
3407
  ],
3446
- default: 'warning',
3408
+ default: 'high',
3447
3409
  },
3448
3410
  message: {
3449
3411
  type: 'input',