{"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-bead75b0f9233e05", "name": "No API endpoints detected", "shortDescription": {"text": "No API endpoints detected"}, "fullDescription": {"text": "The scanner did not find FastAPI/Flask/Express/NestJS/GraphQL/gRPC routes. If this repo exposes APIs, the framework may be unsupported."}, "properties": {"scanner": "scanner-primary", "layer": "api", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e38a5fec1ed512f1", "name": "Stray `console.log` in TS/JS \u2014 test/operations-dashboard-link.static.test.js:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/operations-dashboard-link.static.test.js:88"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8748c3c35f3295e0", "name": "Stray `console.log` in TS/JS \u2014 test/confirm-request-equipment-inherit.test.js:138", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/confirm-request-equipment-inherit.test.js:138"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-834d98342fad50f9", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-payment-sheet-options.static.test.js:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-payment-sheet-options.static.test.js:66"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-367f6c0ef27f2efe", "name": "Stray `console.log` in TS/JS \u2014 test/my-reservation-page.static.test.js:109", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/my-reservation-page.static.test.js:109"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cae1582c360f8531", "name": "Stray `console.log` in TS/JS \u2014 test/toss-front-idle-background.static.test.js:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/toss-front-idle-background.static.test.js:74"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ba7823739f80b033", "name": "Stray `console.log` in TS/JS \u2014 test/contract-status-dropdown.static.test.js:53", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/contract-status-dropdown.static.test.js:53"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-6870ef8cc3b8e6a7", "name": "Stray `console.log` in TS/JS \u2014 test/confirm-request-clear-r-column.static.test.js:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/confirm-request-clear-r-column.static.test.js:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f1b6d49b6e30fcf8", "name": "Stray `console.log` in TS/JS \u2014 test/contract-cancel-return-guard.static.test.js:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/contract-cancel-return-guard.static.test.js:54"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b0ff249d7ed5b0bc", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-empty-equipment-root-cause.static.test.js:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-empty-equipment-root-cause.static.test.js:59"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-70d67813827441d7", "name": "Stray `console.log` in TS/JS \u2014 test/confirm-request-set-components.test.js:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/confirm-request-set-components.test.js:70"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0d9456c2fb7fef8a", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-contract-detail-repair.static.test.js:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-contract-detail-repair.static.test.js:33"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b84bae424d0c02d9", "name": "Stray `console.log` in TS/JS \u2014 test/dashboard-equipment-realtime.static.test.js:575", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-equipment-realtime.static.test.js:575"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2b2af4eb6f0b5f49", "name": "Stray `console.log` in TS/JS \u2014 test/confirm-request-visual-speed.static.test.js:76", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/confirm-request-visual-speed.static.test.js:76"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c2a956fa3d2774ec", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-timeline-summary-dedupe.test.js:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-timeline-summary-dedupe.test.js:64"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-b5d90385740eeabd", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-dedupe-set-header.static.test.js:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-dedupe-set-header.static.test.js:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e05aefa48e7ab4dd", "name": "Stray `console.log` in TS/JS \u2014 test/contract-discount-policy.static.test.js:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/contract-discount-policy.static.test.js:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c485274c76f60fb3", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-kakao-reservation-entry.static.test.js:62", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-kakao-reservation-entry.static.test.js:62"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ba48297c2c38388d", "name": "Stray `console.log` in TS/JS \u2014 test/toss-front-clasp-ignore.static.test.js:13", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/toss-front-clasp-ignore.static.test.js:13"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0b6f026c921ba8b2", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-statement-send.static.test.js:56", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-statement-send.static.test.js:56"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ee0e0226cbaed9d8", "name": "Stray `console.log` in TS/JS \u2014 test/dashboard-attention-filter.static.test.js:98", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-attention-filter.static.test.js:98"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5a364cfa99067686", "name": "Stray `console.log` in TS/JS \u2014 test/dashboard-billing-company.static.test.js:153", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-billing-company.static.test.js:153"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-499c5bec9e8f569b", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-proof-issue-request.static.test.js:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-proof-issue-request.static.test.js:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c8d00bdc056e30a0", "name": "Stray `console.log` in TS/JS \u2014 test/dashboard-done-timestamp.static.test.js:41", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-done-timestamp.static.test.js:41"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-36ee11fb1ac2d500", "name": "Stray `console.log` in TS/JS \u2014 test/dashboard-component-remove.static.test.js:47", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-component-remove.static.test.js:47"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-af20f295769bb7ab", "name": "Stray `console.log` in TS/JS \u2014 test/dashboard-single-item-highlight.static.test.js:28", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-single-item-highlight.static.test.js:28"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f310cc7a5421cd56", "name": "Stray `console.log` in TS/JS \u2014 test/dashboard-photo-performance.static.test.js:37", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-photo-performance.static.test.js:37"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0e355a3ade6ef790", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-set-header-controls.static.test.js:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-set-header-controls.static.test.js:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-baac171a09eb4be5", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-contract-regenerate-action.static.test.js:66", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-contract-regenerate-action.static.test.js:66"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c0ddb8d9b3751017", "name": "Stray `console.log` in TS/JS \u2014 test/timeline-performance.static.test.js:409", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/timeline-performance.static.test.js:409"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fa8bf85a66535e32", "name": "Stray `console.log` in TS/JS \u2014 test/dashboard-photo.static.test.js:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-photo.static.test.js:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-69d0444feb9d7e28", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-onsite-sheet-writeback.static.test.js:82", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-onsite-sheet-writeback.static.test.js:82"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-35ae155b39c0c62e", "name": "Stray `console.log` in TS/JS \u2014 test/dashboard-cancel.static.test.js:72", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-cancel.static.test.js:72"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-ee7f636649bff616", "name": "Stray `console.log` in TS/JS \u2014 test/toss-front-settings-entry.static.test.js:42", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/toss-front-settings-entry.static.test.js:42"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-2d9b5c4af61ef9a7", "name": "Stray `console.log` in TS/JS \u2014 test/toss-front-manual-amount.static.test.js:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/toss-front-manual-amount.static.test.js:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-52bb233500bc2899", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-timeline-photo.static.test.js:131", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-timeline-photo.static.test.js:131"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d1c2763b5d715add", "name": "Stray `console.log` in TS/JS \u2014 test/schedule-detail-set-name.static.test.js:50", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/schedule-detail-set-name.static.test.js:50"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-cec8e01fde8ca742", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-master-catalog-dropdown.static.test.js:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-master-catalog-dropdown.static.test.js:52"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0cb9753286ca3e48", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-login-redesign.static.test.js:57", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-login-redesign.static.test.js:57"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-efbdfdc2a58da46b", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-check-flicker.static.test.js:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-check-flicker.static.test.js:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0a0246e6ca134b71", "name": "Stray `console.log` in TS/JS \u2014 test/confirm-register-sync.static.test.js:59", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/confirm-register-sync.static.test.js:59"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a3ab1ad93a80464e", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-edit-booked-equipment.static.test.js:92", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-edit-booked-equipment.static.test.js:92"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-fb2285547c1ae70b", "name": "Stray `console.log` in TS/JS \u2014 test/confirm-request-recheck.static.test.js:85", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/confirm-request-recheck.static.test.js:85"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1b86dbbb242b869a", "name": "Stray `console.log` in TS/JS \u2014 test/schedule-detail-visual-grouping.static.test.js:87", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/schedule-detail-visual-grouping.static.test.js:87"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-88bed42532427c9d", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-dropdown-portal.static.test.js:30", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-dropdown-portal.static.test.js:30"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-e698abde3fd0ae21", "name": "Stray `console.log` in TS/JS \u2014 test/kakao-dom-noise-guards.static.test.js:367", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/kakao-dom-noise-guards.static.test.js:367"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a0f4c267a7211330", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-header-logo.static.test.js:61", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-header-logo.static.test.js:61"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-d950b2f47e144620", "name": "Stray `console.log` in TS/JS \u2014 test/onsite-addon-dashboard.static.test.js:54", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/onsite-addon-dashboard.static.test.js:54"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-31475e5697fe4c63", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-onsite-dedupe.static.test.js:63", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-onsite-dedupe.static.test.js:63"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-5fefbdb6b2e4e575", "name": "Stray `console.log` in TS/JS \u2014 test/workflow-guard.static.test.js:88", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/workflow-guard.static.test.js:88"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-707f1e0c6f99864a", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-search-events.static.test.js:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-search-events.static.test.js:68"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a2b4bcb3849ba63c", "name": "Stray `console.log` in TS/JS \u2014 test/dashboard-performance.static.test.js:321", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-performance.static.test.js:321"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-1cda1731b8bb2f30", "name": "Stray `console.log` in TS/JS \u2014 test/dashboard-global-search.static.test.js:437", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-global-search.static.test.js:437"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-f86d89910cb5f3d8", "name": "Stray `console.log` in TS/JS \u2014 test/equipment-risk-dashboard.static.test.js:228", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/equipment-risk-dashboard.static.test.js:228"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-45521bbfeb609706", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-fetch-pagination.static.test.js:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-fetch-pagination.static.test.js:32"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-617e3c3d4b776afb", "name": "Stray `console.log` in TS/JS \u2014 test/dashboard-deposit-status.static.test.js:86", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-deposit-status.static.test.js:86"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c07254d1d191aa6c", "name": "Stray `console.log` in TS/JS \u2014 test/dashboard-trade-extras-cache.static.test.js:74", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-trade-extras-cache.static.test.js:74"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-575cf23c10021b77", "name": "Stray `console.log` in TS/JS \u2014 test/dashboard-return-status-options.static.test.js:36", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-return-status-options.static.test.js:36"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c7c49fc2c3892a81", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-no-prune-persist.static.test.js:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-no-prune-persist.static.test.js:33"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-c031572343b0f775", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-stale-equipment-repair.static.test.js:52", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-stale-equipment-repair.static.test.js:52"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-a5193de5765b02d1", "name": "Stray `console.log` in TS/JS \u2014 test/toss-front-idle-recovery.static.test.js:43", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/toss-front-idle-recovery.static.test.js:43"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-46ee4892c62b0b72", "name": "Stray `console.log` in TS/JS \u2014 test/toss-front-lookup-cors.static.test.js:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/toss-front-lookup-cors.static.test.js:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-0d98ba2b7fd88542", "name": "Stray `console.log` in TS/JS \u2014 test/contract-master-discount-regen.static.test.js:45", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/contract-master-discount-regen.static.test.js:45"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-bd23351e31d6ad6c", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-missing-equipment-repair.static.test.js:85", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-missing-equipment-repair.static.test.js:85"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-31207f1c0144c263", "name": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-return-set-header-controls.static.test.js:64", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-return-set-header-controls.static.test.js:64"}, "fullDescription": {"text": "Replace with the toast helper, an error boundary, or remove. `console.warn` / `console.error` are acceptable.\n\nWhy: Hygiene \u2014 easy to leak debug output.\nRule id: fq.console-leak"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-4f40e04094a3296e", "name": "Icon-only button without accessible name \u2014 apps/today-dashboard/components/SetBox.tsx:18", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/today-dashboard/components/SetBox.tsx:18"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-9ef10ea3664c9ebf", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/SetBox.tsx:16", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/SetBox.tsx:16"}, "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-fc1a773d0878f72e", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/FollowUpView.tsx:431", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/FollowUpView.tsx:431"}, "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-5e9f43e2ae90ac1f", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/KakaoReservationInput.tsx:378", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/KakaoReservationInput.tsx:378"}, "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-cc72eb623c72164c", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/ReturnChecklist.tsx:263", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/ReturnChecklist.tsx:263"}, "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-a899a6f6ea4d3485", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/HandoverChecklist.tsx:441", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/HandoverChecklist.tsx:441"}, "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-a94aa0c3499fc1f3", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/VillageTimeline.tsx:271", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/VillageTimeline.tsx:271"}, "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-72f5a21d48b66247", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/SideRail.tsx:29", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/SideRail.tsx:29"}, "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-807b43fe3d3dc8fd", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/OperationsView.tsx:269", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/OperationsView.tsx:269"}, "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-eb7d0dfe40152256", "name": "Icon-only button without accessible name \u2014 apps/today-dashboard/components/ConfirmView.tsx:527", "shortDescription": {"text": "Icon-only button without accessible name \u2014 apps/today-dashboard/components/ConfirmView.tsx:527"}, "fullDescription": {"text": "A `<button>` whose only child is a single glyph or symbol needs `title=` or `aria-label=` so screen readers (and tooltips on hover) work.\n\nWhy: P3 in CHECKLIST.md \u2014 icon-only buttons skipped a title.\nRule id: fq.button.no-label"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "low", "confidence": 1.0}}, {"id": "scanner-7de332ee37937b50", "name": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/ConfirmView.tsx:386", "shortDescription": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/ConfirmView.tsx:386"}, "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-f7791e86e4aea52b", "name": "TODO/FIXME marker in shipping code \u2014 apps/today-dashboard/app/api/lookup/route.ts:149", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 apps/today-dashboard/app/api/lookup/route.ts:149"}, "fullDescription": {"text": "Track in /reviews or /issues, not as a code comment that rots.\n\nWhy: Drift control \u2014 shouldn't be the same as Quality TODO scanner.\nRule id: fq.todo-marker"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-68bde51bb1dda390", "name": "Insecure pattern 'direct_innerhtml_assignment' in requestManage.html:397", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in requestManage.html:397"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7b3202b93661cb7e", "name": "Insecure pattern 'direct_innerhtml_assignment' in dashboard.html:1744", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in dashboard.html:1744"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b225396da824b524", "name": "Insecure pattern 'direct_outerhtml_assignment' in dashboard.html:3133", "shortDescription": {"text": "Insecure pattern 'direct_outerhtml_assignment' in dashboard.html:3133"}, "fullDescription": {"text": "Found a known-risky pattern (direct_outerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-984e43eb86f69f10", "name": "Insecure pattern 'weak_hash' in checkAvailability.js:5153", "shortDescription": {"text": "Insecure pattern 'weak_hash' in checkAvailability.js:5153"}, "fullDescription": {"text": "Found a known-risky pattern (weak_hash). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-8a671c29e29b28e6", "name": "Insecure pattern 'direct_innerhtml_assignment' in timelineMobile.html:767", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in timelineMobile.html:767"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-426e2038e41ec312", "name": "Insecure pattern 'direct_innerhtml_assignment' in timeline.html:945", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in timeline.html:945"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-37f8757771ecacbb", "name": "Insecure pattern 'direct_innerhtml_assignment' in toss-front-plugin/village-front/app.js:124", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in toss-front-plugin/village-front/app.js:124"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-888c920eeb1e8fa1", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/follow-up-dashboard/operations.html:1021", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/follow-up-dashboard/operations.html:1021"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-c7492f8412bd360a", "name": "Insecure pattern 'direct_innerhtml_assignment' in apps/follow-up-dashboard/index.html:1200", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/follow-up-dashboard/index.html:1200"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-edf93306262a80f3", "name": "Insecure pattern 'cors_wildcard' in apps/today-dashboard/app/api/lookup/route.ts:29", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in apps/today-dashboard/app/api/lookup/route.ts:29"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-f6944abfdb926b01", "name": "Insecure pattern 'cors_wildcard' in apps/today-dashboard/app/api/lookup/confirm/route.ts:36", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in apps/today-dashboard/app/api/lookup/confirm/route.ts:36"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-7eaa738f40ba85f1", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/manage.html:397", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/manage.html:397"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-34c1cdce91da949c", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/dashboard.html:1901", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/dashboard.html:1901"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-54858be9799d4b50", "name": "Insecure pattern 'direct_outerhtml_assignment' in docs/dashboard.html:3959", "shortDescription": {"text": "Insecure pattern 'direct_outerhtml_assignment' in docs/dashboard.html:3959"}, "fullDescription": {"text": "Found a known-risky pattern (direct_outerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-9e6024e493bbe2ef", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/request.html:788", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/request.html:788"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-92042de7a721fe87", "name": "Insecure pattern 'direct_innerhtml_assignment' in docs/timeline.html:1526", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/timeline.html:1526"}, "fullDescription": {"text": "Found a known-risky pattern (direct_innerhtml_assignment). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a30dfaf21146dd66", "name": "Insecure pattern 'node_child_process' in tools/ai-browser-worker/worker.mjs:4", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/ai-browser-worker/worker.mjs:4"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-eb6e302d2660dd96", "name": "Insecure pattern 'node_child_process' in tools/kakao-dom-bridge/server.mjs:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in tools/kakao-dom-bridge/server.mjs:5"}, "fullDescription": {"text": "Found a known-risky pattern (node_child_process). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-610ca2db53b19776", "name": "Insecure pattern 'cors_wildcard' in tools/kakao-dom-bridge/server.mjs:83", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in tools/kakao-dom-bridge/server.mjs:83"}, "fullDescription": {"text": "Found a known-risky pattern (cors_wildcard). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-0820bc18a2c75c98", "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-ec3ebf19fc861a79", "name": "Very large file: Code.js (1520 lines)", "shortDescription": {"text": "Very large file: Code.js (1520 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-f62e2b9b8674b82e", "name": "Very large file: checkAvailability.js (10758 lines)", "shortDescription": {"text": "Very large file: checkAvailability.js (10758 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-1b5839df7e21ea8c", "name": "Very large file: generatecontract.js (1274 lines)", "shortDescription": {"text": "Very large file: generatecontract.js (1274 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-abfe130d11da5c2e", "name": "Very large file: sheetAPI.js (1586 lines)", "shortDescription": {"text": "Very large file: sheetAPI.js (1586 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-072f865ebb464277", "name": "Very large file: tools/ai-browser-worker/worker.test.mjs (2100 lines)", "shortDescription": {"text": "Very large file: tools/ai-browser-worker/worker.test.mjs (2100 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-94b4c89a4f525b6d", "name": "Very large file: tools/ai-browser-worker/worker.mjs (3349 lines)", "shortDescription": {"text": "Very large file: tools/ai-browser-worker/worker.mjs (3349 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-20bbf6c8e4dce2ac", "name": "Very large file: tools/kakao-dom-bridge/server.mjs (1726 lines)", "shortDescription": {"text": "Very large file: tools/kakao-dom-bridge/server.mjs (1726 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-141b30a41e03817b", "name": "No license file detected", "shortDescription": {"text": "No license file detected"}, "fullDescription": {"text": "No LICENSE/COPYING/NOTICE file was found. Generated repositories often omit licensing, which blocks reuse and automated intake."}, "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 7 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 46 placeholder/mock markers across 12 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-9d79c4077342a7d0", "name": "Runtime service client appears to use placeholder configuration", "shortDescription": {"text": "Runtime service client appears to use placeholder configuration"}, "fullDescription": {"text": "A runtime source file appears to wire Supabase/Firebase/AI/payment-style clients to placeholder URLs, keys, or fallback values. In the Fable corpus this often means the UI/API shape is present while the backend service is not actually configured."}, "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 license. 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-ea8f3013f588db25", "name": "Shallow git history limits provenance confidence", "shortDescription": {"text": "Shallow git history limits provenance confidence"}, "fullDescription": {"text": "The repository is a shallow clone. Origin/evolution analysis cannot distinguish fresh generation, imported legacy code, or long-lived human code with high confidence."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-8424db9c75e04ba4", "name": "Very short observed git history", "shortDescription": {"text": "Very short observed git history"}, "fullDescription": {"text": "The repo has multiple source files but two or fewer visible commits. This is not a failure by itself, but it lowers confidence in evolution-based diagnosis."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "info", "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-1a2fce94e12d669d", "name": "Legacy-named symbol `contractRegenTriggerScheduledAt_v1` in Code.js:1075", "shortDescription": {"text": "Legacy-named symbol `contractRegenTriggerScheduledAt_v1` in Code.js:1075"}, "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-205a172a4fd36f5e", "name": "Commented-code block (5 lines) in Code.js:1177", "shortDescription": {"text": "Commented-code block (5 lines) in Code.js:1177"}, "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-621c29e357e2376c", "name": "Legacy-named symbol `timelineCacheVersion_v1` in checkAvailability.js:86", "shortDescription": {"text": "Legacy-named symbol `timelineCacheVersion_v1` in checkAvailability.js:86"}, "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-4a75a330f3b7f7d8", "name": "Commented-code block (7 lines) in checkAvailability.js:9400", "shortDescription": {"text": "Commented-code block (7 lines) in checkAvailability.js:9400"}, "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-aa7ae1c9ac17d584", "name": "`fetch()` without try/.catch or AbortSignal \u2014 checkAvailability.js:9341", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 checkAvailability.js:9341"}, "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-add05eac9c3fbdb7", "name": "Commented-code block (11 lines) in generatecontract.js:307", "shortDescription": {"text": "Commented-code block (11 lines) in generatecontract.js:307"}, "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-1bf7dc09369d90fe", "name": "`fetch()` without try/.catch or AbortSignal \u2014 supabaseSync.js:26", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabaseSync.js:26"}, "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-c79b26991a1c2293", "name": "Legacy-named symbol `idle__copy` in toss-front-plugin/village-front/app.js:136", "shortDescription": {"text": "Legacy-named symbol `idle__copy` in toss-front-plugin/village-front/app.js:136"}, "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-bd1a489c582154f8", "name": "`fetch()` without try/.catch or AbortSignal \u2014 toss-front-plugin/village-front/app.js:199", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 toss-front-plugin/village-front/app.js:199"}, "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-f4008fa6fda08d83", "name": "Legacy-named symbol `dashboardEquipNames_v1` in test/dashboard-equipment-realtime.static.test.js:516", "shortDescription": {"text": "Legacy-named symbol `dashboardEquipNames_v1` in test/dashboard-equipment-realtime.static.test.js:516"}, "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-a97103c25ff1a96d", "name": "Legacy-named symbol `timeline_stock_map_v1` in test/timeline-performance.static.test.js:352", "shortDescription": {"text": "Legacy-named symbol `timeline_stock_map_v1` in test/timeline-performance.static.test.js:352"}, "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-41b19316c4266e05", "name": "Legacy-named symbol `dashboard_equipment_risk_rules_v1` in test/dashboard-trade-extras-cache.static.test.js:70", "shortDescription": {"text": "Legacy-named symbol `dashboard_equipment_risk_rules_v1` in test/dashboard-trade-extras-cache.static.test.js:70"}, "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-69e087d64d11ac59", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/today-dashboard/components/FollowUpView.tsx:218", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/today-dashboard/components/FollowUpView.tsx:218"}, "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-911bcf4603f9edd5", "name": "`fetch()` without try/.catch or AbortSignal \u2014 apps/today-dashboard/lib/server/gasPublic.ts:13", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/today-dashboard/lib/server/gasPublic.ts:13"}, "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-4d223bfdf539b12d", "name": "42 env vars used in code but missing from .env.example", "shortDescription": {"text": "42 env vars used in code but missing from .env.example"}, "fullDescription": {"text": "Drift between code and config docs. The first few: `AI_WORKER_AUTO_SEND`, `AI_WORKER_AUTO_SEND_LOG`, `AI_WORKER_AUTO_SEND_TIMEOUT_MS`, `AI_WORKER_DRY_RUN`, `AI_WORKER_LIVE`, `CHAT_LIST_FIRST_ROW_MAX_TOP`, `CUA_DRIVER_COMMAND`, `DASHBOARD_TOKEN` + 34 more. 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}}]}}, "automationDetails": {"id": "repobility/22241"}, "properties": {"repository": "village6k-cpu/my-gas-project2", "repoUrl": "https://github.com/village6k-cpu/my-gas-project2", "branch": "main"}, "results": [{"ruleId": "scanner-bead75b0f9233e05", "level": "none", "message": {"text": "No API endpoints detected"}, "properties": {"repobilityId": "0f8bb852027c38f8", "scanner": "scanner-primary", "fingerprint": "bead75b0f9233e05", "layer": "api", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-e38a5fec1ed512f1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/operations-dashboard-link.static.test.js:88"}, "properties": {"repobilityId": "c6830bd79ff2e93a", "scanner": "scanner-primary", "fingerprint": "e38a5fec1ed512f1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8748c3c35f3295e0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/confirm-request-equipment-inherit.test.js:138"}, "properties": {"repobilityId": "cd332db097e18676", "scanner": "scanner-primary", "fingerprint": "8748c3c35f3295e0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-834d98342fad50f9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-payment-sheet-options.static.test.js:66"}, "properties": {"repobilityId": "eacd2e69962c426b", "scanner": "scanner-primary", "fingerprint": "834d98342fad50f9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-367f6c0ef27f2efe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/my-reservation-page.static.test.js:109"}, "properties": {"repobilityId": "f6c209287fb54c8f", "scanner": "scanner-primary", "fingerprint": "367f6c0ef27f2efe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cae1582c360f8531", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/toss-front-idle-background.static.test.js:74"}, "properties": {"repobilityId": "297db9d683cb60b7", "scanner": "scanner-primary", "fingerprint": "cae1582c360f8531", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ba7823739f80b033", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/contract-status-dropdown.static.test.js:53"}, "properties": {"repobilityId": "150f9e44a14ff2a3", "scanner": "scanner-primary", "fingerprint": "ba7823739f80b033", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-6870ef8cc3b8e6a7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/confirm-request-clear-r-column.static.test.js:28"}, "properties": {"repobilityId": "a3bdffdf70e72cc0", "scanner": "scanner-primary", "fingerprint": "6870ef8cc3b8e6a7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f1b6d49b6e30fcf8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/contract-cancel-return-guard.static.test.js:54"}, "properties": {"repobilityId": "72c80db4d94e8eec", "scanner": "scanner-primary", "fingerprint": "f1b6d49b6e30fcf8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b0ff249d7ed5b0bc", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-empty-equipment-root-cause.static.test.js:59"}, "properties": {"repobilityId": "0d1c4bca0c4e6982", "scanner": "scanner-primary", "fingerprint": "b0ff249d7ed5b0bc", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-70d67813827441d7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/confirm-request-set-components.test.js:70"}, "properties": {"repobilityId": "baefb9886d83cd44", "scanner": "scanner-primary", "fingerprint": "70d67813827441d7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0d9456c2fb7fef8a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-contract-detail-repair.static.test.js:33"}, "properties": {"repobilityId": "219e11d1850edce1", "scanner": "scanner-primary", "fingerprint": "0d9456c2fb7fef8a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b84bae424d0c02d9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-equipment-realtime.static.test.js:575"}, "properties": {"repobilityId": "80a9b4cba0c0a0ac", "scanner": "scanner-primary", "fingerprint": "b84bae424d0c02d9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2b2af4eb6f0b5f49", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/confirm-request-visual-speed.static.test.js:76"}, "properties": {"repobilityId": "180211c984eb0e40", "scanner": "scanner-primary", "fingerprint": "2b2af4eb6f0b5f49", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c2a956fa3d2774ec", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-timeline-summary-dedupe.test.js:64"}, "properties": {"repobilityId": "2d5ef9cda7f900e1", "scanner": "scanner-primary", "fingerprint": "c2a956fa3d2774ec", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-b5d90385740eeabd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-dedupe-set-header.static.test.js:45"}, "properties": {"repobilityId": "a78bd20eea623e3f", "scanner": "scanner-primary", "fingerprint": "b5d90385740eeabd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e05aefa48e7ab4dd", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/contract-discount-policy.static.test.js:43"}, "properties": {"repobilityId": "b665ac76a422ac73", "scanner": "scanner-primary", "fingerprint": "e05aefa48e7ab4dd", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c485274c76f60fb3", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-kakao-reservation-entry.static.test.js:62"}, "properties": {"repobilityId": "79122947a0c78ab3", "scanner": "scanner-primary", "fingerprint": "c485274c76f60fb3", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ba48297c2c38388d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/toss-front-clasp-ignore.static.test.js:13"}, "properties": {"repobilityId": "25693a7abb993586", "scanner": "scanner-primary", "fingerprint": "ba48297c2c38388d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0b6f026c921ba8b2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-statement-send.static.test.js:56"}, "properties": {"repobilityId": "fe0d8750e709493c", "scanner": "scanner-primary", "fingerprint": "0b6f026c921ba8b2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ee0e0226cbaed9d8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-attention-filter.static.test.js:98"}, "properties": {"repobilityId": "1b08368ae3fac583", "scanner": "scanner-primary", "fingerprint": "ee0e0226cbaed9d8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5a364cfa99067686", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-billing-company.static.test.js:153"}, "properties": {"repobilityId": "4f332fecb6b6c87e", "scanner": "scanner-primary", "fingerprint": "5a364cfa99067686", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-499c5bec9e8f569b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-proof-issue-request.static.test.js:42"}, "properties": {"repobilityId": "44449dd6584cd3a0", "scanner": "scanner-primary", "fingerprint": "499c5bec9e8f569b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c8d00bdc056e30a0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-done-timestamp.static.test.js:41"}, "properties": {"repobilityId": "f630a42db146026e", "scanner": "scanner-primary", "fingerprint": "c8d00bdc056e30a0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-36ee11fb1ac2d500", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-component-remove.static.test.js:47"}, "properties": {"repobilityId": "73001be8e3770cd3", "scanner": "scanner-primary", "fingerprint": "36ee11fb1ac2d500", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-af20f295769bb7ab", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-single-item-highlight.static.test.js:28"}, "properties": {"repobilityId": "88129e720387f2dd", "scanner": "scanner-primary", "fingerprint": "af20f295769bb7ab", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f310cc7a5421cd56", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-photo-performance.static.test.js:37"}, "properties": {"repobilityId": "dcaa7f04932c3aab", "scanner": "scanner-primary", "fingerprint": "f310cc7a5421cd56", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0e355a3ade6ef790", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-set-header-controls.static.test.js:45"}, "properties": {"repobilityId": "dad5278d797b4fad", "scanner": "scanner-primary", "fingerprint": "0e355a3ade6ef790", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-baac171a09eb4be5", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-contract-regenerate-action.static.test.js:66"}, "properties": {"repobilityId": "715487a38dfb290d", "scanner": "scanner-primary", "fingerprint": "baac171a09eb4be5", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c0ddb8d9b3751017", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/timeline-performance.static.test.js:409"}, "properties": {"repobilityId": "ab2d7e46da043974", "scanner": "scanner-primary", "fingerprint": "c0ddb8d9b3751017", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fa8bf85a66535e32", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-photo.static.test.js:42"}, "properties": {"repobilityId": "744fea475bdb14d3", "scanner": "scanner-primary", "fingerprint": "fa8bf85a66535e32", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-69d0444feb9d7e28", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-onsite-sheet-writeback.static.test.js:82"}, "properties": {"repobilityId": "55aac6e7473eafd3", "scanner": "scanner-primary", "fingerprint": "69d0444feb9d7e28", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-35ae155b39c0c62e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-cancel.static.test.js:72"}, "properties": {"repobilityId": "725369d17f5586bd", "scanner": "scanner-primary", "fingerprint": "35ae155b39c0c62e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ee7f636649bff616", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/toss-front-settings-entry.static.test.js:42"}, "properties": {"repobilityId": "bdc72b738d685816", "scanner": "scanner-primary", "fingerprint": "ee7f636649bff616", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-2d9b5c4af61ef9a7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/toss-front-manual-amount.static.test.js:30"}, "properties": {"repobilityId": "a306244533223d2a", "scanner": "scanner-primary", "fingerprint": "2d9b5c4af61ef9a7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-52bb233500bc2899", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-timeline-photo.static.test.js:131"}, "properties": {"repobilityId": "ac205a37afc9f613", "scanner": "scanner-primary", "fingerprint": "52bb233500bc2899", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d1c2763b5d715add", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/schedule-detail-set-name.static.test.js:50"}, "properties": {"repobilityId": "5df9ce90f552c41d", "scanner": "scanner-primary", "fingerprint": "d1c2763b5d715add", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cec8e01fde8ca742", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-master-catalog-dropdown.static.test.js:52"}, "properties": {"repobilityId": "58ba60967910cafa", "scanner": "scanner-primary", "fingerprint": "cec8e01fde8ca742", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0cb9753286ca3e48", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-login-redesign.static.test.js:57"}, "properties": {"repobilityId": "2dbdae3462b6f31e", "scanner": "scanner-primary", "fingerprint": "0cb9753286ca3e48", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-efbdfdc2a58da46b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-check-flicker.static.test.js:43"}, "properties": {"repobilityId": "f7ad7a4fa9aa6fe7", "scanner": "scanner-primary", "fingerprint": "efbdfdc2a58da46b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0a0246e6ca134b71", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/confirm-register-sync.static.test.js:59"}, "properties": {"repobilityId": "bc0bb736ce690f06", "scanner": "scanner-primary", "fingerprint": "0a0246e6ca134b71", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a3ab1ad93a80464e", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-edit-booked-equipment.static.test.js:92"}, "properties": {"repobilityId": "f60fd6f27c706ed5", "scanner": "scanner-primary", "fingerprint": "a3ab1ad93a80464e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-fb2285547c1ae70b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/confirm-request-recheck.static.test.js:85"}, "properties": {"repobilityId": "90b34e8fcf83a3ee", "scanner": "scanner-primary", "fingerprint": "fb2285547c1ae70b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1b86dbbb242b869a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/schedule-detail-visual-grouping.static.test.js:87"}, "properties": {"repobilityId": "3da4e46f9808cc5e", "scanner": "scanner-primary", "fingerprint": "1b86dbbb242b869a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-88bed42532427c9d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-dropdown-portal.static.test.js:30"}, "properties": {"repobilityId": "25e2141af9e7070a", "scanner": "scanner-primary", "fingerprint": "88bed42532427c9d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e698abde3fd0ae21", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/kakao-dom-noise-guards.static.test.js:367"}, "properties": {"repobilityId": "c72bc6defaf6b970", "scanner": "scanner-primary", "fingerprint": "e698abde3fd0ae21", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a0f4c267a7211330", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-header-logo.static.test.js:61"}, "properties": {"repobilityId": "89d89105b25dd75d", "scanner": "scanner-primary", "fingerprint": "a0f4c267a7211330", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-d950b2f47e144620", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/onsite-addon-dashboard.static.test.js:54"}, "properties": {"repobilityId": "5fee05f8c56c3b3d", "scanner": "scanner-primary", "fingerprint": "d950b2f47e144620", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-31475e5697fe4c63", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-onsite-dedupe.static.test.js:63"}, "properties": {"repobilityId": "bb4bac49e230dcdb", "scanner": "scanner-primary", "fingerprint": "31475e5697fe4c63", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5fefbdb6b2e4e575", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/workflow-guard.static.test.js:88"}, "properties": {"repobilityId": "aadf24523589ce1a", "scanner": "scanner-primary", "fingerprint": "5fefbdb6b2e4e575", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-707f1e0c6f99864a", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-search-events.static.test.js:68"}, "properties": {"repobilityId": "cebb1cf7b5c2963b", "scanner": "scanner-primary", "fingerprint": "707f1e0c6f99864a", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a2b4bcb3849ba63c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-performance.static.test.js:321"}, "properties": {"repobilityId": "93d5b4a3d414c9f3", "scanner": "scanner-primary", "fingerprint": "a2b4bcb3849ba63c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1cda1731b8bb2f30", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-global-search.static.test.js:437"}, "properties": {"repobilityId": "5c54a01631fead3e", "scanner": "scanner-primary", "fingerprint": "1cda1731b8bb2f30", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f86d89910cb5f3d8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/equipment-risk-dashboard.static.test.js:228"}, "properties": {"repobilityId": "ea19109ccffdfe3e", "scanner": "scanner-primary", "fingerprint": "f86d89910cb5f3d8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-45521bbfeb609706", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-fetch-pagination.static.test.js:32"}, "properties": {"repobilityId": "4eabef7bc82f5f6e", "scanner": "scanner-primary", "fingerprint": "45521bbfeb609706", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-617e3c3d4b776afb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-deposit-status.static.test.js:86"}, "properties": {"repobilityId": "fe97db00e62955e3", "scanner": "scanner-primary", "fingerprint": "617e3c3d4b776afb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c07254d1d191aa6c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-trade-extras-cache.static.test.js:74"}, "properties": {"repobilityId": "325798990c13e7ef", "scanner": "scanner-primary", "fingerprint": "c07254d1d191aa6c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-575cf23c10021b77", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/dashboard-return-status-options.static.test.js:36"}, "properties": {"repobilityId": "276553a383be6ffe", "scanner": "scanner-primary", "fingerprint": "575cf23c10021b77", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c7c49fc2c3892a81", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-no-prune-persist.static.test.js:33"}, "properties": {"repobilityId": "38ed938258912a49", "scanner": "scanner-primary", "fingerprint": "c7c49fc2c3892a81", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c031572343b0f775", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-stale-equipment-repair.static.test.js:52"}, "properties": {"repobilityId": "7e30e82bf2d7cdde", "scanner": "scanner-primary", "fingerprint": "c031572343b0f775", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a5193de5765b02d1", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/toss-front-idle-recovery.static.test.js:43"}, "properties": {"repobilityId": "52ea8c2207e80962", "scanner": "scanner-primary", "fingerprint": "a5193de5765b02d1", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-46ee4892c62b0b72", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/toss-front-lookup-cors.static.test.js:45"}, "properties": {"repobilityId": "5ca6a095684aa732", "scanner": "scanner-primary", "fingerprint": "46ee4892c62b0b72", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-0d98ba2b7fd88542", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/contract-master-discount-regen.static.test.js:45"}, "properties": {"repobilityId": "fb902439c8bb14bf", "scanner": "scanner-primary", "fingerprint": "0d98ba2b7fd88542", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bd23351e31d6ad6c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-missing-equipment-repair.static.test.js:85"}, "properties": {"repobilityId": "654f3bb8e9c3f9a5", "scanner": "scanner-primary", "fingerprint": "bd23351e31d6ad6c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-31207f1c0144c263", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 test/today-dashboard-return-set-header-controls.static.test.js:64"}, "properties": {"repobilityId": "a52e7af2cb574c7f", "scanner": "scanner-primary", "fingerprint": "31207f1c0144c263", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-4f40e04094a3296e", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/today-dashboard/components/SetBox.tsx:18"}, "properties": {"repobilityId": "ddc6ce6ed64ceb0f", "scanner": "scanner-primary", "fingerprint": "4f40e04094a3296e", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-9ef10ea3664c9ebf", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/SetBox.tsx:16"}, "properties": {"repobilityId": "319c630c682a89f1", "scanner": "scanner-primary", "fingerprint": "9ef10ea3664c9ebf", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-fc1a773d0878f72e", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/FollowUpView.tsx:431"}, "properties": {"repobilityId": "e3df35f816f85afe", "scanner": "scanner-primary", "fingerprint": "fc1a773d0878f72e", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-5e9f43e2ae90ac1f", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/KakaoReservationInput.tsx:378"}, "properties": {"repobilityId": "ad4c99b2b2428097", "scanner": "scanner-primary", "fingerprint": "5e9f43e2ae90ac1f", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-cc72eb623c72164c", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/ReturnChecklist.tsx:263"}, "properties": {"repobilityId": "9f2f1a112cbf11e8", "scanner": "scanner-primary", "fingerprint": "cc72eb623c72164c", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a899a6f6ea4d3485", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/HandoverChecklist.tsx:441"}, "properties": {"repobilityId": "549a569577553630", "scanner": "scanner-primary", "fingerprint": "a899a6f6ea4d3485", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-a94aa0c3499fc1f3", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/VillageTimeline.tsx:271"}, "properties": {"repobilityId": "6b8806cdb68a329b", "scanner": "scanner-primary", "fingerprint": "a94aa0c3499fc1f3", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-72f5a21d48b66247", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/SideRail.tsx:29"}, "properties": {"repobilityId": "5683f57696c87895", "scanner": "scanner-primary", "fingerprint": "72f5a21d48b66247", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-807b43fe3d3dc8fd", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/OperationsView.tsx:269"}, "properties": {"repobilityId": "a5308496266e702f", "scanner": "scanner-primary", "fingerprint": "807b43fe3d3dc8fd", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-eb7d0dfe40152256", "level": "note", "message": {"text": "Icon-only button without accessible name \u2014 apps/today-dashboard/components/ConfirmView.tsx:527"}, "properties": {"repobilityId": "afd61d978f33b583", "scanner": "scanner-primary", "fingerprint": "eb7d0dfe40152256", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.button.no-label"]}}, {"ruleId": "scanner-7de332ee37937b50", "level": "none", "message": {"text": "`truncate` class without `title=` for hover reveal \u2014 apps/today-dashboard/components/ConfirmView.tsx:386"}, "properties": {"repobilityId": "5fe38e1ec37e872d", "scanner": "scanner-primary", "fingerprint": "7de332ee37937b50", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.truncate.no-title"]}}, {"ruleId": "scanner-f7791e86e4aea52b", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 apps/today-dashboard/app/api/lookup/route.ts:149"}, "properties": {"repobilityId": "2f9f384ad4e708fd", "scanner": "scanner-primary", "fingerprint": "f7791e86e4aea52b", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-68bde51bb1dda390", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in requestManage.html:397"}, "properties": {"repobilityId": "25dadaa89f453761", "scanner": "scanner-primary", "fingerprint": "68bde51bb1dda390", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "requestManage.html"}, "region": {"startLine": 397}}}]}, {"ruleId": "scanner-7b3202b93661cb7e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in dashboard.html:1744"}, "properties": {"repobilityId": "3cddbad051d0bcc9", "scanner": "scanner-primary", "fingerprint": "7b3202b93661cb7e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard.html"}, "region": {"startLine": 1744}}}]}, {"ruleId": "scanner-b225396da824b524", "level": "warning", "message": {"text": "Insecure pattern 'direct_outerhtml_assignment' in dashboard.html:3133"}, "properties": {"repobilityId": "f774b219cf8afa4f", "scanner": "scanner-primary", "fingerprint": "b225396da824b524", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_outerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "dashboard.html"}, "region": {"startLine": 3133}}}]}, {"ruleId": "scanner-984e43eb86f69f10", "level": "warning", "message": {"text": "Insecure pattern 'weak_hash' in checkAvailability.js:5153"}, "properties": {"repobilityId": "722486a305a59f79", "scanner": "scanner-primary", "fingerprint": "984e43eb86f69f10", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "weak_hash"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "checkAvailability.js"}, "region": {"startLine": 5153}}}]}, {"ruleId": "scanner-8a671c29e29b28e6", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in timelineMobile.html:767"}, "properties": {"repobilityId": "308361ee1aa9999f", "scanner": "scanner-primary", "fingerprint": "8a671c29e29b28e6", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "timelineMobile.html"}, "region": {"startLine": 767}}}]}, {"ruleId": "scanner-426e2038e41ec312", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in timeline.html:945"}, "properties": {"repobilityId": "247d4c781669578d", "scanner": "scanner-primary", "fingerprint": "426e2038e41ec312", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "timeline.html"}, "region": {"startLine": 945}}}]}, {"ruleId": "scanner-37f8757771ecacbb", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in toss-front-plugin/village-front/app.js:124"}, "properties": {"repobilityId": "074fd11ed7cf7f7f", "scanner": "scanner-primary", "fingerprint": "37f8757771ecacbb", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "toss-front-plugin/village-front/app.js"}, "region": {"startLine": 124}}}]}, {"ruleId": "scanner-888c920eeb1e8fa1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/follow-up-dashboard/operations.html:1021"}, "properties": {"repobilityId": "c905cb6ae33067c8", "scanner": "scanner-primary", "fingerprint": "888c920eeb1e8fa1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/follow-up-dashboard/operations.html"}, "region": {"startLine": 1021}}}]}, {"ruleId": "scanner-c7492f8412bd360a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in apps/follow-up-dashboard/index.html:1200"}, "properties": {"repobilityId": "c1e26bb00ffb4137", "scanner": "scanner-primary", "fingerprint": "c7492f8412bd360a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/follow-up-dashboard/index.html"}, "region": {"startLine": 1200}}}]}, {"ruleId": "scanner-edf93306262a80f3", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in apps/today-dashboard/app/api/lookup/route.ts:29"}, "properties": {"repobilityId": "63809ff5b17e7ea1", "scanner": "scanner-primary", "fingerprint": "edf93306262a80f3", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/today-dashboard/app/api/lookup/route.ts"}, "region": {"startLine": 29}}}]}, {"ruleId": "scanner-f6944abfdb926b01", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in apps/today-dashboard/app/api/lookup/confirm/route.ts:36"}, "properties": {"repobilityId": "4556d100b2f5eb9a", "scanner": "scanner-primary", "fingerprint": "f6944abfdb926b01", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "apps/today-dashboard/app/api/lookup/confirm/route.ts"}, "region": {"startLine": 36}}}]}, {"ruleId": "scanner-7eaa738f40ba85f1", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/manage.html:397"}, "properties": {"repobilityId": "e42e178e9427fa0e", "scanner": "scanner-primary", "fingerprint": "7eaa738f40ba85f1", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/manage.html"}, "region": {"startLine": 397}}}]}, {"ruleId": "scanner-34c1cdce91da949c", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/dashboard.html:1901"}, "properties": {"repobilityId": "44bfb5badcfaf4e1", "scanner": "scanner-primary", "fingerprint": "34c1cdce91da949c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/dashboard.html"}, "region": {"startLine": 1901}}}]}, {"ruleId": "scanner-54858be9799d4b50", "level": "warning", "message": {"text": "Insecure pattern 'direct_outerhtml_assignment' in docs/dashboard.html:3959"}, "properties": {"repobilityId": "664084a2311a2a87", "scanner": "scanner-primary", "fingerprint": "54858be9799d4b50", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_outerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/dashboard.html"}, "region": {"startLine": 3959}}}]}, {"ruleId": "scanner-9e6024e493bbe2ef", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/request.html:788"}, "properties": {"repobilityId": "69164613d95cd1e7", "scanner": "scanner-primary", "fingerprint": "9e6024e493bbe2ef", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/request.html"}, "region": {"startLine": 788}}}]}, {"ruleId": "scanner-92042de7a721fe87", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in docs/timeline.html:1526"}, "properties": {"repobilityId": "c13b1595e2102d3a", "scanner": "scanner-primary", "fingerprint": "92042de7a721fe87", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "docs/timeline.html"}, "region": {"startLine": 1526}}}]}, {"ruleId": "scanner-a30dfaf21146dd66", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/ai-browser-worker/worker.mjs:4"}, "properties": {"repobilityId": "34f19230ff59d88b", "scanner": "scanner-primary", "fingerprint": "a30dfaf21146dd66", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/ai-browser-worker/worker.mjs"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-eb6e302d2660dd96", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in tools/kakao-dom-bridge/server.mjs:5"}, "properties": {"repobilityId": "5eb3ce335a8a9b8b", "scanner": "scanner-primary", "fingerprint": "eb6e302d2660dd96", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/kakao-dom-bridge/server.mjs"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-610ca2db53b19776", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in tools/kakao-dom-bridge/server.mjs:83"}, "properties": {"repobilityId": "b5d94808001d8fda", "scanner": "scanner-primary", "fingerprint": "610ca2db53b19776", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "tools/kakao-dom-bridge/server.mjs"}, "region": {"startLine": 83}}}]}, {"ruleId": "scanner-0820bc18a2c75c98", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "19605de2a04aacf8", "scanner": "scanner-primary", "fingerprint": "0820bc18a2c75c98", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-gas.yml"}, "region": {"startLine": 55}}}]}, {"ruleId": "scanner-0820bc18a2c75c98", "level": "note", "message": {"text": "GitHub Action is tag-pinned rather than SHA-pinned"}, "properties": {"repobilityId": "cbec67951a2bef4b", "scanner": "scanner-primary", "fingerprint": "0820bc18a2c75c98", "layer": "cicd", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "github-actions", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": ".github/workflows/deploy-gas.yml"}, "region": {"startLine": 82}}}]}, {"ruleId": "scanner-ec3ebf19fc861a79", "level": "note", "message": {"text": "Very large file: Code.js (1520 lines)"}, "properties": {"repobilityId": "8355a72454af481f", "scanner": "scanner-primary", "fingerprint": "ec3ebf19fc861a79", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-f62e2b9b8674b82e", "level": "note", "message": {"text": "Very large file: checkAvailability.js (10758 lines)"}, "properties": {"repobilityId": "2b1f4d92a3f0757d", "scanner": "scanner-primary", "fingerprint": "f62e2b9b8674b82e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-1b5839df7e21ea8c", "level": "note", "message": {"text": "Very large file: generatecontract.js (1274 lines)"}, "properties": {"repobilityId": "494631555d7df350", "scanner": "scanner-primary", "fingerprint": "1b5839df7e21ea8c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-abfe130d11da5c2e", "level": "note", "message": {"text": "Very large file: sheetAPI.js (1586 lines)"}, "properties": {"repobilityId": "9af9e0502d6cd624", "scanner": "scanner-primary", "fingerprint": "abfe130d11da5c2e", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-072f865ebb464277", "level": "note", "message": {"text": "Very large file: tools/ai-browser-worker/worker.test.mjs (2100 lines)"}, "properties": {"repobilityId": "ee65375b29e08e04", "scanner": "scanner-primary", "fingerprint": "072f865ebb464277", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-94b4c89a4f525b6d", "level": "note", "message": {"text": "Very large file: tools/ai-browser-worker/worker.mjs (3349 lines)"}, "properties": {"repobilityId": "6ad5d6f30fc7774d", "scanner": "scanner-primary", "fingerprint": "94b4c89a4f525b6d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-20bbf6c8e4dce2ac", "level": "note", "message": {"text": "Very large file: tools/kakao-dom-bridge/server.mjs (1726 lines)"}, "properties": {"repobilityId": "626c1dc35036735d", "scanner": "scanner-primary", "fingerprint": "20bbf6c8e4dce2ac", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "c5209540f348c5aa", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "bca638470a8cd271", "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": "2e071392a6c80284", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-9d79c4077342a7d0", "level": "warning", "message": {"text": "Runtime service client appears to use placeholder configuration"}, "properties": {"repobilityId": "b8b12f206d23a62f", "scanner": "scanner-primary", "fingerprint": "9d79c4077342a7d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "runtime-config", "service-client", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "f3ffcd035689074f", "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": "da6fc49b73f7910a", "scanner": "scanner-primary", "fingerprint": "749d4bc1bd66df5f", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["agent-instructions", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-ea8f3013f588db25", "level": "note", "message": {"text": "Shallow git history limits provenance confidence"}, "properties": {"repobilityId": "1cae1442a378d6c3", "scanner": "scanner-primary", "fingerprint": "ea8f3013f588db25", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-8424db9c75e04ba4", "level": "none", "message": {"text": "Very short observed git history"}, "properties": {"repobilityId": "e130bf8d2d4f9211", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"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-1a2fce94e12d669d", "level": "note", "message": {"text": "Legacy-named symbol `contractRegenTriggerScheduledAt_v1` in Code.js:1075"}, "properties": {"repobilityId": "17f16420d2c0ffbe", "scanner": "scanner-primary", "fingerprint": "1a2fce94e12d669d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-205a172a4fd36f5e", "level": "none", "message": {"text": "Commented-code block (5 lines) in Code.js:1177"}, "properties": {"repobilityId": "daf935eb9af2b785", "scanner": "scanner-primary", "fingerprint": "205a172a4fd36f5e", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-621c29e357e2376c", "level": "note", "message": {"text": "Legacy-named symbol `timelineCacheVersion_v1` in checkAvailability.js:86"}, "properties": {"repobilityId": "0bc34b3f0344bd3e", "scanner": "scanner-primary", "fingerprint": "621c29e357e2376c", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-4a75a330f3b7f7d8", "level": "none", "message": {"text": "Commented-code block (7 lines) in checkAvailability.js:9400"}, "properties": {"repobilityId": "e27c588dc2e06d85", "scanner": "scanner-primary", "fingerprint": "4a75a330f3b7f7d8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-aa7ae1c9ac17d584", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 checkAvailability.js:9341"}, "properties": {"repobilityId": "a94ecd9511605b97", "scanner": "scanner-primary", "fingerprint": "aa7ae1c9ac17d584", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-add05eac9c3fbdb7", "level": "none", "message": {"text": "Commented-code block (11 lines) in generatecontract.js:307"}, "properties": {"repobilityId": "7598e978d34e8be1", "scanner": "scanner-primary", "fingerprint": "add05eac9c3fbdb7", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-1bf7dc09369d90fe", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 supabaseSync.js:26"}, "properties": {"repobilityId": "81aff968a8eaf32b", "scanner": "scanner-primary", "fingerprint": "1bf7dc09369d90fe", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-c79b26991a1c2293", "level": "note", "message": {"text": "Legacy-named symbol `idle__copy` in toss-front-plugin/village-front/app.js:136"}, "properties": {"repobilityId": "e4364aaae945c043", "scanner": "scanner-primary", "fingerprint": "c79b26991a1c2293", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-bd1a489c582154f8", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 toss-front-plugin/village-front/app.js:199"}, "properties": {"repobilityId": "a023350ec14de26c", "scanner": "scanner-primary", "fingerprint": "bd1a489c582154f8", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f4008fa6fda08d83", "level": "note", "message": {"text": "Legacy-named symbol `dashboardEquipNames_v1` in test/dashboard-equipment-realtime.static.test.js:516"}, "properties": {"repobilityId": "4a013a0bef2aaaa7", "scanner": "scanner-primary", "fingerprint": "f4008fa6fda08d83", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-a97103c25ff1a96d", "level": "note", "message": {"text": "Legacy-named symbol `timeline_stock_map_v1` in test/timeline-performance.static.test.js:352"}, "properties": {"repobilityId": "d4cde4013cc241b8", "scanner": "scanner-primary", "fingerprint": "a97103c25ff1a96d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-41b19316c4266e05", "level": "note", "message": {"text": "Legacy-named symbol `dashboard_equipment_risk_rules_v1` in test/dashboard-trade-extras-cache.static.test.js:70"}, "properties": {"repobilityId": "02cd997675bca1d2", "scanner": "scanner-primary", "fingerprint": "41b19316c4266e05", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-69e087d64d11ac59", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/today-dashboard/components/FollowUpView.tsx:218"}, "properties": {"repobilityId": "1725955745ad2646", "scanner": "scanner-primary", "fingerprint": "69e087d64d11ac59", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-911bcf4603f9edd5", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 apps/today-dashboard/lib/server/gasPublic.ts:13"}, "properties": {"repobilityId": "5e8e465358e52400", "scanner": "scanner-primary", "fingerprint": "911bcf4603f9edd5", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-4d223bfdf539b12d", "level": "note", "message": {"text": "42 env vars used in code but missing from .env.example"}, "properties": {"repobilityId": "5bbbd2b50dcb630d", "scanner": "scanner-primary", "fingerprint": "4d223bfdf539b12d", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "config-drift"]}}]}]}