Open source Product Information Management (PIM) and Digital Asset Management (DAM) platform built on Laravel — manage, enrich, and scale product data and digital assets beyond 10 million products. Free forever.
This report summarizes scanner evidence for unopim/unopim, a PHP project with 11,049 GitHub stars. SynthScan examined 574,726 lines of code across 3737 source files, recording 821 pattern matches distributed across 11 syntactic categories. The legacy adjusted pattern signal is 2.4 (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? 419 finding(s).
Are imports declared and package/API names verified? 179 finding(s).
Are wrappers, guards, and repeated structures necessary? 579 finding(s).
Which changes need focused human review? 821 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 821 distinct pattern matches across 11 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | compose.dev.yaml | 1 | # ============================================================================= | COMMENT |
| MEDIUM | compose.dev.yaml | 3 | # ============================================================================= | COMMENT |
| MEDIUM | compose.dev.yaml | 30 | # ─── Web server: Nginx (default) or Apache ────────────────────────── | COMMENT |
| MEDIUM | compose.dev.yaml | 33 | # ─── Database: PostgreSQL (default) or MySQL ──────────────────────── | COMMENT |
| MEDIUM | compose.dev.yaml | 48 | # ============================================================================= | COMMENT |
| MEDIUM | compose.dev.yaml | 50 | # ─── Shared configuration (reused via YAML anchors) ───────────────── | COMMENT |
| MEDIUM | compose.dev.yaml | 84 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.dev.yaml | 86 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.dev.yaml | 101 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.dev.yaml | 103 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.dev.yaml | 125 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.dev.yaml | 127 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.dev.yaml | 149 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.dev.yaml | 151 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.dev.yaml | 177 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.dev.yaml | 179 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.dev.yaml | 206 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.dev.yaml | 208 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.dev.yaml | 230 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.dev.yaml | 232 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.dev.yaml | 252 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.dev.yaml | 254 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.dev.yaml | 284 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.dev.yaml | 286 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.yaml | 1 | # ============================================================================= | COMMENT |
| MEDIUM | compose.yaml | 3 | # ============================================================================= | COMMENT |
| MEDIUM | compose.yaml | 17 | # ============================================================================= | COMMENT |
| MEDIUM | compose.yaml | 72 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.yaml | 74 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.yaml | 94 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.yaml | 96 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.yaml | 111 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.yaml | 113 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.yaml | 132 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.yaml | 134 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.yaml | 153 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.yaml | 155 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.yaml | 173 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.yaml | 175 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.yaml | 196 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM | compose.yaml | 198 | # --------------------------------------------------------------------------- | COMMENT |
| MEDIUM⚡ | compose.dev.apache.yaml | 1 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | compose.dev.apache.yaml | 3 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | compose.dev.apache.yaml | 14 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | compose.mysql.yaml | 1 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | compose.mysql.yaml | 3 | # ============================================================================= | COMMENT |
| MEDIUM⚡ | compose.mysql.yaml | 12 | # ============================================================================= | COMMENT |
| MEDIUM | …ts/e2e-pw/tests/09-notifications/notifications.spec.js | 32 | // ─── Notification Page Tests ──────────────────────────────────────── | COMMENT |
| MEDIUM | tests/e2e-pw/tests/03-dashboard/versionCheck.spec.js | 22 | // ═════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/e2e-pw/tests/03-dashboard/versionCheck.spec.js | 24 | // ═════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/e2e-pw/tests/03-dashboard/versionCheck.spec.js | 69 | // ═════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/e2e-pw/tests/03-dashboard/versionCheck.spec.js | 71 | // ═════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/e2e-pw/tests/03-dashboard/versionCheck.spec.js | 97 | // ═════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/e2e-pw/tests/03-dashboard/versionCheck.spec.js | 99 | // ═════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/e2e-pw/tests/03-dashboard/notifications.spec.js | 23 | // ═════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/e2e-pw/tests/03-dashboard/notifications.spec.js | 25 | // ═════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/e2e-pw/tests/03-dashboard/notifications.spec.js | 51 | // ═════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/e2e-pw/tests/03-dashboard/notifications.spec.js | 53 | // ═════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/e2e-pw/tests/03-dashboard/notifications.spec.js | 115 | // ═════════════════════════════════════════════════ | COMMENT |
| MEDIUM | tests/e2e-pw/tests/03-dashboard/notifications.spec.js | 117 | // ═════════════════════════════════════════════════ | COMMENT |
| 163 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/Pest.php | 123 | function seedRequiredProductValues(Product $product): Product | CODE |
| LOW | tests/e2e-pw/tests/product-variant-structure.spec.js | 46 | async function ensureColorSizeVariantStructure(adminPage) { | CODE |
| LOW | …-pw/tests/04-datatransfer/export-status-filter.spec.js | 15 | async function createExportWithStatusFilter(adminPage, code, statusLabel) { | CODE |
| LOW | …-datatransfer/test-export/locale-export/export.spec.js | 5 | async function createExportWithStatusFilter(adminPage, code, statusLabel) { | CODE |
| LOW | …atatransfer/test-export/currency-export/export.spec.js | 5 | async function createExportWithStatusFilter(adminPage, code, statusLabel) { | CODE |
| LOW | tests/e2e-pw/tests/catalog/association-types.spec.js | 75 | async function configureAssociationTypeField(page, { required }) { | CODE |
| LOW | tests/e2e-pw/tests/catalog/association-types.spec.js | 93 | async function ensureAssociationTypeAbsent(page, code) { | CODE |
| LOW | …e2e-pw/tests/catalog/product-association-links.spec.js | 134 | async function ensureBundleKitAssociationTypeExists(page) { | CODE |
| LOW | …e2e-pw/tests/catalog/product-association-links.spec.js | 257 | async function fillRequiredProductAttributes(page, { name, urlKey, price }) { | CODE |
| LOW | tests/e2e-pw/tests/02-configuration/magicAI.spec.js | 52 | async function ensureMagicAITranslationEnabled(adminPage) { | CODE |
| LOW | …s/e2e-pw/tests/02-configuration/webhookVariant.spec.js | 47 | async function createConfigurableProduct(page, sku) { | CODE |
| LOW | tests/e2e-pw/tests/01-catalog/attribute.spec.js | 34 | async function createSelectSwatchAttribute(adminPage, code, name, swatchType = 'Text Swatch') { | CODE |
| LOW | …2e-pw/tests/01-catalog/product-discard-changes.spec.js | 78 | async function findMultiselectWithOptions(page) { | CODE |
| LOW | tests/e2e-pw/tests/01-catalog/measurement-ui.spec.js | 70 | async function selectFirstMultiselectOption(page, name) { | CODE |
| LOW | tests/e2e-pw/tests/01-catalog/measurement-ui.spec.js | 90 | async function createMeasurementAttribute(page, { familyCode = MEASUREMENT_FAMILY } = {}) { | CODE |
| LOW | tests/e2e-pw/tests/01-catalog/measurement-ui.spec.js | 160 | async function selectUnassignedAttribute(page, matchText) { | CODE |
| LOW | …ts/e2e-pw/tests/01-catalog/codefieldvalidation.spec.js | 16 | async function clickSaveAndExpectSuccess(page, saveButton, toastPattern) { | CODE |
| LOW | …/tests/01-catalog/mediaDownloadAndLockedFields.spec.js | 55 | async function ensureColorVariantStructure(adminPage) { | CODE |
| LOW | tests/e2e-pw/tests/01-catalog/products.spec.js | 101 | async function createConfigurableProduct(adminPage, sku) { | CODE |
| LOW | tests/e2e-pw/tests/01-catalog/measurement.spec.js | 205 | async function createMeasurementAttribute(page, code, label) { | CODE |
| LOW | …leteness/02.product-completeness-functionality.spec.js | 21 | async function goToDefaultFamilyCompleteness(adminPage) { | CODE |
| LOW | tests/e2e-pw/utils/gallery-helpers.js | 68 | async function assignAttributeToMediaGroup(adminPage, code) { | CODE |
| LOW | tests/e2e-pw/utils/gallery-helpers.js | 117 | async function fillRequiredProductFields(adminPage, label) { | CODE |
| LOW | tests/e2e-pw/utils/api-credential-setup.js | 57 | async function readCredentialsOnEditPage(page) { | CODE |
| LOW | packages/Webkul/DataGrid/src/DataGrid.php | 347 | protected function extractRequestedCondition(array $requestedValues): ?array | CODE |
| LOW | packages/Webkul/DataGrid/src/DataGrid.php | 398 | public function processRequestedPagination(array $requestedPagination): LengthAwarePaginator | CODE |
| LOW | packages/Webkul/Webhook/src/Models/Webhook.php | 40 | public function getPrimaryModelIdForHistory(): int | CODE |
| LOW | packages/Webkul/Webhook/src/Models/WebhookSetting.php | 41 | public function getPrimaryModelIdForHistory(): int | CODE |
| LOW | packages/Webkul/Webhook/src/Services/WebhookService.php | 366 | public function getProductChangesForWebhook(Product $product): array | CODE |
| LOW | …ppUrlGuard/src/Http/Middleware/VerifyAppUrlMatches.php | 87 | protected function redirectsToUnreachableAppUrl(Request $request, Response $response): bool | CODE |
| LOW | …bkul/ProductPassport/tests/ProductPassportTestCase.php | 115 | protected function productWithSecretAndDppAttributes(bool $withDocument = false): array | CODE |
| LOW | …bkul/ProductPassport/tests/ProductPassportTestCase.php | 211 | protected function variantWithInheritedPassportValues(): array | CODE |
| LOW | …bkul/ProductPassport/tests/ProductPassportTestCase.php | 313 | protected function publishedTieredPassportFixture(): PublicationVersion | CODE |
| LOW | …Passport/tests/Feature/MassTransitionSelectAllTest.php | 10 | function createPublicationsWithSkuPrefix(string $prefix, int $count, object $channel): array | CODE |
| LOW | …uctPassport/src/Models/PassportTemplateTranslation.php | 24 | public function getPrimaryModelIdForHistory(): int | CODE |
| LOW | …l/ProductPassport/src/Models/PassportTemplateField.php | 64 | public function getPrimaryModelIdForHistory(): int | CODE |
| LOW | …ProductPassport/src/Models/PassportTemplateSection.php | 41 | public function getPrimaryModelIdForHistory(): int | CODE |
| LOW | …assport/src/Http/Controllers/PublicationController.php | 384 | private function publicationAcceptsPublishing(int $productId, int $channelId): bool | CODE |
| LOW | …l/Core/tests/Feature/ChannelLocaleOrderingRiskTest.php | 25 | function riskInsertPivotRowsInOrder(Channel $channel, array $localeIds): void | CODE |
| LOW | …l/Core/tests/Feature/ChannelLocaleOrderingRiskTest.php | 37 | function riskChannelWithLocalesInsertedInOrder(array $codes): Channel | CODE |
| LOW | …l/Core/tests/Feature/ChannelLocaleOrderingRiskTest.php | 46 | function riskLocalesWithIdOrderInverseToCodeOrder(): array | CODE |
| LOW | …l/Core/tests/Feature/ChannelLocaleOrderingRiskTest.php | 138 | function riskCaptureLocaleSyncPayload(callable $work): array | CODE |
| LOW | packages/Webkul/Core/tests/Concerns/CoreAssertions.php | 54 | public function assertAttributeFamilyExists(string $code, array $additional = []): void | CODE |
| LOW | packages/Webkul/Core/tests/Concerns/CoreAssertions.php | 81 | public function assertJsonResponseStructure($response): void | CODE |
| LOW | packages/Webkul/Core/tests/Concerns/CoreAssertions.php | 89 | public function assertSuccessJsonResponse($response): void | CODE |
| LOW | packages/Webkul/Core/src/Tree.php | 183 | private function removeChildrenUnauthorizedUrls(array &$item): void | CODE |
| LOW | packages/Webkul/Core/src/Core.php | 176 | public function getDefaultLocaleCodeFromDefaultChannel(): string | CODE |
| LOW | packages/Webkul/Core/src/Core.php | 348 | public function getRequestedLocaleCodeInRequestedChannel() | CODE |
| LOW | packages/Webkul/Core/src/Core.php | 734 | public function convertToAssociativeArray(array $items): array | CODE |
| LOW | packages/Webkul/Core/src/Core.php | 809 | public function convertEmptyStringsToNull(array $array): array | CODE |
| LOW | packages/Webkul/Core/src/Traits/PDFHandler.php | 33 | protected function adjustArabicAndPersianContent(string $html): string|array | CODE |
| LOW | packages/Webkul/Core/src/Traits/MergesUploadedFiles.php | 9 | protected function mergeUploadedFilesIntoInput(): void | CODE |
| LOW | …ages/Webkul/Core/src/Providers/CoreServiceProvider.php | 138 | private function mailTransportIsPinnedByEnvironment(): bool | CODE |
| LOW | …ages/Webkul/Core/src/Providers/CoreServiceProvider.php | 153 | protected function overrideMailConfiguration(): void | CODE |
| LOW | …ages/Webkul/Core/src/Providers/CoreServiceProvider.php | 208 | protected function ensurePurifierCacheDirectory(string $path): void | CODE |
| LOW | packages/Webkul/Core/src/Models/ChannelTranslation.php | 47 | public function getPrimaryModelIdForHistory(): int | CODE |
| LOW | packages/Webkul/Core/src/Exceptions/Handler.php | 65 | private function handleAuthenticationException(): void | CODE |
| LOW | packages/Webkul/Core/src/Exceptions/Handler.php | 135 | private function handleValidationException(): void | CODE |
| LOW | packages/Webkul/Core/src/Eloquent/TranslatableModel.php | 67 | public function getTranslatedValueWithFallback(string $column, ?string $locale = null): ?string | CODE |
| LOW | …bkul/Core/src/Console/Commands/TranslationsChecker.php | 1317 | private function shouldSkipUntranslatedCheck(string $value): bool | CODE |
| 296 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | tests/e2e-pw/tests/passport-qa-regression.spec.js | 91 | await fillDppField(page, 'dpp_manufacturer_name', 'Acme Corp'); | CODE |
| LOW | tests/e2e-pw/tests/passport.spec.js | 70 | await fillDppField(page, 'dpp_manufacturer_name', 'Acme Corp'); | CODE |
| LOW | …ts/e2e-pw/tests/09-notifications/notifications.spec.js | 20 | await page.locator('input[name="email"]').fill('admin@example.com'); | CODE |
| LOW | …-pw/tests/04-datatransfer/export-filter-fields.spec.js | 175 | await expect(codeFilter).toHaveAttribute('placeholder', 'Code'); | CODE |
| LOW | tests/e2e-pw/tests/07-ui-loginpage/loginpage.spec.js | 6 | const email = 'admin@example.com'; | CODE |
| LOW | …ts/e2e-pw/tests/07-ui-loginpage/login-security.spec.js | 17 | const KNOWN_EMAIL = process.env.ADMIN_EMAIL || 'admin@example.com'; | CODE |
| LOW | …ts/e2e-pw/tests/07-ui-loginpage/login-security.spec.js | 73 | "admin@example.com'; DROP TABLE admins; -- ", | CODE |
| LOW | …-pw/tests/07-ui-loginpage/forget-password-smtp.spec.js | 18 | const ADMIN_EMAIL = process.env.ADMIN_EMAIL || 'admin@example.com'; | CODE |
| LOW | tests/e2e-pw/tests/05-settings/user.spec.js | 264 | await searchInDataGrid(adminPage, 'admin@example.com'); | CODE |
| LOW | tests/e2e-pw/tests/05-settings/user.spec.js | 265 | const row = adminPage.locator('#app div').filter({ hasText: 'admin@example.com' }); | CODE |
| LOW | tests/e2e-pw/tests/10-navigation/breadcrumbs.spec.js | 13 | await page.getByRole('textbox', { name: 'Email Address' }).fill(process.env.ADMIN_EMAIL || 'admin@example.com'); | CODE |
| LOW | tests/e2e-pw/tests/10-navigation/ajax-nav.spec.js | 9 | const email = process.env.ADMIN_EMAIL || 'admin@example.com'; | CODE |
| LOW | tests/e2e-pw/tests/08-security/security.spec.js | 5 | const ADMIN_EMAIL = process.env.ADMIN_USERNAME || process.env.ADMIN_EMAIL || 'admin@example.com'; | CODE |
| LOW | …2e-pw/tests/08-security/product-sort-injection.spec.js | 19 | form: { _token: token || '', email: 'admin@example.com', password: 'admin123' }, | CODE |
| LOW | tests/e2e-pw/utils/login.js | 5 | const email = process.env.ADMIN_USERNAME || process.env.ADMIN_EMAIL || 'admin@example.com'; | CODE |
| LOW | tests/e2e-pw/utils/ensure-family-state.js | 15 | const EMAIL = process.env.FAMILY_ADMIN_EMAIL || process.env.ADMIN_EMAIL || process.env.ADMIN_USERNAME || 'admin@example. | CODE |
| LOW | tests/e2e-pw/utils/api/auth-helper.js | 80 | username: creds.username || process.env.ADMIN_EMAIL || 'admin@example.com', | CODE |
| LOW | …bkul/ProductPassport/tests/ProductPassportTestCase.php | 226 | 'values' => ['common' => [$manufacturer->code => 'Acme Corp']], | CODE |
| LOW | …tPassport/tests/Feature/PassportPayloadBuilderTest.php | 25 | expect($field['value'])->toBe('Acme Corp'); | CODE |
| LOW⚡ | …ebkul/ProductPassport/src/Config/passport_settings.php | 33 | 'placeholder' => 'passport::app.configuration.product_passport.settings.operator-name-placeholder', | CODE |
| LOW⚡ | …ebkul/ProductPassport/src/Config/passport_settings.php | 39 | 'placeholder' => 'passport::app.configuration.product_passport.settings.operator-address-placeholder', | CODE |
| LOW⚡ | …ebkul/ProductPassport/src/Config/passport_settings.php | 45 | 'placeholder' => 'passport::app.configuration.product_passport.settings.operator-eu-rep-placeholder', | CODE |
| LOW⚡ | …Webkul/Publication/src/Config/publication_settings.php | 36 | 'placeholder' => 'publication::app.configuration.publication.settings.base-url-placeholder', | CODE |
| LOW⚡ | …Webkul/Publication/src/Config/publication_settings.php | 43 | 'placeholder' => 'publication::app.configuration.publication.settings.cache-ttl-placeholder', | CODE |
| LOW⚡ | …Webkul/Publication/src/Config/publication_settings.php | 50 | 'placeholder' => 'publication::app.configuration.publication.settings.rate-limit-placeholder', | CODE |
| LOW | …Webkul/Publication/src/Config/publication_settings.php | 62 | 'placeholder' => 'publication::app.configuration.publication.settings.gs1-passport-channel-placeholder', | CODE |
| LOW | …ul/Admin/tests/Feature/Notification/UserNotifyTest.php | 20 | 'email' => 'user@example.com', | CODE |
| LOW | …ul/Admin/tests/Feature/Notification/UserNotifyTest.php | 59 | ['admin@example.com'], | CODE |
| LOW | …ul/Admin/tests/Feature/Notification/UserNotifyTest.php | 77 | ['admin@example.com'], | CODE |
| LOW | …ul/Admin/tests/Feature/Notification/UserNotifyTest.php | 86 | ['admin@example.com'], | CODE |
| LOW | …ul/Admin/tests/Feature/Notification/UserNotifyTest.php | 101 | ['admin@example.com'], | CODE |
| LOW | …ul/Admin/tests/Feature/Notification/UserNotifyTest.php | 115 | new UserNotify(['admin@example.com'], 'Subject', 'admin::emails.data-transfer.index', 'not-an-array'); | CODE |
| LOW | packages/Webkul/Admin/src/Config/system.php | 162 | 'placeholder' => '0 = unlimited, e.g. 500000', | CODE |
| LOW | packages/Webkul/Admin/src/Config/system.php | 251 | 'placeholder' => 'common', | CODE |
| LOW | packages/Webkul/Admin/src/Config/system.php | 261 | 'placeholder' => '••••••••', | CODE |
| LOW | packages/Webkul/Admin/src/Config/system.php | 321 | 'placeholder' => '••••••••', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/en_NZ/app.php | 2560 | 'placeholder' => 'Search', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/en_NZ/app.php | 2574 | 'placeholder' => 'Type or paste values, separated by commas or new lines', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/fi_FI/app.php | 2560 | 'placeholder' => 'Hae', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/fi_FI/app.php | 2574 | 'placeholder' => 'Kirjoita tai liitä arvot pilkulla tai rivinvaihdolla eroteltuina', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/uk_UA/app.php | 2563 | 'placeholder' => 'Пошук', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/uk_UA/app.php | 2577 | 'placeholder' => 'Введіть або вставте значення, розділені комами чи новими рядками', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/en_US/app.php | 2720 | 'placeholder' => 'Search', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/en_US/app.php | 2731 | 'placeholder' => 'Type or paste values, separated by commas or new lines', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/ar_AE/app.php | 2560 | 'placeholder' => 'بحث', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/ar_AE/app.php | 2574 | 'placeholder' => 'اكتب القيم أو الصقها مفصولة بفواصل أو أسطر جديدة', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/sv_SE/app.php | 2563 | 'placeholder' => 'Sök', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/sv_SE/app.php | 2577 | 'placeholder' => 'Skriv eller klistra in värden separerade med kommatecken eller nya rader', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/id_ID/app.php | 2560 | 'placeholder' => 'Cari', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/id_ID/app.php | 2574 | 'placeholder' => 'Ketik atau tempel nilai yang dipisahkan koma atau baris baru', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php | 2563 | 'placeholder' => 'Buscar', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/pt_BR/app.php | 2577 | 'placeholder' => 'Digite ou cole valores separados por vírgulas ou novas linhas', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/ko_KR/app.php | 2563 | 'placeholder' => '검색', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/ko_KR/app.php | 2577 | 'placeholder' => '값을 입력하거나 쉼표 또는 줄바꿈으로 구분하여 붙여넣으세요', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/it_IT/app.php | 2560 | 'placeholder' => 'Cerca', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/it_IT/app.php | 2574 | 'placeholder' => 'Digita o incolla i valori separati da virgole o a capo', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/zh_TW/app.php | 2563 | 'placeholder' => '搜尋', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/zh_TW/app.php | 2577 | 'placeholder' => '輸入或貼上值,使用逗號或換行分隔', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/tl_PH/app.php | 2563 | 'placeholder' => 'Maghanap', | CODE |
| LOW | packages/Webkul/Admin/src/Resources/lang/tl_PH/app.php | 2577 | 'placeholder' => 'Mag-type o mag-paste ng mga halaga na pinaghihiwalay ng kuwit o bagong linya', | CODE |
| 118 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …e2e-pw/tests/04-datatransfer/import-empty-file.spec.js | 40 | // Step 1: Create import with empty XLSX file — should succeed (file is accepted) | COMMENT |
| LOW⚡ | …e2e-pw/tests/04-datatransfer/import-empty-file.spec.js | 43 | // Step 2: Click Import Now — should redirect to tracker page | COMMENT |
| LOW⚡ | …e2e-pw/tests/04-datatransfer/import-empty-file.spec.js | 47 | // Step 3: Verify tracker page loaded with the import code (no PHP crash) | COMMENT |
| LOW⚡ | …e2e-pw/tests/04-datatransfer/import-empty-file.spec.js | 50 | // Step 4: Verify no raw PHP error messages are exposed on the page | COMMENT |
| LOW⚡ | …s/e2e-pw/tests/02-configuration/webhookVariant.spec.js | 140 | // Step 1: Enable webhook | COMMENT |
| LOW⚡ | …s/e2e-pw/tests/02-configuration/webhookVariant.spec.js | 143 | // Step 2: Create configurable product | COMMENT |
| LOW⚡ | …s/e2e-pw/tests/02-configuration/webhookVariant.spec.js | 146 | // Step 3: Navigate back and open the edit page with a clean state | COMMENT |
| LOW⚡ | …s/e2e-pw/tests/02-configuration/webhookVariant.spec.js | 162 | // Step 4: Add a variant (Size = S) | COMMENT |
| LOW⚡ | …s/e2e-pw/tests/02-configuration/webhookVariant.spec.js | 165 | // Step 5: Save the product to trigger the update + variant creation | COMMENT |
| LOW⚡ | …s/e2e-pw/tests/02-configuration/webhookVariant.spec.js | 174 | // Step 6: Check webhook logs for variant SKU entry | COMMENT |
| LOW | …2e-pw/tests/01-catalog/attributeHistoryTooltip.spec.js | 11 | // Step 1: Create an attribute so it generates a history entry | COMMENT |
| LOW | …2e-pw/tests/01-catalog/attributeHistoryTooltip.spec.js | 27 | // Step 2: Navigate to the attribute's History tab | COMMENT |
| LOW | …2e-pw/tests/01-catalog/attributeHistoryTooltip.spec.js | 39 | // Step 3: Check the eye icon tooltip does NOT show a raw translation key | COMMENT |
| LOW | …sts/e2e-pw/tests/05-settings/bouncer403Message.spec.js | 145 | // Step 1: As admin, create a role with minimal permissions and a user | COMMENT |
| LOW | …sts/e2e-pw/tests/05-settings/bouncer403Message.spec.js | 167 | // Step 2: Log in as the restricted user in a fresh context (no stored session) | COMMENT |
| LOW | …sts/e2e-pw/tests/05-settings/bouncer403Message.spec.js | 181 | // Step 3: Positive assertion — the translated 403 message must be present. | COMMENT |
| LOW | …sts/e2e-pw/tests/05-settings/bouncer403Message.spec.js | 198 | // Step 4: Cleanup as admin | COMMENT |
| LOW | packages/Webkul/AiAgent/AGENTS.md | 199 | ### Step 1: Extend BaseAgent | COMMENT |
| LOW | packages/Webkul/AiAgent/AGENTS.md | 221 | ### Step 2: Use It (Auto-Injected) | COMMENT |
| LOW | packages/Webkul/AiAgent/AGENTS.md | 231 | ### Step 3: Call execute() or executeAsync() | COMMENT |
| LOW | packages/Webkul/ElasticSearch/Guide.md | 5 | ### Step 1: Add the Indexer Command | COMMENT |
| LOW | packages/Webkul/ElasticSearch/Guide.md | 24 | ### Step 2: Add an Observer for the Table | COMMENT |
| LOW | packages/Webkul/ElasticSearch/Guide.md | 43 | ### Step 3: Register the Observer | COMMENT |
| LOW | packages/Webkul/ElasticSearch/Guide.md | 58 | ### Step 4: Register the Indexer Command: | COMMENT |
| LOW | packages/Webkul/ElasticSearch/Guide.md | 73 | ### Step 5: Add logic to clear index of new table | COMMENT |
| LOW | packages/Webkul/ElasticSearch/Guide.md | 86 | ### Step 5: Run and test the Commands | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | …e2e-pw/tests/04-datatransfer/import-empty-file.spec.js | 40 | // Step 1: Create import with empty XLSX file — should succeed (file is accepted) | COMMENT |
| LOW⚡ | …e2e-pw/tests/04-datatransfer/import-empty-file.spec.js | 43 | // Step 2: Click Import Now — should redirect to tracker page | COMMENT |
| LOW⚡ | …e2e-pw/tests/04-datatransfer/import-empty-file.spec.js | 47 | // Step 3: Verify tracker page loaded with the import code (no PHP crash) | COMMENT |
| LOW⚡ | …e2e-pw/tests/04-datatransfer/import-empty-file.spec.js | 50 | // Step 4: Verify no raw PHP error messages are exposed on the page | COMMENT |
| LOW⚡ | …s/e2e-pw/tests/02-configuration/webhookVariant.spec.js | 140 | // Step 1: Enable webhook | COMMENT |
| LOW⚡ | …s/e2e-pw/tests/02-configuration/webhookVariant.spec.js | 143 | // Step 2: Create configurable product | COMMENT |
| LOW⚡ | …s/e2e-pw/tests/02-configuration/webhookVariant.spec.js | 146 | // Step 3: Navigate back and open the edit page with a clean state | COMMENT |
| LOW⚡ | …s/e2e-pw/tests/02-configuration/webhookVariant.spec.js | 162 | // Step 4: Add a variant (Size = S) | COMMENT |
| LOW⚡ | …s/e2e-pw/tests/02-configuration/webhookVariant.spec.js | 165 | // Step 5: Save the product to trigger the update + variant creation | COMMENT |
| LOW⚡ | …s/e2e-pw/tests/02-configuration/webhookVariant.spec.js | 174 | // Step 6: Check webhook logs for variant SKU entry | COMMENT |
| LOW | …2e-pw/tests/01-catalog/attributeHistoryTooltip.spec.js | 11 | // Step 1: Create an attribute so it generates a history entry | COMMENT |
| LOW | …2e-pw/tests/01-catalog/attributeHistoryTooltip.spec.js | 27 | // Step 2: Navigate to the attribute's History tab | COMMENT |
| LOW | …2e-pw/tests/01-catalog/attributeHistoryTooltip.spec.js | 39 | // Step 3: Check the eye icon tooltip does NOT show a raw translation key | COMMENT |
| LOW | …sts/e2e-pw/tests/05-settings/bouncer403Message.spec.js | 145 | // Step 1: As admin, create a role with minimal permissions and a user | COMMENT |
| LOW | …sts/e2e-pw/tests/05-settings/bouncer403Message.spec.js | 167 | // Step 2: Log in as the restricted user in a fresh context (no stored session) | COMMENT |
| LOW | …sts/e2e-pw/tests/05-settings/bouncer403Message.spec.js | 181 | // Step 3: Positive assertion — the translated 403 message must be present. | COMMENT |
| LOW | …sts/e2e-pw/tests/05-settings/bouncer403Message.spec.js | 198 | // Step 4: Cleanup as admin | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | …Agent/Resources/views/components/chat-widget.blade.php | 2343 | // Sanitize HTML to prevent XSS from AI-generated or injected content. | COMMENT |
| HIGH | …ages/Webkul/AiAgent/src/Services/EnrichmentService.php | 85 | // Score: AI-generated fields get medium confidence | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | compose.dev.yaml | 1 | # ============================================================================= | COMMENT |
| LOW | compose.dev.yaml | 21 | # | COMMENT |
| LOW | compose.yaml | 1 | # ============================================================================= | COMMENT |
| LOW | docker-compose.yml | 1 | # Deprecated — kept so existing commands and docker-compose.override.yml files | COMMENT |
| LOW | compose.dev.apache.yaml | 1 | # ============================================================================= | COMMENT |
| LOW | compose.mysql.yaml | 1 | # ============================================================================= | COMMENT |
| LOW | resources/js/bootstrap.js | 21 | // window.Pusher = Pusher; | COMMENT |
| LOW | …tests/02-configuration/magicAI-custom-provider.spec.js | 61 | COMMENT | |
| LOW | …l/Admin/tests/Feature/Catalog/ProductLinksViewTest.php | 341 | COMMENT | |
| LOW | …ettings/DataTransfer/AbstractJobInstanceController.php | 221 | // if ($this->importHelper->isIndexingRequired()) { | COMMENT |
| LOW | .github/workflows/playwright_test.yml | 121 | # Login-heavy shards (loginpage, notifications re-auth, ajax-nav, security) | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | …/src/Resources/views/catalog/attributes/edit.blade.php | 785 | return this.$refs.optionsDataGrid.applied.filters.columns.filter( | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | …ages/Webkul/Installer/src/Resources/lang/en_NZ/app.php | 16 | 'footer' => 'Generated by UnoPim for demonstration purposes.', | CODE |
| MEDIUM | …ages/Webkul/Installer/src/Resources/lang/en_US/app.php | 16 | 'footer' => 'Generated by UnoPim for demonstration purposes.', | CODE |
| MEDIUM | …ages/Webkul/Installer/src/Resources/lang/en_CA/app.php | 16 | 'footer' => 'Generated by UnoPim for demonstration purposes.', | CODE |
| MEDIUM | …ages/Webkul/Installer/src/Resources/lang/en_AU/app.php | 16 | 'footer' => 'Generated by UnoPim for demonstration purposes.', | CODE |
| MEDIUM | …ages/Webkul/Installer/src/Resources/lang/en_GB/app.php | 16 | 'footer' => 'Generated by UnoPim for demonstration purposes.', | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | packages/Webkul/AiAgent/src/Http/Client/AiApiClient.php | 322 | * Pre-flight token guard (issue #423): trim oldest history / largest blocks when the estimate exceeds the context w | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW⚡ | compose.dev.apache.yaml | 6 | # Usage: | COMMENT |