@vibgrate/cli 1.0.45 → 1.0.46

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/DOCS.md CHANGED
@@ -1,6 +1,6 @@
1
1
  # Vibgrate CLI — Full Documentation
2
2
 
3
- > Continuous Drift Intelligence for Node & .NET
3
+ > Continuous Drift Intelligence for Node, .NET, Python, and Java
4
4
 
5
5
  For a quick overview, see the [README](./README.md). This document covers everything in detail.
6
6
 
@@ -9,15 +9,18 @@ For a quick overview, see the [README](./README.md). This document covers everyt
9
9
  ## Table of Contents
10
10
 
11
11
  - [How It Works](#how-it-works)
12
+ - [Choosing a rollout model: one-off vs CI](#choosing-a-rollout-model-one-off-vs-ci)
12
13
  - [Commands Reference](#commands-reference)
13
14
  - [vibgrate init](#vibgrate-init)
14
15
  - [vibgrate scan](#vibgrate-scan)
15
16
  - [vibgrate baseline](#vibgrate-baseline)
16
17
  - [vibgrate report](#vibgrate-report)
18
+ - [vibgrate sbom](#vibgrate-sbom)
17
19
  - [vibgrate push](#vibgrate-push)
18
20
  - [vibgrate dsn create](#vibgrate-dsn-create)
19
21
  - [vibgrate update](#vibgrate-update)
20
22
  - [Upgrade Drift Score](#upgrade-drift-score)
23
+ - [Drift Baselines & Fitness Functions](#drift-baselines--fitness-functions)
21
24
  - [How the Score Is Calculated](#how-the-score-is-calculated)
22
25
  - [Risk Levels](#risk-levels)
23
26
  - [Score Components](#score-components)
@@ -34,6 +37,7 @@ For a quick overview, see the [README](./README.md). This document covers everyt
34
37
  - [Platform Matrix](#platform-matrix)
35
38
  - [Dependency Risk](#dependency-risk)
36
39
  - [Dependency Graph & Duplication](#dependency-graph--duplication)
40
+ - [SBOM-ready Supply Chain Inventory](#sbom-ready-supply-chain-inventory)
37
41
  - [Tooling Inventory](#tooling-inventory)
38
42
  - [Build & Deploy Surface Area](#build--deploy-surface-area)
39
43
  - [TypeScript Modernity](#typescript-modernity)
@@ -42,6 +46,9 @@ For a quick overview, see the [README](./README.md). This document covers everyt
42
46
  - [Security Posture](#security-posture)
43
47
  - [Security Scanners](#security-scanners)
44
48
  - [Service Dependencies](#service-dependencies)
49
+ - [Architecture Layers](#architecture-layers)
50
+ - [Code Quality Metrics](#code-quality-metrics)
51
+ - [OWASP Category Mapping](#owasp-category-mapping)
45
52
  - [CI Integration](#ci-integration)
46
53
  - [GitHub Actions](#github-actions)
47
54
  - [Azure DevOps](#azure-devops)
@@ -58,7 +65,7 @@ For a quick overview, see the [README](./README.md). This document covers everyt
58
65
 
59
66
  ## How It Works
60
67
 
61
- Vibgrate recursively scans your repository for `package.json` (Node/TypeScript) and `.sln`/`.csproj` (.NET) files. For each project it discovers, it:
68
+ Vibgrate recursively scans your repository for `package.json` (Node/TypeScript), `.sln`/`.csproj` (.NET), Python manifests, and Java build manifests. For each project it discovers, it:
62
69
 
63
70
  1. **Detects** the runtime version, target framework, and all dependencies
64
71
  2. **Queries** the npm/NuGet registry for latest stable versions (with built-in caching and concurrency control)
@@ -70,6 +77,22 @@ Core drift analysis does not execute source code. Optional security scanners can
70
77
 
71
78
  ---
72
79
 
80
+ ## Choosing a rollout model: one-off vs CI
81
+
82
+ Most teams adopt Vibgrate in two steps:
83
+
84
+ 1. **One-off scan** to establish a baseline and identify immediate upgrade priorities.
85
+ 2. **CI integration** to continuously detect drift regression on every pull request/build.
86
+
87
+ | Mode | Benefits | Typical command |
88
+ | ------------------ | --------------------------------------------------------------------------- | --------------------------------------------------------- |
89
+ | One-off scan | Fast snapshot of current upgrade debt, useful for audits and planning | `npx @vibgrate/cli scan .` |
90
+ | CI-integrated scan | Continuous governance with automated failure thresholds and SARIF surfacing | `npx @vibgrate/cli scan . --format sarif --fail-on error` |
91
+
92
+ In practice, one-off scans tell you where you are today; CI keeps you from drifting back tomorrow.
93
+
94
+ ---
95
+
73
96
  ## Commands Reference
74
97
 
75
98
  ### vibgrate init
@@ -80,12 +103,13 @@ Initialise Vibgrate in a project.
80
103
  vibgrate init [path] [--baseline] [--yes]
81
104
  ```
82
105
 
83
- | Flag | Description |
84
- |------|-------------|
106
+ | Flag | Description |
107
+ | ------------ | ------------------------------------------- |
85
108
  | `--baseline` | Create an initial drift baseline after init |
86
- | `--yes` | Skip confirmation prompts |
109
+ | `--yes` | Skip confirmation prompts |
87
110
 
88
111
  Creates:
112
+
89
113
  - `.vibgrate/` directory
90
114
  - `vibgrate.config.ts` with sensible defaults
91
115
 
@@ -96,7 +120,7 @@ Creates:
96
120
  The primary command. Scans your project for upgrade drift.
97
121
 
98
122
  ```bash
99
- vibgrate scan [path] [--format text|json|sarif] [--out <file>] [--fail-on warn|error] [--baseline <file>] [--changed-only] [--concurrency <n>]
123
+ vibgrate scan [path] [--format text|json|sarif] [--out <file>] [--fail-on warn|error] [--baseline <file>] [--drift-budget <score>] [--drift-worsening <percent>] [--changed-only] [--concurrency <n>]
100
124
  ```
101
125
 
102
126
  | Flag | Default | Description |
@@ -107,6 +131,8 @@ vibgrate scan [path] [--format text|json|sarif] [--out <file>] [--fail-on warn|e
107
131
  | `--baseline <file>` | — | Compare against a previous baseline |
108
132
  | `--changed-only` | — | Only scan changed files |
109
133
  | `--concurrency <n>` | `8` | Max concurrent npm registry calls |
134
+ | `--drift-budget <score>` | — | Fitness gate: fail if drift score is above this budget |
135
+ | `--drift-worsening <percent>` | — | Fitness gate: fail if drift worsens by more than % vs baseline |
110
136
 
111
137
  The scan always writes the full artifact to `.vibgrate/scan_result.json`.
112
138
 
@@ -132,10 +158,28 @@ Generate a human-readable report from a scan artifact.
132
158
  vibgrate report [--in <file>] [--format md|text|json]
133
159
  ```
134
160
 
135
- | Flag | Default | Description |
136
- |------|---------|-------------|
137
- | `--in` | `.vibgrate/scan_result.json` | Input artifact file |
138
- | `--format` | `text` | Output format: `md`, `text`, or `json` |
161
+ | Flag | Default | Description |
162
+ | ---------- | ---------------------------- | -------------------------------------- |
163
+ | `--in` | `.vibgrate/scan_result.json` | Input artifact file |
164
+ | `--format` | `text` | Output format: `md`, `text`, or `json` |
165
+
166
+ ---
167
+
168
+ ### vibgrate sbom
169
+
170
+ Export SBOMs from an existing scan artifact or compare two artifacts.
171
+
172
+ ```bash
173
+ vibgrate sbom export [--in <file>] [--format cyclonedx|spdx] [--out <file>]
174
+ vibgrate sbom delta --from <file> --to <file> [--out <file>]
175
+ ```
176
+
177
+ | Command | Description |
178
+ |---------|-------------|
179
+ | `vibgrate sbom export` | Emit CycloneDX or SPDX JSON from a scan artifact |
180
+ | `vibgrate sbom delta` | Compare dependencies between two artifacts (added/removed/changed + drift delta) |
181
+
182
+ Use this to treat SBOMs as operational intelligence instead of static compliance output.
139
183
 
140
184
  ---
141
185
 
@@ -147,12 +191,12 @@ Upload scan results to the Vibgrate dashboard API.
147
191
  vibgrate push [--dsn <dsn>] [--file <file>] [--region <region>] [--strict]
148
192
  ```
149
193
 
150
- | Flag | Default | Description |
151
- |------|---------|-------------|
152
- | `--dsn` | `VIBGRATE_DSN` env | DSN token for authentication |
153
- | `--file` | `.vibgrate/scan_result.json` | Scan artifact to upload |
154
- | `--region` | — | Override data residency region (`us`, `eu`) |
155
- | `--strict` | — | Fail hard on upload errors |
194
+ | Flag | Default | Description |
195
+ | ---------- | ---------------------------- | ------------------------------------------- |
196
+ | `--dsn` | `VIBGRATE_DSN` env | DSN token for authentication |
197
+ | `--file` | `.vibgrate/scan_result.json` | Scan artifact to upload |
198
+ | `--region` | — | Override data residency region (`us`, `eu`) |
199
+ | `--strict` | — | Fail hard on upload errors |
156
200
 
157
201
  Upload is always optional. Best-effort by default — use `--strict` in CI if you want the pipeline to fail on upload errors.
158
202
 
@@ -166,12 +210,12 @@ Generate an HMAC-signed DSN token for API authentication.
166
210
  vibgrate dsn create --workspace <id> [--region <region>] [--ingest <url>] [--write <path>]
167
211
  ```
168
212
 
169
- | Flag | Default | Description |
170
- |------|---------|-------------|
171
- | `--workspace` | *required* | Your workspace ID |
172
- | `--region` | `us` | Data residency region (`us`, `eu`) |
173
- | `--ingest` | — | Custom ingest API URL (overrides `--region`) |
174
- | `--write` | — | Write DSN to a file (add to `.gitignore`!) |
213
+ | Flag | Default | Description |
214
+ | ------------- | ---------- | -------------------------------------------- |
215
+ | `--workspace` | _required_ | Your workspace ID |
216
+ | `--region` | `us` | Data residency region (`us`, `eu`) |
217
+ | `--ingest` | — | Custom ingest API URL (overrides `--region`) |
218
+ | `--write` | — | Write DSN to a file (add to `.gitignore`!) |
175
219
 
176
220
  ---
177
221
 
@@ -183,13 +227,38 @@ Check for and install updates.
183
227
  vibgrate update [--check] [--pm <manager>]
184
228
  ```
185
229
 
186
- | Flag | Description |
187
- |------|-------------|
188
- | `--check` | Only check for updates, don't install |
189
- | `--pm` | Force a package manager (`npm`, `pnpm`, `yarn`, `bun`) |
230
+ | Flag | Description |
231
+ | --------- | ------------------------------------------------------ |
232
+ | `--check` | Only check for updates, don't install |
233
+ | `--pm` | Force a package manager (`npm`, `pnpm`, `yarn`, `bun`) |
190
234
 
191
235
  ---
192
236
 
237
+ ## Drift Baselines & Fitness Functions
238
+
239
+ Vibgrate stores scan state under `.vibgrate/`:
240
+
241
+ - `.vibgrate/scan_result.json`: latest scan artifact
242
+ - `.vibgrate/baseline.json`: explicit baseline snapshot (`vibgrate baseline`)
243
+ - `<project>/.vibgrate/project_score.json`: per-project score snapshots
244
+
245
+ Recommended workflow:
246
+
247
+ 1. Create baseline once on main branch:
248
+ ```bash
249
+ vibgrate baseline .
250
+ ```
251
+ 2. In CI, run scan with comparison and gates:
252
+ ```bash
253
+ vibgrate scan --baseline .vibgrate/baseline.json --drift-budget 40 --drift-worsening 5
254
+ ```
255
+ 3. When planned upgrades land, refresh baseline:
256
+ ```bash
257
+ vibgrate baseline .
258
+ ```
259
+
260
+ This makes drift a formal quality gate (fitness function), not just reporting.
261
+
193
262
  ## Upgrade Drift Score
194
263
 
195
264
  ### How the Score Is Calculated
@@ -200,22 +269,22 @@ The Upgrade Drift Score is a deterministic, versioned metric (0–100) that repr
200
269
 
201
270
  ### Risk Levels
202
271
 
203
- | Score | Risk Level |
204
- |-------|------------|
205
- | 70–100 | **Low** — You're in good shape |
206
- | 40–69 | **Moderate** — Some attention needed |
207
- | 0–39 | **High** — Significant upgrade debt |
272
+ | Score | Risk Level |
273
+ | ------ | ------------------------------------ |
274
+ | 70–100 | **Low** — You're in good shape |
275
+ | 40–69 | **Moderate** — Some attention needed |
276
+ | 0–39 | **High** — Significant upgrade debt |
208
277
 
209
278
  ### Score Components
210
279
 
211
280
  The overall score is a weighted combination of four components:
212
281
 
213
- | Component | What It Measures |
214
- |-----------|-----------------|
215
- | **Runtime** | Node.js or .NET runtime major version lag |
216
- | **Frameworks** | Major version distance for core frameworks (React, Next, NestJS, ASP.NET, etc.) |
282
+ | Component | What It Measures |
283
+ | ---------------- | --------------------------------------------------------------------------------- |
284
+ | **Runtime** | Node.js or .NET runtime major version lag |
285
+ | **Frameworks** | Major version distance for core frameworks (React, Next, NestJS, ASP.NET, etc.) |
217
286
  | **Dependencies** | Age distribution across all dependencies (current vs 1 major behind vs 2+ behind) |
218
- | **EOL Risk** | Proximity to end-of-life for runtimes and frameworks |
287
+ | **EOL Risk** | Proximity to end-of-life for runtimes and frameworks |
219
288
 
220
289
  ---
221
290
 
@@ -224,6 +293,7 @@ The overall score is a weighted combination of four components:
224
293
  ### Text
225
294
 
226
295
  The default output. A coloured, human-readable report showing:
296
+
227
297
  - Overall drift score and risk level
228
298
  - Score component breakdown with visual bars
229
299
  - Per-project details: runtime lag, framework versions, dependency distribution
@@ -250,10 +320,10 @@ A clean Markdown report suitable for PRs, wikis, or documentation.
250
320
  Run `vibgrate init` to generate the config file, or create one manually:
251
321
 
252
322
  ```typescript
253
- import type { VibgrateConfig } from '@vibgrate/cli';
323
+ import type { VibgrateConfig } from "@vibgrate/cli";
254
324
 
255
325
  const config: VibgrateConfig = {
256
- exclude: ['legacy/**'],
326
+ exclude: ["legacy/**"],
257
327
  thresholds: {
258
328
  failOnError: {
259
329
  eolDays: 180,
@@ -266,17 +336,17 @@ const config: VibgrateConfig = {
266
336
  },
267
337
  },
268
338
  scanners: {
269
- platformMatrix: { enabled: true },
270
- dependencyRisk: { enabled: true },
271
- dependencyGraph: { enabled: true },
272
- toolingInventory: { enabled: true },
273
- buildDeploy: { enabled: true },
274
- tsModernity: { enabled: true },
339
+ platformMatrix: { enabled: true },
340
+ dependencyRisk: { enabled: true },
341
+ dependencyGraph: { enabled: true },
342
+ toolingInventory: { enabled: true },
343
+ buildDeploy: { enabled: true },
344
+ tsModernity: { enabled: true },
275
345
  breakingChangeExposure: { enabled: true },
276
- fileHotspots: { enabled: true },
277
- securityPosture: { enabled: true },
278
- securityScanners: { enabled: true },
279
- serviceDependencies: { enabled: true },
346
+ fileHotspots: { enabled: true },
347
+ securityPosture: { enabled: true },
348
+ securityScanners: { enabled: true },
349
+ serviceDependencies: { enabled: true },
280
350
  },
281
351
  };
282
352
 
@@ -289,13 +359,13 @@ Also supports `vibgrate.config.js` and `vibgrate.config.json`.
289
359
 
290
360
  Control when findings are raised and when the CLI should fail.
291
361
 
292
- | Threshold | Default | Triggers |
293
- |-----------|---------|----------|
294
- | `failOnError.eolDays` | 180 | Error finding when runtime EOL is within N days |
295
- | `failOnError.frameworkMajorLag` | 3 | Error finding when any framework is N+ majors behind |
296
- | `failOnError.dependencyTwoPlusPercent` | 50 | Error finding when N+% of dependencies are 2+ majors behind |
297
- | `warn.frameworkMajorLag` | 2 | Warning finding when any framework is N+ majors behind |
298
- | `warn.dependencyTwoPlusPercent` | 30 | Warning finding when N+% of dependencies are 2+ majors behind |
362
+ | Threshold | Default | Triggers |
363
+ | -------------------------------------- | ------- | ------------------------------------------------------------- |
364
+ | `failOnError.eolDays` | 180 | Error finding when runtime EOL is within N days |
365
+ | `failOnError.frameworkMajorLag` | 3 | Error finding when any framework is N+ majors behind |
366
+ | `failOnError.dependencyTwoPlusPercent` | 50 | Error finding when N+% of dependencies are 2+ majors behind |
367
+ | `warn.frameworkMajorLag` | 2 | Warning finding when any framework is N+ majors behind |
368
+ | `warn.dependencyTwoPlusPercent` | 30 | Warning finding when N+% of dependencies are 2+ majors behind |
299
369
 
300
370
  ### Scanner Toggles
301
371
 
@@ -339,19 +409,30 @@ Parses lockfiles (pnpm, npm, yarn, .NET) to build a workspace-wide dependency gr
339
409
  - Duplicated packages (multiple versions of the same package)
340
410
  - Phantom dependencies (used but not declared)
341
411
 
412
+ ### SBOM-ready Supply Chain Inventory
413
+
414
+ Vibgrate artifacts include dependency graph and package inventory data that can be used for supply-chain governance workflows:
415
+
416
+ - Lockfile-derived package counts (`totalUnique`, `totalInstalled`)
417
+ - Duplicate-version hotspots to prioritize remediation
418
+ - Phantom dependency evidence (`phantomDependencies` + details)
419
+ - Inventory metadata that pairs well with internal SBOM pipelines
420
+
421
+ > Vibgrate does not currently emit CycloneDX/SPDX files directly. Instead, it provides structured inventory data in `scan_result.json` so teams can integrate with existing SBOM tooling without slowing down CI scans.
422
+
342
423
  ### Tooling Inventory
343
424
 
344
425
  Maps the full technology stack across your workspace by detecting package names in dependencies:
345
426
 
346
- | Category | Examples |
347
- |----------|---------|
348
- | Frontend | React, Vue, Angular, Svelte, Solid |
349
- | Meta-frameworks | Next.js, Nuxt, Astro, Remix |
350
- | Bundlers | Vite, webpack, esbuild, Rollup |
351
- | Backend | Express, Fastify, NestJS, Hono |
352
- | ORM / DB | Prisma, Drizzle, TypeORM, EF Core |
353
- | Testing | Vitest, Jest, Playwright, xUnit |
354
- | Observability | Sentry, OpenTelemetry, Pino, Winston |
427
+ | Category | Examples |
428
+ | --------------- | ------------------------------------ |
429
+ | Frontend | React, Vue, Angular, Svelte, Solid |
430
+ | Meta-frameworks | Next.js, Nuxt, Astro, Remix |
431
+ | Bundlers | Vite, webpack, esbuild, Rollup |
432
+ | Backend | Express, Fastify, NestJS, Hono |
433
+ | ORM / DB | Prisma, Drizzle, TypeORM, EF Core |
434
+ | Testing | Vitest, Jest, Playwright, xUnit |
435
+ | Observability | Sentry, OpenTelemetry, Pino, Winston |
355
436
 
356
437
  ### Build & Deploy Surface Area
357
438
 
@@ -400,7 +481,6 @@ Structural security hygiene indicators (not a secret scanner):
400
481
  - `.env` files tracked outside `.gitignore`
401
482
  - Audit severity counts (via `npm audit --json`)
402
483
 
403
-
404
484
  ### Security Scanners
405
485
 
406
486
  Security scanner orchestration and readiness analysis focused on modern SAST and secrets tooling:
@@ -417,14 +497,42 @@ Security scanner orchestration and readiness analysis focused on modern SAST and
417
497
 
418
498
  Maps external service and platform dependencies by detecting SDK packages:
419
499
 
420
- | Category | Examples |
421
- |----------|---------|
422
- | Payment | Stripe, Braintree, PayPal |
423
- | Auth | Auth0, Clerk, Firebase, Passport |
424
- | Cloud SDKs | AWS, Azure, Google Cloud |
425
- | Databases | PostgreSQL, MongoDB, Redis |
426
- | Messaging | SQS, SNS, Kafka, BullMQ |
427
- | Observability | Sentry, DataDog, New Relic |
500
+ | Category | Examples |
501
+ | ------------- | -------------------------------- |
502
+ | Payment | Stripe, Braintree, PayPal |
503
+ | Auth | Auth0, Clerk, Firebase, Passport |
504
+ | Cloud SDKs | AWS, Azure, Google Cloud |
505
+ | Databases | PostgreSQL, MongoDB, Redis |
506
+ | Messaging | SQS, SNS, Kafka, BullMQ |
507
+ | Observability | Sentry, DataDog, New Relic |
508
+
509
+ ### Architecture Layers
510
+
511
+ Classifies source files into architectural layers and reports drift by layer to make refactors more predictable:
512
+
513
+ - Archetype detection (e.g. Next.js, NestJS, Express, serverless, monorepo, CLI)
514
+ - Layer-level file counts and confidence scoring
515
+ - Per-layer package drift scores and risk levels
516
+ - Layer-specific tech stack and service dependency attribution
517
+
518
+ ### Code Quality Metrics
519
+
520
+ Fast AST-based quality checks to identify upgrade friction hotspots:
521
+
522
+ - Files/functions analyzed
523
+ - Cyclomatic complexity averages
524
+ - Function length and nesting depth signals
525
+ - Circular dependencies and dead-code estimate
526
+ - "God file" detection for oversized high-complexity modules
527
+
528
+ ### OWASP Category Mapping
529
+
530
+ Maps Semgrep OSS findings into OWASP Top 10 categories for security triage inside existing drift reports:
531
+
532
+ - Supports `fast` and `cache-input` modes
533
+ - Categorizes findings with severity and CWE metadata
534
+ - Emits per-category counts in JSON output
535
+ - Designed for CI visibility without requiring a separate report format
428
536
 
429
537
  ---
430
538
 
@@ -500,10 +608,10 @@ Set `VIBGRATE_DSN` as a secret in your CI environment. Uploads are always option
500
608
 
501
609
  Vibgrate supports region-specific ingest endpoints:
502
610
 
503
- | Region | Endpoint |
504
- |--------|----------|
611
+ | Region | Endpoint |
612
+ | ------------ | ------------------------ |
505
613
  | US (default) | `us.ingest.vibgrate.com` |
506
- | EU | `eu.ingest.vibgrate.com` |
614
+ | EU | `eu.ingest.vibgrate.com` |
507
615
 
508
616
  Use `--region eu` on `push` or `dsn create` to route data to the EU endpoint.
509
617
 
@@ -513,14 +621,14 @@ Use `--region eu` on `push` or `dsn create` to route data to the EU endpoint.
513
621
 
514
622
  Vibgrate is built with a privacy-first architecture. Here's what it **never** does:
515
623
 
516
- | Category | Hard guarantee |
517
- |----------|---------------|
518
- | Source code | Never read beyond config/manifest files |
519
- | Secrets | Never scanned for, never extracted |
624
+ | Category | Hard guarantee |
625
+ | ------------------ | -------------------------------------------------- |
626
+ | Source code | Never read beyond config/manifest files |
627
+ | Secrets | Never scanned for, never extracted |
520
628
  | Environment values | Never read — only `.env` file existence is flagged |
521
- | Git identity data | Never accessed — `git log` is never invoked |
522
- | File contents | Only structured config fields are extracted |
523
- | Network endpoints | Never parsed from config files |
629
+ | Git identity data | Never accessed — `git log` is never invoked |
630
+ | File contents | Only structured config fields are extracted |
631
+ | Network endpoints | Never parsed from config files |
524
632
 
525
633
  What it **does** collect:
526
634
 
@@ -534,11 +642,11 @@ What it **does** collect:
534
642
 
535
643
  ## Exit Codes
536
644
 
537
- | Code | Meaning |
538
- |------|---------|
539
- | `0` | Success |
540
- | `1` | Runtime error |
541
- | `2` | `--fail-on` threshold exceeded |
645
+ | Code | Meaning |
646
+ | ---- | ------------------------------ |
647
+ | `0` | Success |
648
+ | `1` | Runtime error |
649
+ | `2` | `--fail-on` threshold exceeded |
542
650
 
543
651
  ---
544
652
 
@@ -547,7 +655,12 @@ What it **does** collect:
547
655
  The package exports its core types for programmatic use:
548
656
 
549
657
  ```typescript
550
- import type { VibgrateConfig, ScanArtifact, DriftScore, Finding } from '@vibgrate/cli';
658
+ import type {
659
+ VibgrateConfig,
660
+ ScanArtifact,
661
+ DriftScore,
662
+ Finding,
663
+ } from "@vibgrate/cli";
551
664
  ```
552
665
 
553
666
  ---