slopbrick 0.11.2 → 0.15.0

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/dist/index.d.cts CHANGED
@@ -1,3 +1,8 @@
1
+ import * as _usebrick_engine from '@usebrick/engine';
2
+ export * from '@usebrick/engine';
3
+ import * as _usebrick_core from '@usebrick/core';
4
+ import { SignalStrengthEntry } from '@usebrick/core';
5
+
1
6
  /**
2
7
  * Constitution declared by the user (or auto-detected from package.json).
3
8
  * Each allow-list field is a list of canonical names — agents and
@@ -244,33 +249,55 @@ interface ScanFactsV2 {
244
249
  _source?: string;
245
250
  }
246
251
 
247
- interface SignalStrength {
248
- /** TP per AI file. Higher = catches more AI tells. */
249
- recall: number;
250
- /** FP per human file. Higher = false alarms. */
251
- fpRate: number;
252
- /** recall / fpRate (capped at 99 if no FPs observed). Higher = cleaner signal. */
253
- ratio: number;
254
- /** recall / (recall + fpRate). 0..1. Higher = more reliable. */
255
- precision: number;
256
- /** ISO timestamp of last calibration that produced these numbers. */
257
- lastCalibratedAt: string;
258
- /**
259
- * v0.9.3: when `true`, the scan engine applies `'off'` to this rule by
260
- * default — user must explicitly opt back in via
261
- * `slopbrick.config.mjs`'s `rules:` block. Set for:
262
- * - INVERTED rules (lift < 1.0 — fires MORE on human code than AI;
263
- * actively misleading when surfaced as AI detectors)
264
- * - NOISY rules (recall < 0.1 — fires too rarely on AI code to be
265
- * a useful default; engineers will dismiss after the 3rd false
266
- * sense of "it doesn't matter")
267
- * User `rules: { 'rule/id': 'medium' }` overrides the default-off.
268
- * Omitted (= undefined) means the rule keeps its factory default.
269
- */
270
- defaultOff?: boolean;
271
- }
252
+ /**
253
+ * v0.15.0+: The user-facing 3-bucket taxonomy. Maps engine verdicts
254
+ * (6 values, used for LR math and calibration) to UI buckets (3 values,
255
+ * used in the report and JSON output).
256
+ *
257
+ * Per the user's design intent ("INVERTED is basically HYGIENE"), INVERTED
258
+ * rules are in the same UI bucket as HYGIENE rules. The engine still
259
+ * distinguishes them (INVERTED has LR < 1, HYGIENE has LR ≈ 1).
260
+ */
261
+ type Bucket = 'ai' | 'hygiene' | 'suppressed';
272
262
 
273
- declare const VERSION = "0.11.2";
263
+ declare const VERSION = "0.15.0";
264
+ /**
265
+ * Runtime shape of `.slopbrick/health.json`. The on-disk JSON
266
+ * matches `packages/core/schemas/v1/health.schema.json` (v3); this
267
+ * interface is the slopbrick-side runtime companion. Schema is the
268
+ * source of truth — keep this in sync with the codegen output in
269
+ * `packages/core/src/generated/health.ts` (RepositoryMemoryHealth).
270
+ *
271
+ * v3 dropped the single `slopIndex` headline in favor of four named
272
+ * scores:
273
+ * - `aiQuality` — AI-specific findings (USEFUL + OK verdicts)
274
+ * - `engineeringHygiene` — HYGIENE + INVERTED rules
275
+ * - `security` — security/* rules
276
+ * - `repositoryHealth` — composite (0.5*aiQ + 0.3*eng + 0.2*sec)
277
+ *
278
+ * Plus optional verdict + bucket distributions for agent-readable
279
+ * insight.
280
+ */
281
+ interface HealthFile {
282
+ version: typeof _usebrick_core.STRUCTURE_SCHEMA_VERSION;
283
+ generatedAt: string;
284
+ workspace: string;
285
+ aiQuality: number;
286
+ engineeringHygiene: number;
287
+ security: number;
288
+ repositoryHealth: number;
289
+ verdictDistribution?: Record<_usebrick_core.Verdict, number>;
290
+ bucketDistribution?: Record<Bucket, number>;
291
+ categoryScores: Record<string, number>;
292
+ issueCounts: {
293
+ high: number;
294
+ medium: number;
295
+ low: number;
296
+ };
297
+ constitutionDrift?: number;
298
+ topOffenseIds?: string[];
299
+ scanDurationMs?: number;
300
+ }
274
301
  /**
275
302
  * Categorical bucket for the AI Maintenance Cost score.
276
303
  *
@@ -301,7 +328,19 @@ interface MaintenanceAxisHealth {
301
328
  }
302
329
  /** Inputs to the pure `computeAiMaintenanceCost` function. Every axis is optional. */
