Database governance built for humans and agents — controlling changes and access across every major database.
This report summarizes scanner evidence for bytebase/bytebase, a Go project with 14,661 GitHub stars. SynthScan examined 1,513,966 lines of code across 5714 source files, recording 1665 pattern matches distributed across 16 syntactic categories. The legacy adjusted pattern signal is 1.3 (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? 1430 finding(s).
Are imports declared and package/API names verified? 212 finding(s).
Are wrappers, guards, and repeated structures necessary? 281 finding(s).
Which changes need focused human review? 1665 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 1665 distinct pattern matches across 16 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/vite.config.ts | 21 | plugins: [ | COMMENT |
| LOW | frontend/vitest.config.ts | 21 | pool: "threads", | COMMENT |
| LOW | frontend/vitest.setup.ts | 1 | import "@testing-library/jest-dom/vitest"; | COMMENT |
| LOW | frontend/tests/e2e/build-server.sh | 1 | #!/usr/bin/env bash | COMMENT |
| LOW | frontend/tests/e2e/sql-editor/sql-editor-export.spec.ts | 1 | // SQL Editor — result export workflow (PRs #20487 / #20491 / #20501). | COMMENT |
| LOW | frontend/tests/e2e/sql-editor/sql-editor-export.spec.ts | 21 | // - Read user, multi-statement: C10 one affordance above the tabs | COMMENT |
| LOW | frontend/tests/e2e/sql-editor/sql-editor-export.spec.ts | 621 | // The distinctive shared token in both secrets. With a FULL mask the whole | COMMENT |
| LOW | frontend/tests/e2e/sql-editor/sql-editor-export.spec.ts | 801 | COMMENT | |
| LOW | frontend/tests/e2e/sql-editor/sql-editor-tabs.spec.ts | 41 | // bound DB; the query actually executes against the new connection. | COMMENT |
| LOW | frontend/tests/e2e/sql-editor/sql-editor-tabs.spec.ts | 141 | // Current product behavior (R7 fix): the tab title is the | COMMENT |
| LOW | frontend/tests/e2e/sql-editor/sql-editor-tabs.spec.ts | 161 | // scroller above it has `overflow-x-auto`, but its descendant's | COMMENT |
| LOW | frontend/tests/e2e/sql-editor/sql-editor-tabs.spec.ts | 261 | "outer scroller must allow horizontal scroll", | COMMENT |
| LOW | frontend/tests/e2e/sql-editor/sql-editor-lsp.spec.ts | 1 | // SQL Editor — LSP smoke test (completion over the /lsp websocket). | COMMENT |
| LOW | frontend/tests/e2e/sql-editor/sql-editor.page.ts | 61 | // The button's screen-reader name comes from i18n key | COMMENT |
| LOW | …end/tests/e2e/sql-editor/sql-editor-query-plan.spec.ts | 1 | // SQL Editor — query plans drawn inline in the result pane (3.23: #21443, | COMMENT |
| LOW | …end/tests/e2e/sql-editor/sql-editor-admin-mode.spec.ts | 81 | COMMENT | |
| LOW | …end/tests/e2e/sql-editor/sql-editor-admin-mode.spec.ts | 221 | COMMENT | |
| LOW | …end/tests/e2e/sql-editor/sql-editor-admin-mode.spec.ts | 401 | COMMENT | |
| LOW | …end/tests/e2e/sql-editor/sql-editor-admin-mode.spec.ts | 421 | // All three tests below are live regression locks (no `test.fail()`): | COMMENT |
| LOW | …end/tests/e2e/sql-editor/sql-editor-admin-mode.spec.ts | 481 | expect(await readAdminPromptValue()).toBe(""); | COMMENT |
| LOW | …end/tests/e2e/sql-editor/sql-editor-admin-mode.spec.ts | 601 | // rather than asserting one step per press): the Up-history keybinding is | COMMENT |
| LOW | frontend/tests/e2e/sql-editor/sql-editor-batch.spec.ts | 1 | // SQL Editor — multi-DB / batch query behaviors (subset of Batch 11). | COMMENT |
| LOW | frontend/tests/e2e/sql-editor/sql-editor-schema.spec.ts | 441 | test.describe("Schema tree folder labels render on a single line (BYT-9602)", () => { | COMMENT |
| LOW | …end/tests/e2e/sql-editor/sql-editor-connection.spec.ts | 141 | // the sidebar tree, schema panel, and saved query list all refresh | COMMENT |
| LOW | …end/tests/e2e/sql-editor/sql-editor-connection.spec.ts | 241 | }); | COMMENT |
| LOW | frontend/tests/e2e/sql-editor/sql-editor-misc.spec.ts | 1 | // SQL Editor — misc shell behaviors (subset of Batch 9 AI/misc CUJs). | COMMENT |
| LOW | frontend/tests/e2e/sql-editor/sql-editor-misc.spec.ts | 161 | test.describe("Sidebar resize works on first drag (BYT-9611)", () => { | COMMENT |
| LOW | …nd/tests/e2e/sql-editor/sql-editor-permissions.spec.ts | 1 | // SQL Editor — permission-gated UI (Batch 8, I-series CUJs). | COMMENT |
| LOW | …nd/tests/e2e/sql-editor/sql-editor-permissions.spec.ts | 101 | // continue, because the server instance is the same. | COMMENT |
| LOW | …nd/tests/e2e/sql-editor/sql-editor-permissions.spec.ts | 241 | const anySignal = permissionMention.or(requestCTA).first(); | COMMENT |
| LOW | …/tests/e2e/sql-editor/sql-editor-access-grants.spec.ts | 1 | // SQL Editor — access-grant flow (Batch 8, L-series + H1 CUJs). | COMMENT |
| LOW | …/tests/e2e/sql-editor/sql-editor-access-grants.spec.ts | 61 | // case of debugging, but the JIT toggle itself goes through the API | COMMENT |
| LOW | …/tests/e2e/sql-editor/sql-editor-access-grants.spec.ts | 201 | // AccessGrantRequestDrawer with the four expected sections. | COMMENT |
| LOW | …/tests/e2e/sql-editor/sql-editor-access-grants.spec.ts | 221 | // PermissionGuard renders the button disabled when the JIT feature is | COMMENT |
| LOW | …/tests/e2e/sql-editor/sql-editor-access-grants.spec.ts | 281 | ).not.toBeChecked(); | COMMENT |
| LOW | …/tests/e2e/sql-editor/sql-editor-access-grants.spec.ts | 461 | "Export must NOT be pre-checked from the masked-cell popover", | COMMENT |
| LOW | …ests/e2e/sql-editor/sql-editor-workspace-gates.spec.ts | 1 | // SQL Editor — workspace-level QueryDataPolicy gates (Batch 9, M-series). | COMMENT |
| LOW | …ests/e2e/sql-editor/sql-editor-workspace-gates.spec.ts | 161 | // BYT-9557 (FIXED, #20390): on an instance with BOTH an admin and a read-only | COMMENT |
| LOW | …ests/e2e/sql-editor/sql-editor-workspace-gates.spec.ts | 281 | await expect( | COMMENT |
| LOW | frontend/tests/e2e/framework/ui-create-plan.ts | 121 | // a confirm dialog. One press resolves to exactly one of: | COMMENT |
| LOW | frontend/tests/e2e/framework/global-setup.ts | 1 | import { execFileSync } from "node:child_process"; | COMMENT |
| LOW | …tend/tests/e2e/workspace/workspace-mcp-consent.spec.ts | 1 | // Workspace → MCP: the OAuth 2.1 consent loop an MCP client goes through | COMMENT |
| LOW | frontend/tests/e2e/workspace/workspace-banner.spec.ts | 1 | // Workspace-level external-URL banner. | COMMENT |
| LOW | …nd/tests/e2e/workspace/workspace-instance-form.spec.ts | 1 | // Workspace → Instances → Add instance: the connection form (3.23: #21396, | COMMENT |
| LOW | …ntend/tests/e2e/workspace/workspace-seat-limit.spec.ts | 1 | // Workspace seat limit — over-limit IAM edits (BYT-9633). | COMMENT |
| LOW | …ntend/tests/e2e/workspace/workspace-seat-limit.spec.ts | 141 | test.describe("Over-limit workspace can still create a service account (BYT-9633)", () => { | COMMENT |
| LOW | …/tests/e2e/project-databases/project-databases.spec.ts | 1 | // Project Databases page — selection action bar permission gating. | COMMENT |
| LOW | …tend/tests/e2e/workspace-setup/workspace-setup.spec.ts | 1 | // First-run setup wizard (docs/design/onboarding-flow.md). | COMMENT |
| LOW | …d/tests/e2e/issue-detail/issue-detail-comments.spec.ts | 1 | // Issue detail — markdown comments & description (link rendering). | COMMENT |
| LOW | …nd/tests/e2e/issue-detail/issue-detail-targets.spec.ts | 1 | // Targets "View all" sheet (scrollability) — on Plan Detail. | COMMENT |
| LOW | …d/tests/e2e/issue-detail/issue-detail-redirect.spec.ts | 1 | // Issue detail — the route-level redirect to Plan Detail (BYT-9721, PR #20722). | COMMENT |
| LOW | …/tests/e2e/schema-editor/schema-editor-columns.spec.ts | 1 | // Schema editor — column editing (TableColumnEditor + DataTypeCell + | COMMENT |
| LOW | frontend/tests/e2e/schema-editor/schema-editor.page.ts | 301 | }); | COMMENT |
| LOW | …/tests/e2e/schema-editor/schema-editor-objects.spec.ts | 1 | // Schema editor — schema-level objects (AsideTree "+" DropdownMenu + | COMMENT |
| LOW | …tend/tests/e2e/plan-detail/plan-detail-rollout.spec.ts | 1 | // Plan detail — rollout creation across (approval, plan-check) gates. | COMMENT |
| LOW | …ntend/tests/e2e/plan-detail/plan-detail-review.spec.ts | 1 | // Plan detail — AIO Review section (the whole sub-area in one file). | COMMENT |
| LOW | …ntend/tests/e2e/plan-detail/plan-detail-review.spec.ts | 21 | // - BYT-9746 guard: "(edited)" marker shows in place after an inline edit | COMMENT |
| LOW | …nd/tests/e2e/plan-detail/plan-detail-lifecycle.spec.ts | 1 | // Plan Detail lifecycle — the whole header lifecycle sub-area in one file. | COMMENT |
| LOW | …nd/tests/e2e/plan-detail/plan-detail-lifecycle.spec.ts | 21 | // - Rejected → "Rejected" pill (error) + re-request in the popover. (R3, unhappy) | COMMENT |
| LOW | …ontend/tests/e2e/plan-detail/plan-detail-tasks.spec.ts | 121 | await expect(planPage.taskRerunButton).toBeVisible({ timeout: 5_000 }); | COMMENT |
| 842 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …end/tests/e2e/sql-editor/sql-editor-query-plan.spec.ts | 89 | async function expectDiagramOpenedOnCostliest(): Promise<void> { | CODE |
| LOW | frontend/tests/e2e/framework/ui-create-plan.ts | 29 | export async function createDatabaseChangePlanViaUI( | CODE |
| LOW | frontend/tests/e2e/framework/ui-create-plan.ts | 94 | export async function createMultiSpecChangePlanViaUI( | CODE |
| LOW | frontend/tests/e2e/framework/ui-create-plan.ts | 135 | export async function submitDraftForReviewViaUI(page: Page): Promise<void> { | CODE |
| LOW | frontend/tests/e2e/framework/ui-create-plan.ts | 181 | export async function createSubmittedDatabaseChangePlanViaUI( | CODE |
| LOW | frontend/tests/e2e/framework/ui-create-plan.ts | 193 | export async function createSubmittedMultiSpecChangePlanViaUI( | CODE |
| LOW | …/tests/e2e/masking-exemption/masking-exemption.spec.ts | 115 | async function ensureClassificationFixtures( | CODE |
| LOW | …/tests/e2e/masking-exemption/masking-exemption.spec.ts | 170 | async function clearClassificationFixtures( | CODE |
| LOW | …ntend/tests/e2e/plan-detail/plan-detail-review.spec.ts | 2024 | async function followActivityLinkWhileEditing(): Promise<void> { | CODE |
| LOW | …ntend/tests/e2e/plan-detail/plan-detail-review.spec.ts | 2038 | async function expectLineRevealedForTyping(): Promise<void> { | CODE |
| LOW | …ntend/tests/e2e/plan-detail/plan-detail-checks.spec.ts | 132 | async function createPlanAndWaitForChecks( | CODE |
| LOW⚡ | frontend/src/types/timestamp.ts | 11 | export function getTimeForPbTimestampProtoEs( | CODE |
| LOW⚡ | frontend/src/types/timestamp.ts | 14 | export function getTimeForPbTimestampProtoEs( | CODE |
| LOW⚡ | frontend/src/types/timestamp.ts | 18 | export function getTimeForPbTimestampProtoEs( | CODE |
| LOW⚡ | frontend/src/types/timestamp.ts | 21 | export function getTimeForPbTimestampProtoEs( | CODE |
| LOW | frontend/src/app/SessionExpiredSurfaceGate.tsx | 6 | export function SessionExpiredSurfaceGate() { | CODE |
| LOW | frontend/src/app/analytics/RouteBehaviorRecorder.tsx | 46 | function EnabledRouteBehaviorRecorder({ | CODE |
| LOW | frontend/src/app/analytics/behavior.ts | 55 | export function buildBehaviorAnalyticsConfig(params: { | CODE |
| LOW | frontend/src/app/analytics/behavior.ts | 142 | export function sanitizeBehaviorProperties( | CODE |
| LOW | frontend/src/app/router/releaseDetailRedirect.ts | 15 | export async function releaseDetailRedirectLoader({ | CODE |
| LOW | frontend/src/app/router/NavigationScrollRestoration.tsx | 93 | export function markListScrollRestorationEntry( | CODE |
| LOW | frontend/src/app/router/NavigationScrollRestoration.tsx | 101 | export function useListScrollRestorationKey(): string | undefined { | CODE |
| LOW | frontend/src/app/router/NavigationScrollRestoration.tsx | 436 | export function useListScrollRestorationLoadMore( | CODE |
| LOW | frontend/src/app/router/NavigationScrollRestoration.tsx | 493 | export function NavigationScrollRestoration({ | CODE |
| LOW | frontend/src/app/router/issueDetailRedirect.ts | 37 | export async function issueDetailRedirectLoader({ | CODE |
| LOW | frontend/src/app/router/permissionDenied.ts | 22 | export function buildPermissionDeniedRouteQuery({ | CODE |
| LOW | frontend/src/stores/app/issue.ts | 35 | function projectResourceFromIssueName(issueName: string): string { | CODE |
| LOW | frontend/src/stores/app/workspace.ts | 91 | function appFeaturesFromDatabaseChangeMode(mode: DatabaseChangeMode) { | CODE |
| LOW | frontend/src/stores/app/workspace.ts | 129 | function convertEnvironmentsToSetting( | CODE |
| LOW | frontend/src/stores/app/utils.ts | 41 | export function getWorkspaceResourceScope( | CODE |
| LOW | frontend/src/stores/app/utils.ts | 297 | export function projectResourceNameFromId(projectId: string | undefined) { | CODE |
| LOW | frontend/src/stores/app/database.ts | 33 | function instanceResourceNameFromDatabase(databaseName: string): string { | CODE |
| LOW | frontend/src/utils/datetime.ts | 190 | function formatOperationalDateTime(timestampMs: number): string { | CODE |
| LOW⚡ | frontend/src/utils/util.ts | 160 | export function getHighlightHTMLByKeyWords(s: string, k: string) { | CODE |
| LOW | frontend/src/utils/storage-migrate.ts | 184 | function migrateSavedQueryPrefixKeys() { | CODE |
| LOW | frontend/src/utils/storage-migrate.ts | 199 | function migrateSavedQueryTabValues() { | CODE |
| LOW | frontend/src/utils/storage-migrate.ts | 246 | function migrateSavedQuerySidebarTabValues() { | CODE |
| LOW | frontend/src/utils/v1/position.ts | 4 | export function batchConvertPositionToMonacoPosition( | CODE |
| LOW | frontend/src/utils/v1/position.ts | 61 | export function convertPositionLineToMonacoLine(line: number) { | CODE |
| LOW | frontend/src/components/HowBytebaseWorksSheet.tsx | 22 | export function getHowBytebaseWorksGuideContent( | CODE |
| LOW | frontend/src/components/IssueTable.tsx | 380 | export function useIssueSearchScopeOptions( | CODE |
| LOW | frontend/src/components/IssueTable.tsx | 999 | export function BatchIssueStatusActionDrawer({ | CODE |
| LOW | frontend/src/components/CredentialProofInput.tsx | 67 | export function credentialProofCallOptions() { | CODE |
| LOW | frontend/src/components/ComponentPermissionGuard.tsx | 122 | export function useComponentPermissionState({ | CODE |
| LOW | frontend/src/components/BannersWrapper.tsx | 202 | function BannerUpgradeSubscription() { | CODE |
| LOW | frontend/src/components/SemanticTypeSelect.tsx | 29 | function getSemanticTypeDescription( | CODE |
| LOW | frontend/src/components/useCommonSearchScopeOptions.tsx | 24 | export function useCommonSearchScopeOptions( | CODE |
| LOW | frontend/src/components/CreateWorkloadIdentitySheet.tsx | 109 | export function CreateWorkloadIdentitySheet( | CODE |
| LOW | frontend/src/components/AccountMultiSelect.tsx | 42 | function getSpecialAccountByFullname(fullname: string): { | CODE |
| LOW | frontend/src/components/RoutePermissionGuardShell.tsx | 18 | export function RoutePermissionGuardShell({ | CODE |
| LOW | frontend/src/components/ui/segmented-control.test.tsx | 78 | function ControlledSegmentedControl() { | CODE |
| LOW | frontend/src/components/ui/styles.stylex.ts | 200 | export function controlMultilineSizeStyle(size: ControlSize) { | CODE |
| LOW | frontend/src/components/ui/styles.stylex.ts | 380 | export function formFieldDescriptionStyle() { | CODE |
| LOW | frontend/src/components/ui/styles.stylex.ts | 394 | export function formSectionNoPaddingStyle() { | CODE |
| LOW⚡ | frontend/src/components/ui/styles.stylex.ts | 410 | export function formSectionDescriptionStyle() { | CODE |
| LOW⚡ | frontend/src/components/ui/styles.stylex.ts | 414 | export function singleColumnFormSectionStyle() { | CODE |
| LOW⚡ | frontend/src/components/ui/styles.stylex.ts | 418 | export function singleColumnFormHeaderStyle() { | CODE |
| LOW⚡ | frontend/src/components/ui/styles.stylex.ts | 422 | export function singleColumnFormContentStyle() { | CODE |
| LOW⚡ | frontend/src/components/ui/styles.stylex.ts | 448 | export function stickyActionFooterContentStyle() { | CODE |
| LOW⚡ | frontend/src/components/ui/styles.stylex.ts | 452 | export function stickyActionFooterSideStyle() { | CODE |
| 198 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …/tests/e2e/masking-exemption/masking-exemption.spec.ts | 532 | // Step 1: No exemption → data is masked | COMMENT |
| LOW⚡ | …/tests/e2e/masking-exemption/masking-exemption.spec.ts | 538 | // Step 2: Grant exemption via UI → data becomes unmasked | COMMENT |
| LOW | …/tests/e2e/masking-exemption/masking-exemption.spec.ts | 549 | // Step 3: Revoke exemption via UI → data becomes masked again | COMMENT |
| LOW⚡ | frontend/src/utils/util.ts | 161 | // Step 1: Escape HTML entities to prevent XSS (converts <, >, &, ", ', ` to entities) | COMMENT |
| LOW⚡ | frontend/src/utils/util.ts | 165 | // Step 2: Escape the search keyword and apply highlighting | COMMENT |
| LOW⚡ | frontend/src/utils/util.ts | 172 | // Step 3: Sanitize with DOMPurify as defense-in-depth (allowlist-based) | COMMENT |
| LOW⚡ | frontend/src/utils/util.ts | 197 | // Step 1: Escape HTML entities to prevent XSS | COMMENT |
| LOW⚡ | frontend/src/utils/util.ts | 203 | // Step 2: Build safe regex pattern and apply highlighting. | COMMENT |
| LOW | frontend/src/utils/util.ts | 218 | // Step 3: Sanitize with DOMPurify as defense-in-depth (allowlist-based) | COMMENT |
| LOW⚡ | …d/src/components/database/CreateDatabaseSheet.test.tsx | 633 | // Step 1: type a custom title. | COMMENT |
| LOW⚡ | …d/src/components/database/CreateDatabaseSheet.test.tsx | 637 | // Step 2: dbName preserved across manual title. | COMMENT |
| LOW⚡ | …d/src/components/database/CreateDatabaseSheet.test.tsx | 642 | // Step 3: clear title manually (invariant reset). | COMMENT |
| LOW⚡ | …d/src/components/database/CreateDatabaseSheet.test.tsx | 646 | // Step 4: clear dbName. | COMMENT |
| LOW⚡ | …d/src/components/database/CreateDatabaseSheet.test.tsx | 650 | // Step 5: retype dbName and verify each keystroke tracks. | COMMENT |
| LOW | …ntend/src/modules/agent/logic/skills/databaseChange.ts | 20 | ### Step 1: Create sheet(s) with SQL | COMMENT |
| LOW | …ntend/src/modules/agent/logic/skills/databaseChange.ts | 40 | ### Step 2: Create a plan | COMMENT |
| LOW | …ntend/src/modules/agent/logic/skills/databaseChange.ts | 105 | ### Step 3: Create an issue | COMMENT |
| LOW | …ntend/src/modules/agent/logic/skills/databaseChange.ts | 121 | ### Step 4: Review and deploy | COMMENT |
| LOW | …tend/src/modules/agent/logic/skills/grantPermission.ts | 25 | ### Step 1: List Available Roles | COMMENT |
| LOW | …tend/src/modules/agent/logic/skills/grantPermission.ts | 49 | ### Step 2: Get Current IAM Policy | COMMENT |
| LOW | …tend/src/modules/agent/logic/skills/grantPermission.ts | 75 | ### Step 3: Set IAM Policy | COMMENT |
| LOW | frontend/src/routes/project/ProjectSyncSchemaPage.tsx | 321 | // Step 2: at least one target database with diff | COMMENT |
| LOW⚡ | …src/routes/project/plan-detail/utils/rolloutPreview.ts | 47 | // Step 1: Extract all database targets from specs and expand database groups | COMMENT |
| LOW⚡ | …src/routes/project/plan-detail/utils/rolloutPreview.ts | 50 | // Step 2: Fetch databases that are not cached | COMMENT |
| LOW⚡ | …src/routes/project/plan-detail/utils/rolloutPreview.ts | 53 | // Step 3: Generate tasks from specs | COMMENT |
| LOW⚡ | …src/routes/project/plan-detail/utils/rolloutPreview.ts | 56 | // Step 4: Get environment order from store | COMMENT |
| LOW⚡ | …src/routes/project/plan-detail/utils/rolloutPreview.ts | 59 | // Step 5: Group tasks by environment and create stages | COMMENT |
| LOW⚡ | …src/routes/project/plan-detail/utils/rolloutPreview.ts | 62 | // Step 6: Build and return the rollout | COMMENT |
| LOW | backend/tests/gitops_test.go | 657 | // Step 1: Create a release containing migration files. | COMMENT |
| LOW | backend/tests/gitops_test.go | 680 | // Step 2: Create a plan with the release field set. | COMMENT |
| LOW | backend/tests/gitops_test.go | 730 | // Step 3: Create a rollout from the plan. | COMMENT |
| LOW | backend/tests/gitops_test.go | 988 | // Step 1: Create a release containing 3 simple migration files. | COMMENT |
| LOW | backend/tests/gitops_test.go | 1024 | // Step 2: Create a plan targeting both test and prod databases. | COMMENT |
| LOW | backend/tests/gitops_test.go | 1057 | // Step 3: Create a rollout from the plan. | COMMENT |
| LOW | backend/tests/gitops_test.go | 1213 | // Step 1: Create a release with version 1.0.0 file. | COMMENT |
| LOW | backend/tests/gitops_test.go | 1235 | // Step 2: Apply the release to a database. | COMMENT |
| LOW | backend/tests/gitops_test.go | 1279 | // Step 3: Create a release with version 1.0.0 file but with different content. | COMMENT |
| LOW | backend/tests/gitops_test.go | 1297 | // Step 4: Call CheckRelease with the modified release against the same target. | COMMENT |
| LOW | backend/tests/gitops_test.go | 1308 | // Step 5: Expect that CheckRelease returns a warning about the changed file. | COMMENT |
| LOW⚡ | backend/tests/tenant_test.go | 155 | // Step 1: Get baseline's current schema. | COMMENT |
| LOW⚡ | backend/tests/tenant_test.go | 161 | // Step 2: Create new tenant database. | COMMENT |
| LOW⚡ | backend/tests/tenant_test.go | 166 | // Step 3: Initialize new tenant with baseline schema. | COMMENT |
| LOW | backend/tests/tenant_test.go | 216 | // Step 4: Find pending rollouts for baseline. | COMMENT |
| LOW | backend/tests/tenant_test.go | 243 | // Step 5: Add new tenant to pending rollouts (idempotent CreateRollout). | COMMENT |
| LOW | backend/tests/pg_sdl_rollout_test.go | 78 | // Step 1: Create initial schema with basic objects | COMMENT |
| LOW | backend/tests/pg_sdl_rollout_test.go | 110 | // Step 2: Update schema - add column and new table | COMMENT |
| LOW | backend/tests/pg_sdl_rollout_test.go | 152 | // Step 3: Remove objects - drop comments table and posts index | COMMENT |
| LOW | …d/plugin/advisor/tidb/advisor_statement_dml_dry_run.go | 100 | // Step 1: validate batch splitting via TiDB's native BATCH DRY RUN. omni | COMMENT |
| LOW | …d/plugin/advisor/tidb/advisor_statement_dml_dry_run.go | 114 | // Step 2: EXPLAIN the inner DML. EXPLAIN doesn't accept BATCH syntax, so we | COMMENT |
| LOW⚡ | backend/plugin/parser/tsql/query_span_extractor_test.go | 282 | // Step 1: DECLARE populates TempTables. | COMMENT |
| LOW⚡ | backend/plugin/parser/tsql/query_span_extractor_test.go | 291 | // Step 2: SELECT from @t resolves via TempTables. | COMMENT |
| LOW | backend/plugin/parser/pg/query_span.go | 250 | // Step 1: Parse with omni. | COMMENT |
| LOW | backend/plugin/parser/pg/query_span.go | 269 | // Step 2: Extract access tables (non-fatal on error — some statement | COMMENT |
| LOW⚡ | backend/plugin/parser/pg/query_span.go | 287 | // Step 3: Check for mixed system/user tables. | COMMENT |
| LOW⚡ | backend/plugin/parser/pg/query_span.go | 293 | // Step 4: Classify query type. | COMMENT |
| LOW⚡ | backend/plugin/parser/pg/query_span.go | 296 | // Step 5: Return early for non-SELECT queries, keeping the tables the | COMMENT |
| LOW | backend/plugin/parser/pg/query_span.go | 321 | // Step 6: Cast to SelectStmt, init catalog, analyze. | COMMENT |
| LOW | backend/plugin/parser/pg/query_span.go | 358 | // Step 7: Extract lineage from analyzed query. | COMMENT |
| LOW | backend/plugin/schema/differ.go | 2406 | // Step 1: Remove outer parentheses | COMMENT |
| LOW⚡ | backend/plugin/schema/differ.go | 2430 | // Step 2: Normalize interval syntax | COMMENT |
| 92 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …nd/tests/e2e/workspace/workspace-instance-form.spec.ts | 180 | await expect(password).toHaveAttribute("placeholder", COMMON["secret-input"].unchanged); | CODE |
| LOW | …nd/tests/e2e/workspace/workspace-instance-form.spec.ts | 195 | await expect(password).not.toHaveAttribute("placeholder", COMMON["secret-input"].unchanged); | CODE |
| LOW | …nd/tests/e2e/workspace/workspace-instance-form.spec.ts | 200 | await expect(password).toHaveAttribute("placeholder", COMMON["secret-input"].unchanged); | CODE |
| LOW | frontend/src/locales/es-ES.json | 1939 | "placeholder": "Agregar descripción" | CODE |
| LOW | frontend/src/locales/es-ES.json | 2443 | "placeholder": "Presione Enter para agregar etiqueta", | CODE |
| LOW | frontend/src/locales/es-ES.json | 2728 | "placeholder": "Introduzca un valor predeterminado o déjelo vacío si no hay ningún valor predeterminado" | CODE |
| LOW | frontend/src/locales/es-ES.json | 2812 | "placeholder": "Una clave de API generalmente comienza con sk-*****", | CODE |
| LOW | frontend/src/locales/es-ES.json | 2862 | "placeholder": "Título del anuncio de entrada", | CODE |
| LOW | frontend/src/locales/es-ES.json | 2938 | "placeholder": "Enlace de anuncio de entrada", | CODE |
| LOW | frontend/src/locales/ja-JP.json | 1939 | "placeholder": "説明を追加" | CODE |
| LOW | frontend/src/locales/ja-JP.json | 2443 | "placeholder": "Enterキーを押してタグを追加してください", | CODE |
| LOW | frontend/src/locales/ja-JP.json | 2728 | "placeholder": "デフォルト値を入力するか、デフォルト値がない場合は空白のままにします" | CODE |
| LOW | frontend/src/locales/ja-JP.json | 2812 | "placeholder": "API キーは通常 sk-***** で始まります", | CODE |
| LOW | frontend/src/locales/ja-JP.json | 2862 | "placeholder": "お知らせのタイトルを入力してください", | CODE |
| LOW | frontend/src/locales/ja-JP.json | 2938 | "placeholder": "お知らせのリンクを入力してください", | CODE |
| LOW | frontend/src/locales/zh-CN.json | 1939 | "placeholder": "添加描述" | CODE |
| LOW | frontend/src/locales/zh-CN.json | 2443 | "placeholder": "按 Enter 键添加标签", | CODE |
| LOW | frontend/src/locales/zh-CN.json | 2728 | "placeholder": "输入默认值或留空以不使用默认值" | CODE |
| LOW | frontend/src/locales/zh-CN.json | 2812 | "placeholder": "API Key 通常以 sk-***** 开头", | CODE |
| LOW | frontend/src/locales/zh-CN.json | 2862 | "placeholder": "输入公告标题", | CODE |
| LOW | frontend/src/locales/zh-CN.json | 2938 | "placeholder": "输入公告链接", | CODE |
| LOW | frontend/src/locales/en-US.json | 1939 | "placeholder": "Add description" | CODE |
| LOW | frontend/src/locales/en-US.json | 2443 | "placeholder": "Press Enter to add tag", | CODE |
| LOW | frontend/src/locales/en-US.json | 2728 | "placeholder": "Enter default value or leave empty for no default" | CODE |
| LOW | frontend/src/locales/en-US.json | 2812 | "placeholder": "An API Key usually starts with sk-*****", | CODE |
| LOW | frontend/src/locales/en-US.json | 2862 | "placeholder": "Input announcement title", | CODE |
| LOW | frontend/src/locales/en-US.json | 2938 | "placeholder": "Input announcement link", | CODE |
| LOW | frontend/src/locales/vi-VN.json | 1939 | "placeholder": "Thêm mô tả" | CODE |
| LOW | frontend/src/locales/vi-VN.json | 2443 | "placeholder": "Nhấn Enter để thêm thẻ", | CODE |
| LOW | frontend/src/locales/vi-VN.json | 2728 | "placeholder": "Nhập giá trị mặc định hoặc để trống nếu không có giá trị mặc định" | CODE |
| LOW | frontend/src/locales/vi-VN.json | 2812 | "placeholder": "Khóa API thường bắt đầu bằng sk-*****", | CODE |
| LOW | frontend/src/locales/vi-VN.json | 2862 | "placeholder": "Nhập tiêu đề thông báo", | CODE |
| LOW | frontend/src/locales/vi-VN.json | 2938 | "placeholder": "Nhập liên kết thông báo", | CODE |
| LOW | frontend/src/locales/sql-review/es-ES.json | 17 | "placeholder": "Por ejemplo:\nInforma sobre un cambio de esquema que bloquee las escrituras en una tabla de más de | CODE |
| LOW | frontend/src/locales/sql-review/ja-JP.json | 17 | "placeholder": "例:\n100 万行を超えるテーブルで書き込みをブロックするスキーマ変更を報告する。\nすべての外部キーの列にインデックスを必須とする。\n新しいテーブルには created_at 列と upda | CODE |
| LOW | frontend/src/locales/sql-review/zh-CN.json | 17 | "placeholder": "例如:\n报告在超过 100 万行的表上会阻塞写入的结构变更。\n每个外键的列都必须有索引。\n新建的表必须包含 created_at 列和 updated_at 列。", | CODE |
| LOW | frontend/src/locales/sql-review/en-US.json | 17 | "placeholder": "For example:\nReport a schema change that blocks writes on a table with more than 1 million rows.\ | CODE |
| LOW | frontend/src/locales/sql-review/vi-VN.json | 17 | "placeholder": "Ví dụ:\nBáo cáo thay đổi lược đồ chặn ghi trên bảng có hơn 1 triệu hàng.\nMọi khóa ngoại đều cần c | CODE |
| LOW | …ntend/src/components/auth/EmailCodeSigninForm.test.tsx | 120 | setInputValue(emailInput!, "user@example.com"); | CODE |
| LOW | …ntend/src/components/auth/EmailCodeSigninForm.test.tsx | 134 | "user@example.com", | CODE |
| LOW | …ntend/src/components/auth/EmailCodeSigninForm.test.tsx | 149 | email: "user@example.com", | CODE |
| LOW | …src/components/sql-review/ReviewAIPolicyField.test.tsx | 203 | expect(textbox).toHaveAttribute("placeholder", "the example rules"); | CODE |
| LOW | …nd/src/components/instance/SslCertificateForm.test.tsx | 185 | textarea.getAttribute("placeholder") | CODE |
| LOW | …/src/components/instance/CredentialSourceForm.test.tsx | 232 | container.querySelector("textarea")?.getAttribute("placeholder") | CODE |
| LOW | …/src/components/instance/CredentialSourceForm.test.tsx | 271 | container.querySelector("textarea")?.getAttribute("placeholder") | CODE |
| LOW | …c/modules/sql-editor/components/SchemaChooser.test.tsx | 84 | <span data-testid="placeholder">{placeholder}</span> | CODE |
| LOW | …odules/sql-editor/components/ContainerChooser.test.tsx | 94 | <span data-testid="placeholder">{placeholder}</span> | CODE |
| LOW | …odules/sql-editor/components/ContainerChooser.test.tsx | 190 | expect(container.querySelector("[data-testid='placeholder']")?.textContent).toBe( | CODE |
| LOW | …s/ai/components/HistoryPanel/ConversationList.test.tsx | 222 | "placeholder", | CODE |
| LOW | frontend/src/modules/schema-editor/Aside/AsideTree.tsx | 706 | case "placeholder": | CODE |
| LOW | frontend/src/modules/schema-editor/Aside/AsideTree.tsx | 765 | if (treeNode.type === "placeholder") { | CODE |
| LOW | …ontend/src/modules/schema-editor/Aside/tree-builder.ts | 155 | type: "placeholder"; | CODE |
| LOW | …ontend/src/modules/schema-editor/Aside/tree-builder.ts | 515 | type: "placeholder", | CODE |
| LOW | frontend/src/routes/auth/OAuth2ConsentPage.test.tsx | 17 | value: { name: "workspaces/ws-1", title: "Acme Corp" } as | CODE |
| LOW | frontend/src/routes/auth/OAuth2ConsentPage.test.tsx | 166 | title: "Acme Corp", | CODE |
| LOW | frontend/src/routes/auth/OAuth2ConsentPage.test.tsx | 277 | expect(container.textContent).toContain("Acme Corp"); | CODE |
| LOW | frontend/src/routes/auth/OAuth2ConsentPage.test.tsx | 286 | { name: "workspaces/ws-1", title: "Acme Corp" }, | CODE |
| LOW | frontend/src/routes/auth/OAuth2ConsentPage.test.tsx | 307 | expect(container.textContent).toContain("Acme Corp"); | CODE |
| LOW | frontend/src/routes/auth/OAuth2ConsentPage.test.tsx | 314 | { name: "workspaces/ws-1", title: "Acme Corp" }, | CODE |
| LOW | frontend/src/routes/auth/OAuth2ConsentPage.test.tsx | 374 | { name: "workspaces/ws-1", title: "Acme Corp" }, | CODE |
| 145 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …/tests/e2e/masking-exemption/masking-exemption.spec.ts | 532 | // Step 1: No exemption → data is masked | COMMENT |
| LOW⚡ | …/tests/e2e/masking-exemption/masking-exemption.spec.ts | 538 | // Step 2: Grant exemption via UI → data becomes unmasked | COMMENT |
| LOW | …/tests/e2e/masking-exemption/masking-exemption.spec.ts | 549 | // Step 3: Revoke exemption via UI → data becomes masked again | COMMENT |
| LOW⚡ | frontend/src/utils/util.ts | 161 | // Step 1: Escape HTML entities to prevent XSS (converts <, >, &, ", ', ` to entities) | COMMENT |
| LOW⚡ | frontend/src/utils/util.ts | 165 | // Step 2: Escape the search keyword and apply highlighting | COMMENT |
| LOW⚡ | frontend/src/utils/util.ts | 172 | // Step 3: Sanitize with DOMPurify as defense-in-depth (allowlist-based) | COMMENT |
| LOW⚡ | frontend/src/utils/util.ts | 197 | // Step 1: Escape HTML entities to prevent XSS | COMMENT |
| LOW⚡ | frontend/src/utils/util.ts | 203 | // Step 2: Build safe regex pattern and apply highlighting. | COMMENT |
| LOW | frontend/src/utils/util.ts | 218 | // Step 3: Sanitize with DOMPurify as defense-in-depth (allowlist-based) | COMMENT |
| LOW⚡ | …d/src/components/database/CreateDatabaseSheet.test.tsx | 633 | // Step 1: type a custom title. | COMMENT |
| LOW⚡ | …d/src/components/database/CreateDatabaseSheet.test.tsx | 637 | // Step 2: dbName preserved across manual title. | COMMENT |
| LOW⚡ | …d/src/components/database/CreateDatabaseSheet.test.tsx | 642 | // Step 3: clear title manually (invariant reset). | COMMENT |
| LOW⚡ | …d/src/components/database/CreateDatabaseSheet.test.tsx | 646 | // Step 4: clear dbName. | COMMENT |
| LOW⚡ | …d/src/components/database/CreateDatabaseSheet.test.tsx | 650 | // Step 5: retype dbName and verify each keystroke tracks. | COMMENT |
| LOW | …ntend/src/modules/agent/logic/skills/databaseChange.ts | 20 | ### Step 1: Create sheet(s) with SQL | COMMENT |
| LOW | …ntend/src/modules/agent/logic/skills/databaseChange.ts | 40 | ### Step 2: Create a plan | COMMENT |
| LOW | …ntend/src/modules/agent/logic/skills/databaseChange.ts | 105 | ### Step 3: Create an issue | COMMENT |
| LOW | …ntend/src/modules/agent/logic/skills/databaseChange.ts | 121 | ### Step 4: Review and deploy | COMMENT |
| LOW | …tend/src/modules/agent/logic/skills/grantPermission.ts | 25 | ### Step 1: List Available Roles | COMMENT |
| LOW | …tend/src/modules/agent/logic/skills/grantPermission.ts | 49 | ### Step 2: Get Current IAM Policy | COMMENT |
| LOW | …tend/src/modules/agent/logic/skills/grantPermission.ts | 75 | ### Step 3: Set IAM Policy | COMMENT |
| LOW | frontend/src/routes/project/ProjectSyncSchemaPage.tsx | 321 | // Step 2: at least one target database with diff | COMMENT |
| LOW⚡ | …src/routes/project/plan-detail/utils/rolloutPreview.ts | 47 | // Step 1: Extract all database targets from specs and expand database groups | COMMENT |
| LOW⚡ | …src/routes/project/plan-detail/utils/rolloutPreview.ts | 50 | // Step 2: Fetch databases that are not cached | COMMENT |
| LOW⚡ | …src/routes/project/plan-detail/utils/rolloutPreview.ts | 53 | // Step 3: Generate tasks from specs | COMMENT |
| LOW⚡ | …src/routes/project/plan-detail/utils/rolloutPreview.ts | 56 | // Step 4: Get environment order from store | COMMENT |
| LOW⚡ | …src/routes/project/plan-detail/utils/rolloutPreview.ts | 59 | // Step 5: Group tasks by environment and create stages | COMMENT |
| LOW⚡ | …src/routes/project/plan-detail/utils/rolloutPreview.ts | 62 | // Step 6: Build and return the rollout | COMMENT |
| LOW | backend/tests/gitops_test.go | 657 | // Step 1: Create a release containing migration files. | COMMENT |
| LOW | backend/tests/gitops_test.go | 680 | // Step 2: Create a plan with the release field set. | COMMENT |
| LOW | backend/tests/gitops_test.go | 730 | // Step 3: Create a rollout from the plan. | COMMENT |
| LOW | backend/tests/gitops_test.go | 988 | // Step 1: Create a release containing 3 simple migration files. | COMMENT |
| LOW | backend/tests/gitops_test.go | 1024 | // Step 2: Create a plan targeting both test and prod databases. | COMMENT |
| LOW | backend/tests/gitops_test.go | 1057 | // Step 3: Create a rollout from the plan. | COMMENT |
| LOW | backend/tests/gitops_test.go | 1213 | // Step 1: Create a release with version 1.0.0 file. | COMMENT |
| LOW | backend/tests/gitops_test.go | 1235 | // Step 2: Apply the release to a database. | COMMENT |
| LOW | backend/tests/gitops_test.go | 1279 | // Step 3: Create a release with version 1.0.0 file but with different content. | COMMENT |
| LOW | backend/tests/gitops_test.go | 1297 | // Step 4: Call CheckRelease with the modified release against the same target. | COMMENT |
| LOW | backend/tests/gitops_test.go | 1308 | // Step 5: Expect that CheckRelease returns a warning about the changed file. | COMMENT |
| LOW⚡ | backend/tests/tenant_test.go | 155 | // Step 1: Get baseline's current schema. | COMMENT |
| LOW⚡ | backend/tests/tenant_test.go | 161 | // Step 2: Create new tenant database. | COMMENT |
| LOW⚡ | backend/tests/tenant_test.go | 166 | // Step 3: Initialize new tenant with baseline schema. | COMMENT |
| LOW | backend/tests/tenant_test.go | 216 | // Step 4: Find pending rollouts for baseline. | COMMENT |
| LOW | backend/tests/tenant_test.go | 243 | // Step 5: Add new tenant to pending rollouts (idempotent CreateRollout). | COMMENT |
| LOW | backend/tests/pg_sdl_rollout_test.go | 78 | // Step 1: Create initial schema with basic objects | COMMENT |
| LOW | backend/tests/pg_sdl_rollout_test.go | 110 | // Step 2: Update schema - add column and new table | COMMENT |
| LOW | backend/tests/pg_sdl_rollout_test.go | 152 | // Step 3: Remove objects - drop comments table and posts index | COMMENT |
| LOW | …d/plugin/advisor/tidb/advisor_statement_dml_dry_run.go | 100 | // Step 1: validate batch splitting via TiDB's native BATCH DRY RUN. omni | COMMENT |
| LOW | …d/plugin/advisor/tidb/advisor_statement_dml_dry_run.go | 114 | // Step 2: EXPLAIN the inner DML. EXPLAIN doesn't accept BATCH syntax, so we | COMMENT |
| LOW⚡ | backend/plugin/parser/tsql/query_span_extractor_test.go | 282 | // Step 1: DECLARE populates TempTables. | COMMENT |
| LOW⚡ | backend/plugin/parser/tsql/query_span_extractor_test.go | 291 | // Step 2: SELECT from @t resolves via TempTables. | COMMENT |
| LOW | backend/plugin/parser/pg/query_span.go | 250 | // Step 1: Parse with omni. | COMMENT |
| LOW | backend/plugin/parser/pg/query_span.go | 269 | // Step 2: Extract access tables (non-fatal on error — some statement | COMMENT |
| LOW⚡ | backend/plugin/parser/pg/query_span.go | 287 | // Step 3: Check for mixed system/user tables. | COMMENT |
| LOW⚡ | backend/plugin/parser/pg/query_span.go | 293 | // Step 4: Classify query type. | COMMENT |
| LOW⚡ | backend/plugin/parser/pg/query_span.go | 296 | // Step 5: Return early for non-SELECT queries, keeping the tables the | COMMENT |
| LOW | backend/plugin/parser/pg/query_span.go | 321 | // Step 6: Cast to SelectStmt, init catalog, analyze. | COMMENT |
| LOW | backend/plugin/parser/pg/query_span.go | 358 | // Step 7: Extract lineage from analyzed query. | COMMENT |
| LOW | backend/plugin/schema/differ.go | 2406 | // Step 1: Remove outer parentheses | COMMENT |
| LOW⚡ | backend/plugin/schema/differ.go | 2430 | // Step 2: Normalize interval syntax | COMMENT |
| 28 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | frontend/src/components/CustomApproval/utils.ts | 44 | // ─── levelText ─────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/components/CustomApproval/utils.ts | 61 | // ─── approvalSourceText ─────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/components/CustomApproval/utils.ts | 82 | // ─── APPROVAL_SOURCES ───────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/components/CustomApproval/utils.ts | 92 | // ─── Factor lists ───────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/components/CustomApproval/utils.ts | 114 | // ─── ApprovalSourceFactorMap ────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/components/CustomApproval/utils.ts | 154 | // ─── getApprovalFactorList ──────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/components/CustomApproval/utils.ts | 176 | // ─── Option helpers ─────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/components/CustomApproval/utils.ts | 231 | // ─── getApprovalOptionConfigMap ─────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/components/CustomApproval/utils.ts | 278 | // ─── Templates ──────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | frontend/src/components/CustomApproval/utils.ts | 355 | // ─── emptyLocalApprovalRule ─────────────────────────────────────────────────── | COMMENT |
| MEDIUM | scripts/build_bytebase_docker.sh | 2 | # =========================================================================== | COMMENT |
| MEDIUM | scripts/build_bytebase_docker.sh | 5 | # =========================================================================== | COMMENT |
| MEDIUM | scripts/build_init.sh | 2 | # =========================================================================== | COMMENT |
| MEDIUM | scripts/build_init.sh | 5 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | scripts/build_bytebase.sh | 2 | # =========================================================================== | COMMENT |
| MEDIUM⚡ | scripts/build_bytebase.sh | 5 | # =========================================================================== | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | frontend/src/routes/project/ProjectHomePage.test.tsx | 912 | expect(mocks.state.fetchDatabases.mock.calls.filter( | CODE |
| CRITICAL | backend/api/mcp/openapi_index.go | 119 | for pair := idx.doc.Model.Paths.PathItems.First(); pair != nil; pair = pair.Next() { | CODE |
| CRITICAL | backend/api/mcp/openapi_index.go | 472 | schemaProxy, ok := idx.doc.Model.Components.Schemas.Get(schemaName) | CODE |
| CRITICAL | backend/api/mcp/openapi_index.go | 577 | schemaProxy, ok := idx.doc.Model.Components.Schemas.Get(name) | CODE |
| CRITICAL | docs/plans/2025-12-15-mcp-schema-lookup.md | 102 | schemaProxy, ok := idx.doc.Model.Components.Schemas.Get(name) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .claude/skills/e2e-routine/scripts/setup-env.sh | 26 | PLAYWRIGHT_VERSION=1.59.1 # frontend/package.json @playwright/test; the harness re-syncs the exact build on first ru | CODE |
| MEDIUM | .claude/skills/e2e-routine/scripts/preflight.sh | 61 | # The harness's global setup kills the process group the PID file names when it | COMMENT |
| MEDIUM | .claude/skills/e2e-routine/scripts/build.sh | 2 | # Build the frontend-embedded Bytebase binary the harness boots. | COMMENT |
| MEDIUM | .claude/skills/e2e-routine/scripts/run-suite.sh | 32 | # harness spawns BYTEBASE_BIN with stdio ignored. | COMMENT |
| MEDIUM | .claude/skills/e2e-routine/scripts/run-suite.sh | 34 | # user, which must be able to traverse the harness's mkdtemp data dir (0700). | COMMENT |
| MEDIUM | backend/plugin/parser/tidb/tidb.go | 75 | // token). Counting the leading newlines of originalText directly is robust; | COMMENT |
| MEDIUM | backend/plugin/parser/googlesql/query_span_extractor.go | 109 | // system flags too so the result is robust if the two ever disagree (the | COMMENT |
| MEDIUM | backend/plugin/schema/differ.go | 1233 | // This is a simplified check - for a production system, you'd want more robust parsing | COMMENT |
| MEDIUM | backend/plugin/schema/mysql/sdl_migration_test.go | 2191 | // the splitter) so it is robust to the real "CREATE OR REPLACE ALGORITHM=... VIEW" header form. | COMMENT |
| MEDIUM | backend/plugin/schema/mysql/sdl_migration_test.go | 2264 | // last body line's content. Simplest robust form: insert " <colDef>,\n" right after the | COMMENT |
| MEDIUM | backend/plugin/schema/mysql/sdl_migration_test.go | 3254 | // - wantReject=true: the input is malformed enough that a robust loader SHOULD return a | COMMENT |
| MEDIUM | …d/plugin/schema/mssql/testdata/generate_migration.yaml | 2212 | 'This is an extremely long comment designed to test the limits of extended property storage in SQL Server. It contai | CODE |
| MEDIUM | …d/plugin/schema/mssql/testdata/generate_migration.yaml | 3432 | 'This is an extremely long comment designed to test the limits of extended property storage in SQL Server. It contai | CODE |
| MEDIUM | …d/plugin/schema/mssql/testdata/generate_migration.yaml | 3451 | EXEC sp_addextendedproperty 'MS_Description', 'This is an extremely long comment designed to test the limits of exte | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …advisor/oceanbase/test/system_collation_allowlist.yaml | 0 | startposition: line: 2 column: 0 endposition: null - statement: |- create table t(a int); alter table t change column a | STRING |
| HIGH | …gin/advisor/mysql/test/system_collation_allowlist.yaml | 0 | startposition: line: 2 column: 0 endposition: null - statement: |- create table t(a int); alter table t change column a | STRING |
| HIGH | …ugin/advisor/tidb/test/system_collation_allowlist.yaml | 0 | startposition: line: 2 column: 0 endposition: null - statement: |- create table t(a int); alter table t change column a | STRING |
| HIGH | …n/advisor/oceanbase/test/system_charset_allowlist.yaml | 0 | startposition: line: 2 column: 0 endposition: null - statement: |- create table t(a int); alter table t modify column a | STRING |
| HIGH | …lugin/advisor/mysql/test/system_charset_allowlist.yaml | 0 | startposition: line: 2 column: 0 endposition: null - statement: |- create table t(a int); alter table t modify column a | STRING |
| HIGH | …plugin/advisor/tidb/test/system_charset_allowlist.yaml | 0 | startposition: line: 2 column: 0 endposition: null - statement: |- create table t(a int); alter table t modify column a | STRING |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | backend/plugin/advisor/tidb/utils.go | 812 | // namingRuleConfig parameterizes the naming-convention rule scaffold for the | COMMENT |
| MEDIUM | backend/plugin/advisor/tidb/utils.go | 822 | // runNamingConventionRule is the shared scaffold for the index/UK/FK naming | COMMENT |
| MEDIUM | backend/plugin/advisor/tidb/utils.go | 841 | // naming_auto_increment_column) reuse this scaffold. | COMMENT |
| MEDIUM | …plugin/advisor/tidb/test/index_total_number_limit.yaml | 62 | # depends on FinalMetadata's count (set by test scaffolding). This | COMMENT |
| MEDIUM | docs/plans/2026-03-24-pg-query-span-omni-migration.md | 42 | ## Task 1: Create the omni-based QuerySpan extractor scaffold | COMMENT |
| MEDIUM | …026-06-03-vue-to-react-routing-shell-auth-migration.md | 19 | ## Phase 0 — Inventory & guardrails (read-only) | COMMENT |
| MEDIUM | scripts/devbox/create.sh | 2 | # Creates the devbox: the SSH target for agentic coding tools and the host for the | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | frontend/i18n.ts | 21 | // Replace 'YOUR_API_KEY' with your actual Google Cloud API key | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | scripts/azure-marketplace/manifest.yaml | 16 | # Define the container images used by your application | COMMENT |
| MEDIUM | .github/workflows/deploy-api-docs.yml | 36 | # Create the Pages project on first run; a no-op once it exists. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | frontend/src/utils/TinyTimer.ts | 50 | print(tag: T) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | scripts/azure-marketplace/push-to-acr.sh | 23 | # Check if Docker image exists | COMMENT |
| LOW | scripts/azure-marketplace/push-to-acr.sh | 34 | # Check if Azure CLI is installed | COMMENT |
| LOW | scripts/azure-marketplace/package.sh | 54 | # Check if required files exist | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .claude/skills/e2e-routine/scripts/attribute.py | 66 | CODE | |
| LOW | .claude/skills/e2e-routine/scripts/attribute.py | 115 | CODE | |
| LOW | .claude/skills/e2e-routine/scripts/summarize.py | 194 | CODE | |
| LOW | .claude/skills/e2e-routine/scripts/summarize.py | 412 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .claude/skills/e2e-routine/scripts/attribute.py | 76 | except Exception: | CODE |