The easy-to-use open source Business Intelligence and Embedded Analytics tool that lets everyone work with data :bar_chart:
This report summarizes scanner evidence for metabase/metabase, a Clojure project with 50,043 GitHub stars. SynthScan examined 2,168,288 lines of code across 16055 source files, recording 2953 pattern matches distributed across 24 syntactic categories. The legacy adjusted pattern signal is 1.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? 2652 finding(s).
Are imports declared and package/API names verified? 259 finding(s).
Are wrappers, guards, and repeated structures necessary? 2452 finding(s).
Which changes need focused human review? 2953 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 2953 distinct pattern matches across 24 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 |
|---|---|---|---|---|
| LOW | frontend/parse-deps.js | 77 | function getFilePathFromImportPath(name) { | CODE |
| LOW | …t-plugin-metabase/rules/no-unsafe-element-filtering.js | 72 | function isPreviousALengthAssertion(node) { | CODE |
| LOW | …/lint/eslint-plugin-metabase/rules/jtag-missing-key.js | 42 | function isDirectChildOfTemplateExpression(node) { | CODE |
| LOW | frontend/test/__support__/utils.ts | 58 | export function mockGetBoundingClientRect(rect: Partial<DOMRect> = {}) { | CODE |
| LOW | frontend/test/__support__/intersection-observer.ts | 11 | export function setupMockIntersectionObserver() { | CODE |
| LOW | frontend/test/__support__/storybook.tsx | 137 | export function createWaitForResizeToStopDecorator(timeoutMs: number = 1000) { | CODE |
| LOW | frontend/test/__support__/storybook.tsx | 138 | return function WaitForResizeToStopDecorator(Story: ComponentType) { | CODE |
| LOW | frontend/test/__support__/storybook.tsx | 173 | export function createWaitForChartsDecorator({ | CODE |
| LOW | frontend/test/__support__/storybook.tsx | 247 | export function ForceDocumentCardRenderDecorator(Story: ComponentType) { | CODE |
| LOW | frontend/test/__support__/enterprise.js | 60 | export function setupEnterpriseOnlyPlugin(pluginName) { | CODE |
| LOW | frontend/test/__support__/metadata.ts | 31 | export function createMockMetadataFromState( | CODE |
| LOW⚡ | frontend/test/__support__/server-mocks/data-studio.ts | 11 | export function setupTableSelectionInfoEndpoint( | CODE |
| LOW⚡ | frontend/test/__support__/server-mocks/data-studio.ts | 17 | export function setupPublishTablesEndpoint( | CODE |
| LOW⚡ | frontend/test/__support__/server-mocks/data-studio.ts | 23 | export function setupPublishTablesEndpointError() { | CODE |
| LOW⚡ | frontend/test/__support__/server-mocks/data-studio.ts | 29 | export function setupUnpublishTablesEndpoint() { | CODE |
| LOW⚡ | frontend/test/__support__/server-mocks/data-studio.ts | 35 | export function setupUnpublishTablesEndpointError() { | CODE |
| LOW⚡ | frontend/test/__support__/server-mocks/data-studio.ts | 41 | export function setupTablePublishingInfoEndpoint( | CODE |
| LOW | frontend/test/__support__/server-mocks/data-studio.ts | 53 | export function setupTablePublishingInfoEndpointError(tableId: TableId) { | CODE |
| LOW⚡ | frontend/test/__support__/server-mocks/glossary.ts | 7 | export function setupListGlossaryEndpoint( | CODE |
| LOW⚡ | frontend/test/__support__/server-mocks/glossary.ts | 13 | export function setupCreateGlossaryEndpoint( | CODE |
| LOW⚡ | frontend/test/__support__/server-mocks/glossary.ts | 19 | export function setupUpdateGlossaryEndpoint(item: GlossaryItem) { | CODE |
| LOW⚡ | frontend/test/__support__/server-mocks/glossary.ts | 23 | export function setupDeleteGlossaryEndpoint(id: GlossaryItem["id"]) { | CODE |
| LOW⚡ | frontend/test/__support__/server-mocks/dependencies.ts | 13 | export function setupDependencyCountsEndpoint( | CODE |
| LOW⚡ | frontend/test/__support__/server-mocks/dependencies.ts | 23 | export function setupDependencyCountsErrorEndpoint() { | CODE |
| LOW⚡ | frontend/test/__support__/server-mocks/dependencies.ts | 27 | export function setupListGraphNodeDependentsEndpoint(nodes: DependencyNode[]) { | CODE |
| LOW⚡ | frontend/test/__support__/server-mocks/dependencies.ts | 31 | export function setupListBreakingGraphNodesEndpoint( | CODE |
| LOW⚡ | frontend/test/__support__/server-mocks/dependencies.ts | 37 | export function setupListBrokenGraphNodesEndpoint(nodes: DependencyNode[]) { | CODE |
| LOW⚡ | frontend/test/__support__/server-mocks/dependencies.ts | 41 | export function setupListUnreferencedGraphNodesEndpoint( | CODE |
| LOW⚡ | frontend/test/__support__/server-mocks/dependencies.ts | 47 | export function setupDependencyGraphEndpoint(response: DependencyGraph) { | CODE |
| LOW | frontend/test/__support__/server-mocks/oauth.ts | 5 | export function setupOAuthAuthorizationsEndpoint( | CODE |
| LOW⚡ | …end/test/__support__/server-mocks/multi-factor-auth.ts | 16 | export function setupMfaStatusEndpointError() { | CODE |
| LOW⚡ | …end/test/__support__/server-mocks/multi-factor-auth.ts | 24 | export function setupMfaEnrollEndpointError() { | CODE |
| LOW⚡ | …end/test/__support__/server-mocks/multi-factor-auth.ts | 32 | export function setupMfaDisableEndpointError() { | CODE |
| LOW⚡ | …end/test/__support__/server-mocks/multi-factor-auth.ts | 36 | export function setupMfaRecoveryCodesEndpoint(recoveryCodes: string[]) { | CODE |
| LOW⚡ | …end/test/__support__/server-mocks/multi-factor-auth.ts | 42 | export function setupMfaRecoveryCodesEndpointError() { | CODE |
| LOW⚡ | …end/test/__support__/server-mocks/multi-factor-auth.ts | 46 | export function setupMfaAdminOverviewEndpoint(overview: MfaAdminOverview) { | CODE |
| LOW⚡ | …end/test/__support__/server-mocks/multi-factor-auth.ts | 56 | export function setupMfaEnrolledUsersEndpoint(users: MfaEnrolledUser[]) { | CODE |
| LOW⚡ | …end/test/__support__/server-mocks/multi-factor-auth.ts | 63 | export function setupMfaEnrolledUsersEndpointError() { | CODE |
| LOW⚡ | …end/test/__support__/server-mocks/multi-factor-auth.ts | 67 | export function setupMfaUnenrolledUsersEndpoint(users: MfaAdminUser[]) { | CODE |
| LOW⚡ | …end/test/__support__/server-mocks/multi-factor-auth.ts | 74 | export function setupMfaUnenrolledUsersEndpointError() { | CODE |
| LOW⚡ | …end/test/__support__/server-mocks/multi-factor-auth.ts | 78 | export function setupMfaAdminRemoveEndpoint() { | CODE |
| LOW⚡ | …end/test/__support__/server-mocks/multi-factor-auth.ts | 82 | export function setupMfaAdminRemoveEndpointError() { | CODE |
| LOW⚡ | …end/test/__support__/server-mocks/multi-factor-auth.ts | 90 | export function setupMfaVerifyEndpointError() { | CODE |
| LOW⚡ | …end/test/__support__/server-mocks/multi-factor-auth.ts | 94 | export function setupMfaEnrollOnLoginEndpoint(recoveryCodes: string[]) { | CODE |
| LOW⚡ | …end/test/__support__/server-mocks/multi-factor-auth.ts | 101 | export function setupMfaEnrollOnLoginEndpointError() { | CODE |
| LOW⚡ | …end/test/__support__/server-mocks/multi-factor-auth.ts | 105 | export function setupMfaSendEmailOtpEndpoint() { | CODE |
| LOW⚡ | frontend/test/__support__/server-mocks/slack.ts | 6 | export function setupSlackManifestEndpoint() { | CODE |
| LOW⚡ | frontend/test/__support__/server-mocks/slack.ts | 10 | export function setupSlackSettingsEndpoint() { | CODE |
| LOW⚡ | frontend/test/__support__/server-mocks/slack.ts | 14 | export function setupSlackAppInfoEndpoint(appInfo?: Partial<SlackAppInfo>) { | CODE |
| LOW | …d/test/__support__/server-mocks/content-translation.ts | 5 | export function setupContentTranslationEndpoints({ | CODE |
| LOW | frontend/test/__support__/server-mocks/geojson.ts | 24 | export function setupMalformedGeoJSONEndpoint({ | CODE |
| LOW | frontend/test/__support__/server-mocks/geojson.ts | 48 | export function setupGeoJSONEndpointWithError({ | CODE |
| LOW | frontend/test/__support__/server-mocks/performance.ts | 4 | export function setupPerformanceEndpoints(cacheConfigs: CacheConfig[]) { | CODE |
| LOW | frontend/test/__support__/server-mocks/performance.ts | 40 | export function setupPerformanceEndpointsError() { | CODE |
| LOW | frontend/test/__support__/server-mocks/table.ts | 46 | export function setupTableQueryMetadataEndpoint(table: Table) { | CODE |
| LOW | frontend/test/__support__/server-mocks/table.ts | 50 | export function setupTableQueryMetadataEndpointError( | CODE |
| LOW | frontend/test/__support__/server-mocks/table.ts | 106 | export function setupUploadManagementEndpoint(tables: Table[]) { | CODE |
| LOW | frontend/test/__support__/server-mocks/table.ts | 114 | export function setupDeleteUploadManagementDeleteEndpoint(failureId?: number) { | CODE |
| LOW | frontend/test/__support__/server-mocks/segment.ts | 6 | export function setupSegmentRevisionsEndpointError(segmentId: number) { | CODE |
| LOW | frontend/test/__support__/server-mocks/segment.ts | 17 | export function setupSegmentEndpointError(segmentId: number) { | CODE |
| 2350 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ase-lib/v1/metadata/utils/saved-questions.unit.spec.ts | 42 | schemaName: "John Doe's Personal collection", | CODE |
| LOW⚡ | …src/metabase/static-viz/lib/truncate-text.unit.spec.ts | 27 | expect(truncateText("John Doe", 48, test.measurer, fontStyle)).toBe( | CODE |
| LOW⚡ | …src/metabase/static-viz/lib/truncate-text.unit.spec.ts | 28 | "John Doe", | CODE |
| LOW⚡ | …src/metabase/static-viz/lib/truncate-text.unit.spec.ts | 33 | expect(truncateText("John Doe", 48, test.measurer, fontStyle)).toBe( | CODE |
| LOW⚡ | …src/metabase/static-viz/lib/truncate-text.unit.spec.ts | 34 | "John Doe", | CODE |
| LOW⚡ | …src/metabase/static-viz/lib/truncate-text.unit.spec.ts | 39 | expect(truncateText("John Doe", 0, test.measurer, fontStyle)).toBe("…"); | CODE |
| LOW | …onents/MetricDimensions/MetricDimensions.unit.spec.tsx | 444 | "placeholder", | CODE |
| LOW | …ase/ui/components/overlays/Popover/Popover.stories.tsx | 93 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed | CODE |
| LOW | …ase/ui/components/overlays/Popover/Popover.stories.tsx | 93 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed | CODE |
| LOW | …ts/MonitorBreadcrumbs/MonitorBreadcrumbs.unit.spec.tsx | 25 | ["Jane Doe", "/conversations?user=1"], | CODE |
| LOW | …ts/MonitorBreadcrumbs/MonitorBreadcrumbs.unit.spec.tsx | 32 | expect(within(breadcrumbs).getByText("Jane Doe")).toBeInTheDocument(); | CODE |
| LOW | …ts/MonitorBreadcrumbs/MonitorBreadcrumbs.unit.spec.tsx | 60 | ["Jane Doe", "/conversations?user=1"], | CODE |
| LOW | …ts/MonitorBreadcrumbs/MonitorBreadcrumbs.unit.spec.tsx | 67 | const user = screen.getByRole("link", { name: "Jane Doe" }); | CODE |
| LOW | …ts/MetabotChat/MetabotChatEditor/MetabotChatEditor.tsx | 16 | | "placeholder" | CODE |
| LOW | frontend/src/metabase/setup/tests/setup.tsx | 131 | email = "john@example.org", | CODE |
| LOW | frontend/src/metabase/setup/tests/common.unit.spec.tsx | 286 | formData.append("EMAIL", "john@example.org"); // email from user step | CODE |
| LOW | …s/components/SettingsLdapForm.enterprise.unit.spec.tsx | 126 | expect(filterInput).toHaveAttribute("placeholder", "(member={dn})"); | CODE |
| LOW⚡ | …min/settings/components/SettingsLdapForm.unit.spec.tsx | 294 | expect(userFilter).toHaveAttribute("placeholder", DEFAULT_USER_FILTER); | CODE |
| LOW⚡ | …min/settings/components/SettingsLdapForm.unit.spec.tsx | 297 | expect(port).toHaveAttribute("placeholder", "389"); | CODE |
| LOW⚡ | …min/settings/components/SettingsLdapForm.unit.spec.tsx | 303 | "placeholder", | CODE |
| LOW⚡ | …min/settings/components/SettingsLdapForm.unit.spec.tsx | 307 | "placeholder", | CODE |
| LOW⚡ | …min/settings/components/SettingsLdapForm.unit.spec.tsx | 311 | "placeholder", | CODE |
| LOW⚡ | …min/settings/components/SettingsLdapForm.unit.spec.tsx | 321 | expect(port).toHaveAttribute("placeholder", "636"); | CODE |
| LOW | …ettingsPages/test/AuthenticationSettingsPage.setup.tsx | 35 | common_name: "John Doe", | CODE |
| LOW | …ettingsPages/test/AuthenticationSettingsPage.setup.tsx | 51 | common_name: "Jane Doe", | CODE |
| LOW | …ettings/components/ApiKeys/ManageApiKeys.unit.spec.tsx | 41 | common_name: "John Doe", | CODE |
| LOW | …ettings/components/ApiKeys/ManageApiKeys.unit.spec.tsx | 57 | common_name: "Jane Doe", | CODE |
| LOW | …onents/widgets/Notifications/WebhookForm.unit.spec.tsx | 119 | "foo@bar.com", | CODE |
| LOW | …onents/widgets/Notifications/WebhookForm.unit.spec.tsx | 134 | "auth-username": "foo@bar.com", | CODE |
| LOW | …min/databases/containers/DatabaseListApp.unit.spec.tsx | 23 | const LIST_ERROR_MESSAGE = "Lorem ipsum dolor sit amet, consectetur adip"; | CODE |
| LOW | …min/databases/containers/DatabaseListApp.unit.spec.tsx | 23 | const LIST_ERROR_MESSAGE = "Lorem ipsum dolor sit amet, consectetur adip"; | CODE |
| LOW | …etabase/admin/ai/OAuthAuthorizationsPage.unit.spec.tsx | 99 | user_email: "user@example.com", | CODE |
| LOW | …etabase/admin/ai/OAuthAuthorizationsPage.unit.spec.tsx | 110 | expect(within(table).getByText("user@example.com")).toBeInTheDocument(); | CODE |
| LOW | …ents/GroupMembersTable/GroupMembersTable.unit.spec.tsx | 17 | email: "user@example.com", | CODE |
| LOW | …c/metabase/admin/performance/components/test-utils.tsx | 126 | expect(input).toHaveAttribute("placeholder", expectedPlaceholder.toString()); | CODE |
| LOW⚡ | frontend/src/metabase/dashboard/sections.ts | 62 | const card = createVirtualCard("placeholder"); | CODE |
| LOW | …bar/AddEditSidebar/EmailAttachmentPicker.unit.spec.tsx | 479 | creator: { id: 1, common_name: "Test", email: "test@test.com" } as any, | CODE |
| LOW | …bar/AddEditSidebar/EmailAttachmentPicker.unit.spec.tsx | 536 | creator: { id: 1, common_name: "Test", email: "test@test.com" } as any, | CODE |
| LOW | …ashboardSubscriptionsSidebar/tests/common.unit.spec.ts | 222 | expect(await screen.findByText("John Doe")).toBeInTheDocument(); | CODE |
| LOW | …ashboardSubscriptionsSidebar/tests/common.unit.spec.ts | 442 | "placeholder", | CODE |
| LOW | …nd/src/metabase/dashboard/components/DashCard/utils.ts | 19 | const VIZ_WITH_CUSTOM_MAPPING_UI = ["heading", "placeholder"]; | CODE |
| LOW | …e/dashboard/components/DashCard/Dashcard.unit.spec.tsx | 1222 | ["placeholder", createMockPlaceholderDashboardCard()], | CODE |
| LOW | …abase/dashboard/visualizations/DashCardPlaceholder.tsx | 133 | identifier: "placeholder", | CODE |
| LOW | …/src/metabase/common/components/UserForm.unit.spec.tsx | 328 | createMockTenant({ id: 1, name: "Acme Corp" }), | CODE |
| LOW | …/src/metabase/common/components/UserForm.unit.spec.tsx | 371 | await userEvent.click(await screen.findByText("Acme Corp")); | CODE |
| LOW | …ItemsTable/BaseItemsTable/BaseItemsTable.unit.spec.tsx | 93 | expect(screen.getByText("John Doe")).toBeInTheDocument(); | CODE |
| LOW | …/common/components/UserPicker/UserPicker.unit.spec.tsx | 18 | common_name: "Jane Doe", | CODE |
| LOW | …/common/components/UserPicker/UserPicker.unit.spec.tsx | 96 | await screen.findByRole("option", { name: "Jane Doe" }), | CODE |
| LOW | …/common/components/UserPicker/UserPicker.unit.spec.tsx | 103 | expect(getUserQueries()).not.toContain("Jane Doe"); | CODE |
| LOW | …/common/components/UserPicker/UserPicker.unit.spec.tsx | 115 | await screen.findByRole("option", { name: "Jane Doe" }), | CODE |
| LOW | …/common/components/UserPicker/UserPicker.unit.spec.tsx | 126 | expect(getUserQueries()).not.toContain("Jane Doe"); | CODE |
| LOW | …/common/components/UserPicker/UserPicker.unit.spec.tsx | 155 | await screen.findByRole("option", { name: "Jane Doe" }), | CODE |
| LOW | …nts/upsells/components/UpsellCardContent.unit.spec.tsx | 32 | email: "user@example.com", | CODE |
| LOW | …sualizations/lib/register-jsx-formatting.unit.spec.tsx | 719 | setup("user@example.com", { | CODE |
| LOW | …sualizations/lib/register-jsx-formatting.unit.spec.tsx | 725 | clicked: { value: "user@example.com" }, | CODE |
| LOW | …dTransformsBanner/LockedTransformsBanner.unit.spec.tsx | 16 | email: "user@example.com", | CODE |
| LOW | …formsHoverCard/LockedTransformsHoverCard.unit.spec.tsx | 18 | email: "user@example.com", | CODE |
| LOW | …components/TagMultiSelect/TagMultiSelect.unit.spec.tsx | 83 | expect(input).toHaveAttribute("placeholder", "Tags are read-only"); | CODE |
| LOW | …/transforms/pages/TransformListPage/utils.unit.spec.ts | 118 | email: "user@example.com", | CODE |
| LOW | frontend/src/metabase/urls/collections.ts | 30 | // `originalName` keeps the original name like "John Doe's Personal Collection" | COMMENT |
| 164 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …extensions/HandleEditorDrop/DropHandlers/cardToCard.ts | 39 | const flexContainer = view.state.schema.nodes.flexContainer.create( | CODE |
| CRITICAL | …extensions/HandleEditorDrop/DropHandlers/cardToCard.ts | 45 | const wrapper = view.state.schema.nodes.resizeNode.create( | CODE |
| CRITICAL | …s/HandleEditorDrop/DropHandlers/cardToFlexContainer.ts | 108 | const newContainer = view.state.schema.nodes.flexContainer.create( | CODE |
| CRITICAL | …s/HandleEditorDrop/DropHandlers/cardToFlexContainer.ts | 202 | const wrappedRemainingCard = view.state.schema.nodes.resizeNode.create( | CODE |
| CRITICAL | …s/HandleEditorDrop/DropHandlers/cardToFlexContainer.ts | 241 | view.state.schema.nodes.flexContainer.create( | CODE |
| CRITICAL | …s/HandleEditorDrop/DropHandlers/cardToFlexContainer.ts | 296 | const newTargetFlexContainer = view.state.schema.nodes.flexContainer.create( | CODE |
| CRITICAL | …s/HandleEditorDrop/DropHandlers/cardToFlexContainer.ts | 373 | const newFlexContainer = view.state.schema.nodes.flexContainer.create( | CODE |
| CRITICAL | …nsions/HandleEditorDrop/DropHandlers/cardToDocument.ts | 75 | view.state.schema.nodes.resizeNode.create( | CODE |
| CRITICAL | …nsions/HandleEditorDrop/DropHandlers/cardToDocument.ts | 106 | const newFlexContainer = view.state.schema.nodes.flexContainer.create( | CODE |
| CRITICAL | …nsions/HandleEditorDrop/DropHandlers/cardToDocument.ts | 139 | const wrappedNode = view.state.schema.nodes.resizeNode.create( | CODE |
| CRITICAL | …nsions/HandleEditorDrop/DropHandlers/cardToDocument.ts | 164 | const wrappedNode = view.state.schema.nodes.resizeNode.create( | CODE |
| CRITICAL | …mponents/editor-extensions/CardEmbed/CardEmbedNode.tsx | 393 | editor.view.state.schema.nodes.flexContainer.create( | CODE |
| CRITICAL | frontend/src/metabase/redux/downloads.ts | 647 | title: t`Results for ${action.meta.arg.opts.question.card().name}`, | CODE |
| CRITICAL | frontend/src/metabase/redux/downloads.ts | 661 | title: t`Image for ${action.meta.arg.opts.question.card().name}`, | CODE |
| CRITICAL | …dk-package/data-app-dev/dev-plugin/plugin.unit.spec.ts | 583 | server.ws.send.mock.calls.filter( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | mise.toml | 4 | # ================================= | COMMENT |
| MEDIUM | mise.toml | 17 | # ------------------------------------------ | COMMENT |
| MEDIUM | mise.toml | 48 | # ============================================================================= | COMMENT |
| MEDIUM | mise.toml | 50 | # ============================================================================= | COMMENT |
| MEDIUM | mise.toml | 73 | # ============================================================================= | COMMENT |
| MEDIUM | mise.toml | 75 | # ============================================================================= | COMMENT |
| MEDIUM | …tabase/metrics-viewer/components/MetricSearch/utils.ts | 652 | // ── Positioned token type (internal) ──────────────────────────────────────── | COMMENT |
| MEDIUM | …rics-viewer/components/MetricSearch/utils.unit.spec.ts | 1496 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …rics-viewer/components/MetricSearch/utils.unit.spec.ts | 1504 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …arch/MetricSearchInput/MetricSearchInput.unit.spec.tsx | 190 | // ── Collapsed view (pills) ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …arch/MetricSearchInput/MetricSearchInput.unit.spec.tsx | 257 | // ── Expanded view (focused text input) ───────────────────────────────────── | COMMENT |
| MEDIUM | …arch/MetricSearchInput/MetricSearchInput.unit.spec.tsx | 299 | // ── Blur / unfocus behavior ───────────────────────────────────────────────── | COMMENT |
| MEDIUM | …arch/MetricSearchInput/MetricSearchInput.unit.spec.tsx | 364 | // ── Run button and validation ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | …arch/MetricSearchInput/MetricSearchInput.unit.spec.tsx | 432 | // ── Removing items ────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …arch/MetricSearchInput/MetricSearchInput.unit.spec.tsx | 498 | // ── Expression pill display after Run ──────────────────────────────────────── | COMMENT |
| MEDIUM | …arch/MetricSearchInput/MetricSearchInput.unit.spec.tsx | 574 | // ── Typing / onChange ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …MetricSearch/MetricSearchInput/metricTokenHighlight.ts | 46 | // ── Identity tracking ────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …MetricSearch/MetricSearchInput/metricTokenHighlight.ts | 144 | // ── Token highlighting ───────────────────────────────────────────────────── | COMMENT |
| MEDIUM | …nfigModal/NotificationChannelConfigModal.unit.spec.tsx | 28 | // ── UI behaviour tests (mocked hook) ──────────────────────────────── | COMMENT |
| MEDIUM | …nfigModal/NotificationChannelConfigModal.unit.spec.tsx | 248 | // ── Save‐payload tests (real hook + context) ──────────────────────── | COMMENT |
| MEDIUM | …nfigModal/NotificationChannelConfigModal.unit.spec.tsx | 478 | // ── Send-test-notification payload tests (real hook + context) ────── | COMMENT |
| MEDIUM⚡ | bin/utils/tools.sh | 16 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | bin/utils/tools.sh | 18 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | bin/utils/tools.sh | 27 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | bin/utils/tools.sh | 29 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | bin/utils/tools.sh | 39 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | bin/utils/tools.sh | 41 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | bin/utils/tools.sh | 51 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | bin/utils/tools.sh | 53 | # ============================================================================= | COMMENT |
| MEDIUM | bin/utils/tools.sh | 116 | # ============================================================================= | COMMENT |
| MEDIUM | bin/utils/tools.sh | 118 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | bin/utils/tools.sh | 137 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | bin/utils/tools.sh | 139 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | bin/utils/tools.sh | 149 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | bin/utils/tools.sh | 151 | # ============================================================================= | COMMENT |
| MEDIUM | .github/scripts/run-backend-test-jvms.sh | 7 | # ---------------------------- | COMMENT |
| MEDIUM | .github/scripts/run-backend-test-jvms.sh | 20 | # -------------------- | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .pre-commit-config.yaml | 1 | repos: | COMMENT |
| LOW | mise.toml | 1 | #:schema https://mise.jdx.dev/schema/mise.json | COMMENT |
| LOW | mise.toml | 21 | # 1. Use mise shims (recommended for IDEs): | COMMENT |
| LOW | mise.toml | 61 | # Clojure CLI - for backend development and REPL | COMMENT |
| LOW | rspack.embedding-sdk-bundle.config.js | 221 | // Scope hoisting: merges ES modules into fewer closures, reducing parse overhead | COMMENT |
| LOW | …tabase/rules/no-unconditional-metabase-links-render.js | 1 | //------------------------------------------------------------------------------ | COMMENT |
| LOW | frontend/test/jest-setup-eager.js | 1 | // Jest compiles imports lazily (see jest.base.conf.js), so a module runs the | COMMENT |
| LOW | frontend/test/jest-setup-env-core.js | 1 | import { createMockSettings } from "metabase-types/api/mocks"; | COMMENT |
| LOW | …nd/src/embedding-sdk-bundle/embedding-sdk-bootstrap.ts | 1 | import { SDK_BUNDLE_ERROR } from "embedding-sdk-shared/constants/event-names"; | COMMENT |
| LOW | frontend/src/embedding-sdk-bundle/types/globals.d.ts | 1 | interface Window { | COMMENT |
| LOW | …src/embedding-sdk-bundle/analytics/component-events.ts | 121 | const firedKeys = new Set<string>(); | COMMENT |
| LOW | …ui/components/overlays/overlay-stack/overlay-stack.tsx | 41 | COMMENT | |
| LOW | frontend/src/metabase/settings/api.ts | 121 | listTag("setup-guide-checklist"), | COMMENT |
| LOW | frontend/src/metabase/settings/api.ts | 161 | // empty when we tried to patch it, because the boot-time settings | COMMENT |
| LOW | …nd/src/metabase/explorations/pages/ExplorationPage.tsx | 341 | // bringing in fresh interestingness scores) re-derives the | COMMENT |
| LOW | …tabase/viz-core/echarts/cartesian/constants/dataset.ts | 21 | // When working with time series or numeric scales, we process x-axis values for ECharts | COMMENT |
| LOW | frontend/src/metabase/utils/fonts.ts | 1 | import type { MetabaseFontFamily } from "metabase-types/api/fonts"; | COMMENT |
| LOW | frontend/src/metabase/utils/noop.ts | 1 | // there's nothing here! | COMMENT |
| LOW | frontend/src/metabase/common/components/UndoListing.tsx | 301 | const [heights, setHeights] = useState<number[]>([]); | COMMENT |
| LOW | …visualizations/tests/timeseries-intervals.unit.spec.ts | 401 | // shouldn't move to a more granular interval than what was passed | COMMENT |
| LOW | …ase/visualizations/visualizations/Scalar/definition.ts | 81 | }, | COMMENT |
| LOW | frontend/src/metabase/metadata-store/hydration.ts | 241 | // Deferred so the write cannot re-enter the action that triggered it. | COMMENT |
| LOW | frontend/src/metabase/api/client/request-handlers.ts | 41 | overrideRequestsForPublicEmbeds: noop, | COMMENT |
| LOW | frontend/src/metabase/api/client/request-handlers.ts | 61 | // Installed by SDK auth (`embedding-sdk-ee/auth`). | COMMENT |
| LOW | frontend/src/metabase/querying/run-query.ts | 121 | signal?: AbortSignal, | COMMENT |
| LOW | …rc/metabase/visualizer/visualizations/pie.unit.spec.ts | 161 | // TODO Enable when VIZ-652 is closed | COMMENT |
| LOW | …-enterprise/custom_viz/sandbox/distortions-dom-read.ts | 1 | import { BLOCKED_TAGS } from "metabase/utils/scripts-sandbox"; | COMMENT |
| LOW | …rc/embedding/data-picker/DataSelector/DataSelector.tsx | 241 | COMMENT | |
| LOW | bin/build.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/custom-viz/resolve-release.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | bin/utils/files.sh | 1 | # bin/utils/files.sh - File utilities | COMMENT |
| LOW | bin/utils/logging.sh | 1 | # bin/utils/logging.sh - Logging and output functions | COMMENT |
| LOW | bin/utils/tools.sh | 1 | # bin/utils/tools.sh - Tool detection and version checking utilities | COMMENT |
| LOW | bin/utils/prompts.sh | 1 | # bin/utils/prompts.sh - Interactive prompt utilities | COMMENT |
| LOW | resources/liquibase_legacy_migrations.yaml | 5621 | # | COMMENT |
| LOW | resources/liquibase_legacy_migrations.yaml | 10561 | 'type/Country', | COMMENT |
| LOW | resources/liquibase_legacy_migrations.yaml | 10581 | # | COMMENT |
| LOW | resources/python-sources/sql_tools.py | 1941 | COMMENT | |
| LOW | resources/automagic_dashboards/table/example.yaml | 1 | # Each automagic dashboard heuristic produces one dashboard and is primarily drawing | COMMENT |
| LOW | resources/automagic_dashboards/table/example.yaml | 21 | # Each metric is a map of metric name to metric definition which is again a map with | COMMENT |
| LOW | resources/automagic_dashboards/table/example.yaml | 41 | # Each filter has the form of a map of filter name to filter definition, | COMMENT |
| LOW | release/ci-conductor/src/contract.ts | 1 | // The normalized shape every adapter produces and every consumer reads. | COMMENT |
| LOW | release/ci-conductor/src/collect-failed-backend.ts | 1 | #!/usr/bin/env bun | COMMENT |
| LOW | release/ci-conductor/src/report-backend.ts | 1 | #!/usr/bin/env bun | COMMENT |
| LOW | release/ci-conductor/src/report-frontend.ts | 1 | #!/usr/bin/env bun | COMMENT |
| LOW | release/ci-conductor/src/adapters/frontend.ts | 1 | // Frontend (jest) adapter: jest-junit's JUnit XML → NormalizedTest[]. | COMMENT |
| LOW | release/ci-conductor/src/adapters/backend.ts | 1 | // Backend (Clojure/hawk) adapter: hawk's JUnit XML → NormalizedTest[]. | COMMENT |
| LOW | cross-version/dev.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | docs/util/check-links.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | docs/developers-guide/drivers/plugins.md | 81 | COMMENT | |
| LOW | docs/developers-guide/drivers/plugins.md | 101 | # You can list any dependencies needed by the plugin by specifying a | COMMENT |
| LOW | docs/developers-guide/drivers/plugins.md | 121 | for more details | COMMENT |
| LOW | docs/developers-guide/drivers/plugins.md | 141 | # that multiple drivers currently still must share the same dependencies | COMMENT |
| LOW | docs/developers-guide/drivers/plugins.md | 201 | # Steps to take to initialize the plugin. For lazy-load drivers, this | COMMENT |
| LOW | .github/workflows/backend.yml | 221 | run: bun run build-static-viz | COMMENT |
| LOW | .github/workflows/release-embedding-sdk.yml | 1 | # Step 2 of the SDK release process: merging a version-bump PR (opened by | COMMENT |
| LOW | .github/workflows/backend-cloverage.yml | 1 | name: Backend-Cloverage | COMMENT |
| LOW | .github/workflows/test.profile-backend.yml | 1 | name: Profile Backend | COMMENT |
| LOW | .github/workflows/cache-warm.yml | 1 | # Writes the shared dependency caches. Every other job restores them and none of them writes. | COMMENT |
| LOW | .github/workflows/cache-warm.yml | 101 | # of what each job resolves at runtime. | COMMENT |
| 31 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/embedding-sdk-bundle/bootstrap-auth.ts | 158 | // Step 1: SSO discovery (skip if jwtProviderUri provided) | COMMENT |
| LOW | frontend/src/embedding-sdk-bundle/bootstrap-auth.ts | 185 | // Step 4: Fetch user and site settings in parallel (bootstrap-specific) | COMMENT |
| LOW | .claude/skills/analytics-events/SKILL.md | 79 | #### Step 1: Create Tracking Functions | COMMENT |
| LOW | .claude/skills/analytics-events/SKILL.md | 99 | #### Step 2: Use in Components | COMMENT |
| LOW | .claude/skills/emotion-migrate/SKILL.md | 139 | ### Step 1: Read and Understand | COMMENT |
| LOW | .claude/skills/emotion-migrate/SKILL.md | 148 | ### Step 2: Classify Each Styled Component | COMMENT |
| LOW | .claude/skills/emotion-migrate/SKILL.md | 166 | ### Step 3: Create CSS Module (if needed) | COMMENT |
| LOW | .claude/skills/emotion-migrate/SKILL.md | 212 | ### Step 4: Update the Component TSX | COMMENT |
| LOW | .claude/skills/emotion-migrate/SKILL.md | 233 | ### Step 5: Delete the `.styled.tsx` File | COMMENT |
| LOW | .claude/skills/emotion-migrate/SKILL.md | 237 | ### Step 6: Verify | COMMENT |
| LOW | docs/databases/ssl-certificates.md | 22 | ## Step 1: Download the root certificate from your provider | COMMENT |
| LOW | docs/databases/ssl-certificates.md | 33 | ## Step 2: Save the certificate | COMMENT |
| LOW⚡ | docs/databases/ssl-certificates.md | 45 | ## Step 3: Add your database | COMMENT |
| LOW⚡ | docs/databases/ssl-certificates.md | 49 | ## Step 4: Toggle on the "Use a secure connection (SSL)" option | COMMENT |
| LOW⚡ | docs/databases/ssl-certificates.md | 53 | ## Step 5: Add additional connection string options | COMMENT |
| LOW⚡ | docs/data-modeling/semantic-layer/remote-sync.md | 253 | ### Step 1: Create a new branch | COMMENT |
| LOW⚡ | docs/data-modeling/semantic-layer/remote-sync.md | 257 | ### Step 2: Create content in your development Metabase | COMMENT |
| LOW⚡ | docs/data-modeling/semantic-layer/remote-sync.md | 261 | ### Step 3: Push to your development branch | COMMENT |
| LOW⚡ | docs/data-modeling/semantic-layer/remote-sync.md | 265 | ### Step 4: Create a pull request | COMMENT |
| LOW⚡ | docs/data-modeling/semantic-layer/remote-sync.md | 273 | ### Step 5: Production automatically updates | COMMENT |
| LOW⚡ | docs/data-modeling/transforms/python-runner.md | 54 | ### Step 1: Generate a secure authentication token | COMMENT |
| LOW⚡ | docs/data-modeling/transforms/python-runner.md | 62 | ### Step 2: Set up S3 storage | COMMENT |
| LOW⚡ | docs/data-modeling/transforms/python-runner.md | 66 | ### Step 3: Start the containers | COMMENT |
| LOW⚡ | docs/installation-and-operation/serialization.md | 397 | ### Step 1: Set up an API key | COMMENT |
| LOW⚡ | docs/installation-and-operation/serialization.md | 402 | ### Step 2: Export | COMMENT |
| LOW | docs/installation-and-operation/serialization.md | 425 | ### Step 3: Import | COMMENT |
| LOW | …nstallation-and-operation/running-metabase-on-azure.md | 11 | ## Step 1: Create the resource group (resource grouping) | COMMENT |
| LOW | …nstallation-and-operation/running-metabase-on-azure.md | 23 | ## Step 2: Create the VNET (virtual network) | COMMENT |
| LOW | …nstallation-and-operation/running-metabase-on-azure.md | 46 | ## Step 3: Create the Application Database (PostgreSQL) | COMMENT |
| LOW | …nstallation-and-operation/running-metabase-on-azure.md | 67 | ## Step 4: Create the private endpoint connection | COMMENT |
| LOW | …nstallation-and-operation/running-metabase-on-azure.md | 88 | ## Step 5: Create web application (deploy Metabase) | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 524 | // Step 1: Verify we start on Dashboard A | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 527 | // Step 2: Navigate to question by clicking on dashcard title | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 537 | // Step 3: First drill - click on Product ID cell | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 544 | // Step 4: Second drill | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 551 | // Step 5: One back click should undo BOTH drills and return to the question | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 558 | // Step 6: Another back click should return to the dashboard | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 583 | // Step 1: Verify we start on Dashboard A | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 586 | // Step 2: First drill directly from dashboard (click on User ID cell - no custom click behavior) | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 600 | // Step 3: Second drill on the drill result | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 607 | // Step 4: One back click should go directly back to Dashboard A | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 681 | // Step 1: Verify we start on Dashboard A | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 684 | // Step 2: Navigate from Dashboard A to Dashboard B via click behavior | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 693 | // Step 3: Navigate from Dashboard B to question via click behavior | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 737 | // Step 6: Perform third drill | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 747 | // Step 7: One back click should revert ALL drills and return to the original question | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 756 | // Step 8: Go back to Dashboard B | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 763 | // Step 9: Go back to Dashboard A | COMMENT |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 705 | // Step 4: Perform first drill on the question (click on Product ID to drill) | COMMENT |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 721 | // Step 5: Perform second drill | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | docs/people-and-groups/api-keys.md | 80 | Replace `YOUR_API_KEY` with the API key you generated above. | CODE |
| HIGH⚡ | docs/people-and-groups/api-keys.md | 84 | -H 'X-API-Key: YOUR_API_KEY' \ | CODE |
| HIGH⚡ | docs/people-and-groups/api-keys.md | 93 | export METABASE_API_KEY="YOUR_API_KEY" | CODE |
| HIGH | …nteractive-embedding-quick-start-guide/sso-with-jwt.ts | 9 | const METABASE_JWT_SHARED_SECRET = "YOUR_SECRET_HERE"; | CODE |
| HIGH | docs/embedding/sdk/snippets/quickstart/example.tsx | 13 | apiKey: "YOUR_API_KEY", | CODE |
| HIGH | …mbedding/sdk/snippets/authentication/express-server.ts | 11 | const METABASE_JWT_SHARED_SECRET = "YOUR_SECRET_HERE"; | CODE |
| HIGH | …ng/sdk/snippets/authentication/auth-config-api-key.tsx | 8 | apiKey: "YOUR_API_KEY", | CODE |
| HIGH | …s/authentication/express-server-interactive-and-sdk.ts | 8 | const METABASE_JWT_SHARED_SECRET = "YOUR_SECRET_HERE"; | CODE |
| HIGH | docs/ai/agent-api.md | 60 | X-API-Key: YOUR_API_KEY | CODE |
| HIGH⚡ | docs/installation-and-operation/serialization.md | 408 | -H 'X-API-Key: YOUR_API_KEY' \ | CODE |
| HIGH⚡ | docs/installation-and-operation/serialization.md | 413 | substituting `YOUR_API_KEY` with your API key and `your-metabase-url` with the URL of your Metabase instance. | CODE |
| HIGH | docs/installation-and-operation/serialization.md | 441 | -H 'X-API-Key: YOUR_API_KEY' \ | CODE |
| HIGH | docs/installation-and-operation/serialization.md | 447 | substituting `YOUR_API_KEY` with your API key and `your-metabase-url` with your Metabase instance URL. | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frontend/src/metabase/viz-core/lib/sensibility.ts | 206 | // the sankey sensibility check is quite robust, so we recommend it whenever it's sensible | COMMENT |
| MEDIUM | …base/utils/scripts-sandbox/distortions-blocked-apis.ts | 24 | // property of the global. Walk the chain so the lookup is robust. | COMMENT |
| MEDIUM | …transforms/pages/RunListPage/RunListPage.unit.spec.tsx | 133 | // Resolve the Duration column's index from the headers (robust to | COMMENT |
| MEDIUM | …tabase/documents/components/DocumentPage.unit.spec.tsx | 71 | // doesn't exist *anymore* should be more robust | COMMENT |
| MEDIUM | …ateExternalUserButton/ReactivateExternalUserButton.tsx | 9 | // Making the same API request, so we can leverage the cached result | COMMENT |
| MEDIUM | …metabase_enterprise/search/semantic/docker-compose.yml | 1 | # Dev harness for a DEDICATED pgvector database (MB_PGVECTOR_DB_URL). A dedicated database is not | COMMENT |
| MEDIUM | bin/embedding-sdk/change-react-version.bash | 47 | # Install React and Cypress React test harness | COMMENT |
| MEDIUM | .github/file-paths.yaml | 283 | # e2e harness/support code (commands, support file, runner). Not in the | COMMENT |
| MEDIUM | .github/workflows/semantic-search.yml | 282 | # MB_PGVECTOR_DB_URL is deliberately unset. The dedicated-harness tests gate themselves off; the | COMMENT |
| MEDIUM | .github/workflows/test.bundle-load-stats.yml | 91 | # Only the harness comes from this tree. The app under test is the | COMMENT |
| MEDIUM | .github/workflows/test.bundle-load-stats.yml | 160 | # checked out above is the harness rather than the measured commit, so | COMMENT |
| MEDIUM | .github/actions/create-backport/create-backport-test.sh | 258 | # Test harness | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/src/embedding-sdk-bundle/bootstrap-auth.ts | 158 | // Step 1: SSO discovery (skip if jwtProviderUri provided) | COMMENT |
| LOW | frontend/src/embedding-sdk-bundle/bootstrap-auth.ts | 185 | // Step 4: Fetch user and site settings in parallel (bootstrap-specific) | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 524 | // Step 1: Verify we start on Dashboard A | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 527 | // Step 2: Navigate to question by clicking on dashcard title | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 537 | // Step 3: First drill - click on Product ID cell | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 544 | // Step 4: Second drill | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 551 | // Step 5: One back click should undo BOTH drills and return to the question | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 558 | // Step 6: Another back click should return to the dashboard | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 583 | // Step 1: Verify we start on Dashboard A | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 586 | // Step 2: First drill directly from dashboard (click on User ID cell - no custom click behavior) | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 600 | // Step 3: Second drill on the drill result | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 607 | // Step 4: One back click should go directly back to Dashboard A | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 681 | // Step 1: Verify we start on Dashboard A | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 684 | // Step 2: Navigate from Dashboard A to Dashboard B via click behavior | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 693 | // Step 3: Navigate from Dashboard B to question via click behavior | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 737 | // Step 6: Perform third drill | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 747 | // Step 7: One back click should revert ALL drills and return to the original question | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 756 | // Step 8: Go back to Dashboard B | COMMENT |
| LOW⚡ | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 763 | // Step 9: Go back to Dashboard A | COMMENT |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 705 | // Step 4: Perform first drill on the question (click on Product ID to drill) | COMMENT |
| LOW | …cenarios/embedding-sdk/internal-navigation.cy.spec.tsx | 721 | // Step 5: Perform second drill | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | mise.toml | 6 | # This file defines the tools required for Metabase development. | COMMENT |
| MEDIUM | bin/verify-doc-links/verify-doc-links.unit.spec.ts | 81 | "# Alerts\n## Create an alert\n", | CODE |
| MEDIUM | resources/liquibase_legacy_migrations.yaml | 3 | # This file contains the legacy migrations that used to bootstrap metabase, now this file should be | COMMENT |
| MEDIUM | resources/liquibase_legacy_migrations.yaml | 5496 | # Create the TaskHistory table, intended to provide debugging info on our background/quartz processes | COMMENT |
| MEDIUM | resources/liquibase_legacy_migrations.yaml | 6768 | # Create the native query snippets table, intended to store snippets and their metadata | COMMENT |
| MEDIUM | resources/liquibase_legacy_migrations.yaml | 10169 | # Create the magic Permissions Groups if they don't already exist. | COMMENT |
| MEDIUM | resources/python-sources/sql_tools.py | 541 | # Create the Into expression with the table identifier | COMMENT |
| MEDIUM | resources/python-sources/sql_tools.py | 1430 | # Create a fake column to reuse column resolution | COMMENT |
| MEDIUM | cross-version/test.sh | 199 | # This function is idempotent - it takes a version string and handles everything internally. | COMMENT |
| MEDIUM | .github/workflows/optimize-images.yml | 38 | # Initialize tracking variables | COMMENT |
| MEDIUM | .github/actions/fetch-artifact/action.yml | 107 | # Create a temporary directory for extraction to avoid conflicts | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH⚡ | resources/python-sources/sql_tools.py | 163 | [[null, null, "users"], [null, "public", "orders"], ["myproject", "dataset", "events"]] | STRING |
| HIGH⚡ | resources/python-sources/sql_tools.py | 172 | => '[[null, null, "users"]]' | STRING |
| HIGH⚡ | resources/python-sources/sql_tools.py | 175 | => '[[null, "public", "users"]]' | STRING |
| HIGH | resources/python-sources/sql_tools.py | 191 | [[null, null, "users", "id"], [null, "public", "orders", "total"]] | STRING |
| HIGH | resources/python-sources/sql_tools.py | 207 | => '[[null, null, "users", "id"]]' | STRING |
| HIGH | resources/python-sources/sql_tools.py | 210 | => '[[null, "public", "users", "*"]]' | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …-sdk-shared/.storybook/msw-public/mockServiceWorker.js | 122 | async function handleRequest(event, requestId) { | CODE |
| LOW | …ents/DatabaseCacheScheduleField/ScheduleModePicker.tsx | 43 | function getData(): SelectData<ScheduleMode> { | CODE |
| LOW | …itor/tools/components/LogLevelsModal/DurationInput.tsx | 48 | function getData() { | CODE |
| LOW | …ase/monitor/tools/components/TaskPicker/TaskPicker.tsx | 40 | function getData(uniqueTasks?: string[]) { | CODE |
| LOW | …tools/components/TaskStatusPicker/TaskStatusPicker.tsx | 38 | function getData() { | CODE |
| LOW | …d/src/metabase/metadata/components/DataSourceInput.tsx | 48 | function getData({ | CODE |
| LOW | frontend/src/metabase/metadata/components/UserInput.tsx | 128 | function getData( | CODE |
| LOW | …onents/FieldValuesTypePicker/FieldValuesTypePicker.tsx | 50 | function getData() { | CODE |
| LOW | …adata/components/FieldOrderPicker/FieldOrderPicker.tsx | 45 | function getData(): SegmentedControlItem<TableFieldOrder>[] { | CODE |
| LOW | …/metadata/components/CurrencyPicker/CurrencyPicker.tsx | 84 | function getData() { | CODE |
| LOW | …pingPicker/DisplayValuesPicker/DisplayValuesPicker.tsx | 95 | function getData(options: RemappingValue[], value: RemappingValue) { | CODE |
| LOW | …adata/components/UnfoldJsonPicker/UnfoldJsonPicker.tsx | 44 | function getData() { | CODE |
| LOW | …onents/FieldVisibilityPicker/FieldVisibilityPicker.tsx | 66 | function getData() { | CODE |
| LOW | …a/components/SemanticTypePicker/SemanticTypePicker.tsx | 71 | function getData({ field, value }: Pick<Props, "field" | "value">) { | CODE |
| LOW | …/metadata/components/FkTargetPicker/FkTargetPicker.tsx | 167 | function getData(comparableIdFields: Field[], includeSchema: boolean) { | CODE |
| LOW | .storybook/msw-public/mockServiceWorker.js | 123 | async function handleRequest(event, requestId) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/utils/colors.sh | 4 | # Usage: | COMMENT |
| LOW | bin/utils/files.sh | 4 | # Usage: | COMMENT |
| LOW | bin/utils/logging.sh | 4 | # Usage: | COMMENT |
| LOW | bin/utils/tools.sh | 4 | # Usage: | COMMENT |
| LOW | bin/utils/all.sh | 4 | # Usage: | COMMENT |
| LOW | bin/utils/prompts.sh | 4 | # Usage: | COMMENT |
| LOW | cross-version/dev.sh | 11 | # Usage: | COMMENT |
| LOW | cross-version/test.sh | 5 | # Usage: | COMMENT |
| LOW | dev/src/dev/mq_perf_multi.sh | 4 | # Usage: | COMMENT |
| LOW | e2e/cross-version/run.sh | 7 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | bin/openapi-check.sh | 29 | # Check if there are any differences between generated and committed versions | COMMENT |
| LOW⚡ | bin/utils/tools.sh | 20 | # Check if a command/tool is available | COMMENT |
| LOW | resources/python-sources/sql_tools.py | 1139 | # Check if it's a CTE reference | COMMENT |
| LOW | resources/python-sources/sql_tools.py | 1679 | # Check if it looks like a dict (frozenset of 2-tuples) | COMMENT |
| LOW | cross-version/test.sh | 388 | # Check if Metabase refuses to start (downgrade detection) | COMMENT |
| LOW | .github/workflows/optimize-images.yml | 65 | # Output results for use in commit message | COMMENT |
| LOW | .github/workflows/report.update-e2e-timings.yml | 76 | # Check if anything changed before commit/push | COMMENT |
| LOW | .github/workflows/sync-fork.yml | 168 | # Check if branch exists on origin | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ing-sdk-package/cli/snippets/express-server-snippet.ts | 18 | // This is hard-coded for demonstration purposes. | COMMENT |
| MEDIUM | …mbedding/sdk/snippets/authentication/express-server.ts | 17 | // Here it's hardcoded for demonstration purposes | COMMENT |
| MEDIUM | …s/authentication/express-server-interactive-and-sdk.ts | 21 | // Here it's hardcoded for demonstration purposes | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | docs/embedding/sdk/api/UseMetabotResult.html | 20 | </div></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="contextwindowpercentusage"><span>c | CODE |
| MEDIUM | docs/embedding/sdk/api/UseMetabotResult.html | 29 | </div></section><section class="tsd-panel tsd-member"><h3 class="tsd-anchor-link" id="iscontextwindowfull"><span>is<wbr/ | CODE |
| MEDIUM | docs/ai/agent-api.md | 8 | The [Agent API](../api.html#tag/apiagent) is a REST API for building headless, agentic BI applications on top of Metabas | CODE |
| MEDIUM | docs/ai/agent-api.md | 26 | Check out the [Metabase Agent API demo](https://github.com/metabase/metabase-agent-api-demo) for a working example of an | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …rc/metabase/query_builder/actions/core/initializeQB.ts | 414 | // This handles cases like AI-generated queries with model references {{#1}} | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …t/scenarios/organization/timelines-question.cy.spec.js | 693 | // I've added comments that hopefully make this easier for the next person to understand. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | resources/python-sources/sql_tools.py | 186 | CODE | |
| LOW | resources/python-sources/sql_tools.py | 552 | CODE | |
| LOW | resources/python-sources/sql_tools.py | 635 | CODE | |
| LOW | resources/python-sources/sql_tools.py | 1803 | CODE | |
| LOW | resources/python-sources/sql_tools.py | 673 | CODE | |
| LOW | resources/python-sources/sql_tools.py | 881 | CODE | |
| LOW | resources/python-sources/sql_tools.py | 1194 | CODE | |
| LOW | resources/python-sources/sql_tools.py | 1261 | CODE | |
| LOW | resources/python-sources/sql_tools.py | 1440 | CODE | |
| LOW | resources/python-sources/sql_tools.py | 1598 | CODE | |
| LOW | resources/python-sources/sql_tools.py | 1670 | CODE | |
| LOW | resources/python-sources/sql_tools.py | 741 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | resources/python-sources/sql_tools.py | 636 | Replace schema, table, and column names in a SQL query. SECURITY NOTE: Replacement values are injected into th | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | resources/python-sources/sql_tools.py | 73 | except: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …scenarios/data-studio/transforms/transforms.cy.spec.ts | 3231 | print("Hello, world!") | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | resources/python-sources/sql_tools.py | 460 | except Exception as e: | CODE |
| LOW | resources/python-sources/sql_tools.py | 2145 | except Exception as e: | CODE |
| LOW | resources/python-sources/sql_tools.py | 1849 | except Exception as e: | STRING |
| LOW | resources/python-sources/sql_tools.py | 1865 | except Exception: | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …src/metabase/search/containers/SearchApp.unit.spec.tsx | 206 | // TODO: Add tests for other filters as they come | COMMENT |