303
330
  interface MaintenanceAxes {
304
- /** 0-100, lower = better. The headline `slopIndex` from `ProjectReport`. */
331
+ /** v0.15.0 U.4+: 0-100, higher = better. The new headline score
332
+ * that replaces slopIndex. Tests and callers should pass this
333
+ * going forward. */
334
+ aiQuality?: number;
335
+ /** v0.15.0 U.4+: 0-100, higher = better. */
336
+ engineeringHygiene?: number;
337
+ /** v0.15.0 U.4+: 0-100, higher = better. */
338
+ security?: number;
339
+ /** v0.15.0 U.4+: 0-100, higher = better. */
340
+ repositoryHealth?: number;
341
+ /** 0-100, lower = better. @deprecated v0.15.0: use aiQuality. Kept
342
+ * for backward compat with existing test fixtures and historical
343
+ * telemetry. The axis inverts it internally. */
305
344
  slopIndex?: number;
306
345
  /** 0-100, higher = better. From `buildArchitectureScore`. */
307
346
  architectureConsistency?: number;
@@ -399,7 +438,18 @@ type AiDebt = 'low' | 'medium' | 'high' | 'critical';
399
438
  declare const AI_SECURITY_NUMERIC: Record<'low' | 'medium' | 'high' | 'critical', number>;
400
439
  /** Inputs to the pure `buildRepositoryHealth` function. Every input is optional. */
401
440
  interface RepositoryHealthInputs {
402
- /** 0-100, lower = better. Inverted to 100 - x for the composite. */
441
+ /** v0.15.0 U.4+: 0-100, higher = better. The new headline score
442
+ * that replaces slopIndex. Tests and callers should pass this
443
+ * going forward. */
444
+ aiQuality?: number;
445
+ /** v0.15.0 U.4+: 0-100, higher = better. */
446
+ engineeringHygiene?: number;
447
+ /** v0.15.0 U.4+: 0-100, higher = better. */
448
+ security?: number;
449
+ /** v0.15.0 U.4+: 0-100, higher = better. */
450
+ repositoryHealth?: number;
451
+ /** 0-100, lower = better. Inverted to 100 - x for the composite.
452
+ * @deprecated v0.15.0: use aiQuality. Kept for backward compat. */
403
453
  slopIndex?: number;
404
454
  /** 0-100, higher = better. */
405
455
  architectureConsistency?: number;
@@ -466,7 +516,7 @@ declare const REPOSITORY_HEALTH_WEIGHTS: {
466
516
 
467
517
  type Severity = 'low' | 'medium' | 'high';
468
518
  type RuleSeverity = Severity | 'auto';
469
- type Category = 'visual' | 'typo' | 'wcag' | 'layout' | 'component' | 'logic' | 'arch' | 'perf' | 'security' | 'test' | 'docs' | 'db';
519
+ type Category = 'visual' | 'typo' | 'wcag' | 'layout' | 'component' | 'logic' | 'arch' | 'perf' | 'security' | 'test' | 'docs' | 'db' | 'ai' | 'context' | 'product' | 'i18n';
470
520
  /**
471
521
  * `react` covers `.tsx`, `.jsx`, `.ts`, `.js`. Other values are detected
472
522
  * by file extension. Unknown extensions fall back to `'react'`.
@@ -493,7 +543,7 @@ interface Issue {
493
543
  fixHint?: string;
494
544
  fix?: FixSuggestion;
495
545
  fixes?: FixSuggestion[];
496
- signalStrength?: SignalStrength;
546
+ signalStrength?: SignalStrengthEntry;
497
547
  }
498
548
  interface CachedFile {
499
549
  hash: string;
@@ -744,6 +794,18 @@ interface FileScanResult {
744
794
  /**
745
795
  * `// slopbrick-disable` directive filtering. */
746
796
  facts?: ScanFacts;
797
+ /**
798
+ * v0.14.6 — Composite AI-likelihood score for this file.
799
+ *
800
+ * Naive Bayes log-likelihood ratio combination of all triggered
801
+ * rules. `probability` in [0, 1] = P(AI-generated | rules fire);
802
+ * `confidenceTier` is one of LIKELY_HUMAN / INCONCLUSIVE / LIKELY_AI
803
+ * / VERY_LIKELY_AI per Jaeschke 1994 JAMA thresholds.
804
+ *
805
+ * Populated by the scan pipeline after rule execution. Undefined
806
+ * when no rules fired (probability stays at the prior prevalence).
807
+ */
808
+ compositeScore?: _usebrick_engine.CompositeScore;
747
809
  }
748
810
  interface ComponentScore {
749
811
  filePath: string;
@@ -762,9 +824,17 @@ interface ProjectReport {
762
824
  version: string;
763
825
  generatedAt: string;
764
826
  configPath?: string;
765
- slopIndex: number;
827
+ /** v0.15.0 U.4+: replaces the legacy slopIndex. 0-100, higher is better. */
828
+ aiQuality: number;
829
+ engineeringHygiene: number;
830
+ security: number;
831
+ repositoryHealth: number;
766
832
  assemblyHealth: number;
767
833
  totalScore: number;
834
+ /** @deprecated v0.15.0: use aiQuality. Kept as optional for backward
835
+ * compat with existing test fixtures and historical telemetry. Will be
836
+ * removed in v0.16.0. */
837
+ slopIndex?: number;
768
838
  categoryScores: Record<Category, number>;
769
839
  /** Phase 2 §10: composite subscores. Each is in 0-100 (capped).
770
840
  * slopIndex = 0.40 × boundaryScore + 0.35 × contextScore + 0.25 × visualScore. */
@@ -828,10 +898,6 @@ interface ProjectReport {
828
898
  dbDrift?: DbDriftLevel;
829
899
  /** Per-finding list behind the db-health score. */
830
900
  dbFindings?: DbFinding[];
831
- /** Phase 12 — Repository Health (composite 0-100). The endgame score
832
- * that aggregates every prior sub-score into one number a manager
833
- * reads in two seconds. Always informational; --strict for CI gating. */
834
- repositoryHealth?: number;
835
901
  /** Categorical AI Debt band, derived from `repositoryHealth`. */
836
902
  aiDebt?: AiDebt;
837
903
  /** Per-axis breakdown of the composite. */
@@ -923,6 +989,75 @@ interface ProjectReport {
923
989
  prSlopScore?: number;
924
990
  /** v0.10.1 — the git ref supplied to --diff <ref>. Undefined for full scans. */
925
991
  diffRef?: string;
992
+ /**
993
+ * v0.12.0 — Diagnostic stats from the new math engines. Surfaced in
994
+ * HTML/JSON reporters under "v0.12 Calibration Diagnostics". Does
995
+ * NOT affect slopIndex or any headline score; purely informational.
996
+ *
997
+ * bayesianPosterior: P(AI | fired_rules) computed via naive-Bayes
998
+ * likelihood-ratio combination per Bento et al. 2024 *Neurocomputing*.
999
+ * Range [0, 1]. > 0.5 = net AI signal; < 0.5 = net human signal.
1000
+ * survivingFiresCount: number of fires that survive Benjamini–Hochberg
1001
+ * FDR control at α = 0.05 across the full rule set. The "free rigor"
1002
+ * upgrade that converts the silent multi-testing problem into a
1003
+ * calibrated number.
1004
+ */
1005
+ v012Stats?: {
1006
+ bayesianPosterior: number;
1007
+ bayesianMatchedRules: number;
1008
+ totalLogLr: number;
1009
+ survivingFiresCount: number;
1010
+ totalFiresCount: number;
1011
+ fdrAlpha: number;
1012
+ /**
1013
+ * v0.13.0 — Probabilistic AI detection across 3 evidence buckets.
1014
+ * Each file gets a P(AI | date, coding fires, general-practice fires)
1015
+ * via naive Bayes. Range [0, 1]. Buckets:
1016
+ * - 'likely_ai' : P >= 0.7
1017
+ * - 'uncertain' : 0.4 <= P < 0.7
1018
+ * - 'likely_human' : P < 0.4
1019
+ */
1020
+ probabilisticAi?: {
1021
+ /** Per-file P(AI) averaged across the project, weighted by file size. */
1022
+ projectP_ai: number;
1023
+ /** Fraction of files in each bucket. */
1024
+ bucketDistribution: {
1025
+ likely_ai: number;
1026
+ uncertain: number;
1027
+ likely_human: number;
1028
+ };
1029
+ /** Date-based prior: P(AI | lastCommitDate), midpoint 2024-01-01. */
1030
+ datePrior: number;
1031
+ /** Evidence from AI-detector rules (markdown leakage, any density, etc.). */
1032
+ codingLogLr: number;
1033
+ /** Evidence from general-practice rules (low spacing entropy, etc.). */
1034
+ practiceLogLr: number;
1035
+ };
1036
+ /** v0.13.0 — Per-file P(AI) distribution (top 10 by file size). */
1037
+ topP_aiFiles?: Array<{
1038
+ filePath: string;
1039
+ p_ai: number;
1040
+ bucket: 'likely_ai' | 'uncertain' | 'likely_human';
1041
+ lastCommitDate: string;
1042
+ }>;
1043
+ };
1044
+ /** v0.14.5i — Count of issues auto-suppressed because their rule was
1045
+ * marked `defaultOff: true` in signal-strength.json (INVERTED or NOISY
1046
+ * rules that would erode trust in the tool if surfaced in CI). Surfaced
1047
+ * in the main scan output as a trust signal so the user can see that
1048
+ * the tool is calibrated, not just noisy. The user can opt back in
1049
+ * via `rules: { 'rule/id': 'medium' }` in slopbrick.config.mjs. */
1050
+ defaultOffSuppressedCount?: number;
1051
+ /** v0.14.5i — Number of distinct rules marked defaultOff. The ratio
1052
+ * suppressedCount / defaultOffRuleCount is the calibration coverage. */
1053
+ defaultOffRuleCount?: number;
1054
+ /** v0.14.5j — The previous run's Slop Index, if any. Used by
1055
+ * formatPretty to render a "±N from last run" delta so the user
1056
+ * can see the trajectory without grep'ing the run log. */
1057
+ previousSlopIndex?: number;
1058
+ /** v0.14.5j — ISO timestamp of the previous run, paired with
1059
+ * previousSlopIndex so the delta line can say "vs 2026-06-27". */
1060
+ previousRunTimestamp?: string;
926
1061
  }
927
1062
  interface TopOffender {
928
1063
  filePath: string;
@@ -1099,6 +1234,11 @@ interface WizardAnswers {
1099
1234
  styling: StylingSolution;
1100
1235
  uiLibraries: UiLibrary[];
1101
1236
  strictness: Strictness;
1237
+ stateManagement?: string;
1238
+ auth?: string;
1239
+ forms?: string;
1240
+ testing?: string;
1241
+ structure?: 'feature-based' | 'layer-based' | 'flat' | 'monorepo' | 'other';
1102
1242
  }
1103
1243
  declare const DEFAULT_CONFIG: ResolvedConfig;
1104
1244
 
@@ -1130,6 +1270,7 @@ interface ScanProjectOptions {
1130
1270
  cache?: boolean;
1131
1271
  telemetry?: boolean;
1132
1272
  }
1273
+
1133
1274
  declare function scanProject(options: ScanProjectOptions): Promise<ProjectReport>;
1134
1275
 
1135
1276
  declare function runInitWizard(cwd: string, detected: Partial<ResolvedConfig>, options?: {
@@ -1190,98 +1331,4 @@ declare function formatBadge(report: ProjectReport): string;
1190
1331
  /** Render an array of values as a Unicode sparkline (▁▂▃▄▅▆▇█). */
1191
1332
  declare function formatSparkline(values: number[]): string;
1192
1333
 
1193
- /**
1194
- * v0.10.1: `find_similar_function` engine.
1195
- *
1196
- * Given a function/component signature (name + parameter list + hooks
1197
- * used), find the most similar existing implementations across the
1198
- * codebase. Foundation for the GIR (Give-Implementation-Reference)
1199
- * pattern in `slop_suggest` and the BRICK Platform.
1200
- *
1201
- * Algorithm (no LLMs, no embeddings — hash-based AST fingerprinting
1202
- * per Chilowicz 2009, "Syntax Tree Fingerprinting for Code Clone
1203
- * Detection"; also see Maurer 2017 for a modern take on the same
1204
- * approach applied to JS/TS):
1205
- *
1206
- * 1. Walk the codebase and extract each function/component signature.
1207
- * Signature = (name, normalized param list, hooks used, props).
1208
- * 2. Compute a deterministic fingerprint per signature:
1209
- * fingerprint = sha256(sorted(hooks) | sorted(props) | sorted(params))
1210
- * 3. Given a query signature, compute Jaccard similarity to every
1211
- * extracted signature over the union of (hooks ∪ props ∪ params).
1212
- * 4. Return top-k matches sorted by similarity desc.
1213
- *
1214
- * Why this matters: AI agents writing new code ask "does this pattern
1215
- * already exist?" before inventing new ones. `find_similar_function`
1216
- * is the deterministic, citation-backed answer — no LLM hallucination,
1217
- * no embedding dependency, fast even on 100k+ files.
1218
- */
1219
- /**
1220
- * Normalized signature for a single function/component in the codebase.
1221
- */
1222
- interface ComponentSignature {
1223
- /** Function/component name (PascalCase for components, camelCase for hooks). */
1224
- name: string;
1225
- /** Absolute path of the file the signature lives in. */
1226
- file: string;
1227
- /** Path relative to the workspace, for display in results. */
1228
- fileRel: string;
1229
- /** Line number (1-indexed) where the signature is defined. */
1230
- line: number;
1231
- /** Sorted, deduplicated parameter names (without `:` types). */
1232
- params: string[];
1233
- /** React hooks used (useState, useEffect, etc.). */
1234
- hooks: string[];
1235
- /** Component props accepted (for React components). */
1236
- props: string[];
1237
- }
1238
- /** A single result from `findSimilarFunctions`. */
1239
- interface SimilarMatch {
1240
- /** The matched signature. */
1241
- signature: ComponentSignature;
1242
- /** Jaccard similarity in [0, 1]. 1 = identical feature set, 0 = disjoint. */
1243
- similarity: number;
1244
- /** Stable fingerprint hash. Two identical signatures always match. */
1245
- fingerprint: string;
1246
- }
1247
- /** Query for `findSimilarFunctions`. */
1248
- interface FindSimilarQuery {
1249
- /** Optional name filter (exact match). */
1250
- name?: string;
1251
- /** Optional hooks filter (e.g., ['useState', 'useEffect']). */
1252
- hooks?: string[];
1253
- /** Optional props filter. */
1254
- props?: string[];
1255
- /** Optional params filter. */
1256
- params?: string[];
1257
- /** Top-k results to return. Default 10. Capped at 50. */
1258
- limit?: number;
1259
- /** Workspace directory to search. */
1260
- workspaceDir: string;
1261
- }
1262
- /**
1263
- * Extract every component/function signature from a single source string.
1264
- * Pure function — no I/O.
1265
- */
1266
- declare function extractSignatures(source: string, filePath: string, workspaceDir: string): ComponentSignature[];
1267
- /** Stable fingerprint: sha256 over sorted feature set. */
1268
- declare function fingerprintSignature(sig: Pick<ComponentSignature, 'hooks' | 'props' | 'params'>): string;
1269
- /**
1270
- * Jaccard similarity over the union of (hooks ∪ props ∪ params).
1271
- * Returns 0..1. Identical sets → 1. Disjoint → 0.
1272
- */
1273
- declare function signatureSimilarity(a: Pick<ComponentSignature, 'hooks' | 'props' | 'params'>, b: Pick<ComponentSignature, 'hooks' | 'props' | 'params'>): number;
1274
- /**
1275
- * Walk the workspace, extract signatures from every included file, and
1276
- * return top-k matches sorted by Jaccard similarity desc.
1277
- *
1278
- * Pure-ish: the file walking uses async I/O but the similarity math is
1279
- * synchronous (it's microseconds per signature, even on 10k files).
1280
- */
1281
- declare function findSimilarFunctions(query: FindSimilarQuery, options?: {
1282
- cwd?: string;
1283
- include?: string[];
1284
- exclude?: string[];
1285
- }): Promise<SimilarMatch[]>;
1286
-
1287
- export { AI_SECURITY_NUMERIC, type AiDebt, type AiMaintenanceCost, type AiMaintenanceCostResult, type AstroComponentFact, type AutoTunedRule, type BaselineCache, type BaselineMeta, type CachedFile, type Category, type ClassNameFact, type CommentFact, type ComponentFacts, type ComponentScore, type ComponentSignature, type ComponentSizeFact, type ConsoleCallFact, type Constitution, DEFAULT_CONFIG, type DangerouslySetInnerHtmlFact, type DbDriftLevel, type DbFinding, type DialogCallFact, type DisabledLintRuleFact, type DocDriftLevel, type DocFinding, type DomQueryFact, type ElementFact, type EvalCallFact, type ExplicitAnyFact, type FetchCallFact, type FileScanResult, type FindSimilarQuery, type FixSuggestion, type FlywheelOutput, type FlywheelState, type Framework$1 as Framework, type HookCallFact, type HookDependencyArrayFact, type HookFact, type ImportFact, type InlineEventHandlerFact, type Issue, type JsxAttributeStringLiteralFact, type JsxTextLiteralFact, type KeyPropFact, type LogicalExpressionFact, type MagicNumberSpacingConfig, type MaintenanceAxes, type MaintenanceAxisHealth, type NonNullAssertionFact, type OptimisticUpdateFact, type ProjectReport, type PropMutationFact, type PropPassThroughFact, REPOSITORY_HEALTH_WEIGHTS, type ReportReadResult, type RepositoryHealth, type RepositoryHealthInputs, type ResearchMetrics, type ResolvedConfig, type Rule, type RuleContext, type RuleSeverity, type RuleSuggestion, type ScanCache, type ScanFacts, type ScanProjectOptions, type Severity, type SimilarMatch, type SlopAuditRun, type StateBinding, type StateBindingFact, type StringLiteralFact, type StylePropFact, type TamaguiStylePropFact, type TopOffender, type UseEffectBodyFact, VERSION, baselineStatusMessage, colorForSlop, extractSignatures, failedThresholdCount, filterByDisabledDirectives, filterIssues, findSimilarFunctions, fingerprintSignature, formatBadge, formatReportFromFile, formatSparkline, loadConfig, readReportFile, runCli, runInitWizard, scanProject, serializeConfig, signatureSimilarity, stagedGating, thresholdExceeded };
1334
+ export { AI_SECURITY_NUMERIC, type AiDebt, type AiMaintenanceCost, type AiMaintenanceCostResult, type AstroComponentFact, type AutoTunedRule, type BaselineCache, type BaselineMeta, type CachedFile, type Category, type ClassNameFact, type CommentFact, type ComponentFacts, type ComponentScore, type ComponentSizeFact, type ConsoleCallFact, type Constitution, DEFAULT_CONFIG, type DangerouslySetInnerHtmlFact, type DbDriftLevel, type DbFinding, type DialogCallFact, type DisabledLintRuleFact, type DocDriftLevel, type DocFinding, type DomQueryFact, type ElementFact, type EvalCallFact, type ExplicitAnyFact, type FetchCallFact, type FileScanResult, type FixSuggestion, type FlywheelOutput, type FlywheelState, type Framework$1 as Framework, type HealthFile, type HookCallFact, type HookDependencyArrayFact, type HookFact, type ImportFact, type InlineEventHandlerFact, type Issue, type JsxAttributeStringLiteralFact, type JsxTextLiteralFact, type KeyPropFact, type LogicalExpressionFact, type MagicNumberSpacingConfig, type MaintenanceAxes, type MaintenanceAxisHealth, type NonNullAssertionFact, type OptimisticUpdateFact, type ProjectReport, type PropMutationFact, type PropPassThroughFact, REPOSITORY_HEALTH_WEIGHTS, type ReportReadResult, type RepositoryHealth, type RepositoryHealthInputs, type ResearchMetrics, type ResolvedConfig, type Rule, type RuleContext, type RuleSeverity, type RuleSuggestion, type ScanCache, type ScanFacts, type ScanProjectOptions, type Severity, type SlopAuditRun, type StateBinding, type StateBindingFact, type StringLiteralFact, type StylePropFact, type TamaguiStylePropFact, type TopOffender, type UseEffectBodyFact, VERSION, baselineStatusMessage, colorForSlop, failedThresholdCount, filterByDisabledDirectives, filterIssues, formatBadge, formatReportFromFile, formatSparkline, loadConfig, readReportFile, runCli, runInitWizard, scanProject, serializeConfig, stagedGating, thresholdExceeded };