A continuation of HomeBox the inventory and organization system built for the Home User
This report summarizes scanner evidence for sysadminsmedia/homebox, a Go project with 7,710 GitHub stars. SynthScan examined 298,053 lines of code across 917 source files, recording 246 pattern matches distributed across 13 syntactic categories. The legacy adjusted pattern signal is 1.0 (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? 154 finding(s).
Are imports declared and package/API names verified? 75 finding(s).
Are wrappers, guards, and repeated structures necessary? 33 finding(s).
Which changes need focused human review? 246 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 246 distinct pattern matches across 13 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 | backend/.goreleaser.yaml | 61 | # The lines beneath this are called `modelines`. See `:help modeline` | COMMENT |
| LOW | backend/app/api/routes.go | 41 | // swaggerDocHandler serves the OpenAPI document, rewriting its `host` so the | COMMENT |
| LOW | backend/app/api/main.go | 81 | COMMENT | |
| LOW | backend/app/api/main.go | 341 | // Web.Host:Web.Port itself. | COMMENT |
| LOW | backend/app/api/handlers/v1/v1_ctrl_maint_entry.go | 21 | // @Router /v1/entities/{id}/maintenance [GET] | COMMENT |
| LOW | backend/app/api/handlers/v1/v1_ctrl_entities.go | 41 | COMMENT | |
| LOW | …i/handlers/v1/v1_ctrl_entities_attachments_external.go | 61 | } | COMMENT |
| LOW | …nd/app/api/handlers/v1/v1_ctrl_entities_attachments.go | 161 | } | COMMENT |
| LOW | backend/app/api/handlers/v1/v1_ctrl_label_templates.go | 121 | // | COMMENT |
| LOW | backend/app/api/handlers/v1/v1_ctrl_label_templates.go | 141 | // @Tags Label Templates | COMMENT |
| LOW | backend/app/api/handlers/v1/v1_ctrl_label_templates.go | 221 | Format string `json:"format"` // "png" or "pdf", defaults to "png" | COMMENT |
| LOW | backend/app/api/handlers/v1/v1_ctrl_label_templates.go | 581 | COMMENT | |
| LOW | backend/app/api/handlers/v1/v1_ctrl_label_templates.go | 841 | COMMENT | |
| LOW | backend/app/api/handlers/v1/v1_ctrl_label_templates.go | 941 | LocationIDs []uuid.UUID `json:"locationIds,omitempty"` // Simple list (1 copy each) | COMMENT |
| LOW | backend/app/api/handlers/v1/v1_ctrl_actions.go | 41 | // @Success 200 {object} ActionAmountResult | COMMENT |
| LOW | backend/app/api/handlers/v1/v1_ctrl_actions.go | 61 | // HandleItemDateZeroOut godoc | COMMENT |
| LOW | backend/app/api/handlers/v1/v1_ctrl_actions.go | 81 | // @Router /v1/actions/set-primary-photos [Post] | COMMENT |
| LOW | backend/app/api/handlers/v1/v1_ctrl_auth.go | 61 | }, nil | COMMENT |
| LOW | backend/app/api/handlers/v1/v1_ctrl_auth.go | 81 | } | COMMENT |
| LOW | backend/app/api/handlers/v1/v1_ctrl_auth.go | 161 | Token string `json:"token" validate:"required,min=20"` | COMMENT |
| LOW | backend/app/api/handlers/v1/v1_ctrl_auth.go | 241 | } | COMMENT |
| LOW | backend/app/api/handlers/v1/v1_ctrl_group.go | 41 | // HandleGroupGet godoc | COMMENT |
| LOW | backend/app/api/handlers/v1/v1_ctrl_group.go | 121 | // @Tags Group | COMMENT |
| LOW | backend/app/api/handlers/v1/v1_ctrl_group.go | 141 | // @Success 201 {object} repo.Group | COMMENT |
| LOW | backend/app/api/handlers/v1/v1_ctrl_group.go | 201 | // @Success 200 {object} []repo.GroupInvitation | COMMENT |
| LOW | backend/app/api/handlers/v1/v1_ctrl_notifiers.go | 61 | // @Summary Delete a Notifier | COMMENT |
| LOW | backend/app/api/handlers/v1/helpers.go | 21 | // rather than an error the user can act on. | COMMENT |
| LOW | backend/app/api/handlers/v1/helpers.go | 141 | } | COMMENT |
| LOW | backend/app/api/handlers/v1/v1_ctrl_maintenance.go | 21 | // @Security Bearer | COMMENT |
| LOW | …/internal/core/services/service_user_password_reset.go | 21 | // HTTP forgot-password handler uses this to short-circuit with a clear error | COMMENT |
| LOW | backend/internal/core/services/service_exports.go | 61 | // | COMMENT |
| LOW | backend/internal/core/services/service_exports.go | 81 | pkCol string | COMMENT |
| LOW | backend/internal/core/services/service_exports.go | 101 | // | COMMENT |
| LOW | backend/internal/core/services/service_exports.go | 261 | } | COMMENT |
| LOW | backend/internal/core/services/service_exports.go | 841 | if err != nil { | COMMENT |
| LOW | backend/internal/core/services/service_exports.go | 1501 | } | COMMENT |
| LOW | backend/internal/web/adapters/query.go | 1 | package adapters | COMMENT |
| LOW | backend/internal/web/adapters/query.go | 41 | // | COMMENT |
| LOW | backend/internal/web/adapters/actions.go | 1 | package adapters | COMMENT |
| LOW | backend/internal/web/adapters/actions.go | 41 | COMMENT | |
| LOW | backend/internal/sys/validate/notifier_url.go | 21 | const ( | COMMENT |
| LOW | backend/internal/sys/validate/notifier_http.go | 21 | COMMENT | |
| LOW | backend/internal/sys/config/conf_notifier.go | 1 | package config | COMMENT |
| LOW | backend/internal/sys/config/conf_notifier.go | 21 | // BlockBogonNets will prevent notifiers from sending to bogon networks. (Reserved IPs) | COMMENT |
| LOW | backend/internal/data/ent/entity_query.go | 621 | // Example: | COMMENT |
| LOW | backend/internal/data/ent/entity_query.go | 641 | // Select allows the selection one or more fields/columns for the given query, | COMMENT |
| LOW | backend/internal/data/ent/labeltemplate_query.go | 341 | // } | COMMENT |
| LOW | backend/internal/data/ent/authtokens_query.go | 341 | // Count int `json:"count,omitempty"` | COMMENT |
| LOW | backend/internal/data/ent/apikey_query.go | 301 | // var v []struct { | COMMENT |
| LOW | backend/internal/data/ent/apikey_query.go | 321 | // | COMMENT |
| LOW | backend/internal/data/ent/notifier_query.go | 321 | // WithUser tells the query-builder to eager-load the nodes that are connected to | COMMENT |
| LOW | backend/internal/data/ent/notifier_query.go | 341 | // | COMMENT |
| LOW | backend/internal/data/ent/entitytype_query.go | 361 | func (_q *EntityTypeQuery) WithDefaultTemplate(opts ...func(*EntityTemplateQuery)) *EntityTypeQuery { | COMMENT |
| LOW | backend/internal/data/ent/entitytype_query.go | 381 | // GroupBy(entitytype.FieldCreatedAt). | COMMENT |
| LOW | backend/internal/data/ent/passwordresettokens_query.go | 301 | // var v []struct { | COMMENT |
| LOW | backend/internal/data/ent/passwordresettokens_query.go | 321 | // | COMMENT |
| LOW | backend/internal/data/ent/maintenanceentry_query.go | 301 | // var v []struct { | COMMENT |
| LOW | backend/internal/data/ent/maintenanceentry_query.go | 321 | // | COMMENT |
| LOW | backend/internal/data/ent/usergroup_query.go | 261 | // | COMMENT |
| LOW | backend/internal/data/ent/usergroup_query.go | 281 | COMMENT | |
| 48 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/locales/tr.json | 148 | "placeholder": "Bir tür seçin…" | CODE |
| LOW | frontend/locales/tr.json | 262 | "placeholder": "Seç…", | CODE |
| LOW | frontend/locales/sl.json | 98 | "placeholder": "Izberi...", | CODE |
| LOW | frontend/locales/hu.json | 177 | "placeholder": "Válassz…", | CODE |
| LOW | frontend/locales/el-GR.json | 153 | "placeholder": "Επιλογή τύπου…" | CODE |
| LOW | frontend/locales/el-GR.json | 278 | "placeholder": "Επιλογή…", | CODE |
| LOW | frontend/locales/nl.json | 153 | "placeholder": "Selecteer een type…" | CODE |
| LOW | frontend/locales/nl.json | 278 | "placeholder": "Selecteer…", | CODE |
| LOW | frontend/locales/de.json | 153 | "placeholder": "Typ auswählen…" | CODE |
| LOW | frontend/locales/de.json | 278 | "placeholder": "Auswählen…", | CODE |
| LOW | frontend/locales/ru.json | 153 | "placeholder": "Выберите тип…" | CODE |
| LOW | frontend/locales/ru.json | 277 | "placeholder": "Выберите…", | CODE |
| LOW | frontend/locales/pl.json | 153 | "placeholder": "Wybierz typ…" | CODE |
| LOW | frontend/locales/pl.json | 278 | "placeholder": "Wybierz…", | CODE |
| LOW | frontend/locales/ko-KR.json | 207 | "placeholder": "선택하세요…", | CODE |
| LOW | frontend/locales/ja-JP.json | 186 | "placeholder": "選択してください…", | CODE |
| LOW | frontend/locales/zh-CN.json | 153 | "placeholder": "选择类型…" | CODE |
| LOW | frontend/locales/zh-CN.json | 278 | "placeholder": "选择…", | CODE |
| LOW | frontend/locales/en.json | 153 | "placeholder": "Select a type…" | CODE |
| LOW | frontend/locales/en.json | 265 | "placeholder": "Select…", | CODE |
| LOW | frontend/locales/pt-PT.json | 219 | "placeholder": "Selecionar…", | CODE |
| LOW | frontend/locales/it.json | 148 | "placeholder": "Seleziona un tipo…" | CODE |
| LOW | frontend/locales/it.json | 228 | "placeholder": "Seleziona…", | CODE |
| LOW | frontend/locales/kmr.json | 197 | "placeholder": "Hilbijêre…", | CODE |
| LOW | frontend/locales/sk-SK.json | 153 | "placeholder": "Vyberte typ…" | CODE |
| LOW | frontend/locales/sk-SK.json | 278 | "placeholder": "Vybrať…", | CODE |
| LOW | frontend/locales/uk-UA.json | 153 | "placeholder": "Обрати тип…" | CODE |
| LOW | frontend/locales/uk-UA.json | 278 | "placeholder": "Вибрати…", | CODE |
| LOW | frontend/locales/lt-LT.json | 153 | "placeholder": "Pasirinkite tipą…" | CODE |
| LOW | frontend/locales/lt-LT.json | 278 | "placeholder": "Rinktis…", | CODE |
| LOW | frontend/locales/hr-HR.json | 153 | "placeholder": "Odaberi vrstu…" | CODE |
| LOW | frontend/locales/hr-HR.json | 278 | "placeholder": "Odaberi…", | CODE |
| LOW | frontend/locales/fr.json | 153 | "placeholder": "Sélectionnez un type…" | CODE |
| LOW | frontend/locales/fr.json | 278 | "placeholder": "Sélectionner…", | CODE |
| LOW | frontend/locales/da-DK.json | 153 | "placeholder": "Vælg en type…" | CODE |
| LOW | frontend/locales/da-DK.json | 278 | "placeholder": "Vælg…", | CODE |
| LOW | frontend/locales/nb-NO.json | 98 | "placeholder": "Velg…", | CODE |
| LOW | frontend/locales/ca.json | 153 | "placeholder": "Selecciona un tipus…" | CODE |
| LOW | frontend/locales/ca.json | 278 | "placeholder": "Selecciona…", | CODE |
| LOW | frontend/locales/pt-BR.json | 153 | "placeholder": "Selecione um tipo…" | CODE |
| LOW | frontend/locales/pt-BR.json | 278 | "placeholder": "Selecione…", | CODE |
| LOW | frontend/locales/cs-CZ.json | 153 | "placeholder": "Vyberte typ…" | CODE |
| LOW | frontend/locales/cs-CZ.json | 278 | "placeholder": "Vyberte…", | CODE |
| LOW | frontend/locales/zh-TW.json | 153 | "placeholder": "選擇一個類型…" | CODE |
| LOW | frontend/locales/zh-TW.json | 266 | "placeholder": "請選擇…", | CODE |
| LOW | frontend/locales/sv.json | 153 | "placeholder": "Välj en typ…" | CODE |
| LOW | frontend/locales/sv.json | 278 | "placeholder": "Välj…", | CODE |
| LOW | frontend/locales/cy-GB.json | 150 | "placeholder": "Dewisiwch math…" | CODE |
| LOW | frontend/locales/cy-GB.json | 274 | "placeholder": "Dewis…", | CODE |
| LOW | frontend/locales/fi-FI.json | 202 | "placeholder": "Valitse", | CODE |
| LOW | frontend/locales/lb-LU.json | 106 | "placeholder": "Wiel…", | CODE |
| LOW | frontend/locales/es.json | 153 | "placeholder": "Seleccionar un tipo…" | CODE |
| LOW | frontend/locales/es.json | 278 | "placeholder": "Seleccionar…", | CODE |
| LOW | frontend/locales/ar-AA.json | 197 | "placeholder": "اختر…", | CODE |
| LOW | frontend/locales/vi-VN.json | 106 | "placeholder": "Chọn …", | CODE |
| LOW | frontend/components/Form/TextField.vue | 20 | :placeholder="placeholder" | CODE |
| LOW | frontend/components/Form/TextField.vue | 52 | :placeholder="placeholder" | CODE |
| LOW | frontend/components/Form/TextArea.vue | 13 | :placeholder="placeholder" | CODE |
| LOW | frontend/components/Form/TextArea.vue | 30 | :placeholder="placeholder" | CODE |
| LOW | frontend/lib/api/types/data-contracts.ts | 1651 | /** @example "user@example.com" */ | COMMENT |
| 14 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .gitlab-ci.yml | 24 | # ========================================== | COMMENT |
| MEDIUM | .gitlab-ci.yml | 26 | # ========================================== | COMMENT |
| MEDIUM | .gitlab-ci.yml | 283 | # ========================================== | COMMENT |
| MEDIUM | .gitlab-ci.yml | 285 | # ========================================== | COMMENT |
| MEDIUM | .gitlab-ci.yml | 342 | # ========================================== | COMMENT |
| MEDIUM | .gitlab-ci.yml | 344 | # ========================================== | COMMENT |
| MEDIUM | .gitlab-ci.yml | 400 | # ========================================== | COMMENT |
| MEDIUM | .gitlab-ci.yml | 402 | # ========================================== | COMMENT |
| MEDIUM | .gitlab-ci.yml | 427 | # ========================================== | COMMENT |
| MEDIUM | .gitlab-ci.yml | 429 | # ========================================== | COMMENT |
| MEDIUM | .gitlab-ci.yml | 454 | # ========================================== | COMMENT |
| MEDIUM | .gitlab-ci.yml | 456 | # ========================================== | COMMENT |
| MEDIUM | .gitlab-ci.yml | 509 | # ========================================== | COMMENT |
| MEDIUM | .gitlab-ci.yml | 511 | # ========================================== | COMMENT |
| MEDIUM | .gitlab-ci.yml | 557 | # ========================================== | COMMENT |
| MEDIUM | .gitlab-ci.yml | 559 | # ========================================== | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ckend/internal/data/repo/repo_item_attachments_test.go | 278 | // Step 1: Upload a photo first (this should become primary since it's the first photo) | COMMENT |
| LOW⚡ | …ckend/internal/data/repo/repo_item_attachments_test.go | 292 | // Step 2: Add a PDF receipt (this should NOT affect the photo's primary status) | COMMENT |
| LOW⚡ | …ckend/internal/data/repo/repo_item_attachments_test.go | 301 | // Step 3: Verify photo is still primary after adding PDF | COMMENT |
| LOW⚡ | …ckend/internal/data/repo/repo_item_attachments_test.go | 311 | // Step 4: Test the actual entity summary mapping (this is what determines the card display) | COMMENT |
| LOW | .github/workflows/upgrade-test.yaml | 57 | # Step 1: Pull and deploy latest stable version | COMMENT |
| LOW | .github/workflows/upgrade-test.yaml | 78 | # Step 2: Create test data | COMMENT |
| LOW | .github/workflows/upgrade-test.yaml | 103 | # Step 3: Build latest version from main branch | COMMENT |
| LOW | .github/workflows/upgrade-test.yaml | 114 | # Step 4: Copy data and start new version | COMMENT |
| LOW | .github/workflows/upgrade-test.yaml | 136 | # Step 5: Run verification tests with Playwright | COMMENT |
| LOW | .github/agents/doc-noob-tester.agent.md | 15 | ## Step 1: Build and Serve Documentation Site | COMMENT |
| LOW | .github/agents/doc-noob-tester.agent.md | 29 | ## Step 2: Navigate Documentation as a Noob | COMMENT |
| LOW | .github/agents/doc-noob-tester.agent.md | 57 | ## Step 3: Identify Pain Points | COMMENT |
| LOW | .github/agents/doc-noob-tester.agent.md | 83 | ## Step 4: Take Screenshots | COMMENT |
| LOW | .github/agents/doc-noob-tester.agent.md | 90 | ## Step 5: Create Discussion Report | COMMENT |
| LOW | .github/agents/doc-noob-tester.agent.md | 118 | ## Step 6: Cleanup | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | frontend/composables/use-preferences.ts | 206 | export function configureViewPreferenceSync(config: PreferenceSyncConfig) { | CODE |
| LOW | frontend/composables/use-preferences.ts | 213 | async function fetchViewPreferencesFromServer(): Promise<Record<string, unknown> | null> { | CODE |
| LOW | frontend/plugins/otel.client.ts | 18 | async function fetchBackendTelemetryStatus(debug: boolean): Promise<boolean> { | CODE |
| LOW | frontend/pages/item/[id]/index/edit.vue | 554 | async function maybeSyncWithParentLocation() { | CODE |
| LOW⚡ | .github/scripts/test_update_currencies.py | 20 | def test_reports_api_error_message(self): | CODE |
| LOW⚡ | .github/scripts/test_update_currencies.py | 26 | def test_rejects_legacy_response(self): | CODE |
| LOW⚡ | .github/scripts/test_update_currencies.py | 33 | def test_requires_complete_pagination_metadata(self): | CODE |
| LOW | .github/scripts/test_update_currencies.py | 64 | def test_prefers_canonical_currency_entries_for_duplicate_codes(self): | CODE |
| LOW | .github/scripts/test_update_currencies.py | 106 | def test_rejects_old_currency_object_shape(self): | CODE |
| LOW | .github/scripts/test_update_currencies.py | 148 | def test_fetches_every_page_with_authentication(self): | CODE |
| LOW | .github/scripts/test_update_currencies.py | 185 | def test_missing_api_key_is_fatal_before_network_access(self): | CODE |
| LOW | .github/scripts/test_update_currencies.py | 193 | def test_stops_when_more_is_true_after_reaching_total(self): | CODE |
| LOW | .github/scripts/test_update_currencies.py | 207 | def test_rejects_total_changing_between_pages(self): | CODE |
| LOW | .github/scripts/test_update_currencies.py | 227 | def test_rejects_final_count_mismatch(self): | CODE |
| LOW | .github/scripts/test_update_currencies.py | 241 | def test_rejects_empty_page_when_more_is_true(self): | CODE |
| LOW | .github/scripts/update_currencies.py | 168 | def canonicalize_currency_rows(results): | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | …ckend/internal/data/repo/repo_item_attachments_test.go | 278 | // Step 1: Upload a photo first (this should become primary since it's the first photo) | COMMENT |
| LOW⚡ | …ckend/internal/data/repo/repo_item_attachments_test.go | 292 | // Step 2: Add a PDF receipt (this should NOT affect the photo's primary status) | COMMENT |
| LOW⚡ | …ckend/internal/data/repo/repo_item_attachments_test.go | 301 | // Step 3: Verify photo is still primary after adding PDF | COMMENT |
| LOW⚡ | …ckend/internal/data/repo/repo_item_attachments_test.go | 311 | // Step 4: Test the actual entity summary mapping (this is what determines the card display) | COMMENT |
| LOW | .github/workflows/upgrade-test.yaml | 57 | # Step 1: Pull and deploy latest stable version | COMMENT |
| LOW | .github/workflows/upgrade-test.yaml | 78 | # Step 2: Create test data | COMMENT |
| LOW | .github/workflows/upgrade-test.yaml | 103 | # Step 3: Build latest version from main branch | COMMENT |
| LOW | .github/workflows/upgrade-test.yaml | 114 | # Step 4: Copy data and start new version | COMMENT |
| LOW | .github/workflows/upgrade-test.yaml | 136 | # Step 5: Run verification tests with Playwright | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .scaffold/model/scaffold.yaml | 2 | # yaml-language-server: $schema=https://hay-kot.github.io/scaffold/schema.json | COMMENT |
| MEDIUM | .scaffold/model/scaffold.yaml | 2 | # yaml-language-server: $schema=https://hay-kot.github.io/scaffold/schema.json | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | frontend/lib/api/classes/label-templates.ts | 74 | print(id: string, body: LabelTemplatePrintRequest) { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | backend/pkgs/labelmaker/template_renderer.go | 1221 | // This is a basic implementation that doesn't handle nested objects | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | .github/scripts/upgrade-test/create-test-data.sh | 173 | # Create a temporary file with some content | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/workflows/upgrade-test.yaml | 89 | # Check if database file exists and has content | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/scripts/update_currencies.py | 133 | except Exception as e: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | .github/scripts/update_currencies.py | 90 | CODE |