React data visualization library for streaming, networks, and AI-assisted development
This report presents the forensic synthetic code analysis of nteract/semiotic, a TypeScript project with 2,685 GitHub stars. SynthScan v2.0 examined 579,836 lines of code across 1775 source files, recording 2186 pattern matches distributed across 11 syntactic categories. The overall adjusted score of 9.6 places this repository in the Low AI signal band.
The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).
This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.
Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.
This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.
The scanner identified 2186 distinct pattern matches across 11 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | integration-tests/process-sankey.spec.ts | 159 | // ── Visual regression baselines ──────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/streaming-regression.spec.ts | 89 | // ─── Grey fill regression tests ────────────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/streaming-regression.spec.ts | 136 | // ─── Legend regression tests ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/streaming-regression.spec.ts | 169 | // ─── Tooltip regression tests ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/streaming-regression.spec.ts | 203 | // ─── LineChart infinite loop regression ────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/streaming-regression.spec.ts | 233 | // ─── Force-directed graph centering regression ─────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/streaming-regression.spec.ts | 292 | // ─── No JS errors during streaming ─────────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/brush-selection.spec.ts | 222 | // ── Interaction-state visual snapshot ─────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/coordinated-views.spec.ts | 9 | // ── Linked hover cross-highlighting ─────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/coordinated-views.spec.ts | 55 | // ── ChartGrid with emphasis ─────────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/coordinated-views.spec.ts | 78 | // ── Empty state ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/coordinated-views.spec.ts | 93 | // ── Three-way linked charts ─────────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/ordinal-frame.spec.ts | 261 | // ── Default-theme HOC coverage backfill ────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/realtime-charts.spec.ts | 132 | // ── Default-theme HOC coverage backfill (static fixtures) ──────────── | COMMENT |
| MEDIUM | integration-tests/accessibility.spec.ts | 5 | // ─── 1. Canvas aria-labels describe chart type and data shape ───────────────── | COMMENT |
| MEDIUM | integration-tests/accessibility.spec.ts | 68 | // ─── 2. AriaLiveTooltip region with aria-live="polite" ──────────────────────── | COMMENT |
| MEDIUM | integration-tests/accessibility.spec.ts | 118 | // ─── 3. Legend keyboard traversal ───────────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/accessibility.spec.ts | 237 | // ─── 4. Focus rings appear on keyboard focus ───────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/accessibility.spec.ts | 326 | // ─── 5. SVG overlays have title/desc elements ──────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/accessibility.spec.ts | 408 | // ─── 6. ChartContainer toolbar buttons have aria-labels ─────────────────────── | COMMENT |
| MEDIUM | integration-tests/accessibility.spec.ts | 499 | // ─── 7. Automated axe-core accessibility scanning ─────────────────────────── | COMMENT |
| MEDIUM | integration-tests/accessibility.spec.ts | 540 | // ─── Smoke test: no JS errors on page load ─────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/geo-charts.spec.ts | 146 | // ── Default-theme HOC coverage backfill ────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/xy-frame.spec.ts | 285 | // ── Default-theme HOC coverage backfill ────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/xy-frame.spec.ts | 314 | // ── Interaction-state visual snapshots ────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/network-frame.spec.ts | 88 | // ── Default-theme HOC coverage backfill ────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/xy-examples/index.js | 255 | // ── Default-theme HOC coverage backfill ───────────────────────────── | COMMENT |
| MEDIUM | integration-tests/xy-examples/index.js | 364 | // ── Interaction-state fixtures ────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/xy-examples/index.js | 426 | // ── Multi-tooltip fixtures ─────────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/xy-examples/index.js | 481 | // ── xExtent / yExtent override variants ──────────────────────────── | COMMENT |
| MEDIUM | integration-tests/status-scale-theme-examples/index.js | 24 | // ── Deterministic data ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/status-scale-theme-examples/index.js | 120 | // ── Waterfall: themeSemantic.success / .danger ──────────────────────── | COMMENT |
| MEDIUM | integration-tests/status-scale-theme-examples/index.js | 132 | // ── Heatmap: themeSequential ────────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/status-scale-theme-examples/index.js | 146 | // ── Likert: themeDiverging ──────────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/realtime-examples/index.js | 143 | // ── Static bounded fixtures for visual snapshots ───────────────────── | COMMENT |
| MEDIUM | integration-tests/realtime-examples/index.js | 225 | // ── Default-theme HOC coverage backfill (static) ──────────────────── | COMMENT |
| MEDIUM | integration-tests/network-examples/index.js | 143 | // ── Default-theme HOC coverage backfill ──────────────────────────── | COMMENT |
| MEDIUM | …tegration-tests/streaming-regression-examples/index.js | 27 | // ── 1. Streaming Stacked Bar (grey fill + legend regression) ───────────────── | COMMENT |
| MEDIUM | …tegration-tests/streaming-regression-examples/index.js | 63 | // ── 2. Streaming Pie (grey fill + legend regression) ───────────────────────── | COMMENT |
| MEDIUM | …tegration-tests/streaming-regression-examples/index.js | 94 | // ── 3. Streaming Bubble (grey fill regression) ─────────────────────────────── | COMMENT |
| MEDIUM | …tegration-tests/streaming-regression-examples/index.js | 127 | // ── 4. Streaming Grouped Bar (grey fill + legend regression) ───────────────── | COMMENT |
| MEDIUM | …tegration-tests/streaming-regression-examples/index.js | 161 | // ── 5. Streaming Stacked Area (grey fill regression) ───────────────────────── | COMMENT |
| MEDIUM | …tegration-tests/streaming-regression-examples/index.js | 193 | // ── 6. Area chart tooltip (shows "-" regression) ───────────────────────────── | COMMENT |
| MEDIUM | …tegration-tests/streaming-regression-examples/index.js | 215 | // ── 7. LineChart streaming (infinite loop regression) ───────────────────────── | COMMENT |
| MEDIUM | …tegration-tests/streaming-regression-examples/index.js | 249 | // ── 8. Force-Directed Graph centering ──────────────────────────────────────── | COMMENT |
| MEDIUM | …tegration-tests/streaming-regression-examples/index.js | 274 | // ── 9. Streaming Chord (blue-only regression) ──────────────────────────────── | COMMENT |
| MEDIUM | …tegration-tests/streaming-regression-examples/index.js | 301 | // ── 10. Streaming Donut (grey fill + legend regression) ────────────────────── | COMMENT |
| MEDIUM | …tegration-tests/streaming-regression-examples/index.js | 332 | // ── 11. Streaming Scatterplot (grey fill regression) ───────────────────────── | COMMENT |
| MEDIUM | integration-tests/coordinated-examples/index.js | 35 | // ── Shared test data (deterministic) ──────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/coordinated-examples/index.js | 116 | // ── Test cases ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/ordinal-examples/index.js | 405 | // ── Default-theme HOC coverage backfill ───────────────────────────── | COMMENT |
| MEDIUM | integration-tests/ordinal-examples/index.js | 436 | // ── valueExtent override variants ───────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/themed-examples/index.js | 23 | // ── Deterministic data ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/themed-examples/index.js | 90 | // ── Charts to snapshot per theme ────────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/themed-examples/index.js | 150 | // ── Render grid ──────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/custom-layout-examples/index.js | 156 | // ── Glyph unit chart: composite-pictogram scene nodes fed by unitize ──────── | COMMENT |
| MEDIUM | integration-tests/chart-modes-examples/index.js | 36 | // ── Deterministic fixtures ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/primitive-props-examples/index.js | 34 | // ── Deterministic data ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/primitive-props-examples/index.js | 74 | // ── Shared chart props ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | integration-tests/primitive-props-examples/index.js | 149 | // ── Bars ────────────────────────────────────────────────────────────── | COMMENT |
| 1520 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | etc/api-surface/semiotic-server.api.md | 16 | function renderPhysicsToAnimatedGif(props: PhysicsGifFrameProps, options?: PhysicsGifOptions | undefined): Promise<Buffe | CODE |
| LOW | etc/api-surface/semiotic-physics-rapier.api.md | 15 | function optionalEngineDependencyError(details: PhysicsOptionalEngineInstallDetails, cause?: unknown): PhysicsOptionalEn | CODE |
| LOW | etc/api-surface/semiotic-physics-rapier.api.md | 16 | function rapierPhysicsDependencyError(cause?: unknown): Error | CODE |
| LOW⚡ | etc/api-surface/semiotic-controls.api.md | 9 | function DirectManipulationControl({ value, onChange, pointerToValue, min, max, step, largeStep, x, y, controlType, cont | CODE |
| LOW⚡ | etc/api-surface/semiotic-controls.api.md | 11 | function auditVisualizationControls({ controls, minimumTargetSize, }: AuditVisualizationControlsOptions): ControlAuditRe | CODE |
| LOW⚡ | etc/api-surface/semiotic-controls.api.md | 13 | function createControlObservationAdapter({ controlType, controlId, chartId, chartType, onObservation, }: ControlObservat | CODE |
| LOW⚡ | etc/api-surface/semiotic-recipes.api.md | 60 | function composePhysicsControllers(controllers: readonly PhysicsController[] | null | undefined): ComposedPhysicsControl | CODE |
| LOW⚡ | etc/api-surface/semiotic-recipes.api.md | 61 | function createCapacityQueueController(options: CapacityQueueControllerOptions): PhysicsController | CODE |
| LOW⚡ | etc/api-surface/semiotic-recipes.api.md | 62 | function createDependencyGateController(options: DependencyGateOptions): DependencyGateController | CODE |
| LOW⚡ | etc/api-surface/semiotic-recipes.api.md | 64 | function createProcessJourneyLedger(options: { stages: readonly ProcessJourneyStage[]; bodyIds?: readonly string[]; }): | CODE |
| LOW⚡ | etc/api-surface/semiotic-recipes.api.md | 65 | function createServiceLevelController(options: ServiceLevelControllerOptions): ServiceLevelController | CODE |
| LOW⚡ | etc/api-surface/semiotic-recipes.api.md | 66 | function createServiceResourcePoolController(options: ServiceResourcePoolOptions): ServiceResourcePoolController | CODE |
| LOW | etc/api-surface/semiotic-recipes.api.md | 119 | function mobileSmallMultipleRecipe(options?: MobileChartFamilyRecipeOptions | undefined): MobileChartFamilyRecipe | CODE |
| LOW | etc/api-surface/semiotic-recipes.api.md | 131 | function parallelCoordinatesLayout(*: OrdinalLayoutContext<import("../semiotic-recipes-core").ParallelCoordinatesConfig> | CODE |
| LOW | etc/api-surface/semiotic-recipes.api.md | 147 | function regionCountsToProjectionRows(counts: RegionCountMap, order?: readonly string[] | undefined): { label: string; v | CODE |
| LOW | etc/api-surface/semiotic-recipes.api.md | 169 | function tokenTaskIntentToCapabilityIntents(intent: TokenTaskIntent): TokenCapabilityIntent[] | CODE |
| LOW | etc/api-surface/semiotic-geo.api.md | 20 | function resolveReferenceGeography(name: ReferenceGeography): Promise<import("geojson").Feature<import("geojson").Geomet | CODE |
| LOW⚡ | etc/api-surface/semiotic-physics-matter.api.md | 14 | function matterBodiesToPhysicsColliders(bodies: readonly MatterBodyLike[], options?: MatterMigrationOptions | undefined) | CODE |
| LOW⚡ | etc/api-surface/semiotic-physics-matter.api.md | 15 | function matterBodiesToPhysicsSpawns(bodies: readonly MatterBodyLike[], options?: MatterMigrationOptions | undefined): P | CODE |
| LOW⚡ | etc/api-surface/semiotic-physics-matter.api.md | 16 | function matterBodyToPhysicsBodySpec(body: MatterBodyLike, index?: number | undefined, options?: MatterMigrationOptions | CODE |
| LOW⚡ | etc/api-surface/semiotic-physics-matter.api.md | 17 | function matterBodyToPhysicsColliderSpec(body: MatterBodyLike, index?: number | undefined, options?: MatterMigrationOpti | CODE |
| LOW⚡ | etc/api-surface/semiotic-physics-matter.api.md | 18 | function matterPhysicsDependencyError(cause?: unknown): Error | CODE |
| LOW⚡ | etc/api-surface/semiotic-physics-matter.api.md | 19 | function optionalEngineDependencyError(details: PhysicsOptionalEngineInstallDetails, cause?: unknown): PhysicsOptionalEn | CODE |
| LOW⚡ | etc/api-surface/semiotic-recipes-core.api.md | 59 | function composePhysicsControllers(controllers: readonly PhysicsController[] | null | undefined): ComposedPhysicsControl | CODE |
| LOW⚡ | etc/api-surface/semiotic-recipes-core.api.md | 60 | function createCapacityQueueController(options: CapacityQueueControllerOptions): PhysicsController | CODE |
| LOW⚡ | etc/api-surface/semiotic-recipes-core.api.md | 61 | function createDependencyGateController(options: DependencyGateOptions): DependencyGateController | CODE |
| LOW⚡ | etc/api-surface/semiotic-recipes-core.api.md | 63 | function createProcessJourneyLedger(options: { stages: readonly ProcessJourneyStage[]; bodyIds?: readonly string[]; }): | CODE |
| LOW⚡ | etc/api-surface/semiotic-recipes-core.api.md | 64 | function createServiceLevelController(options: ServiceLevelControllerOptions): ServiceLevelController | CODE |
| LOW⚡ | etc/api-surface/semiotic-recipes-core.api.md | 65 | function createServiceResourcePoolController(options: ServiceResourcePoolOptions): ServiceResourcePoolController | CODE |
| LOW | etc/api-surface/semiotic-recipes-core.api.md | 118 | function mobileSmallMultipleRecipe(options?: MobileChartFamilyRecipeOptions | undefined): MobileChartFamilyRecipe | CODE |
| LOW | etc/api-surface/semiotic-recipes-core.api.md | 130 | function parallelCoordinatesLayout(*: OrdinalLayoutContext<import("../semiotic-recipes-core").ParallelCoordinatesConfig> | CODE |
| LOW | etc/api-surface/semiotic-recipes-core.api.md | 146 | function regionCountsToProjectionRows(counts: RegionCountMap, order?: readonly string[] | undefined): { label: string; v | CODE |
| LOW | etc/api-surface/semiotic-recipes-core.api.md | 168 | function tokenTaskIntentToCapabilityIntents(intent: TokenTaskIntent): TokenCapabilityIntent[] | CODE |
| LOW | etc/api-surface/semiotic-physics.api.md | 25 | function bodiesToAnnotationAnchors(bodies: readonly PhysicsBodyState[]): PhysicsAnnotationAnchorNode[] | CODE |
| LOW | etc/api-surface/semiotic-physics.api.md | 31 | function buildPhysicsAnnotationContext(options: { width: number; height: number; pointNodes?: PhysicsAnnotationAnchorNod | CODE |
| LOW⚡ | etc/api-surface/semiotic-physics.api.md | 42 | function composePhysicsControllers(controllers: readonly PhysicsController[] | null | undefined): ComposedPhysicsControl | CODE |
| LOW⚡ | etc/api-surface/semiotic-physics.api.md | 43 | function createCapacityQueueController(options: CapacityQueueControllerOptions): PhysicsController | CODE |
| LOW⚡ | etc/api-surface/semiotic-physics.api.md | 44 | function createDefaultPhysicsEngineAdapter(options?: PhysicsKernelOptions | undefined): PhysicsEngineAdapter | CODE |
| LOW⚡ | etc/api-surface/semiotic-physics.api.md | 45 | function createDependencyGateController(options: DependencyGateOptions): DependencyGateController | CODE |
| LOW⚡ | etc/api-surface/semiotic-physics.api.md | 49 | function createProcessJourneyLedger(options: { stages: readonly ProcessJourneyStage[]; bodyIds?: readonly string[]; }): | CODE |
| LOW⚡ | etc/api-surface/semiotic-physics.api.md | 50 | function createServiceLevelController(options: ServiceLevelControllerOptions): ServiceLevelController | CODE |
| LOW⚡ | etc/api-surface/semiotic-physics.api.md | 51 | function createServiceResourcePoolController(options: ServiceResourcePoolOptions): ServiceResourcePoolController | CODE |
| LOW⚡ | etc/api-surface/semiotic-physics.api.md | 54 | function evaluatePhysicsBodyBudget(input: PhysicsBodyBudgetInput): PhysicsBodyBudgetDecision | CODE |
| LOW⚡ | etc/api-surface/semiotic-physics.api.md | 59 | function normalizePhysicsAnnotations(annotations: Datum[] | undefined): Datum[] | undefined | CODE |
| LOW⚡ | etc/api-surface/semiotic-physics.api.md | 61 | function physicsProcessBoundaryColliders(shape: PhysicsColliderShape, options?: PhysicsProcessBoundaryOptions | undefine | CODE |
| LOW⚡ | etc/api-surface/semiotic-physics.api.md | 63 | function physicsProcessRegionSemanticItem(region: StreamPhysicsRegionEffect): PhysicsSemanticItem | null | CODE |
| LOW⚡ | etc/api-surface/semiotic-physics.api.md | 64 | function physicsProcessStageSemanticItems(stages: readonly PhysicsProcessStage[]): PhysicsSemanticItem[] | CODE |
| LOW | etc/api-surface/semiotic-physics.api.md | 75 | function regionCountsToProjectionRows(counts: RegionCountMap, order?: readonly string[] | undefined): { label: string; v | CODE |
| LOW | etc/api-surface/semiotic-ai-core.api.md | 13 | function communicativeActForIntent(intent: IntentId): CommunicativeAct | undefined | CODE |
| LOW | etc/api-surface/semiotic-ai-core.api.md | 24 | function formatMobileVisualizationAudit(result: MobileVisualizationAuditResult): string | CODE |
| LOW | etc/api-surface/semiotic-ai-core.api.md | 29 | function mobileVisualizationCaveats(): string[] | CODE |
| LOW | etc/api-surface/semiotic-utils.api.md | 25 | function communicativeActForIntent(intent: IntentId): CommunicativeAct | undefined | CODE |
| LOW | etc/api-surface/semiotic-utils.api.md | 38 | function formatMobileVisualizationAudit(result: MobileVisualizationAuditResult): string | CODE |
| LOW | etc/api-surface/semiotic-utils.api.md | 44 | function mobileVisualizationCaveats(): string[] | CODE |
| LOW | etc/api-surface/semiotic-ai.api.md | 88 | function MobileAnnotationCalloutList({ items, title, empty, ordered, renderItem, className, style, }: MobileAnnotationCa | CODE |
| LOW⚡ | etc/api-surface/semiotic-ai.api.md | 130 | function auditVisualizationControls({ controls, minimumTargetSize, }: AuditVisualizationControlsOptions): ControlAuditRe | CODE |
| LOW⚡ | etc/api-surface/semiotic-ai.api.md | 134 | function buildRecipeNavigationTree(recipe: ChartRecipe<Datum, Record<string, unknown>>, props: Datum, options?: RecipeNa | CODE |
| LOW⚡ | etc/api-surface/semiotic-ai.api.md | 141 | function communicativeActForIntent(intent: IntentId): CommunicativeAct | undefined | CODE |
| LOW⚡ | etc/api-surface/semiotic-ai.api.md | 149 | function createIndexedDBConversationArcSink(options?: IndexedDBConversationArcSinkOptions | undefined): ConversationArcS | CODE |
| LOW⚡ | etc/api-surface/semiotic-ai.api.md | 150 | function createLocalStorageConversationArcSink(options?: LocalStorageConversationArcSinkOptions | undefined): Conversati | CODE |
| 370 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | integration-tests/helpers.ts | 121 | state.stableCount = 0 | COMMENT |
| LOW | integration-tests/process-sankey.spec.ts | 81 | await expect(tc).toBeVisible() | COMMENT |
| LOW | integration-tests/ordinal-frame.spec.ts | 41 | // SwarmPlot's `valueExtent` prop maps to the frame's `rExtent`. Each | COMMENT |
| LOW | integration-tests/realtime-charts.spec.ts | 121 | // by `computeCanvasAriaLabel` — it only carries a node count | COMMENT |
| LOW | integration-tests/status-scale-theme-examples/index.js | 1 | // Status-aware + scale theme matrix for Phase A milestone 3. | COMMENT |
| LOW | integration-tests/realtime-examples/index.js | 141 | } | COMMENT |
| LOW | integration-tests/ordinal-examples/index.js | 441 | // • [undefined, max] — only the max pinned, min stays data-derived | COMMENT |
| LOW | …gration-tests/histogram-theme-stroke-examples/index.js | 1 | // RealtimeHistogram theme-aware stroke regression harness. | COMMENT |
| LOW | integration-tests/background-graphics-examples/index.js | 1 | import * as Semiotic from "../../dist/semiotic.module.min.js" | COMMENT |
| LOW | integration-tests/chart-modes-examples/index.js | 1 | // Chart-mode visual regression matrix. | COMMENT |
| LOW | integration-tests/primitive-props-examples/index.js | 1 | // Primitive-props matrix for Phase B. | COMMENT |
| LOW | …gration-tests/primitive-theme-matrix-examples/index.js | 1 | // Primitive-theme matrix: Ordinal / Network / Geo under light + dark. | COMMENT |
| LOW | docs/src/blog/entries/difference-chart.jsx | 1 | import React, { useRef } from "react" | COMMENT |
| LOW | docs/src/components/apiDocs.js | 1 | const KIND_INTERFACE = 256 | COMMENT |
| LOW | docs/src/components/codegen.js | 1 | // Pure code-string generation for LiveExample. | COMMENT |
| LOW | docs/src/components/reshapeSuggestions.js | 1 | // Generative reshape suggestions — the "your flat table could become this" layer. | COMMENT |
| LOW | docs/src/examples/recipes/AnscombesSankey.jsx | 41 | // sequence and stay durations relative to admit time. Cycle | COMMENT |
| LOW | docs/src/examples/recipes/PatientJourneys.jsx | 41 | // rightmost discharge slots easier to read in the small height the | COMMENT |
| LOW | docs/src/examples/recipes/data/kstreamsTopology.js | 1 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| LOW | docs/src/examples/recipes/data/dagLayout.js | 1 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| LOW | docs/src/pages/custom-charts/CustomLayoutsPage.jsx | 41 | const base = dow === 0 || dow === 6 ? 0.8 : 2.4 | COMMENT |
| LOW | docs/src/pages/custom-charts/CustomLayoutsPage.jsx | 61 | // is something d3-tree can express but uniform-height layouts pad | COMMENT |
| LOW | docs/src/pages/charts/ProcessSankeyPage.jsx | 221 | // and joined the queue | COMMENT |
| LOW | docs/src/pages/examples/data/worldDevelopment.js | 1 | // Real data: World Bank, World Development Indicators (data.worldbank.org), | COMMENT |
| LOW | docs/src/pages/examples/data/worldDevelopment.js | 601 | COMMENT | |
| LOW | docs/src/pages/examples/data/urineWheel.js | 1 | // The Wheel of Urines — data for a medieval uroscopy diagnostic chart. | COMMENT |
| LOW | docs/src/pages/examples/data/gestaltData.js | 1 | // Data + small deterministic layout helpers for the chapterized | COMMENT |
| LOW | docs/src/pages/accessibility/AccessibilityPage.jsx | 201 | COMMENT | |
| LOW | ai/mcp-server.ts | 2741 | } | COMMENT |
| LOW | ai/mcp-server.ts | 2761 | // this in the request handler. Set MCP_ALLOWED_HOSTS to your public | COMMENT |
| LOW | scripts/check-ssr-alignment.js | 101 | // Composite/wrapper charts — not standalone renderable | COMMENT |
| LOW | scripts/check-ssr-alignment.js | 181 | const blockStart = ssrSource.indexOf(`const ${varName}:`) | COMMENT |
| LOW | scripts/rollback-release.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | .github/workflows/release.yml | 261 | } | COMMENT |
| LOW | src/components/LinkedCharts.tsx | 261 | // sits below (the first chart in the composed layout). | COMMENT |
| LOW | src/components/ThemeProvider.tsx | 181 | // with the literal default as the fallback — overriding the var | COMMENT |
| LOW | src/components/Tooltip/Tooltip.tsx | 461 | export function normalizeTooltip(tooltip: TooltipProp | undefined): false | TooltipContentFn | undefined { | COMMENT |
| LOW | src/components/Tooltip/Tooltip.tsx | 501 | && hoverData.data !== undefined | COMMENT |
| LOW | src/components/Tooltip/FlippingTooltip.test.tsx | 241 | <div>content</div> | COMMENT |
| LOW | src/components/Tooltip/FlippingTooltip.tsx | 161 | COMMENT | |
| LOW | src/components/stream/SceneToSVG.tsx | 721 | case "symbol": | COMMENT |
| LOW | src/components/stream/StreamXYFrame.hydration.test.tsx | 121 | expect(html).not.toContain("<canvas") | COMMENT |
| LOW | src/components/stream/StreamXYFrame.tsx | 221 | // dirtyRef is declared before useFrame so it can be threaded in for | COMMENT |
| LOW | src/components/stream/StreamXYFrame.tsx | 261 | // - Pure CSR mounts (no SSR HTML) skip the SVG branch entirely | COMMENT |
| LOW | src/components/stream/StreamXYFrame.tsx | 661 | // Without a hit, only multi-tooltip (hover-anywhere) mode has anything | COMMENT |
| LOW | src/components/stream/StreamXYFrame.tsx | 961 | ctx.clearRect(-margin.left, -margin.top, size[0], size[1]) | COMMENT |
| LOW | src/components/stream/StreamXYFrame.tsx | 1221 | COMMENT | |
| LOW | src/components/stream/useFrame.ts | 201 | tableId: string | COMMENT |
| LOW | src/components/stream/OrdinalPipelineStore.test.ts | 941 | }) | COMMENT |
| LOW | src/components/stream/restylePaint.frame.test.tsx | 1 | import { describe, it, expect, beforeEach, afterEach, vi } from "vitest" | COMMENT |
| LOW | src/components/stream/sampleCurvePath.test.ts | 41 | ] | COMMENT |
| LOW | src/components/stream/NetworkCanvasHitTester.test.ts | 261 | // Note: bezier and ribbon hit testing uses Path2D + canvas isPointInPath, | COMMENT |
| LOW | src/components/stream/geoPipelineHelpers.ts | 81 | ): Style { | COMMENT |
| LOW | src/components/stream/PipelineStore.ts | 521 | COMMENT | |
| LOW | src/components/stream/PipelineStore.ts | 1441 | // remount. Existing pulse timestamps deliberately survive color/duration | COMMENT |
| LOW | src/components/stream/useHydration.ts | 161 | cancelRender?.() | COMMENT |
| LOW | src/components/stream/NetworkPipelineStore.ts | 121 | // frame). Hit testing reads `sceneNodes`, which only change in buildScene(), | COMMENT |
| LOW | src/components/stream/NetworkPipelineStore.ts | 421 | // For customNetworkLayout charts (e.g. ProcessSankey), `runLayout` | COMMENT |
| LOW | src/components/stream/PipelineStore.stackOrder.test.ts | 141 | // string ≠ "key" without an explicit `else` for unknown values, | COMMENT |
| LOW | src/components/stream/OrdinalPipelineStore.ts | 481 | } | COMMENT |
| 65 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | MIGRATION.md | 30 | ## Step 1: Update React | COMMENT |
| LOW | MIGRATION.md | 41 | ## Step 2: Install Semiotic v3 | COMMENT |
| LOW | MIGRATION.md | 47 | ## Step 3: Understand the Frame Changes | COMMENT |
| LOW | MIGRATION.md | 120 | ## Step 4: Check for Removed APIs | COMMENT |
| LOW | MIGRATION.md | 172 | ## Step 5: Adopt Chart HOCs (Recommended) | COMMENT |
| LOW | MIGRATION.md | 228 | ## Step 6: Use Streaming (Optional) | COMMENT |
| LOW | MIGRATION.md | 300 | ## Step 7: Use Granular Imports for Smaller Bundles | COMMENT |
| LOW | MIGRATION.md | 325 | ## Step 8: TypeScript (Optional) | COMMENT |
| LOW | MIGRATION.md | 351 | ## Step 9: Next.js / SSR Frameworks | COMMENT |
| LOW⚡ | benchmarks/unit/large-dataset-processing.bench.ts | 217 | // Step 1: Parse CSV | COMMENT |
| LOW⚡ | benchmarks/unit/large-dataset-processing.bench.ts | 220 | // Step 2: Transform to typed points | COMMENT |
| LOW | benchmarks/unit/large-dataset-processing.bench.ts | 232 | // Step 3: Calculate extents | COMMENT |
| LOW | benchmarks/unit/large-dataset-processing.bench.ts | 245 | // Step 4: Project points (accessor application) | COMMENT |
| LOW⚡ | benchmarks/unit/hierarchy-processing.bench.ts | 175 | // Step 1: Build hierarchy + layout | COMMENT |
| LOW⚡ | benchmarks/unit/hierarchy-processing.bench.ts | 181 | // Step 2: Flatten to nodes/edges | COMMENT |
| LOW⚡ | scripts/rollback-release.sh | 78 | # Step 1: Deprecate the bad version | COMMENT |
| LOW⚡ | scripts/rollback-release.sh | 84 | # Step 2: Point dist-tag to previous good version | COMMENT |
| LOW⚡ | scripts/rollback-release.sh | 90 | # Step 3: Verify | COMMENT |
| LOW⚡ | src/components/stream/GeoPipelineStore.ts | 495 | // Step 1: Resolve projection | COMMENT |
| LOW⚡ | src/components/stream/GeoPipelineStore.ts | 499 | // Step 2: Compute bounds and fit projection | COMMENT |
| LOW⚡ | src/components/stream/GeoPipelineStore.ts | 505 | // Step 3: Build scales object | COMMENT |
| LOW⚡ | src/components/stream/GeoPipelineStore.ts | 549 | // Step 5: Apply distance cartogram transform | COMMENT |
| LOW⚡ | src/components/stream/GeoPipelineStore.ts | 554 | // Step 6: Apply realtime encodings | COMMENT |
| LOW⚡ | src/components/stream/GeoPipelineStore.ts | 562 | // Step 7: Intro animation — synthesize center-origin prev scene on first render | COMMENT |
| LOW⚡ | src/components/stream/GeoPipelineStore.ts | 576 | // Step 8: Data-change transition | COMMENT |
| LOW | src/components/stream/GeoPipelineStore.ts | 521 | // Step 4: Build scene nodes | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | benchmarks/unit/large-dataset-processing.bench.ts | 217 | // Step 1: Parse CSV | COMMENT |
| LOW⚡ | benchmarks/unit/large-dataset-processing.bench.ts | 220 | // Step 2: Transform to typed points | COMMENT |
| LOW | benchmarks/unit/large-dataset-processing.bench.ts | 232 | // Step 3: Calculate extents | COMMENT |
| LOW | benchmarks/unit/large-dataset-processing.bench.ts | 245 | // Step 4: Project points (accessor application) | COMMENT |
| LOW⚡ | benchmarks/unit/hierarchy-processing.bench.ts | 175 | // Step 1: Build hierarchy + layout | COMMENT |
| LOW⚡ | benchmarks/unit/hierarchy-processing.bench.ts | 181 | // Step 2: Flatten to nodes/edges | COMMENT |
| LOW⚡ | scripts/rollback-release.sh | 78 | # Step 1: Deprecate the bad version | COMMENT |
| LOW⚡ | scripts/rollback-release.sh | 84 | # Step 2: Point dist-tag to previous good version | COMMENT |
| LOW⚡ | scripts/rollback-release.sh | 90 | # Step 3: Verify | COMMENT |
| LOW⚡ | src/components/stream/GeoPipelineStore.ts | 495 | // Step 1: Resolve projection | COMMENT |
| LOW⚡ | src/components/stream/GeoPipelineStore.ts | 499 | // Step 2: Compute bounds and fit projection | COMMENT |
| LOW⚡ | src/components/stream/GeoPipelineStore.ts | 505 | // Step 3: Build scales object | COMMENT |
| LOW⚡ | src/components/stream/GeoPipelineStore.ts | 549 | // Step 5: Apply distance cartogram transform | COMMENT |
| LOW⚡ | src/components/stream/GeoPipelineStore.ts | 554 | // Step 6: Apply realtime encodings | COMMENT |
| LOW⚡ | src/components/stream/GeoPipelineStore.ts | 562 | // Step 7: Intro animation — synthesize center-origin prev scene on first render | COMMENT |
| LOW⚡ | src/components/stream/GeoPipelineStore.ts | 576 | // Step 8: Data-change transition | COMMENT |
| LOW | src/components/stream/GeoPipelineStore.ts | 521 | // Step 4: Build scene nodes | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | docs/src/IndexPages.jsx | 294 | in real time with auto-generated code. | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/add-legend-to-hocs.sh | 20 | # Check if createLegend import already exists | COMMENT |
| LOW | scripts/add-legend-to-hocs.sh | 27 | # Check if showLegend prop already exists | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/components/charts/shared/formatUtils.ts | 212 | // Use median gap to be robust against one-off outliers | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | src/components/charts/custom/NetworkCustomChart.tsx | 149 | // Selection / linked-hover wiring — the custom-chart scaffold is the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | docs/src/pages/playground/DonutChartPlayground.jsx | 36 | { category: "Acme Corp", amount: 34 }, | CODE |
| LOW | docs/src/pages/playground/DonutChartPlayground.jsx | 64 | { category: "Acme Corp", amount: 34 }, | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/rollback-release.sh | 6 | # Usage: | COMMENT |