{"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-13fbb4d6b501fec9", "name": "Stray `console.log` in TS/JS \u2014 functions/fix_orphan_family_chats.js:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/fix_orphan_family_chats.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-f5d28aa6391473b9", "name": "Stray `console.log` in TS/JS \u2014 functions/seed_dashboard.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/seed_dashboard.js:11"}, "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-7b1715fe2203faa7", "name": "Stray `console.log` in TS/JS \u2014 functions/inspect_family_rooms.js:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/inspect_family_rooms.js:21"}, "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-ee54aa54f32bde67", "name": "Stray `console.log` in TS/JS \u2014 functions/inspect_fcm_tokens.js:11", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/inspect_fcm_tokens.js:11"}, "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-9b52018aa327ad66", "name": "Stray `console.log` in TS/JS \u2014 functions/find_ichijo.js:44", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/find_ichijo.js:44"}, "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-35ebebafbe90a87d", "name": "Stray `console.log` in TS/JS \u2014 functions/audit_family_chat_membership.js:16", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/audit_family_chat_membership.js:16"}, "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-bbdd7a9dfc46c192", "name": "Stray `console.log` in TS/JS \u2014 functions/fix_orphan_family_chats_groupname.js:21", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/fix_orphan_family_chats_groupname.js:21"}, "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-ee9ccf32ec6f0e42", "name": "Stray `console.log` in TS/JS \u2014 functions/audit_orphan_family_chats.js:32", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/audit_orphan_family_chats.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-056c1ddbb4630858", "name": "Stray `console.log` in TS/JS \u2014 functions/scripts/migrate_v3_cleanup.js:70", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/scripts/migrate_v3_cleanup.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-38dc7a2801489e87", "name": "Stray `console.log` in TS/JS \u2014 functions/scripts/set_test_unread.js:33", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/scripts/set_test_unread.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-e2c4c58777209e58", "name": "Stray `console.log` in TS/JS \u2014 functions/src/notifications/index.js:155", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/notifications/index.js:155"}, "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-972ecfe89a0cb93b", "name": "Stray `console.log` in TS/JS \u2014 functions/src/monitoring/index.js:278", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/monitoring/index.js:278"}, "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-177c679ad4a43cf6", "name": "Stray `console.log` in TS/JS \u2014 functions/src/ai/index.js:278", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/ai/index.js:278"}, "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-7a0235dcdac673e2", "name": "Stray `console.log` in TS/JS \u2014 functions/src/morning_meeting/index.js:192", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/morning_meeting/index.js:192"}, "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-a08a4bc92410f7f9", "name": "Stray `console.log` in TS/JS \u2014 functions/src/utils/setup.js:55", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/utils/setup.js:55"}, "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-c7914300da5db2a4", "name": "Stray `console.log` in TS/JS \u2014 functions/src/utils/hug-client.js:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/utils/hug-client.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-5842d765828ab4b6", "name": "Stray `console.log` in TS/JS \u2014 functions/src/hug/sync.js:77", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/hug/sync.js:77"}, "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-e4402d23a8fe468d", "name": "Stray `console.log` in TS/JS \u2014 functions/src/hug/recipient_sync.js:100", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/hug/recipient_sync.js:100"}, "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-727460b1435739f7", "name": "Stray `console.log` in TS/JS \u2014 functions/src/hug/inspect_forms.js:160", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/hug/inspect_forms.js:160"}, "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-43789eba099943fe", "name": "Stray `console.log` in TS/JS \u2014 functions/src/hug/docs.js:111", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/hug/docs.js:111"}, "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-1fc4eb7346ea6792", "name": "Stray `console.log` in TS/JS \u2014 functions/src/hug/family_register.js:367", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/hug/family_register.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-447afaa9a750055c", "name": "Stray `console.log` in TS/JS \u2014 functions/src/accounts/index.js:366", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/accounts/index.js:366"}, "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-cc3f86cbf8607afb", "name": "Stray `console.log` in TS/JS \u2014 functions/src/intake/form_intake.js:370", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/intake/form_intake.js:370"}, "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-30b1d2502ee3afa8", "name": "Stray `console.log` in TS/JS \u2014 functions/src/calendar/index.js:68", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/calendar/index.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-97f8b1a5b6966b6b", "name": "Stray `console.log` in TS/JS \u2014 scripts/migrate_classroom_to_classrooms.js:25", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate_classroom_to_classrooms.js:25"}, "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-929a7192b64970fa", "name": "Stray `console.log` in TS/JS \u2014 scripts/import_crm_leads.js:71", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import_crm_leads.js:71"}, "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-ad7489e36d69f5c0", "name": "Stray `console.log` in TS/JS \u2014 web/firebase-messaging-sw.js:17", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 web/firebase-messaging-sw.js:17"}, "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-9710c8d059e53154", "name": "No frontend routes/components detected", "shortDescription": {"text": "No frontend routes/components detected"}, "fullDescription": {"text": "No React/Vue/Next routes were found. This is fine for backend-only repos."}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "info", "confidence": 1.0}}, {"id": "scanner-e3ed568323a975bd", "name": "Possible secret in web/firebase-messaging-sw.js", "shortDescription": {"text": "Possible secret in web/firebase-messaging-sw.js"}, "fullDescription": {"text": "Detected pattern matching generic_api_key. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-6372cebde0220094", "name": "No auth library detected", "shortDescription": {"text": "No auth library detected"}, "fullDescription": {"text": "The scanner did not find any standard auth library (JWT, OAuth, NextAuth, Auth0, etc.). The repo has auth/admin/session surface indicators, so auth may live in custom code, in a separate service, or be missing."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4601e3ad3bb28677", "name": "No CI/CD pipelines detected", "shortDescription": {"text": "No CI/CD pipelines detected"}, "fullDescription": {"text": "No GitHub Actions, GitLab CI, or CircleCI configs found. Without CI you can't gate deploys on tests/lints."}, "properties": {"scanner": "scanner-primary", "layer": "cicd", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-6893a6c8b0861585", "name": "Very low test-to-source ratio", "shortDescription": {"text": "Very low test-to-source ratio"}, "fullDescription": {"text": "1 test file(s) for 27 source file(s) (ratio 0.04). Consider adding integration or unit tests for critical paths."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "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 183 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-b9088664ace7f748", "name": "Composite production-readiness gap", "shortDescription": {"text": "Composite production-readiness gap"}, "fullDescription": {"text": "Multiple low-cost hardening controls are missing together: license, ci, tests. Opus verification showed these co-occurring gaps are a better readiness signal than reading each flag in isolation."}, "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, ci, tests. 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-fa73919d27013564", "name": "Commented-code block (6 lines) in functions/scripts/migrate_v3_cleanup.js:3", "shortDescription": {"text": "Commented-code block (6 lines) in functions/scripts/migrate_v3_cleanup.js:3"}, "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-ee378bacd2beb44e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 functions/src/monitoring/index.js:271", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 functions/src/monitoring/index.js:271"}, "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-da80fb7a965b5820", "name": "`fetch()` without try/.catch or AbortSignal \u2014 functions/src/utils/hug-client.js:33", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 functions/src/utils/hug-client.js:33"}, "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-604f413f7caae520", "name": "`fetch()` without try/.catch or AbortSignal \u2014 functions/src/hug/sync.js:156", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 functions/src/hug/sync.js:156"}, "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-b1183384614645b5", "name": "Commented-code block (5 lines) in functions/src/hug/docs.js:323", "shortDescription": {"text": "Commented-code block (5 lines) in functions/src/hug/docs.js:323"}, "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-8aa7f1304a3538cc", "name": "Commented-code block (7 lines) in functions/src/hug/family_register.js:6", "shortDescription": {"text": "Commented-code block (7 lines) in functions/src/hug/family_register.js:6"}, "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-a414d9f8f4deaa0b", "name": "Commented-code block (7 lines) in functions/src/intake/form_intake.js:4", "shortDescription": {"text": "Commented-code block (7 lines) in functions/src/intake/form_intake.js:4"}, "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}}]}}, "automationDetails": {"id": "repobility/23314"}, "properties": {"repository": "yosgure/bee_smiley_admin", "repoUrl": "https://github.com/yosgure/bee_smiley_admin", "branch": "main"}, "results": [{"ruleId": "scanner-13fbb4d6b501fec9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/fix_orphan_family_chats.js:32"}, "properties": {"repobilityId": "de0c519c37ffb950", "scanner": "scanner-primary", "fingerprint": "13fbb4d6b501fec9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-f5d28aa6391473b9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/seed_dashboard.js:11"}, "properties": {"repobilityId": "73dfc1eed99622e3", "scanner": "scanner-primary", "fingerprint": "f5d28aa6391473b9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7b1715fe2203faa7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/inspect_family_rooms.js:21"}, "properties": {"repobilityId": "b7d88d54fd459c37", "scanner": "scanner-primary", "fingerprint": "7b1715fe2203faa7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ee54aa54f32bde67", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/inspect_fcm_tokens.js:11"}, "properties": {"repobilityId": "bafaf43ddb757d2e", "scanner": "scanner-primary", "fingerprint": "ee54aa54f32bde67", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9b52018aa327ad66", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/find_ichijo.js:44"}, "properties": {"repobilityId": "d0a5cc3095f8c77d", "scanner": "scanner-primary", "fingerprint": "9b52018aa327ad66", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-35ebebafbe90a87d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/audit_family_chat_membership.js:16"}, "properties": {"repobilityId": "6f6251b041cb3842", "scanner": "scanner-primary", "fingerprint": "35ebebafbe90a87d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-bbdd7a9dfc46c192", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/fix_orphan_family_chats_groupname.js:21"}, "properties": {"repobilityId": "e1decba314112a6a", "scanner": "scanner-primary", "fingerprint": "bbdd7a9dfc46c192", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ee9ccf32ec6f0e42", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/audit_orphan_family_chats.js:32"}, "properties": {"repobilityId": "e877837aed629c5c", "scanner": "scanner-primary", "fingerprint": "ee9ccf32ec6f0e42", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-056c1ddbb4630858", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/scripts/migrate_v3_cleanup.js:70"}, "properties": {"repobilityId": "66c4ba2068457a8c", "scanner": "scanner-primary", "fingerprint": "056c1ddbb4630858", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-38dc7a2801489e87", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/scripts/set_test_unread.js:33"}, "properties": {"repobilityId": "27de957d953b2a18", "scanner": "scanner-primary", "fingerprint": "38dc7a2801489e87", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e2c4c58777209e58", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/notifications/index.js:155"}, "properties": {"repobilityId": "dfcec02839c13fa7", "scanner": "scanner-primary", "fingerprint": "e2c4c58777209e58", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-972ecfe89a0cb93b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/monitoring/index.js:278"}, "properties": {"repobilityId": "abefa9e9f43271fd", "scanner": "scanner-primary", "fingerprint": "972ecfe89a0cb93b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-177c679ad4a43cf6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/ai/index.js:278"}, "properties": {"repobilityId": "821554a7d6713224", "scanner": "scanner-primary", "fingerprint": "177c679ad4a43cf6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-7a0235dcdac673e2", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/morning_meeting/index.js:192"}, "properties": {"repobilityId": "c3ef40c174218009", "scanner": "scanner-primary", "fingerprint": "7a0235dcdac673e2", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-a08a4bc92410f7f9", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/utils/setup.js:55"}, "properties": {"repobilityId": "1602b5730b8baca6", "scanner": "scanner-primary", "fingerprint": "a08a4bc92410f7f9", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-c7914300da5db2a4", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/utils/hug-client.js:68"}, "properties": {"repobilityId": "0272541ae7f60c7b", "scanner": "scanner-primary", "fingerprint": "c7914300da5db2a4", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-5842d765828ab4b6", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/hug/sync.js:77"}, "properties": {"repobilityId": "db41a66581534e0f", "scanner": "scanner-primary", "fingerprint": "5842d765828ab4b6", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-e4402d23a8fe468d", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/hug/recipient_sync.js:100"}, "properties": {"repobilityId": "b36b6595f6ddf67c", "scanner": "scanner-primary", "fingerprint": "e4402d23a8fe468d", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-727460b1435739f7", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/hug/inspect_forms.js:160"}, "properties": {"repobilityId": "ce585973363b9fc3", "scanner": "scanner-primary", "fingerprint": "727460b1435739f7", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-43789eba099943fe", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/hug/docs.js:111"}, "properties": {"repobilityId": "f7985b1f998b60bd", "scanner": "scanner-primary", "fingerprint": "43789eba099943fe", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-1fc4eb7346ea6792", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/hug/family_register.js:367"}, "properties": {"repobilityId": "3bdbad57199f935f", "scanner": "scanner-primary", "fingerprint": "1fc4eb7346ea6792", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-447afaa9a750055c", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/accounts/index.js:366"}, "properties": {"repobilityId": "d344e47665c0b0b6", "scanner": "scanner-primary", "fingerprint": "447afaa9a750055c", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cc3f86cbf8607afb", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/intake/form_intake.js:370"}, "properties": {"repobilityId": "189182327aea3d59", "scanner": "scanner-primary", "fingerprint": "cc3f86cbf8607afb", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-30b1d2502ee3afa8", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 functions/src/calendar/index.js:68"}, "properties": {"repobilityId": "9d10f12b66754d76", "scanner": "scanner-primary", "fingerprint": "30b1d2502ee3afa8", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-97f8b1a5b6966b6b", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/migrate_classroom_to_classrooms.js:25"}, "properties": {"repobilityId": "1153a0a73da0bfce", "scanner": "scanner-primary", "fingerprint": "97f8b1a5b6966b6b", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-929a7192b64970fa", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 scripts/import_crm_leads.js:71"}, "properties": {"repobilityId": "f0d1b310895dbef7", "scanner": "scanner-primary", "fingerprint": "929a7192b64970fa", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-ad7489e36d69f5c0", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 web/firebase-messaging-sw.js:17"}, "properties": {"repobilityId": "34bf66d0d92f38ba", "scanner": "scanner-primary", "fingerprint": "ad7489e36d69f5c0", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-9710c8d059e53154", "level": "none", "message": {"text": "No frontend routes/components detected"}, "properties": {"repobilityId": "44ca61485762e494", "scanner": "scanner-primary", "fingerprint": "9710c8d059e53154", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-e3ed568323a975bd", "level": "error", "message": {"text": "Possible secret in web/firebase-messaging-sw.js"}, "properties": {"repobilityId": "23475e0b0f74192d", "scanner": "scanner-primary", "fingerprint": "e3ed568323a975bd", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "web/firebase-messaging-sw.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-6372cebde0220094", "level": "warning", "message": {"text": "No auth library detected"}, "properties": {"repobilityId": "a5b6035a5bbf8054", "scanner": "scanner-primary", "fingerprint": "6372cebde0220094", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["coverage", "auth"]}}, {"ruleId": "scanner-4601e3ad3bb28677", "level": "warning", "message": {"text": "No CI/CD pipelines detected"}, "properties": {"repobilityId": "c3ee439bce2bc51e", "scanner": "scanner-primary", "fingerprint": "4601e3ad3bb28677", "layer": "cicd", "severity": "medium", "confidence": 1.0, "tags": ["coverage"]}}, {"ruleId": "scanner-6893a6c8b0861585", "level": "warning", "message": {"text": "Very low test-to-source ratio"}, "properties": {"repobilityId": "54a7de3f06314bf0", "scanner": "scanner-primary", "fingerprint": "6893a6c8b0861585", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["tests", "coverage"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "007aef73daf424c0", "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": "5846d82b468818ed", "scanner": "scanner-primary", "fingerprint": "3ab5d313dda8e5f9", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["debug", "cleanup", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "c551e8512afc6abc", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-749d4bc1bd66df5f", "level": "warning", "message": {"text": "Agent instructions exist but release-hardening basics are missing"}, "properties": {"repobilityId": "7f72142f8ea9d51a", "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": "883a19ed0bb3fcdb", "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": "800fa27bb6803ba1", "scanner": "scanner-primary", "fingerprint": "8424db9c75e04ba4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["provenance", "git-history", "generated-repo-pattern"]}}, {"ruleId": "scanner-fa73919d27013564", "level": "none", "message": {"text": "Commented-code block (6 lines) in functions/scripts/migrate_v3_cleanup.js:3"}, "properties": {"repobilityId": "8ff5e1ff8d6e16ed", "scanner": "scanner-primary", "fingerprint": "fa73919d27013564", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ee378bacd2beb44e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 functions/src/monitoring/index.js:271"}, "properties": {"repobilityId": "8fbf31b9117adf2d", "scanner": "scanner-primary", "fingerprint": "ee378bacd2beb44e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-da80fb7a965b5820", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 functions/src/utils/hug-client.js:33"}, "properties": {"repobilityId": "eb6162704a79652d", "scanner": "scanner-primary", "fingerprint": "da80fb7a965b5820", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-604f413f7caae520", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 functions/src/hug/sync.js:156"}, "properties": {"repobilityId": "e57291424c20e9ee", "scanner": "scanner-primary", "fingerprint": "604f413f7caae520", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b1183384614645b5", "level": "none", "message": {"text": "Commented-code block (5 lines) in functions/src/hug/docs.js:323"}, "properties": {"repobilityId": "f028c59c1e03e8c1", "scanner": "scanner-primary", "fingerprint": "b1183384614645b5", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-8aa7f1304a3538cc", "level": "none", "message": {"text": "Commented-code block (7 lines) in functions/src/hug/family_register.js:6"}, "properties": {"repobilityId": "8580409eab4618e4", "scanner": "scanner-primary", "fingerprint": "8aa7f1304a3538cc", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a414d9f8f4deaa0b", "level": "none", "message": {"text": "Commented-code block (7 lines) in functions/src/intake/form_intake.js:4"}, "properties": {"repobilityId": "b23f4f81f57e0c66", "scanner": "scanner-primary", "fingerprint": "a414d9f8f4deaa0b", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}]}]}