Agentic BI. Analytics at the speed of code ⚡️
This report summarizes scanner evidence for lightdash/lightdash, a TypeScript project with 6,215 GitHub stars. SynthScan examined 2,731,980 lines of code across 10769 source files, recording 976 pattern matches distributed across 19 syntactic categories. The legacy adjusted pattern signal is 0.6 (Low pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.
Can maintainers explain intent, assumptions, and trade-offs? 666 finding(s).
Are imports declared and package/API names verified? 166 finding(s).
Are wrappers, guards, and repeated structures necessary? 505 finding(s).
Which changes need focused human review? 976 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 976 distinct pattern matches across 19 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. 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 configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | examples/metricflow-demo/legacy-spec/models/schema.yml | 28 | # ── Legacy MetricFlow spec: top-level semantic_models + metrics ────────────── | COMMENT |
| MEDIUM | examples/metricflow-demo/cloud/models/schema.yml | 28 | # ── Legacy MetricFlow spec: top-level semantic_models + metrics ────────────── | COMMENT |
| MEDIUM | examples/metricflow-demo/latest-spec/models/orders.yml | 1 | # ── Latest MetricFlow spec (dbt Fusion / dbt platform / dbt Core 1.12+) ────── | COMMENT |
| MEDIUM | scripts/dev-fast-start.sh | 66 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/dev-fast-start.sh | 75 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/dev-fast-start.sh | 92 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/dev-fast-start.sh | 109 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/dev-fast-start.sh | 130 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/dev-fast-start.sh | 180 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/dev-fast-start.sh | 325 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/dev-fast-start.sh | 360 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/dev-fast-start.sh | 384 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/dev-fast-start.sh | 420 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/dev-fast-start.sh | 487 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/dev-fast-start.sh | 499 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/dev-fast-start.sh | 543 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/dev-fast-start.sh | 557 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/dev-fast-start.sh | 568 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/dev-fast-start.sh | 585 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/dev-fast-start.sh | 611 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/dev-fast-start.sh | 668 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/k8s-dev/up.sh | 11 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/k8s-dev/up.sh | 32 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/k8s-dev/up.sh | 39 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/k8s-dev/up.sh | 44 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/k8s-dev/up.sh | 65 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/k8s-dev/up.sh | 84 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/k8s-dev/up.sh | 96 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/k8s-dev/up.sh | 136 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/k8s-dev/up.sh | 152 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/k8s-dev/up.sh | 161 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/k8s-dev/up.sh | 179 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/aks-dev/up.sh | 18 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/aks-dev/up.sh | 26 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | scripts/aks-dev/up.sh | 33 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/aks-dev/up.sh | 51 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/aks-dev/up.sh | 70 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/aks-dev/up.sh | 82 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/aks-dev/up.sh | 133 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/aks-dev/up.sh | 158 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/aks-dev/up.sh | 180 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/aks-dev/up.sh | 190 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/aks-dev/up.sh | 209 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | scripts/aks-dev/up.sh | 226 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | …ges/warehouses/src/warehouseClients/pgProtocolGuard.ts | 7 | // ─── Background: the PostgreSQL wire protocol ───────────────────────────────── | COMMENT |
| MEDIUM⚡ | …ges/warehouses/src/warehouseClients/pgProtocolGuard.ts | 13 | // ┌──────┬──────────────┬──────────────────────────┐ | COMMENT |
| MEDIUM⚡ | …ges/warehouses/src/warehouseClients/pgProtocolGuard.ts | 16 | // └──────┴──────────────┴──────────────────────────┘ | COMMENT |
| MEDIUM | …ges/warehouses/src/warehouseClients/pgProtocolGuard.ts | 40 | // ─── Why Redshift sends sub-code 13 ─────────────────────────────────────────── | COMMENT |
| MEDIUM | …ges/warehouses/src/warehouseClients/pgProtocolGuard.ts | 50 | // ─── Why the throw crashes the backend ──────────────────────────────────────── | COMMENT |
| MEDIUM | …ges/warehouses/src/warehouseClients/pgProtocolGuard.ts | 66 | // ─── What this guard does ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ges/warehouses/src/warehouseClients/pgProtocolGuard.ts | 82 | // ─── Scope / blast radius ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …ges/warehouses/src/warehouseClients/pgProtocolGuard.ts | 97 | // ─── Caveat ─────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …rontend/src/components/SimpleMap/hexbin/hexbinUtils.ts | 183 | // ─── Viewport-based empty-cell fill ──────────────────────────────────────── | COMMENT |
| MEDIUM | packages/formula-tests/cases/window.cases.ts | 5 | // ── RUNNING_TOTAL ───────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/formula-tests/cases/window.cases.ts | 184 | // ── ROW_NUMBER ──────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/formula-tests/cases/window.cases.ts | 293 | // ── LAG ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/formula-tests/cases/window.cases.ts | 409 | // ── defaultOrderBy fallback ─────────────────────────────────── | COMMENT |
| MEDIUM | packages/formula-tests/cases/window.cases.ts | 529 | // ── LEAD ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | packages/formula-tests/cases/window.cases.ts | 645 | // ── CROSS-FUNCTION COMBINATIONS ────────────────────────────── | COMMENT |
| MEDIUM | packages/formula-tests/cases/window.cases.ts | 780 | // ── RANK ─────────────────────────────────────────────────────── | COMMENT |
| 74 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …affle-shop-demo/dbt/scripts/generate_product_events.py | 82 | def generate_event_properties(event_type: str, session_context: dict) -> dict: | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 198 | def test_repeated_freeze_keeps_original_slack_owner(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 208 | def test_repeated_slack_freeze_keeps_github_owner(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 214 | def test_spoofed_or_unconfigured_dispatcher_rejected(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 221 | def test_dispatcher_without_identity_rejected(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 226 | def test_invalid_slack_inputs_rejected_without_echo(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 236 | def test_other_verified_slack_employee_can_unfreeze(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 244 | def test_github_user_cannot_unfreeze_slack_owner(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 249 | def test_verified_slack_employee_can_unfreeze_github_or_unknown_owner(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 259 | def test_owner_unfreezes_and_preserves_ruleset(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 268 | def test_direct_github_freeze_and_case_insensitive_unfreeze(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 274 | def test_direct_unknown_owner_escape_hatch(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 279 | def test_direct_github_without_dispatcher_configuration(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 284 | def test_other_github_user_cannot_unfreeze(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 289 | def test_repeat_unknown_freeze_does_not_claim_owner(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 296 | def test_open_unfreeze_only_cleans_up(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 303 | def test_new_status_rule_can_be_added_and_removed(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 310 | def test_live_owner_lookup_failure_never_mutates(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 316 | def test_failed_or_noop_owner_write_never_freezes(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 324 | def test_failed_owner_readback_never_freezes(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 329 | def test_invalid_variable_response_never_mutates(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 336 | def test_invalid_recorded_owner_never_mutates(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 341 | def test_duplicate_owner_never_mutates(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 349 | def test_invalid_action_never_mutates(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 353 | def test_serialized_requests_use_live_owner(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 362 | def test_failed_ruleset_write_can_be_retried(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 369 | def test_announcement_mentions_authenticated_slack_user(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 432 | def test_invalid_ruleset_pin_never_mutates(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 439 | def test_missing_ruleset_pin_never_falls_back(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 444 | def test_ineligible_ruleset_pin_never_falls_back(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 453 | def test_excluded_ruleset_pin_never_falls_back(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 461 | def test_pin_requires_explicit_default_branch_coverage(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 469 | def test_known_other_branch_exclusion_allows_pin(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 475 | def test_single_match_fallback_honours_exclusions(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 480 | def test_another_ruleset_freeze_blocks_freeze_and_unfreeze(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 493 | def test_duplicate_ruleset_pin_never_mutates(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 501 | def test_organization_freeze_also_blocks_selected_repository_rule(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 509 | def test_ambiguous_other_freeze_requires_admin_review(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 517 | def test_definitely_excluded_other_freeze_is_untouched(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 526 | def test_all_branches_pin_covers_default(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 531 | def test_pin_allows_another_employee_and_preserves_other_rulesets(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 572 | def test_delayed_status_writer_observes_completed_unfreeze(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 578 | def test_unfreeze_reconciles_a_status_writer_that_finishes_first(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 585 | def test_repeat_unfreeze_refreshes_stale_statuses(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 592 | def test_status_writer_checks_every_page_of_effective_rules(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 599 | def test_status_read_failure_does_not_publish_success(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 604 | def test_malformed_rules_do_not_publish_success(self): | CODE |
| LOW⚡ | scripts/merge-freeze-workflow.test.py | 611 | def test_status_and_toggle_share_a_non_replacing_lock(self): | CODE |
| LOW | scripts/merge-freeze-workflow.test.py | 181 | def test_trusted_freeze_persists_owner_before_enforcement(self): | CODE |
| LOW | scripts/merge-freeze-workflow.test.py | 400 | def test_two_rulesets_without_pin_reproduce_live_failure(self): | CODE |
| LOW | scripts/merge-freeze-workflow.test.py | 406 | def test_pin_selects_main_and_preserves_both_rulesets(self): | CODE |
| LOW | scripts/merge-freeze-workflow.test.py | 551 | def test_unfreeze_reports_pull_listing_failure(self): | CODE |
| LOW | scripts/merge-freeze-workflow.test.py | 556 | def test_invalid_pull_pages_fail_recovery(self): | CODE |
| LOW | scripts/sql-migration-lint.ts | 869 | export function changedMigrationPathsFromNameStatus( | CODE |
| LOW | scripts/sql-migration-lint.ts | 905 | export function evaluateMigrationEnforcement( | CODE |
| LOW | scripts/release-safety-index.ts | 55 | export function appendReleaseSafetyMarker(input: { | CODE |
| LOW | scripts/release-safety-pr-comment.ts | 98 | function renderDeclaredBreakReasons(marker: Marker): string { | CODE |
| LOW | scripts/breaking-change-declarations.ts | 151 | function scanTemplateInterpolation(source: string, start: number, line: number): ScannedSource { | CODE |
| LOW | scripts/breaking-change-declarations.ts | 732 | export function collectChangeDeclarationsFromSources( | CODE |
| LOW | scripts/breaking-change-declarations.ts | 749 | export function collectChangeDeclarations( | CODE |
| 301 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …/DashboardTileStatusProvider.characterization.test.tsx | 594 | mocks.embed.dispatchEmbedEvent.mock.calls.filter( | CODE |
| CRITICAL | …end/src/features/learnSandbox/WorkspaceEditor.test.tsx | 665 | const [changed] = stubs.editor.onDidChangeModelContent.mock.calls.at( | CODE |
| CRITICAL | …/src/features/documents/editor/documentContent.test.ts | 68 | const types = editor.state.doc.content.content.map((node) => | CODE |
| CRITICAL | packages/backend/src/dbt/DbtMetadataApiClient.ts | 576 | results.environment.applied.models.edges.map(({ node }) => { | CODE |
| CRITICAL | …es/backend/src/ee/services/AiAgentAdminService.test.ts | 4445 | h.model.updateReviewRemediationStatus.mock.calls.map( | CODE |
| CRITICAL | …services/AiWritebackService/AiWritebackService.test.ts | 2680 | sandbox.commands.run.mock.calls.filter(([command]: [string]) => | CODE |
| CRITICAL | …services/AiWritebackService/AiWritebackService.test.ts | 2688 | sandbox.commands.run.mock.calls.filter(([command]: [string]) => | CODE |
| CRITICAL | …services/AiWritebackService/AiWritebackService.test.ts | 3568 | sandbox.files.write.mock.calls.find( | CODE |
| CRITICAL | …AiWritebackService/providers/BitbucketProvider.test.ts | 772 | sandbox.commands.run.mock.calls.filter(([command]) => | CODE |
| CRITICAL | …rateService/AppGenerateService.externalSamples.test.ts | 405 | const promptWrite = sandbox.files.write.mock.calls.find( | CODE |
| CRITICAL | …es/backend/src/ee/services/ai/decisions/chartIntent.ts | 1658 | context.artifact.config.queryConfig.dimensions.includes(id), | CODE |
| CRITICAL | …/DataAppAnalysisService/DataAppAnalysisService.test.ts | 952 | const [bareCall] = bare.dataAppAnalysisModel.create.mock.calls.map( | CODE |
| CRITICAL | …/DataAppAnalysisService/DataAppAnalysisService.test.ts | 956 | withDefault.dataAppAnalysisModel.create.mock.calls.map( | CODE |
| CRITICAL | …ificationService/MobilePushNotificationService.test.ts | 929 | dependencies.apnsClient.sendLiveActivityStart.mock.calls.map( | CODE |
| CRITICAL | packages/backend/src/services/UserService.ts | 873 | this.lightdashConfig.auth.pat.allowedOrgRoles.includes( | CODE |
| CRITICAL | …rc/services/OrganizationService/OrganizationService.ts | 596 | this.lightdashConfig.auth.pat.allowedOrgRoles.includes( | CODE |
| CRITICAL | …ces/ProjectService/compileCredentialResolution.test.ts | 1018 | f.featureFlagModel.get.mock.calls.filter( | CODE |
| CRITICAL | …ces/ProjectService/compileCredentialResolution.test.ts | 1363 | f.featureFlagModel.get.mock.calls.filter( | CODE |
| CRITICAL | …ckend/src/services/UnfurlService/UnfurlService.test.ts | 1774 | const registration = page.pageContext.route.mock.calls.find( | CODE |
| CRITICAL | …ckend/src/services/UnfurlService/UnfurlService.test.ts | 1801 | page.pageContext.routeWebSocket.mock.calls.find( | CODE |
| CRITICAL | …iServiceAccountService/AiServiceAccountService.test.ts | 1555 | f.analytics.track.mock.calls.map(([event]) => event.event), | CODE |
| CRITICAL | …ages/backend/src/services/RolesService/RolesService.ts | 1274 | this.lightdashConfig.auth.pat.allowedOrgRoles.includes( | CODE |
| CRITICAL | …ages/backend/src/services/RolesService/RolesService.ts | 1890 | this.lightdashConfig.auth.pat.allowedOrgRoles.includes( | CODE |
| CRITICAL | …src/analytics/eventStream/UsageEventsCompactor.test.ts | 633 | metrics.usageProcessing.finish.mock.calls.map(([stage, result]) => [ | CODE |
| CRITICAL | packages/api-tests/helpers/merge-query-suite.ts | 1563 | started.body.results.appliedDashboardFilters.dimensions.map( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | release.config.js | 61 | 'pnpm generate-api:backend', | COMMENT |
| LOW | rainbow.toml | 1 | # rainbow.toml — how Lightdash runs on Rainbow. | COMMENT |
| LOW | rainbow.toml | 41 | # import them — through turbo, so the `frontend-build` rung below (which bakes | COMMENT |
| LOW | rainbow.toml | 121 | EMAIL_SMTP_SENDER_NAME = "Lightdash" | COMMENT |
| LOW | rainbow.toml | 161 | # a preview, and the port stays private to the environment. | COMMENT |
| LOW | rainbow.toml | 221 | # and visualization first — vite | COMMENT |
| LOW | pnpm-workspace.yaml | 121 | # reinstalls) node_modules before running any package script. The production | COMMENT |
| LOW | sandboxes/ai-writeback/build-local-image.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | sandboxes/microvm-agent/build-microvm-image.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | examples/metricflow-demo/test.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | examples/full-jaffle-shop-demo/dbt/models/events.yml | 381 | # This does NOT produce nested aggregation - it compiles to MAX(...) * COUNT(DISTINCT ...) | COMMENT |
| LOW | scripts/dev-ports.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/dev-feature-flags.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/dev-op-pull.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/release-safety-workflow-shape.test.ts | 21 | // SPK-857 removed the trigger-level `paths:` filter; SPK-924 (#27139) restored | COMMENT |
| LOW | scripts/dev-statusline.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/setup-dbt-venvs.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/dev-fast-start.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/dev-fast-start.sh | 321 | echo "WARN: for the full experience run '/docker-dev start ee' (or 'start newux' for the new onboarding UX) — it | COMMENT |
| LOW | scripts/dev-fast-start.sh | 541 | fi | COMMENT |
| LOW | scripts/gen-release-safety.ts | 681 | // problem leaves api.rest unchecked and never fails the release. Runs BEFORE | COMMENT |
| LOW | scripts/dev-reconcile.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/k8s-dev/reconcile-github.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | scripts/aks-dev/build-sandbox-image.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | packages/visualization/src/cartesian/timezoneShift.ts | 141 | COMMENT | |
| LOW | packages/visualization/src/cartesian/timezoneShift.ts | 421 | shiftedDim, | COMMENT |
| LOW | …uses/src/warehouseClients/DatabricksWarehouseClient.ts | 81 | // SQL_DATA_TYPE: null, | COMMENT |
| LOW | …ges/warehouses/src/warehouseClients/pgProtocolGuard.ts | 1 | // ============================================================================ | COMMENT |
| LOW | …ges/warehouses/src/warehouseClients/pgProtocolGuard.ts | 21 | // | COMMENT |
| LOW | …ges/warehouses/src/warehouseClients/pgProtocolGuard.ts | 41 | // | COMMENT |
| LOW | …ges/warehouses/src/warehouseClients/pgProtocolGuard.ts | 61 | // events, not by throwing out of a socket data handler. | COMMENT |
| LOW | …ges/warehouses/src/warehouseClients/pgProtocolGuard.ts | 81 | // | COMMENT |
| LOW | packages/frontend/src/ee/providers/Embed/types.ts | 81 | // The saved chart whose persisted custom SQL seeded this Explore. This is | COMMENT |
| LOW | …c/ee/features/homepageBuilder/resolveHomepageLayout.ts | 41 | // Where a row narrower than the page's widest sits on the horizontal axis. | COMMENT |
| LOW | …ontend/src/ee/features/homepageBuilder/blocks/types.ts | 1 | import { type HomepageBlock } from '@lightdash/common'; | COMMENT |
| LOW | …/aiCopilot/components/Admin/VerifiedArtifactsTable.tsx | 121 | // | COMMENT |
| LOW | …ckages/frontend/src/features/apps/utils/chatMessage.ts | 41 | externalConnections: ChatConnection[]; | COMMENT |
| LOW | …es/frontend/src/features/apps/hooks/useAppSdkBridge.ts | 641 | }: UseAppSdkBridgeParams) { | COMMENT |
| LOW | packages/frontend/src/hooks/useExplorerQuery.test.tsx | 161 | COMMENT | |
| LOW | …s/cartesianChartConfig/useCartesianChartConfig.test.ts | 721 | ['a', 'b', 'c'], | COMMENT |
| LOW | packages/frontend/src/pages/MinimalApp.tsx | 161 | return () => clearTimeout(timer); | COMMENT |
| LOW | packages/frontend/src/pages/AppGenerate.tsx | 341 | // When the user lands here from a space's "+ Add" menu we get | COMMENT |
| LOW | packages/frontend/src/pages/AppGenerate.tsx | 1281 | ); | COMMENT |
| LOW | packages/frontend/src/pages/MinimalDashboard.tsx | 481 | md: filteredAndSortedDashboardTiles.map<Layout>((tile) => | COMMENT |
| LOW | packages/formula-tests/runner/warehouse-connections.ts | 381 | }); | COMMENT |
| LOW | packages/backend/src/App.ts | 481 | // Short-circuit CORS preflights for data-app iframe asset fetches. | COMMENT |
| LOW | packages/backend/src/routers/appPreviewRouter.ts | 81 | // compute in workers created from blob: URLs. Blob workers execute the | COMMENT |
| LOW | packages/backend/src/routers/appPreviewRouter.ts | 401 | Logger.warn('Failed to record app HTML outcome'); | COMMENT |
| LOW | packages/backend/src/database/entities/apps.ts | 41 | // in-flight old code during a deploy. | COMMENT |
| LOW | packages/backend/src/tracing/tracing.ts | 781 | this.otel.initialize(); | COMMENT |
| LOW | packages/backend/src/ee/models/ServiceAccountModel.ts | 141 | // CASL still comes from `applyServiceAccountAbilities` via the SA auth | COMMENT |
| LOW | …kend/src/ee/services/AiAgentReviewClassifierService.ts | 161 | })[]; | COMMENT |
| LOW | …c/ee/services/AiWritebackService/AiWritebackService.ts | 4101 | // pause/resume, so a resumed turn would otherwise double-count prior runs. | COMMENT |
| LOW | …ackend/src/ee/services/AiWritebackService/templates.ts | 41 | // column's emitted TYPE); this one is about SQL STRUCTURE — reusing existing | COMMENT |
| LOW | …ackend/src/ee/services/AiWritebackService/constants.ts | 1 | // Where the repo is cloned inside the sandbox, and where the agent runs. | COMMENT |
| LOW | …ackend/src/ee/services/AiWritebackService/constants.ts | 21 | COMMENT | |
| LOW | …ackend/src/ee/services/AiWritebackService/constants.ts | 81 | export const SANDBOX_TIMEOUT_MS = 60 * 60 * 1000; | COMMENT |
| LOW | …ackend/src/ee/services/AiWritebackService/constants.ts | 121 | // Fine-grained tool permissions for the Claude Code CLI — used in place of | COMMENT |
| LOW | …ackend/src/ee/services/AiWritebackService/constants.ts | 201 | export const REPO_CONTEXT_TIMEOUT_MS = 30 * 1000; | COMMENT |
| LOW | …ackend/src/ee/services/AiWritebackService/constants.ts | 221 | // Last N bytes of the agent's stderr kept for diagnostics on a non-zero exit / | COMMENT |
| 73 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | scripts/breaking-change-gate-policy.ts | 8 | 'placeholder', | CODE |
| LOW | …e/features/aiCopilot/components/Admin/SearchFilter.tsx | 11 | Pick<TextInputProps, 'placeholder'> & { | CODE |
| LOW | …ot/components/Admin/AiAgentAdminMemoriesTable.test.tsx | 36 | user: { uuid: 'user-1', name: 'Jane Doe', email: 'jane@example.com' }, | CODE |
| LOW | …lot/components/Admin/settings/AiProvidersCard.test.tsx | 90 | 'placeholder', | CODE |
| LOW | …lot/components/Admin/settings/AiProvidersCard.test.tsx | 104 | 'placeholder', | CODE |
| LOW | …end/src/features/aiAccess/SnowflakeAgentSetup.test.tsx | 182 | 'placeholder', | CODE |
| LOW | …end/src/features/aiAccess/SnowflakeAgentSetup.test.tsx | 186 | 'placeholder', | CODE |
| LOW | …nd/src/features/dashboardControls/LinkPrompts.test.tsx | 239 | 'placeholder', | CODE |
| LOW | …nd/src/features/dashboardControls/LinkPrompts.test.tsx | 276 | 'placeholder', | CODE |
| LOW | …c/features/dashboardControls/SectionedFilters.test.tsx | 1651 | expect(input).toHaveAttribute('placeholder', 'Section name'); | CODE |
| LOW | …features/dashboardControls/ControlsSidebarProvider.tsx | 377 | current: FilterSources & Pick<Latest, 'placeholder'>, | CODE |
| LOW | …d/src/features/dashboardControls/FilterEditor.test.tsx | 616 | expect(input).toHaveAttribute('placeholder', 'Label for Status'); | CODE |
| LOW | …d/src/features/dashboardControls/FilterEditor.test.tsx | 631 | expect(nameInput()).toHaveAttribute('placeholder', 'Filter label'); | CODE |
| LOW | …d/src/features/dashboardControls/FilterEditor.test.tsx | 660 | 'placeholder', | CODE |
| LOW | …d/src/features/dashboardControls/FilterEditor.test.tsx | 683 | expect(nameInput()).toHaveAttribute('placeholder', 'Filter label'); | CODE |
| LOW | …d/src/features/dashboardControls/FilterEditor.test.tsx | 770 | 'placeholder', | CODE |
| LOW | …c/features/documents/DocumentChartEditorModal.test.tsx | 290 | 'placeholder', | CODE |
| LOW | packages/frontend/src/components/Avatar.tsx | 23 | Record<'root' | 'placeholder' | 'image', string> | CODE |
| LOW | …/components/ProjectConnection/DbtSourcesPanel.test.tsx | 300 | 'placeholder', | CODE |
| LOW⚡ | …nts/ProjectConnection/WarehouseLocationInputs.test.tsx | 69 | 'placeholder', | CODE |
| LOW⚡ | …nts/ProjectConnection/WarehouseLocationInputs.test.tsx | 73 | 'placeholder', | CODE |
| LOW⚡ | …nts/ProjectConnection/WarehouseLocationInputs.test.tsx | 83 | 'placeholder', | CODE |
| LOW | …s/frontend/src/components/common/MantineIcon/index.tsx | 39 | 'placeholder', | CODE |
| LOW | …s/VisualizationConfigs/common/RangeBoundInput.test.tsx | 33 | expect(input).toHaveAttribute('placeholder', 'Auto'); | CODE |
| LOW | packages/frontend/src/stories/Modal.stories.tsx | 688 | customer: 'Acme Corp', | CODE |
| LOW | …s/frontend/src/hooks/mantineFormCompatibility.test.tsx | 38 | result.current.setFieldValue('user.email', 'user@example.com'); | CODE |
| LOW | packages/frontend/src/pages/OrganizationSetup.test.tsx | 33 | const SUGGESTION_LABEL = /Use "Acme Inc"/; | CODE |
| LOW | packages/frontend/src/pages/OrganizationSetup.test.tsx | 399 | expect(nameInput).toHaveValue('Acme Inc'); | CODE |
| LOW | packages/frontend/src/pages/OrganizationSetup.test.tsx | 448 | expect(nameInput).toHaveValue('Acme Inc'); | CODE |
| LOW | packages/frontend/src/pages/OrganizationSetup.test.tsx | 492 | expect(nameInput).toHaveValue('Acme Inc'); | CODE |
| LOW | packages/frontend/src/pages/OrganizationSetup.test.tsx | 607 | expect(body.organizationName).toBe('Acme Inc'); | CODE |
| LOW | packages/frontend/src/pages/OrganizationSetup.test.tsx | 644 | await waitFor(() => expect(nameInput).toHaveValue('Acme Inc')); | CODE |
| LOW | packages/frontend/src/pages/OrganizationSetup.test.tsx | 660 | organizationName: 'Acme Inc', | CODE |
| LOW | packages/backend/src/clients/AGENTS.md | 24 | recipientEmail: 'user@example.com', | CODE |
| LOW | packages/backend/src/config/parseConfig.test.ts | 2087 | process.env.LD_SETUP_ADMIN_EMAIL = 'admin@example.com'; | CODE |
| LOW | packages/backend/src/config/parseConfig.test.ts | 2641 | process.env.LD_SETUP_ADMIN_EMAIL = 'admin@example.com'; | CODE |
| LOW | …c/ee/models/AiDeepResearchRunModel.integration.test.ts | 58 | uuid: 'placeholder', | CODE |
| LOW | …services/HomepageRecommendedActionSkipsService.test.ts | 60 | email: 'admin@example.com', | CODE |
| LOW | …es/backend/src/ee/services/AiAgentAdminService.test.ts | 166 | email: 'admin@example.com', | CODE |
| LOW | …backend/src/ee/services/ProjectHomepageService.test.ts | 72 | email: 'admin@example.com', | CODE |
| LOW | …ckend/src/ee/services/AiWritebackService/utils.test.ts | 698 | name: 'Jane Doe', | CODE |
| LOW | …ckend/src/ee/services/AiWritebackService/utils.test.ts | 703 | ).toEqual({ name: 'Jane Doe', email: 'jane@acme.com' }); | CODE |
| LOW | …c/ee/services/AiWritebackService/AiWritebackService.ts | 3599 | const patched = raw.replace(/\{\{.*?\}\}/g, 'placeholder'); | CODE |
| LOW | …ackend/src/ee/services/AiWritebackService/templates.ts | 183 | placeholder string (e.g. \`"placeholder"\`). The goal is a syntactically | CODE |
| LOW | …rc/ee/services/AiRouterService/AiRouterService.test.ts | 47 | email: 'user@example.com', | CODE |
| LOW | …es/AiDeepResearchService/AiDeepResearchService.test.ts | 864 | adminEmail: 'admin@example.com', | CODE |
| LOW | …ces/ProjectService/provisionOnboardingHomepage.test.ts | 27 | email: 'admin@example.com', | CODE |
| LOW | …ices/ProjectService/provisionPlaygroundProject.test.ts | 37 | email: 'admin@example.com', | CODE |
| LOW | …rvices/AiAgentCoderService/AiAgentCoderService.test.ts | 17 | email: 'admin@example.com', | CODE |
| LOW | …/AppGenerateService/AppGenerateService.appCode.test.ts | 427 | it.each(['compile', 'placeholder'])( | CODE |
| LOW | …/src/ee/services/RoadmapService/RoadmapService.test.ts | 46 | email: 'user@example.com', | CODE |
| LOW | …/src/ee/services/RoadmapService/RoadmapService.test.ts | 805 | email: 'user@example.com', | CODE |
| LOW | …d/src/ee/services/ai/utils/threadDumpSanitizer.test.ts | 41 | expect(sanitized.result).not.toContain('Acme Corp'); | CODE |
| LOW | …d/src/ee/services/ai/utils/threadDumpSanitizer.test.ts | 50 | result: '```json\n["Acme Corp", "Globex"]\n```', | CODE |
| LOW | …ages/backend/src/scheduler/SchedulerTaskTracer.test.ts | 119 | const resolveOrganizationName = vi.fn().mockResolvedValue('Acme Corp'); | CODE |
| LOW | …ages/backend/src/scheduler/SchedulerTaskTracer.test.ts | 136 | 'organization.name': 'Acme Corp', | CODE |
| LOW | …ckages/backend/src/models/SpacePermissionModel.test.ts | 34 | email: 'user@example.com', | CODE |
| LOW | …ckages/backend/src/models/SpacePermissionModel.test.ts | 64 | email: 'user@example.com', | CODE |
| LOW | packages/backend/src/models/UserModel.test.ts | 1570 | 'user@example.com', | CODE |
| LOW | …s/backend/src/models/ProjectModel/ProjectModel.test.ts | 3371 | 'Jane Doe', // space name | CODE |
| 70 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .context/PERMISSIONS.md | 515 | ### Step 1: Define the Scope | COMMENT |
| LOW | .context/PERMISSIONS.md | 531 | ### Step 2: Add CASL Subject (if new subject type) | COMMENT |
| LOW | .context/PERMISSIONS.md | 543 | ### Step 3: Add to System Role Mapping | COMMENT |
| LOW | .context/PERMISSIONS.md | 556 | ### Step 4: Update System Role Ability Builder | COMMENT |
| LOW | .context/PERMISSIONS.md | 572 | ### Step 5: Enforce in Service Layer | COMMENT |
| LOW | .context/PERMISSIONS.md | 590 | ### Step 6: Add Frontend Checks | COMMENT |
| LOW | .context/PERMISSIONS.md | 604 | ### Step 7: Test the Permission | COMMENT |
| LOW | .claude/commands/docker-dev.md | 23 | ## Step 0: Port Allocation (ALWAYS run first, for ALL commands) | COMMENT |
| LOW | .claude/skills/fix-vulnerability/SKILL.md | 15 | ## Step 1: Fetch PR details | COMMENT |
| LOW | .claude/skills/fix-vulnerability/SKILL.md | 34 | ## Step 2: Rename the PR | COMMENT |
| LOW | .claude/skills/fix-vulnerability/SKILL.md | 58 | ## Step 3: Checkout the PR branch and regenerate lockfile | COMMENT |
| LOW | .claude/skills/fix-vulnerability/SKILL.md | 87 | ## Step 4: Analyze changelogs for breaking changes | COMMENT |
| LOW | .claude/skills/fix-vulnerability/SKILL.md | 120 | ## Step 5: Post PR comment with findings | COMMENT |
| LOW | .claude/skills/fix-vulnerability/SKILL.md | 158 | ## Step 6: Return to original branch | COMMENT |
| LOW | .claude/skills/har-replay/SKILL.md | 14 | ## Step 1: Analyze the HAR file | COMMENT |
| LOW | .claude/skills/har-replay/SKILL.md | 120 | ## Step 2: Write a tailored replay server | COMMENT |
| LOW | .claude/skills/har-replay/SKILL.md | 157 | ## Step 3: Start the replay server and frontend | COMMENT |
| LOW | .claude/skills/har-replay/SKILL.md | 173 | ## Step 4: Provide the URL | COMMENT |
| LOW | .claude/skills/har-replay/SKILL.md | 185 | ## Step 5: Debug any rendering errors | COMMENT |
| LOW | .claude/skills/breakup-pr/SKILL.md | 64 | ### Step 1: Analyze the PR | COMMENT |
| LOW | .claude/skills/breakup-pr/SKILL.md | 81 | ### Step 2: Identify the Feature Flag | COMMENT |
| LOW | .claude/skills/breakup-pr/SKILL.md | 97 | ### Step 3: Plan the Vertical Slices | COMMENT |
| LOW | .claude/skills/breakup-pr/SKILL.md | 146 | ### Step 4: Implement Each Slice | COMMENT |
| LOW | .claude/skills/breakup-pr/SKILL.md | 199 | ### Step 5: Submit the Stack | COMMENT |
| LOW | docs/audit-logging.md | 116 | ### Step 1: Use `createAuditedAbility()` Instead of Direct Ability Checks | COMMENT |
| LOW | docs/audit-logging.md | 162 | ### Step 2: Reuse the Audited Ability Within a Method | COMMENT |
| LOW | docs/audit-logging.md | 190 | ### Step 3: Use Bulk Checks for Collections | COMMENT |
| LOW | docs/audit-logging.md | 212 | ### Step 4: Works with Account Type Too | COMMENT |
| LOW | docs/audit-logging.md | 228 | ### Step 5: Always Use `subject()` for Typed Subjects | COMMENT |
| LOW | docs/audit-logging.md | 245 | ### Step 6: Generate UUIDs Before Permission Checks on Create Actions | COMMENT |
| LOW | packages/visualization/src/table/config.ts | 320 | // Step 1: Identify which fields need min/max calculation | COMMENT |
| LOW | packages/visualization/src/table/config.ts | 358 | // Step 3: Build field-to-columns mapping | COMMENT |
| LOW | packages/visualization/src/table/config.ts | 385 | // Step 4: Single-pass collection of all values | COMMENT |
| LOW | packages/visualization/src/table/config.ts | 415 | // Step 5: Calculate min/max for each field | COMMENT |
| LOW | …ntend/src/providers/Dashboard/DashboardFiltersSync.tsx | 149 | // Step 1: Start with restored filters when returning from the | COMMENT |
| LOW | …ntend/src/providers/Dashboard/DashboardFiltersSync.tsx | 199 | // Step 2: Apply SDK Filters | COMMENT |
| LOW | …ntend/src/providers/Dashboard/DashboardFiltersSync.tsx | 332 | // Step 3: Apply interactivity filtering for embedded dashboards | COMMENT |
| LOW | packages/frontend/src/features/dashboardTabs/index.tsx | 888 | // Step 1: Create mapping while duplicating tiles | COMMENT |
| LOW | packages/frontend/src/features/dashboardTabs/index.tsx | 908 | // Step 2: Update filters to include new tile mappings | COMMENT |
| LOW | packages/frontend/src/features/dashboardTabs/index.tsx | 925 | // Step 3: Update dashboard filters | COMMENT |
| LOW | …c/features/sqlRunner/hooks/useSavedSqlChartResults.tsx | 111 | // Step 1: Get the chart. Embed dashboards must use the embed-only | COMMENT |
| LOW | …c/features/sqlRunner/hooks/useSavedSqlChartResults.tsx | 143 | // Step 2: Get the results | COMMENT |
| LOW | …nd/src/components/Explorer/FiltersCard/FiltersCard.tsx | 96 | // Step 1: Refresh the required filters property | COMMENT |
| LOW | …nd/src/components/Explorer/FiltersCard/FiltersCard.tsx | 120 | // Step 2: Update the dimension filters with the required filters | COMMENT |
| LOW | …nd/src/components/Explorer/FiltersCard/FiltersCard.tsx | 144 | // Step 3: If no model is selected, reset the dimension filters | COMMENT |
| LOW | …rontend/src/hooks/tableVisualization/useTableConfig.ts | 500 | // Step 1: Identify which fields need min/max calculation | COMMENT |
| LOW | …rontend/src/hooks/tableVisualization/useTableConfig.ts | 513 | // Step 2: Check cache - avoid recalculation if query and fields haven't changed | COMMENT |
| LOW | …rontend/src/hooks/tableVisualization/useTableConfig.ts | 536 | // Step 6: Update cache | COMMENT |
| LOW | …kend/src/services/DashboardService/DashboardService.ts | 2424 | // Step 1: Count occurrences of each chart UUID for dashboard charts | COMMENT |
| LOW⚡ | …kend/src/services/DashboardService/DashboardService.ts | 2440 | // Step 2: Find chart UUIDs that need duplication (appear more than once) | COMMENT |
| LOW⚡ | …kend/src/services/DashboardService/DashboardService.ts | 2447 | // Step 3: Create duplicated charts for all tiles that need them (except the first occurrence) | COMMENT |
| LOW | …kend/src/services/DashboardService/DashboardService.ts | 2482 | // Step 4: Wait for all duplications and build the final tiles array | COMMENT |
| LOW | …ages/backend/src/services/ExcelService/ExcelService.ts | 1083 | // Step 1: When conditional formatting needs color-range min/max, | COMMENT |
| LOW⚡ | …ages/backend/src/services/ExcelService/ExcelService.ts | 1097 | // Step 2: Get source stream | COMMENT |
| LOW⚡ | …ages/backend/src/services/ExcelService/ExcelService.ts | 1100 | // Step 3: Stream JSONL data to Excel temp file | COMMENT |
| LOW | …ages/backend/src/services/ExcelService/ExcelService.ts | 1120 | // Step 3: Upload temp file to exports bucket (not results bucket) | COMMENT |
| LOW | …/common/src/authorization/space/spaceAccessResolver.ts | 120 | // Step 1: Compute highest project-level role (same as existing logic) | COMMENT |
| LOW⚡ | …/common/src/authorization/space/spaceAccessResolver.ts | 135 | // Step 2: Compute effective space role using "most permissive wins" | COMMENT |
| LOW⚡ | …/common/src/authorization/space/spaceAccessResolver.ts | 144 | // Step 3: Determine hasDirectAccess (leaf space only) | COMMENT |
| LOW⚡ | …/common/src/authorization/space/spaceAccessResolver.ts | 149 | // Step 4: Compute projectRole metadata (org + direct project only) | COMMENT |
| 10 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | packages/visualization/src/table/config.ts | 320 | // Step 1: Identify which fields need min/max calculation | COMMENT |
| LOW | packages/visualization/src/table/config.ts | 358 | // Step 3: Build field-to-columns mapping | COMMENT |
| LOW | packages/visualization/src/table/config.ts | 385 | // Step 4: Single-pass collection of all values | COMMENT |
| LOW | packages/visualization/src/table/config.ts | 415 | // Step 5: Calculate min/max for each field | COMMENT |
| LOW | …ntend/src/providers/Dashboard/DashboardFiltersSync.tsx | 149 | // Step 1: Start with restored filters when returning from the | COMMENT |
| LOW | …ntend/src/providers/Dashboard/DashboardFiltersSync.tsx | 199 | // Step 2: Apply SDK Filters | COMMENT |
| LOW | …ntend/src/providers/Dashboard/DashboardFiltersSync.tsx | 332 | // Step 3: Apply interactivity filtering for embedded dashboards | COMMENT |
| LOW | packages/frontend/src/features/dashboardTabs/index.tsx | 888 | // Step 1: Create mapping while duplicating tiles | COMMENT |
| LOW | packages/frontend/src/features/dashboardTabs/index.tsx | 908 | // Step 2: Update filters to include new tile mappings | COMMENT |
| LOW | packages/frontend/src/features/dashboardTabs/index.tsx | 925 | // Step 3: Update dashboard filters | COMMENT |
| LOW | …c/features/sqlRunner/hooks/useSavedSqlChartResults.tsx | 111 | // Step 1: Get the chart. Embed dashboards must use the embed-only | COMMENT |
| LOW | …c/features/sqlRunner/hooks/useSavedSqlChartResults.tsx | 143 | // Step 2: Get the results | COMMENT |
| LOW | …ontend/src/components/DataViz/visualizations/Table.tsx | 122 | {/* TODO: do we need to check if it's a | CODE |
| LOW | …nd/src/components/Explorer/FiltersCard/FiltersCard.tsx | 96 | // Step 1: Refresh the required filters property | COMMENT |
| LOW | …nd/src/components/Explorer/FiltersCard/FiltersCard.tsx | 120 | // Step 2: Update the dimension filters with the required filters | COMMENT |
| LOW | …nd/src/components/Explorer/FiltersCard/FiltersCard.tsx | 144 | // Step 3: If no model is selected, reset the dimension filters | COMMENT |
| LOW | …rontend/src/hooks/tableVisualization/useTableConfig.ts | 500 | // Step 1: Identify which fields need min/max calculation | COMMENT |
| LOW | …rontend/src/hooks/tableVisualization/useTableConfig.ts | 513 | // Step 2: Check cache - avoid recalculation if query and fields haven't changed | COMMENT |
| LOW | …rontend/src/hooks/tableVisualization/useTableConfig.ts | 536 | // Step 6: Update cache | COMMENT |
| LOW | …ckages/backend/src/models/CatalogModel/CatalogModel.ts | 594 | // For tags, we need to check if ANY of the required tags exist in explore's tags array | COMMENT |
| LOW | …es/backend/src/services/RenameService/RenameService.ts | 850 | // When filtering explores, we need to check if the explore exists on from, or to | COMMENT |
| LOW | …kend/src/services/DashboardService/DashboardService.ts | 2424 | // Step 1: Count occurrences of each chart UUID for dashboard charts | COMMENT |
| LOW⚡ | …kend/src/services/DashboardService/DashboardService.ts | 2440 | // Step 2: Find chart UUIDs that need duplication (appear more than once) | COMMENT |
| LOW⚡ | …kend/src/services/DashboardService/DashboardService.ts | 2447 | // Step 3: Create duplicated charts for all tiles that need them (except the first occurrence) | COMMENT |
| LOW | …kend/src/services/DashboardService/DashboardService.ts | 2482 | // Step 4: Wait for all duplications and build the final tiles array | COMMENT |
| LOW | …kend/src/services/SchedulerService/SchedulerService.ts | 329 | // If sendNow is true, we need to check if the user has permissions to `create` instead of `manage` | COMMENT |
| LOW | …ages/backend/src/services/ExcelService/ExcelService.ts | 1083 | // Step 1: When conditional formatting needs color-range min/max, | COMMENT |
| LOW⚡ | …ages/backend/src/services/ExcelService/ExcelService.ts | 1097 | // Step 2: Get source stream | COMMENT |
| LOW⚡ | …ages/backend/src/services/ExcelService/ExcelService.ts | 1100 | // Step 3: Stream JSONL data to Excel temp file | COMMENT |
| LOW | …ages/backend/src/services/ExcelService/ExcelService.ts | 1120 | // Step 3: Upload temp file to exports bucket (not results bucket) | COMMENT |
| LOW | …/common/src/authorization/space/spaceAccessResolver.ts | 120 | // Step 1: Compute highest project-level role (same as existing logic) | COMMENT |
| LOW⚡ | …/common/src/authorization/space/spaceAccessResolver.ts | 135 | // Step 2: Compute effective space role using "most permissive wins" | COMMENT |
| LOW⚡ | …/common/src/authorization/space/spaceAccessResolver.ts | 144 | // Step 3: Determine hasDirectAccess (leaf space only) | COMMENT |
| LOW⚡ | …/common/src/authorization/space/spaceAccessResolver.ts | 149 | // Step 4: Compute projectRole metadata (org + direct project only) | COMMENT |
| LOW⚡ | …/common/src/authorization/space/spaceAccessResolver.ts | 155 | // Step 5: Determine inheritedFrom — use chain-wide check (not leaf-only) | COMMENT |
| LOW | packages/api-tests/tests/roles.test.ts | 715 | // Step 1: Assign custom role to user | COMMENT |
| LOW | packages/api-tests/tests/roles.test.ts | 737 | // Step 2: Assign system role (editor) to the same user | COMMENT |
| LOW | packages/api-tests/tests/roles.test.ts | 748 | // Step 3: Verify the custom role_uuid was removed and system role applied | COMMENT |
| LOW | packages/api-tests/tests/roles.test.ts | 776 | // Step 1: Create a custom role with scopes | COMMENT |
| LOW | packages/api-tests/tests/roles.test.ts | 789 | // Step 2: Assign custom role to user via v2 API | COMMENT |
| LOW⚡ | packages/api-tests/tests/roles.test.ts | 807 | // Step 3: Switch user to system role via deprecated v1 API. | COMMENT |
| LOW⚡ | packages/api-tests/tests/roles.test.ts | 816 | // Step 4: Verify the role_uuid was cleared - role assignment | COMMENT |
| LOW | packages/api-tests/tests/roles.test.ts | 829 | // Step 5: Delete the custom role - should succeed because the v1 | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/research/mcp-tool-token-accounting.md | 35 | Pi also has a local context estimator. It defines four characters per token, JSON-serializes the complete tool array, an | CODE |
| MEDIUM | …/research/ai-agent-exploratory-vs-presented-results.md | 1 | # Exploratory vs presented results in agentic data-analysis tools | COMMENT |
| MEDIUM | scripts/dev-fast-start.sh | 5 | # in a single non-interactive run — no agentic step-by-step. The first agentic | COMMENT |
| MEDIUM | scripts/dev-fast-start.sh | 19 | # using the documented agentic steps, then patches this script so it won't recur. | COMMENT |
| MEDIUM | …es/dataAppActivity/components/DataAppActivityTable.tsx | 54 | // Cached tokens dominate an agentic run — every turn re-sends the system | COMMENT |
| MEDIUM | …es/organizationDesigns/components/DesignFileUpload.tsx | 74 | // Validate against the theme guardrails client-side before uploading. | COMMENT |
| MEDIUM | …ee/services/ManagedAgentService/ManagedAgentService.ts | 3987 | // Verify entity exists, belongs to this project, and apply guardrails | COMMENT |
| MEDIUM | …ckend/src/ee/services/AppGenerateService/appContext.ts | 15 | // Agents (and older scaffold docs) still look for the single file — land them | COMMENT |
| MEDIUM | …c/ee/services/AppGenerateService/AppGenerateService.ts | 6379 | // Backstop for the upload-time and enqueue-time guardrails: a theme can | COMMENT |
| MEDIUM | …c/ee/services/AppGenerateService/AppGenerateService.ts | 6381 | // guardrails). Fail fast with the specific limit message instead of | COMMENT |
| MEDIUM | …c/ee/services/AppGenerateService/AppGenerateService.ts | 8196 | // iteration too, so enforce the guardrails regardless of | COMMENT |
| MEDIUM | …end/src/analytics/systemExplores/queryCalendarChart.ts | 166 | // Bound the neutral calendar scaffold independently from the row cap: | COMMENT |
| MEDIUM | packages/cli/src/outputUnchanged.main.json | 6 | "stderr": "Cannot sign in with email/password: Rejected postgres_password_dbt_cloud_user_first.last\n\n🤖 Cod | CODE |
| MEDIUM | packages/cli/src/handlers/login.ts | 153 | ` packages/cli/README.md#claude-code--agentic-tools-passwords-with-special-characters`, | CODE |
| MEDIUM | packages/cli/src/handlers/download.ts | 4690 | // No lockfile on disk (the scaffold writes a | COMMENT |
| MEDIUM | packages/cli/src/handlers/apps/appCodeFiles.ts | 218 | // null = no pnpm-lock.yaml on disk. The download scaffold writes a | COMMENT |
| MEDIUM | packages/cli/src/handlers/apps/appCodeFiles.test.ts | 454 | // The download scaffold always writes package.json but never a lockfile, | COMMENT |
| MEDIUM | packages/cli/src/handlers/apps/scaffolding.ts | 175 | // 1. Template scaffold files (src/, scripts/, skill.md excluded) | COMMENT |
| MEDIUM | packages/cli/src/handlers/apps/appsDownload.ts | 465 | // Server-provided deps override the scaffold's | COMMENT |
| MEDIUM | packages/common/src/ee/apps/code.test.ts | 122 | // folder has the scaffold package.json but no pnpm-lock.yaml. | COMMENT |
| MEDIUM | skills/developing-in-lightdash/SKILL.md | 263 | lightdash apps create "Revenue Explorer" --path "$LD_DIR" # scaffold a new app under $LD_DIR/apps/ | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …s/AsyncQueryService/python/PythonSandboxRunner.test.ts | 154 | code: 'def run(inputs, params):\n return None', | CODE |
| HIGH | …ervices/AsyncQueryService/python/pythonQueryHarness.ts | 304 | elif kind == "boolean": | CODE |
| HIGH | …ervices/AsyncQueryService/python/pythonQueryHarness.ts | 308 | elif kind in ("date", "timestamp"): | CODE |
| HIGH⚡ | …ervices/AsyncQueryService/python/pythonQueryHarness.ts | 336 | return None | CODE |
| HIGH⚡ | …ervices/AsyncQueryService/python/pythonQueryHarness.ts | 338 | return None | CODE |
| HIGH⚡ | …ervices/AsyncQueryService/python/pythonQueryHarness.ts | 340 | return None | CODE |
| HIGH⚡ | …ervices/AsyncQueryService/python/pythonQueryHarness.ts | 348 | return None | CODE |
| HIGH | packages/common/src/utils/scheduler.ts | 135 | /** This function will return False if: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | sandboxes/microvm-agent/agent.js | 233 | // answering both makes the /ready build hook robust to that quirk. | COMMENT |
| MEDIUM | scripts/n-minus-one.sh | 49 | # defaults, which this harness does not enable. SCIM provisioning is | COMMENT |
| MEDIUM | scripts/ci/image-artifacts.py | 38 | # docker/metadata-action; excluded so a harness build and a release build of the | COMMENT |
| MEDIUM | …ckend/src/ee/services/AiAgentService/AiAgentService.ts | 7048 | // agent manager cannot leverage an org-wide installation they don't control. | COMMENT |
| MEDIUM | …ckend/src/ee/services/AiAgentService/AiAgentService.ts | 7219 | // leverage an org-wide installation they don't control. | COMMENT |
| MEDIUM | …c/ee/services/AppGenerateService/AppGenerateService.ts | 4558 | // `"$(cat …)"` splices the schema in as a single literal arg — robust | COMMENT |
| MEDIUM | packages/common/src/utils/loadLightdashProjectConfig.ts | 38 | // This method call extends JSON schema to utilize AJV Errors | COMMENT |
| MEDIUM | .github/workflows/release-safety-tests.yml | 6 | # job runs them — this workflow is their only harness. | COMMENT |
| MEDIUM | .github/workflows/docker-build-test.yml | 52 | # from a build-comparison harness into an integration environment. They are | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …tend/src/components/Explorer/SaveChartButton/index.tsx | 203 | // with an empty name: "<metrics> by <dimensions>". AI-generated metadata | COMMENT |
| HIGH | …/hooks/cartesianChartConfig/computeChartSeries.test.ts | 19 | // Saved without pivot values, as AI-generated charts are | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/upgrade-automation/scripts/bump-target.py | 32 | CODE | |
| LOW | examples/upgrade-automation/scripts/bump-target.py | 76 | CODE | |
| LOW | examples/cross-source-dbt-refs/scale/verify.py | 31 | CODE | |
| LOW | examples/cross-source-dbt-refs/scale/verify.py | 49 | CODE | |
| LOW | examples/cross-source-dbt-refs/scale/tooling/build.py | 28 | CODE | |
| LOW | …amples/cross-source-dbt-refs/scale/tooling/register.py | 14 | CODE | |
| LOW | …affle-shop-demo/dbt/scripts/generate_product_events.py | 82 | CODE | |
| LOW | scripts/merge-freeze-workflow.test.py | 29 | CODE | |
| LOW | scripts/ci/image-artifacts.py | 103 | CODE | |
| LOW | scripts/ci/image-artifacts.py | 170 | CODE | |
| LOW | scripts/mixed-warehouse-scale-test/run.py | 1073 | CODE | |
| LOW | scripts/mixed-warehouse-scale-test/run.py | 784 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/dev-op-pull.sh | 47 | except Exception: pass | CODE |
| LOW | scripts/dev-op-pull.sh | 61 | except Exception: | CODE |
| LOW | scripts/dev-op-pull.sh | 121 | except Exception: pass | CODE |
| LOW | scripts/dev-op-pull.sh | 154 | except Exception: d = {} | CODE |
| LOW | scripts/dev-fast-start.sh | 627 | except Exception: | CODE |
| LOW | scripts/dev-fast-start.sh | 640 | except Exception: | CODE |
| LOW | scripts/dev-reconcile.sh | 33 | except Exception: ps = [] | CODE |
| LOW | scripts/dev-reconcile.sh | 103 | except Exception: d = {} | CODE |
| LOW | …ervices/AsyncQueryService/python/pythonQueryHarness.ts | 372 | except Exception: | CODE |
| LOW | …ervices/AsyncQueryService/python/pythonQueryHarness.ts | 384 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …affle-shop-demo/dbt/scripts/generate_product_events.py | 161 | # Check if user progresses to this stage | COMMENT |
| LOW | …c/ee/features/embed/SettingsEmbed/EmbedCodeSnippet.tsx | 481 | threadUuid = None # Set this to resume an existing conversation. | CODE |
| LOW | packages/cli/track.sh | 74 | # Check if xcrun is installed | COMMENT |
| LOW | packages/cli/scripts/build-binaries.sh | 283 | # Check if we have 7z or zip available | COMMENT |
| LOW | .github/workflows/post-release.yml | 264 | # Check if the CLI or its runtime dependencies changed | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/dev-ports.sh | 17 | # Usage: | COMMENT |
| LOW | scripts/dev-feature-flags.sh | 9 | # Usage: | COMMENT |
| LOW | scripts/dev-op-pull.sh | 11 | # Usage: | COMMENT |
| LOW | scripts/dev-profiles.sh | 4 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/k8s-dev/lib.sh | 74 | # Create a k8s secret only if it doesn't already exist (stable across upgrades). | COMMENT |
| MEDIUM | .github/workflows/post-release.yml | 354 | # Create a temporary keychain | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …nents/DataViz/transformers/getChartConfigAndOptions.ts | 78 | errors: undefined, // TODO: Implement error tracking for table viz | CODE |
| LOW | …/src/components/common/SpaceSelector/SpaceSelector.tsx | 39 | isLoading: _isLoading, // TODO: implement loading state for the tree. | CODE |
| LOW | …/backend/src/services/PromoteService/PromoteService.ts | 2566 | // TODO: implement path change and call SpaceService.move | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | examples/cross-source-dbt-refs/scale/tooling/api.py | 1 | CODE | |
| LOW | examples/cross-source-dbt-refs/scale/tooling/api.py | 2 | CODE | |
| LOW | examples/cross-source-dbt-refs/scale/tooling/api.py | 3 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/scope-tours/lib.ts | 285 | 'As mentioned earlier, ', | CODE |