@nerviq/cli 1.8.5 → 1.8.6

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/bin/cli.js CHANGED
@@ -1,6 +1,6 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- const { audit } = require('../src/audit');
3
+ const { audit, detectPlatforms, getCatalog } = require('../src/public-api');
4
4
  const { setup } = require('../src/setup');
5
5
  const { analyzeProject, printAnalysis, exportMarkdown } = require('../src/analyze');
6
6
  const { buildProposalBundle, printProposalBundle, writePlanFile, applyProposalBundle, printApplyResult } = require('../src/plans');
@@ -998,7 +998,7 @@ async function main() {
998
998
  const { watch } = require('../src/watch');
999
999
  await watch(options);
1000
1000
  } else if (normalizedCommand === 'catalog') {
1001
- const { generateCatalog, generateCatalogWithVersion, writeCatalogJson } = require('../src/catalog');
1001
+ const { generateCatalogWithVersion, writeCatalogJson } = require('../src/catalog');
1002
1002
  if (options.out) {
1003
1003
  const result = writeCatalogJson(options.out);
1004
1004
  if (options.json) {
@@ -1007,7 +1007,7 @@ async function main() {
1007
1007
  console.log(`\n Catalog written to ${result.path} (${result.count} checks)\n`);
1008
1008
  }
1009
1009
  } else {
1010
- const catalog = generateCatalog();
1010
+ const catalog = getCatalog(); // dogfood: use SDK instead of internal import
1011
1011
  if (options.json) {
1012
1012
  const envelope = generateCatalogWithVersion();
1013
1013
  if (options.checkVersion) envelope.requestedVersion = options.checkVersion;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@nerviq/cli",
3
- "version": "1.8.5",
3
+ "version": "1.8.6",
4
4
  "description": "The intelligent nervous system for AI coding agents — 2,431 checks (8 platforms × ~300 governance rules), 10 languages, 62 domain packs. Audit, align, and amplify.",
5
5
  "main": "src/index.js",
6
6
  "bin": {
@@ -367,15 +367,32 @@ function hasRuntimeVerificationSignal(technique) {
367
367
  return /experiment(?:ally)? confirmed|confirmed by (?:live )?experiment|current runtime|runtime evidence|runtime-verified|validated in current runtime|observed in current runtime|measured in live experiment|reproduced in runtime|confirmed by experiment/i.test(haystack);
368
368
  }
369
369
 
370
+ // Stack categories where checks are generated/adapted rather than individually verified
371
+ const STACK_CATEGORIES = new Set([
372
+ 'python', 'go', 'rust', 'java', 'ruby', 'dotnet', 'php', 'flutter', 'swift', 'kotlin',
373
+ ]);
374
+
370
375
  function resolveConfidence(platform, technique) {
371
376
  if (STALE_CONFIDENCE_IDS.has(technique.id)) {
372
377
  return 0.3;
373
378
  }
374
379
 
380
+ // Runtime-verified: highest confidence
375
381
  if (RUNTIME_CONFIDENCE_IDS[platform]?.has(technique.id) || hasRuntimeVerificationSignal(technique)) {
376
382
  return 0.9;
377
383
  }
378
384
 
385
+ // Has fix template: author wrote specific remediation → higher confidence
386
+ if (technique.template) {
387
+ return 0.8;
388
+ }
389
+
390
+ // Stack-specific checks: generated per-language, less individually verified
391
+ if (STACK_CATEGORIES.has(technique.category)) {
392
+ return 0.6;
393
+ }
394
+
395
+ // Default: documented but not individually experiment-verified
379
396
  return 0.7;
380
397
  }
381
398
 
@@ -396,7 +413,7 @@ function attachSourceUrls(platform, techniques) {
396
413
  }
397
414
 
398
415
  technique.sourceUrl = technique.sourceUrl || resolved;
399
- technique.confidence = technique.confidence ?? resolveConfidence(platform, technique);
416
+ technique.confidence = resolveConfidence(platform, technique);
400
417
  technique.lastVerified = technique.lastVerified || LAST_VERIFIED[platform] || LAST_VERIFIED.default;
401
418
  }
402
419