{"version": "2.1.0", "$schema": "https://json.schemastore.org/sarif-2.1.0.json", "runs": [{"tool": {"driver": {"name": "Repobility", "informationUri": "https://repobility.com", "rules": [{"id": "scanner-4f33532a1b571fc3", "name": "Possibly dead Python function: kma_short_forecast_live", "shortDescription": {"text": "Possibly dead Python function: kma_short_forecast_live"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-94d67f6f93cc5069", "name": "Possibly dead Python function: kma_ultra_short_nowcast_live", "shortDescription": {"text": "Possibly dead Python function: kma_ultra_short_nowcast_live"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e128336bf1ad817f", "name": "Possibly dead Python function: kma_ultra_short_forecast_live", "shortDescription": {"text": "Possibly dead Python function: kma_ultra_short_forecast_live"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-936beb78cdaaf929", "name": "Possibly dead Python function: krex_rest_areas_live", "shortDescription": {"text": "Possibly dead Python function: krex_rest_areas_live"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9d45946a5323a87f", "name": "Possibly dead Python function: krex_rest_area_prices_live", "shortDescription": {"text": "Possibly dead Python function: krex_rest_area_prices_live"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3b545ccd345abe39", "name": "Possibly dead Python function: krex_rest_area_weather_live", "shortDescription": {"text": "Possibly dead Python function: krex_rest_area_weather_live"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d1ca0bed5711315", "name": "Possibly dead Python function: krex_traffic_notices_live", "shortDescription": {"text": "Possibly dead Python function: krex_traffic_notices_live"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7e0477201b239342", "name": "Possibly dead Python function: opinet_fuel_station_details_live", "shortDescription": {"text": "Possibly dead Python function: opinet_fuel_station_details_live"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6b43e16c28779481", "name": "Possibly dead Python function: opinet_gas_station_prices_live", "shortDescription": {"text": "Possibly dead Python function: opinet_gas_station_prices_live"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8db1d517acdf87c6", "name": "Possibly dead Python function: datagokr_cultural_festivals_live", "shortDescription": {"text": "Possibly dead Python function: datagokr_cultural_festivals_live"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4490dd2dfe074e48", "name": "Possibly dead Python function: kma_weather_alerts_live", "shortDescription": {"text": "Possibly dead Python function: kma_weather_alerts_live"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f54b8be33bb57358", "name": "Possibly dead Python function: do_run_migrations", "shortDescription": {"text": "Possibly dead Python function: do_run_migrations"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8f489df6591abbc7", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f95ae4783af5c6e5", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4aa5f982ada29736", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d6509a6d4a8222b5", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7ac3a0f1cf11cfc9", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b09049496ccfc34e", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-73ca0f1d40fd73b9", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c3795a098449afcb", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3d73ab71952b2003", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-232a07f7d85198ae", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1503b293a7c1821d", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-05bfe5e6f0a35aa5", "name": "Possibly dead Python function: downgrade", "shortDescription": {"text": "Possibly dead Python function: downgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b1ade57605272736", "name": "Possibly dead Python function: upgrade", "shortDescription": {"text": "Possibly dead Python function: upgrade"}, "fullDescription": {"text": "No callers detected by AST scan in this repo. Could be exported for external callers or a framework handler."}, "properties": {"scanner": "scanner-primary", "layer": "software", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7aa44176bf4eb8f1", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/admin/offline-upload", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/admin/offline-uploads/offline-uploads-client.tsx:729"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-f17790d55c06c5e5", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/admin/dagster/dagste", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/admin/dagster/dagster-client.tsx:190"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-ebda190aedf35565", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/admin/features/admin", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/admin/features/admin-features-client.tsx:451"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-086203058d2f7437", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/admin/features/chang", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/admin/features/change-requests/feature-change-requests-client.tsx:848"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-28acdeceef86f22b", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/admin/feature-update", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/admin/feature-update-requests/feature-update-requests-client.tsx:305"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5c221e342fd7a25e", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/ops/import-jobs/impo", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/ops/import-jobs/import-jobs-client.tsx:188"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-23765ecc79c29d75", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/ops/consistency/cons", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/ops/consistency/consistency-client.tsx:189"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-faed242899c49e1b", "name": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/components/feature-detai", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/components/feature-detail-view.tsx:188"}, "fullDescription": {"text": "A truncated value should reveal the full text on hover. Pass the full string via `title={...}` so the user can read it.\n\nWhy: P2 in CHECKLIST.md \u2014 truncate without hover-reveal.\nRule id: fq.truncate.no-title"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9f67c1e10b11e95b", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-python@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-266162aa2c525a31", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-python@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-548bfbab350dca45", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-node@v4 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-27924aa79fa4a517", "name": "GitHub Action is tag-pinned rather than SHA-pinned", "shortDescription": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "fullDescription": {"text": "actions/setup-python@v5 can move without a code change in this repo. Pin third-party actions to a reviewed 40-character commit SHA."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "low", "confidence": 1.0}}, {"id": "scanner-341e38f4a0041b84", "name": "Very large file: packages/kor-travel-map-user-client/src/types.ts (2284 lines)", "shortDescription": {"text": "Very large file: packages/kor-travel-map-user-client/src/types.ts (2284 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c3e4889a11971d32", "name": "Very large file: packages/kor-travel-map-api/src/kortravelmap/api/etl_live.py (1517 lines)", "shortDescription": {"text": "Very large file: packages/kor-travel-map-api/src/kortravelmap/api/etl_live.py (1517 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-28e815d02fb7e1a4", "name": "Very large file: packages/kor-travel-map-admin/frontend/src/api/types.ts (9981 lines)", "shortDescription": {"text": "Very large file: packages/kor-travel-map-admin/frontend/src/api/types.ts (9981 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cc484835e276b9da", "name": "Very large file: packages/kor-travel-map-admin/frontend/e2e/admin-ops.spec.ts (1449 lines)", "shortDescription": {"text": "Very large file: packages/kor-travel-map-admin/frontend/e2e/admin-ops.spec.ts (1449 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a8415d9778a9807a", "name": "Very large file: src/kortravelmap/infra/admin_feature_repo.py (2518 lines)", "shortDescription": {"text": "Very large file: src/kortravelmap/infra/admin_feature_repo.py (2518 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-57577255ff5de70d", "name": "Very large file: src/kortravelmap/infra/feature_repo.py (1907 lines)", "shortDescription": {"text": "Very large file: src/kortravelmap/infra/feature_repo.py (1907 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c5a467bfd1203698", "name": "Very large file: src/kortravelmap/infra/models.py (1905 lines)", "shortDescription": {"text": "Very large file: src/kortravelmap/infra/models.py (1905 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8d1715b34ceed120", "name": "Very large file: src/kortravelmap/infra/curated_repo.py (1891 lines)", "shortDescription": {"text": "Very large file: src/kortravelmap/infra/curated_repo.py (1891 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b537b035d42d73f0", "name": "Very large file: src/kortravelmap/client/__init__.py (1501 lines)", "shortDescription": {"text": "Very large file: src/kortravelmap/client/__init__.py (1501 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6da036af4ea26185", "name": "Very large file: src/kortravelmap/category/_definitions.py (2126 lines)", "shortDescription": {"text": "Very large file: src/kortravelmap/category/_definitions.py (2126 lines)"}, "fullDescription": {"text": "Files with >800 lines often hide complexity hotspots and discourage tests."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6d96762d824c2ccf", "name": "Node manifest has dependencies but no lockfile: packages/kor-travel-map-user-client/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/kor-travel-map-user-client/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e087643d847c9d4b", "name": "Node manifest has dependencies but no lockfile: packages/map-marker-react/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/map-marker-react/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-45fe21806f9f6a3a", "name": "Node manifest has dependencies but no lockfile: packages/kor-travel-map-admin/frontend/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: packages/kor-travel-map-admin/frontend/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 25 console/debugger/print-style debug statements in non-test source. This is a common fast-generation residue before production cleanup."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72b2a6250083a784", "name": "Placeholder or mock-heavy implementation detected", "shortDescription": {"text": "Placeholder or mock-heavy implementation detected"}, "fullDescription": {"text": "Found 56 placeholder/mock markers across 25 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-749d4bc1bd66df5f", "name": "Agent instructions exist but release-hardening basics are missing", "shortDescription": {"text": "Agent instructions exist but release-hardening basics are missing"}, "fullDescription": {"text": "AI-coder instruction files were found, but the repo is missing lockfile. Treat this as a contract gap: the agent is guided, but the generated output is not yet guarded by the controls that make it repeatable."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e1d3fbc30bead412", "name": "Agent instruction contains unpinned remote install: AGENTS.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: AGENTS.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-27e547ff01413a83", "name": "Agent instruction contains unpinned remote install: SKILL.md", "shortDescription": {"text": "Agent instruction contains unpinned remote install: SKILL.md"}, "fullDescription": {"text": "Remote install commands in agent instructions are a supply-chain risk, especially when an agent can execute shell commands."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e725d2ab884fbd49", "name": "Multiple root agent instruction files without precedence", "shortDescription": {"text": "Multiple root agent instruction files without precedence"}, "fullDescription": {"text": "The repo has multiple top-level AI-coder instruction files. Without precedence rules, different agents may follow different policies."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-af44cdd3d8d8aaae", "name": "Commented-code block (6 lines) in packages/kor-travel-map-dagster/src/kortravelmap/dagster/provider_fetchers.py:849", "shortDescription": {"text": "Commented-code block (6 lines) in packages/kor-travel-map-dagster/src/kortravelmap/dagster/provider_fetchers.py:849"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-44727aa3df1cb696", "name": "Commented-code block (6 lines) in packages/kor-travel-map-api/src/kortravelmap/api/etl_live.py:1292", "shortDescription": {"text": "Commented-code block (6 lines) in packages/kor-travel-map-api/src/kortravelmap/api/etl_live.py:1292"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-faee880ad2c8e181", "name": "Commented-code block (6 lines) in packages/kor-travel-map-api/src/kortravelmap/api/app.py:373", "shortDescription": {"text": "Commented-code block (6 lines) in packages/kor-travel-map-api/src/kortravelmap/api/app.py:373"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-d9beab59b89973a0", "name": "Legacy-named symbol `model_copy` in packages/kor-travel-map-api/src/kortravelmap/api/routers/mois_detail.py:97", "shortDescription": {"text": "Legacy-named symbol `model_copy` in packages/kor-travel-map-api/src/kortravelmap/api/routers/mois_detail.py:97"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5edb2b756d6e02c0", "name": "Legacy-named symbol `get_backup` in packages/kor-travel-map-api/src/kortravelmap/api/routers/admin_backups.py:327", "shortDescription": {"text": "Legacy-named symbol `get_backup` in packages/kor-travel-map-api/src/kortravelmap/api/routers/admin_backups.py:327"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d7ea7d2f2ff784a5", "name": "Legacy-named symbol `model_copy` in packages/kor-travel-map-api/src/kortravelmap/api/routers/categories.py:120", "shortDescription": {"text": "Legacy-named symbol `model_copy` in packages/kor-travel-map-api/src/kortravelmap/api/routers/categories.py:120"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-46485c8a8dbe05aa", "name": "`fetch()` without try/.catch or AbortSignal \u2014 packages/kor-travel-map-admin/frontend/src/api/client.ts:74", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/kor-travel-map-admin/frontend/src/api/client.ts:74"}, "fullDescription": {"text": "Bare `fetch(...)` will throw an unhandled rejection on network failure. Wrap in try/catch, attach a `.catch(...)`, or pass an AbortSignal with a timeout."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c5d992525d759720", "name": "Legacy-named symbol `model_copy` in tests/unit/test_providers_visitkorea.py:211", "shortDescription": {"text": "Legacy-named symbol `model_copy` in tests/unit/test_providers_visitkorea.py:211"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e403b21913c74666", "name": "Legacy-named symbol `krex_rest_area_v2` in tests/unit/test_ids.py:90", "shortDescription": {"text": "Legacy-named symbol `krex_rest_area_v2` in tests/unit/test_ids.py:90"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e48248b8ec3576f3", "name": "Commented-code block (5 lines) in tests/integration/conftest.py:129", "shortDescription": {"text": "Commented-code block (5 lines) in tests/integration/conftest.py:129"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-4e18cb2f4685c60c", "name": "Network/subprocess call without timeout or try/except \u2014 scripts/check_journal_update.py:34", "shortDescription": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/check_journal_update.py:34"}, "fullDescription": {"text": "`subprocess.run(...)` here lacks both a `timeout=` arg and an enclosing try/except. This is exactly the class of bug that took down our git-clone earlier (HTTP/2 stream cancel surfaced as a fatal). Add a `timeout=` and wrap in try/except, or use a wrapper that retries."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-ed9676e558401362", "name": "Commented-code block (5 lines) in alembic/env.py:37", "shortDescription": {"text": "Commented-code block (5 lines) in alembic/env.py:37"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-bc777032c6a9e63f", "name": "Legacy-named symbol `_parse_address_v2` in src/kortravelmap/geocoding.py:614", "shortDescription": {"text": "Legacy-named symbol `_parse_address_v2` in src/kortravelmap/geocoding.py:614"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8413f2b84ef6c0fe", "name": "Commented-code block (12 lines) in src/kortravelmap/__init__.py:57", "shortDescription": {"text": "Commented-code block (12 lines) in src/kortravelmap/__init__.py:57"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-5a5c91f10a57049b", "name": "Commented-code block (5 lines) in src/kortravelmap/providers/standard_data.py:366", "shortDescription": {"text": "Commented-code block (5 lines) in src/kortravelmap/providers/standard_data.py:366"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-9b020ecf12034878", "name": "Legacy-named symbol `model_copy` in src/kortravelmap/providers/krheritage.py:399", "shortDescription": {"text": "Legacy-named symbol `model_copy` in src/kortravelmap/providers/krheritage.py:399"}, "fullDescription": {"text": "Names with suffixes like `_old`, `_v1`, `_deprecated` usually indicate replaced-but-not-removed code (typical AI-coder leftover). Confirm and delete, or rename if it's the active version."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0580a0353cf0661f", "name": "Commented-code block (7 lines) in src/kortravelmap/infra/feature_repo.py:811", "shortDescription": {"text": "Commented-code block (7 lines) in src/kortravelmap/infra/feature_repo.py:811"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-1be512d7da87252e", "name": "Commented-code block (5 lines) in src/kortravelmap/infra/consistency.py:79", "shortDescription": {"text": "Commented-code block (5 lines) in src/kortravelmap/infra/consistency.py:79"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-2d70b4dad90526e7", "name": "Commented-code block (6 lines) in src/kortravelmap/dto/feature.py:53", "shortDescription": {"text": "Commented-code block (6 lines) in src/kortravelmap/dto/feature.py:53"}, "fullDescription": {"text": "A long run of `//` or `#` lines usually means abandoned code. Delete or move to git history. Keeps the canvas + dead-code detection honest."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "confidence": 1.0}}, {"id": "scanner-8e047ab7af03962f", "name": "7 env vars used in code but missing from .env.example", "shortDescription": {"text": "7 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `APPDATA`, `BYPASS`, `CI`, `E2E_BASE_URL`, `KOR_TRAVEL_MAP_GIT_COMMIT`, `KOR_TRAVEL_MAP_PG_DSN_SYNC`, `NODE_ENV`. Add them (with a placeholder/comment) to .env.example so onboarding doesn't break."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2c04133e54348533", "name": "Near-duplicate function bodies in 2 places", "shortDescription": {"text": "Near-duplicate function bodies in 2 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\npackages/kor-travel-map-dagster/src/kortravelmap/dagster/validation.py:has_errors, packages/kor-travel-map-dagster/src/kortravelmap/dagster/validation.py:has_errors\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-be46ea126aa5d8dc", "name": "Near-duplicate function bodies in 3 places", "shortDescription": {"text": "Near-duplicate function bodies in 3 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\npackages/kor-travel-map-api/src/kortravelmap/api/routers/curated.py:list_curated_features_route, packages/kor-travel-map-api/src/kortravelmap/api/routers/curated.py:list_admin_curated_features_route, packages/kor-travel-map-api/src/kortravelmap/api/routers/curated.py:list_admin_curated_source_rules_route\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-49c98f7cedd9c977", "name": "Near-duplicate function bodies in 4 places", "shortDescription": {"text": "Near-duplicate function bodies in 4 places"}, "fullDescription": {"text": "Functions with the same first-5-line body hash:\nsrc/kortravelmap/offline_upload.py:as_payload, src/kortravelmap/offline_upload.py:as_payload, src/kortravelmap/offline_upload.py:as_payload, src/kortravelmap/offline_upload.py:as_payload\n\nThis is *the* AI-coder failure mode (4\u00d7 more duplication in vibe-coded repos \u2014 see https://jw.hn/ai-code-hygiene). Consolidate or document why they're separate."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1039d2783e523805", "name": "FastAPI POST `mark_dagster_nux_seen` without auth dependency \u2014 packages/kor-travel-map-api/src/kortravelmap/api/routers/", "shortDescription": {"text": "FastAPI POST `mark_dagster_nux_seen` without auth dependency \u2014 packages/kor-travel-map-api/src/kortravelmap/api/routers/dagster.py:973"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e98b630e078b09c5", "name": "FastAPI POST `<anonymous>` without auth dependency \u2014 packages/kor-travel-map-api/src/kortravelmap/api/routers/etl.py:208", "shortDescription": {"text": "FastAPI POST `<anonymous>` without auth dependency \u2014 packages/kor-travel-map-api/src/kortravelmap/api/routers/etl.py:208"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-e2655138a817a03b", "name": "FastAPI POST `<anonymous>` without auth dependency \u2014 packages/kor-travel-map-api/src/kortravelmap/api/routers/feature_up", "shortDescription": {"text": "FastAPI POST `<anonymous>` without auth dependency \u2014 packages/kor-travel-map-api/src/kortravelmap/api/routers/feature_update_requests.py:529"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-d4d31a94e26e5ec8", "name": "FastAPI POST `validate_offline_upload_request` without auth dependency \u2014 packages/kor-travel-map-api/src/kortravelmap/ap", "shortDescription": {"text": "FastAPI POST `validate_offline_upload_request` without auth dependency \u2014 packages/kor-travel-map-api/src/kortravelmap/api/routers/offline_uploads.py:1035"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-b3dd9c5318ded07a", "name": "FastAPI POST `load_offline_upload_request` without auth dependency \u2014 packages/kor-travel-map-api/src/kortravelmap/api/ro", "shortDescription": {"text": "FastAPI POST `load_offline_upload_request` without auth dependency \u2014 packages/kor-travel-map-api/src/kortravelmap/api/routers/offline_uploads.py:1169"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}, {"id": "scanner-f4a840f6a4e21502", "name": "FastAPI POST `create_backup` without auth dependency \u2014 packages/kor-travel-map-api/src/kortravelmap/api/routers/admin_ba", "shortDescription": {"text": "FastAPI POST `create_backup` without auth dependency \u2014 packages/kor-travel-map-api/src/kortravelmap/api/routers/admin_backups.py:345"}, "fullDescription": {"text": "`@router.post` decorator with no `Depends(get_current_user)` or auth-shaped dependency in its signature. Mutating endpoints should require authentication unless explicitly public."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "high", "confidence": 1.0}}]}}, "automationDetails": {"id": "repobility/25402"}, "properties": {"repository": "digitie/kor-travel-map", "repoUrl": "https://github.com/digitie/kor-travel-map", "branch": "main"}, "results": [{"ruleId": "scanner-4f33532a1b571fc3", "level": "note", "message": {"text": "Possibly dead Python function: kma_short_forecast_live"}, "properties": {"repobilityId": "2017360c5144812b", "scanner": "scanner-primary", "fingerprint": "4f33532a1b571fc3", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/kor-travel-map-api/src/kortravelmap/api/etl_live.py:165"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-94d67f6f93cc5069", "level": "note", "message": {"text": "Possibly dead Python function: kma_ultra_short_nowcast_live"}, "properties": {"repobilityId": "e31f550894011122", "scanner": "scanner-primary", "fingerprint": "94d67f6f93cc5069", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/kor-travel-map-api/src/kortravelmap/api/etl_live.py:229"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e128336bf1ad817f", "level": "note", "message": {"text": "Possibly dead Python function: kma_ultra_short_forecast_live"}, "properties": {"repobilityId": "b15489d89704cdd7", "scanner": "scanner-primary", "fingerprint": "e128336bf1ad817f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/kor-travel-map-api/src/kortravelmap/api/etl_live.py:270"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-936beb78cdaaf929", "level": "note", "message": {"text": "Possibly dead Python function: krex_rest_areas_live"}, "properties": {"repobilityId": "a350db1884838df7", "scanner": "scanner-primary", "fingerprint": "936beb78cdaaf929", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/kor-travel-map-api/src/kortravelmap/api/etl_live.py:585"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-9d45946a5323a87f", "level": "note", "message": {"text": "Possibly dead Python function: krex_rest_area_prices_live"}, "properties": {"repobilityId": "4932b6703e29a151", "scanner": "scanner-primary", "fingerprint": "9d45946a5323a87f", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/kor-travel-map-api/src/kortravelmap/api/etl_live.py:602"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3b545ccd345abe39", "level": "note", "message": {"text": "Possibly dead Python function: krex_rest_area_weather_live"}, "properties": {"repobilityId": "822f0c10bb73ea17", "scanner": "scanner-primary", "fingerprint": "3b545ccd345abe39", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/kor-travel-map-api/src/kortravelmap/api/etl_live.py:636"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-2d1ca0bed5711315", "level": "note", "message": {"text": "Possibly dead Python function: krex_traffic_notices_live"}, "properties": {"repobilityId": "86f8791eb4444014", "scanner": "scanner-primary", "fingerprint": "2d1ca0bed5711315", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/kor-travel-map-api/src/kortravelmap/api/etl_live.py:660"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7e0477201b239342", "level": "note", "message": {"text": "Possibly dead Python function: opinet_fuel_station_details_live"}, "properties": {"repobilityId": "a19848f0381292bc", "scanner": "scanner-primary", "fingerprint": "7e0477201b239342", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/kor-travel-map-api/src/kortravelmap/api/etl_live.py:904"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-6b43e16c28779481", "level": "note", "message": {"text": "Possibly dead Python function: opinet_gas_station_prices_live"}, "properties": {"repobilityId": "756019930c6dacc3", "scanner": "scanner-primary", "fingerprint": "6b43e16c28779481", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/kor-travel-map-api/src/kortravelmap/api/etl_live.py:930"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8db1d517acdf87c6", "level": "note", "message": {"text": "Possibly dead Python function: datagokr_cultural_festivals_live"}, "properties": {"repobilityId": "07c51819efa31b13", "scanner": "scanner-primary", "fingerprint": "8db1d517acdf87c6", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/kor-travel-map-api/src/kortravelmap/api/etl_live.py:1081"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4490dd2dfe074e48", "level": "note", "message": {"text": "Possibly dead Python function: kma_weather_alerts_live"}, "properties": {"repobilityId": "42d7744da889175e", "scanner": "scanner-primary", "fingerprint": "4490dd2dfe074e48", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/kor-travel-map-api/src/kortravelmap/api/etl_live.py:1419"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f54b8be33bb57358", "level": "note", "message": {"text": "Possibly dead Python function: do_run_migrations"}, "properties": {"repobilityId": "087acb17722cfd2f", "scanner": "scanner-primary", "fingerprint": "f54b8be33bb57358", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "alembic/env.py:71"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-8f489df6591abbc7", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "8f489df6591abbc7", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "alembic/versions/0021_user_feature_versions.py:27"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-f95ae4783af5c6e5", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "f95ae4783af5c6e5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "alembic/versions/0021_user_feature_versions.py:222"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-4aa5f982ada29736", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "4aa5f982ada29736", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "alembic/versions/0004_fix_source_links_role_check.py:53"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-d6509a6d4a8222b5", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "d6509a6d4a8222b5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "alembic/versions/0004_fix_source_links_role_check.py:58"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7ac3a0f1cf11cfc9", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "7ac3a0f1cf11cfc9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "alembic/versions/0007_feature_merge_history.py:35"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b09049496ccfc34e", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "b09049496ccfc34e", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "alembic/versions/0007_feature_merge_history.py:99"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-73ca0f1d40fd73b9", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "73ca0f1d40fd73b9", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "alembic/versions/0006_import_jobs.py:34"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-c3795a098449afcb", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "c3795a098449afcb", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "alembic/versions/0006_import_jobs.py:91"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3d73ab71952b2003", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "3d73ab71952b2003", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "alembic/versions/0017_feature_weather_values.py:25"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-232a07f7d85198ae", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "232a07f7d85198ae", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "alembic/versions/0017_feature_weather_values.py:77"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-1503b293a7c1821d", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "1503b293a7c1821d", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "alembic/versions/0018_ops_logs.py:32"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-05bfe5e6f0a35aa5", "level": "note", "message": {"text": "Possibly dead Python function: downgrade"}, "properties": {"repobilityId": "c03debbf11efa0c5", "scanner": "scanner-primary", "fingerprint": "05bfe5e6f0a35aa5", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "alembic/versions/0018_ops_logs.py:98"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-b1ade57605272736", "level": "note", "message": {"text": "Possibly dead Python function: upgrade"}, "properties": {"repobilityId": "cf0b8e5e6e2f8bc4", "scanner": "scanner-primary", "fingerprint": "b1ade57605272736", "layer": "software", "severity": "low", "confidence": 1.0, "tags": ["dead-code"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "alembic/versions/0003_feature_consistency_reports.py:31"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-7aa44176bf4eb8f1", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/admin/offline-uploads/offline-uploads-client.tsx:729"}, "properties": {"repobilityId": "05cfd6293335b386", "scanner": "scanner-primary", "fingerprint": "7aa44176bf4eb8f1", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f17790d55c06c5e5", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/admin/dagster/dagster-client.tsx:190"}, "properties": {"repobilityId": "dc1250dc22018d0c", "scanner": "scanner-primary", "fingerprint": "f17790d55c06c5e5", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-ebda190aedf35565", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/admin/features/admin-features-client.tsx:451"}, "properties": {"repobilityId": "fb0412f90f236a44", "scanner": "scanner-primary", "fingerprint": "ebda190aedf35565", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-086203058d2f7437", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/admin/features/change-requests/feature-change-requests-client.tsx:848"}, "properties": {"repobilityId": "8a11c6b307fee894", "scanner": "scanner-primary", "fingerprint": "086203058d2f7437", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-28acdeceef86f22b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/admin/feature-update-requests/feature-update-requests-client.tsx:305"}, "properties": {"repobilityId": "deca48e3afbf26df", "scanner": "scanner-primary", "fingerprint": "28acdeceef86f22b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5c221e342fd7a25e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/ops/import-jobs/import-jobs-client.tsx:188"}, "properties": {"repobilityId": "c53eb2117a2974bb", "scanner": "scanner-primary", "fingerprint": "5c221e342fd7a25e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-23765ecc79c29d75", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/app/ops/consistency/consistency-client.tsx:189"}, "properties": {"repobilityId": "b49876b36d672f63", "scanner": "scanner-primary", "fingerprint": "23765ecc79c29d75", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-faed242899c49e1b", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 packages/kor-travel-map-admin/frontend/src/components/feature-detail-view.tsx:188"}, "properties": {"repobilityId": "6fb8ad372bbd68e9", "scanner": "scanner-primary", "fingerprint": "faed242899c49e1b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-9f67c1e10b11e95b", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "6b2dc20f2c639c0b", "scanner": "scanner-primary", "fingerprint": "9f67c1e10b11e95b", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/openapi.yml"}, "region": {"startLine": 32}}}]}, {"ruleId": "scanner-266162aa2c525a31", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "647450d8a6171a97", "scanner": "scanner-primary", "fingerprint": "266162aa2c525a31", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/lint.yml"}, "region": {"startLine": 23}}}]}, {"ruleId": "scanner-548bfbab350dca45", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "8e10ec5339a44df5", "scanner": "scanner-primary", "fingerprint": "548bfbab350dca45", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/frontend.yml"}, "region": {"startLine": 30}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "04f57d208548fcef", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 33}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "bd7f3c1c34d83159", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 78}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "04f57d208548fcef", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 91}}}]}, {"ruleId": "scanner-27924aa79fa4a517", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "04f57d208548fcef", "scanner": "scanner-primary", "fingerprint": "27924aa79fa4a517", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/ci.yml"}, "region": {"startLine": 126}}}]}, {"ruleId": "scanner-341e38f4a0041b84", "level": "note", "message": {"text": "Very large file: packages/kor-travel-map-user-client/src/types.ts (2284 lines)"}, "properties": {"repobilityId": "3e0c8afa255c9304", "scanner": "scanner-primary", "fingerprint": "341e38f4a0041b84", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c3e4889a11971d32", "level": "note", "message": {"text": "Very large file: packages/kor-travel-map-api/src/kortravelmap/api/etl_live.py (1517 lines)"}, "properties": {"repobilityId": "27f35215d0f480dd", "scanner": "scanner-primary", "fingerprint": "c3e4889a11971d32", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-28e815d02fb7e1a4", "level": "note", "message": {"text": "Very large file: packages/kor-travel-map-admin/frontend/src/api/types.ts (9981 lines)"}, "properties": {"repobilityId": "a2928ca575dbdfdc", "scanner": "scanner-primary", "fingerprint": "28e815d02fb7e1a4", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-cc484835e276b9da", "level": "note", "message": {"text": "Very large file: packages/kor-travel-map-admin/frontend/e2e/admin-ops.spec.ts (1449 lines)"}, "properties": {"repobilityId": "04652471ff90419f", "scanner": "scanner-primary", "fingerprint": "cc484835e276b9da", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-a8415d9778a9807a", "level": "note", "message": {"text": "Very large file: src/kortravelmap/infra/admin_feature_repo.py (2518 lines)"}, "properties": {"repobilityId": "b32056e01381fcec", "scanner": "scanner-primary", "fingerprint": "a8415d9778a9807a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-57577255ff5de70d", "level": "note", "message": {"text": "Very large file: src/kortravelmap/infra/feature_repo.py (1907 lines)"}, "properties": {"repobilityId": "6d060573b6d0598b", "scanner": "scanner-primary", "fingerprint": "57577255ff5de70d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-c5a467bfd1203698", "level": "note", "message": {"text": "Very large file: src/kortravelmap/infra/models.py (1905 lines)"}, "properties": {"repobilityId": "a5aabbb6a33928b6", "scanner": "scanner-primary", "fingerprint": "c5a467bfd1203698", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-8d1715b34ceed120", "level": "note", "message": {"text": "Very large file: src/kortravelmap/infra/curated_repo.py (1891 lines)"}, "properties": {"repobilityId": "ff29e876d7e048ff", "scanner": "scanner-primary", "fingerprint": "8d1715b34ceed120", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-b537b035d42d73f0", "level": "note", "message": {"text": "Very large file: src/kortravelmap/client/__init__.py (1501 lines)"}, "properties": {"repobilityId": "e010f7542b1049ae", "scanner": "scanner-primary", "fingerprint": "b537b035d42d73f0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6da036af4ea26185", "level": "note", "message": {"text": "Very large file: src/kortravelmap/category/_definitions.py (2126 lines)"}, "properties": {"repobilityId": "5947d9ca2b3b4416", "scanner": "scanner-primary", "fingerprint": "6da036af4ea26185", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-6d96762d824c2ccf", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/kor-travel-map-user-client/package.json"}, "properties": {"repobilityId": "22f8497c6591556e", "scanner": "scanner-primary", "fingerprint": "6d96762d824c2ccf", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/kor-travel-map-user-client/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-e087643d847c9d4b", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/map-marker-react/package.json"}, "properties": {"repobilityId": "ae2a865cd2fded4e", "scanner": "scanner-primary", "fingerprint": "e087643d847c9d4b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/map-marker-react/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-45fe21806f9f6a3a", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: packages/kor-travel-map-admin/frontend/package.json"}, "properties": {"repobilityId": "e95001040d5a4631", "scanner": "scanner-primary", "fingerprint": "45fe21806f9f6a3a", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/kor-travel-map-admin/frontend/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "e44d7f8a28f72f9d", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-72b2a6250083a784", "level": "warning", "message": {"text": "Placeholder or mock-heavy implementation detected"}, "properties": {"repobilityId": "3f62077dce082d16", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "7885b60736e2734f", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "b4dbe32698ca12af", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-e1d3fbc30bead412", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: AGENTS.md"}, "properties": {"repobilityId": "56bfc666b358d0d0", "scanner": "scanner-primary", "fingerprint": "e1d3fbc30bead412", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "agents_md"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "AGENTS.md"}, "region": {"startLine": 164}}}]}, {"ruleId": "scanner-27e547ff01413a83", "level": "warning", "message": {"text": "Agent instruction contains unpinned remote install: SKILL.md"}, "properties": {"repobilityId": "5dc3de3f1cc99eca", "scanner": "scanner-primary", "fingerprint": "27e547ff01413a83", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "supply-chain", "skill_file"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "SKILL.md"}, "region": {"startLine": 88}}}]}, {"ruleId": "scanner-e725d2ab884fbd49", "level": "note", "message": {"text": "Multiple root agent instruction files without precedence"}, "properties": {"repobilityId": "1953db6c89508d22", "scanner": "scanner-primary", "fingerprint": "e725d2ab884fbd49", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["agent-instructions", "governance"]}}, {"ruleId": "scanner-af44cdd3d8d8aaae", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/kor-travel-map-dagster/src/kortravelmap/dagster/provider_fetchers.py:849"}, "properties": {"repobilityId": "e8d0f44f5788dabb", "scanner": "scanner-primary", "fingerprint": "af44cdd3d8d8aaae", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-44727aa3df1cb696", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/kor-travel-map-api/src/kortravelmap/api/etl_live.py:1292"}, "properties": {"repobilityId": "982a71732567cf58", "scanner": "scanner-primary", "fingerprint": "44727aa3df1cb696", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-faee880ad2c8e181", "level": "none", "message": {"text": "Commented-code block (6 lines) in packages/kor-travel-map-api/src/kortravelmap/api/app.py:373"}, "properties": {"repobilityId": "b857a30b76c12a52", "scanner": "scanner-primary", "fingerprint": "faee880ad2c8e181", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d9beab59b89973a0", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in packages/kor-travel-map-api/src/kortravelmap/api/routers/mois_detail.py:97"}, "properties": {"repobilityId": "60e11b03b5e12924", "scanner": "scanner-primary", "fingerprint": "d9beab59b89973a0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-5edb2b756d6e02c0", "level": "note", "message": {"text": "Legacy-named symbol `get_backup` in packages/kor-travel-map-api/src/kortravelmap/api/routers/admin_backups.py:327"}, "properties": {"repobilityId": "0f1429d25aa4fd97", "scanner": "scanner-primary", "fingerprint": "5edb2b756d6e02c0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-d7ea7d2f2ff784a5", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in packages/kor-travel-map-api/src/kortravelmap/api/routers/categories.py:120"}, "properties": {"repobilityId": "f79575a683668ef5", "scanner": "scanner-primary", "fingerprint": "d7ea7d2f2ff784a5", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-46485c8a8dbe05aa", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 packages/kor-travel-map-admin/frontend/src/api/client.ts:74"}, "properties": {"repobilityId": "7b9024525a610904", "scanner": "scanner-primary", "fingerprint": "46485c8a8dbe05aa", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c5d992525d759720", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in tests/unit/test_providers_visitkorea.py:211"}, "properties": {"repobilityId": "bc82e7eaf86b6f3f", "scanner": "scanner-primary", "fingerprint": "c5d992525d759720", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e403b21913c74666", "level": "note", "message": {"text": "Legacy-named symbol `krex_rest_area_v2` in tests/unit/test_ids.py:90"}, "properties": {"repobilityId": "ae7c34e090a11d3f", "scanner": "scanner-primary", "fingerprint": "e403b21913c74666", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-e48248b8ec3576f3", "level": "none", "message": {"text": "Commented-code block (5 lines) in tests/integration/conftest.py:129"}, "properties": {"repobilityId": "a6b2d216ef8536cd", "scanner": "scanner-primary", "fingerprint": "e48248b8ec3576f3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-4e18cb2f4685c60c", "level": "warning", "message": {"text": "Network/subprocess call without timeout or try/except \u2014 scripts/check_journal_update.py:34"}, "properties": {"repobilityId": "25d292ceeed7e31e", "scanner": "scanner-primary", "fingerprint": "4e18cb2f4685c60c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-ed9676e558401362", "level": "none", "message": {"text": "Commented-code block (5 lines) in alembic/env.py:37"}, "properties": {"repobilityId": "86d54f688521d373", "scanner": "scanner-primary", "fingerprint": "ed9676e558401362", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-bc777032c6a9e63f", "level": "note", "message": {"text": "Legacy-named symbol `_parse_address_v2` in src/kortravelmap/geocoding.py:614"}, "properties": {"repobilityId": "fa594577f03385fe", "scanner": "scanner-primary", "fingerprint": "bc777032c6a9e63f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-8413f2b84ef6c0fe", "level": "none", "message": {"text": "Commented-code block (12 lines) in src/kortravelmap/__init__.py:57"}, "properties": {"repobilityId": "378c93b471830133", "scanner": "scanner-primary", "fingerprint": "8413f2b84ef6c0fe", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-5a5c91f10a57049b", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/kortravelmap/providers/standard_data.py:366"}, "properties": {"repobilityId": "0db2a8166d0811ac", "scanner": "scanner-primary", "fingerprint": "5a5c91f10a57049b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9b020ecf12034878", "level": "note", "message": {"text": "Legacy-named symbol `model_copy` in src/kortravelmap/providers/krheritage.py:399"}, "properties": {"repobilityId": "bfff9dd0400e2c9f", "scanner": "scanner-primary", "fingerprint": "9b020ecf12034878", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-0580a0353cf0661f", "level": "none", "message": {"text": "Commented-code block (7 lines) in src/kortravelmap/infra/feature_repo.py:811"}, "properties": {"repobilityId": "7ef4fe757d1853e7", "scanner": "scanner-primary", "fingerprint": "0580a0353cf0661f", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1be512d7da87252e", "level": "none", "message": {"text": "Commented-code block (5 lines) in src/kortravelmap/infra/consistency.py:79"}, "properties": {"repobilityId": "313109df1fa0aa7a", "scanner": "scanner-primary", "fingerprint": "1be512d7da87252e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-2d70b4dad90526e7", "level": "none", "message": {"text": "Commented-code block (6 lines) in src/kortravelmap/dto/feature.py:53"}, "properties": {"repobilityId": "6cc737e906a3eab9", "scanner": "scanner-primary", "fingerprint": "2d70b4dad90526e7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8e047ab7af03962f", "level": "note", "message": {"text": "7 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "5a0455f6498c27ad", "scanner": "scanner-primary", "fingerprint": "8e047ab7af03962f", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "42080a2445508dfd", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "2ab11d07eb0f2c2d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "8e94b83d66b94d07", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "22baab8651322d66", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "1e37e22a456d93ce", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-be46ea126aa5d8dc", "level": "note", "message": {"text": "Near-duplicate function bodies in 3 places"}, "properties": {"repobilityId": "cb007cb0d59f2913", "scanner": "scanner-primary", "fingerprint": "be46ea126aa5d8dc", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "6160049429785d6e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "915db81275df51ae", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "9b765a48ef77fff3", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "a95bfb1a9ab53251", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "87f98c978f426c40", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "549d2a976da0139d", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "f51ba16df30444f9", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "2938632005493fc8", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "c2cefc1f09fc6b1e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "33f04cc151330722", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-49c98f7cedd9c977", "level": "note", "message": {"text": "Near-duplicate function bodies in 4 places"}, "properties": {"repobilityId": "e2f51c68be4bb5d8", "scanner": "scanner-primary", "fingerprint": "49c98f7cedd9c977", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "e4699942546282bf", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "3caf0a34c097b74e", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-2c04133e54348533", "level": "note", "message": {"text": "Near-duplicate function bodies in 2 places"}, "properties": {"repobilityId": "58dcc015e058ed14", "scanner": "scanner-primary", "fingerprint": "2c04133e54348533", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "duplicate", "dry"]}}, {"ruleId": "scanner-1039d2783e523805", "level": "error", "message": {"text": "FastAPI POST `mark_dagster_nux_seen` without auth dependency \u2014 packages/kor-travel-map-api/src/kortravelmap/api/routers/dagster.py:973"}, "properties": {"repobilityId": "244c05f5432157cb", "scanner": "scanner-primary", "fingerprint": "1039d2783e523805", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/kor-travel-map-api/src/kortravelmap/api/routers/dagster.py"}, "region": {"startLine": 973}}}]}, {"ruleId": "scanner-e98b630e078b09c5", "level": "error", "message": {"text": "FastAPI POST `<anonymous>` without auth dependency \u2014 packages/kor-travel-map-api/src/kortravelmap/api/routers/etl.py:208"}, "properties": {"repobilityId": "bdb3978f198d7eda", "scanner": "scanner-primary", "fingerprint": "e98b630e078b09c5", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/kor-travel-map-api/src/kortravelmap/api/routers/etl.py"}, "region": {"startLine": 208}}}]}, {"ruleId": "scanner-e2655138a817a03b", "level": "error", "message": {"text": "FastAPI POST `<anonymous>` without auth dependency \u2014 packages/kor-travel-map-api/src/kortravelmap/api/routers/feature_update_requests.py:529"}, "properties": {"repobilityId": "414c1a5891d21d46", "scanner": "scanner-primary", "fingerprint": "e2655138a817a03b", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/kor-travel-map-api/src/kortravelmap/api/routers/feature_update_requests.py"}, "region": {"startLine": 529}}}]}, {"ruleId": "scanner-d4d31a94e26e5ec8", "level": "error", "message": {"text": "FastAPI POST `validate_offline_upload_request` without auth dependency \u2014 packages/kor-travel-map-api/src/kortravelmap/api/routers/offline_uploads.py:1035"}, "properties": {"repobilityId": "e851ee0ba32071e2", "scanner": "scanner-primary", "fingerprint": "d4d31a94e26e5ec8", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/kor-travel-map-api/src/kortravelmap/api/routers/offline_uploads.py"}, "region": {"startLine": 1035}}}]}, {"ruleId": "scanner-b3dd9c5318ded07a", "level": "error", "message": {"text": "FastAPI POST `load_offline_upload_request` without auth dependency \u2014 packages/kor-travel-map-api/src/kortravelmap/api/routers/offline_uploads.py:1169"}, "properties": {"repobilityId": "ef1f8f2e8fc0d4ed", "scanner": "scanner-primary", "fingerprint": "b3dd9c5318ded07a", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/kor-travel-map-api/src/kortravelmap/api/routers/offline_uploads.py"}, "region": {"startLine": 1169}}}]}, {"ruleId": "scanner-f4a840f6a4e21502", "level": "error", "message": {"text": "FastAPI POST `create_backup` without auth dependency \u2014 packages/kor-travel-map-api/src/kortravelmap/api/routers/admin_backups.py:345"}, "properties": {"repobilityId": "3db3f1e53e36b3a2", "scanner": "scanner-primary", "fingerprint": "f4a840f6a4e21502", "layer": "security", "severity": "high", "confidence": 1.0, "tags": ["auth", "owasp", "auth.fastapi.unauth_mutation"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "packages/kor-travel-map-api/src/kortravelmap/api/routers/admin_backups.py"}, "region": {"startLine": 345}}}]}]}]}