{"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-2a0c7d6c3955eb79", "name": "Stray `console.log` in TS/JS \u2014 api/square-webhook.js:113", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 api/square-webhook.js:113"}, "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-cf5095204bc66d96", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-CVMqsAGZ.js:33", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-CVMqsAGZ.js:33"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-4a11a96e94c8b86c", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-CH4BAh75n6.js:260", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-CH4BAh75n6.js:260"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-e6a0686f7e25882f", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-CO5DWiiq.js:33", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-CO5DWiiq.js:33"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-d4a902779e2844e5", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-CH4BAh75n12.js:289", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-CH4BAh75n12.js:289"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b03adca6cd97ebf5", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-DBCJabPM.js:33", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-DBCJabPM.js:33"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-5dead0e9fd39960b", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-CHVzJSpn.js:33", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-CHVzJSpn.js:33"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-37c0ca6ddfe766b8", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-CH4BAh75.js:33", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-CH4BAh75.js:33"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-1a977fa21744607a", "name": "TODO/FIXME marker in shipping code \u2014 seo/config.js:7", "shortDescription": {"text": "TODO/FIXME marker in shipping code \u2014 seo/config.js:7"}, "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-c1f10fcd8ac76b37", "name": "`dangerouslySetInnerHTML` used in a React component \u2014 prerender/template/bundle.js:33", "shortDescription": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 prerender/template/bundle.js:33"}, "fullDescription": {"text": "Open XSS surface unless the input is provably trusted. Replace with explicit JSX or sanitize via a vetted library.\n\nWhy: OWASP basics. Already partially flagged by the security analyzer.\nRule id: fq.dangerous-html"}, "properties": {"scanner": "scanner-primary", "layer": "frontend", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-a60cf88eab059788", "name": "Stray `console.log` in TS/JS \u2014 ai-runner/server.js:27", "shortDescription": {"text": "Stray `console.log` in TS/JS \u2014 ai-runner/server.js:27"}, "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-8fc38addb90e267a", "name": "Dockerfile runs as root: ai-runner/Dockerfile", "shortDescription": {"text": "Dockerfile runs as root: ai-runner/Dockerfile"}, "fullDescription": {"text": "No non-root USER set. Containers running as root expand the blast radius of any vulnerability inside the image."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-029041d9dfe789e2", "name": "Docker base image is tag-pinned but not digest-pinned: node:22-slim", "shortDescription": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-slim"}, "fullDescription": {"text": "Container tags can be retagged upstream. Pin production base images to a reviewed digest (`image@sha256:...`) when reproducibility and supply-chain integrity matter."}, "properties": {"scanner": "scanner-primary", "layer": "hardware", "severity": "low", "confidence": 1.0}}, {"id": "scanner-72ad7d932042e474", "name": "Insecure pattern 'direct_innerhtml_assignment' in pricing.html:839", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pricing.html:839"}, "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-76146919662f4202", "name": "Insecure pattern 'direct_innerhtml_assignment' in unsubscribe.html:76", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in unsubscribe.html:76"}, "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-a8878332e0eeb10b", "name": "Insecure pattern 'direct_innerhtml_assignment' in edit.html:390", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in edit.html:390"}, "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-c71b2c0e1603da70", "name": "Insecure pattern 'direct_innerhtml_assignment' in website-builder/index.html:1073", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in website-builder/index.html:1073"}, "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-fb5dd2ca5053de7d", "name": "Insecure pattern 'local_storage_auth_token' in website-builder/index.html:1207", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in website-builder/index.html:1207"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-25aecf496e88f842", "name": "Insecure pattern 'cors_wildcard' in api/track.js:24", "shortDescription": {"text": "Insecure pattern 'cors_wildcard' in api/track.js:24"}, "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-9f83ad6408abf136", "name": "Insecure pattern 'direct_innerhtml_assignment' in sites/index.html:248", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sites/index.html:248"}, "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-501be91935cc44c8", "name": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-CVMqsAGZ.js:37", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-CVMqsAGZ.js:37"}, "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-0a7005fa72f5ee5f", "name": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-CH4BAh75n6.js:264", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-CH4BAh75n6.js:264"}, "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-e5a1de53e6b91a4e", "name": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-CO5DWiiq.js:37", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-CO5DWiiq.js:37"}, "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-efff77b70f606340", "name": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-CH4BAh75n12.js:293", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-CH4BAh75n12.js:293"}, "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-0a42fa893bebd4a5", "name": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-DBCJabPM.js:37", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-DBCJabPM.js:37"}, "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-a0ae2cfe05a3837a", "name": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-CHVzJSpn.js:37", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-CHVzJSpn.js:37"}, "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-0138d6e034c7282d", "name": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-CH4BAh75.js:37", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-CH4BAh75.js:37"}, "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-a046cb4bf1bd220c", "name": "Insecure pattern 'node_child_process' in prerender/fuse.cjs:1076", "shortDescription": {"text": "Insecure pattern 'node_child_process' in prerender/fuse.cjs:1076"}, "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-9cde54ad0b55daca", "name": "Insecure pattern 'direct_innerhtml_assignment' in prerender/fuse.cjs:567", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in prerender/fuse.cjs:567"}, "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-60eeae7248920dc6", "name": "Possible secret in prerender/test-run-funnel.cjs", "shortDescription": {"text": "Possible secret in prerender/test-run-funnel.cjs"}, "fullDescription": {"text": "Detected pattern matching password_literal. Rotate the credential and move to a secret manager."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "critical", "confidence": 1.0}}, {"id": "scanner-4b3fa7b4fe791580", "name": "Insecure pattern 'node_child_process' in prerender/editor-flow.cjs:8", "shortDescription": {"text": "Insecure pattern 'node_child_process' in prerender/editor-flow.cjs:8"}, "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-9b63a15aa173e3b7", "name": "Insecure pattern 'local_storage_auth_token' in prerender/shoot-editor.cjs:126", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in prerender/shoot-editor.cjs:126"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-fd64d7c2e44486da", "name": "Insecure pattern 'direct_innerhtml_assignment' in prerender/edit-ui.html:390", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in prerender/edit-ui.html:390"}, "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-b9ec7215d11de9ea", "name": "Insecure pattern 'node_child_process' in prerender/test-gallery.cjs:5", "shortDescription": {"text": "Insecure pattern 'node_child_process' in prerender/test-gallery.cjs: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-e28bd28ace97cd07", "name": "Insecure pattern 'node_child_process' in prerender/test-visual-editor.cjs:4", "shortDescription": {"text": "Insecure pattern 'node_child_process' in prerender/test-visual-editor.cjs: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-0a80319a435d4f22", "name": "Insecure pattern 'node_child_process' in prerender/builder-auth-flow.cjs:13", "shortDescription": {"text": "Insecure pattern 'node_child_process' in prerender/builder-auth-flow.cjs:13"}, "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-36a60b3dd49b1efe", "name": "Insecure pattern 'node_child_process' in ai-runner/agent.js:6", "shortDescription": {"text": "Insecure pattern 'node_child_process' in ai-runner/agent.js:6"}, "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-11b2e9e8b079c545", "name": "Insecure pattern 'direct_innerhtml_assignment' in visual-editor/index.html:1151", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in visual-editor/index.html:1151"}, "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-9159a5645af6fe2c", "name": "Insecure pattern 'local_storage_auth_token' in visual-editor/index.html:980", "shortDescription": {"text": "Insecure pattern 'local_storage_auth_token' in visual-editor/index.html:980"}, "fullDescription": {"text": "Found a known-risky pattern (local_storage_auth_token). Review and replace if possible."}, "properties": {"scanner": "scanner-primary", "layer": "security", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-b41ed5a0dd29fcec", "name": "Insecure pattern 'direct_innerhtml_assignment' in visual-editor/stats.html:541", "shortDescription": {"text": "Insecure pattern 'direct_innerhtml_assignment' in visual-editor/stats.html:541"}, "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-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-245d731a620477c0", "name": "Very large file: prerender/builder-auth-flow.cjs (2365 lines)", "shortDescription": {"text": "Very large file: prerender/builder-auth-flow.cjs (2365 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-85b977b7667a62a1", "name": "Node manifest has dependencies but no lockfile: ai-runner/package.json", "shortDescription": {"text": "Node manifest has dependencies but no lockfile: ai-runner/package.json"}, "fullDescription": {"text": "`package.json` declares dependencies, but no same-directory npm/pnpm/yarn/bun lockfile was found. Generated projects without lockfiles are less reproducible and harder to secure-scan precisely."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "low", "confidence": 1.0}}, {"id": "scanner-3ab5d313dda8e5f9", "name": "Debug logging residue appears in source files", "shortDescription": {"text": "Debug logging residue appears in source files"}, "fullDescription": {"text": "Found 62 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 14 placeholder/mock markers across 14 source files. This often means the repo looks complete while core flows still use generated scaffolding or fake data."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-2d0c7b7ab8f8aacf", "name": "Critical user flow still appears backed by mock or placeholder data", "shortDescription": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "fullDescription": {"text": "A payment/auth/admin/order/billing-style flow contains mock, fake, TODO, dummy, or placeholder markers in runtime source. In the Fable corpus this is a high-leverage completeness smell: the app can look finished while the money, identity, or tenant flow is still scaffolded."}, "properties": {"scanner": "scanner-primary", "layer": "quality", "severity": "medium", "confidence": 1.0}}, {"id": "scanner-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, lockfile. 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-13db9617e4f2a5b8", "name": "Commented-code block (5 lines) in api/track.js:8", "shortDescription": {"text": "Commented-code block (5 lines) in api/track.js:8"}, "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-dc68f24da43830c9", "name": "Commented-code block (6 lines) in api/square-webhook.js:1", "shortDescription": {"text": "Commented-code block (6 lines) in api/square-webhook.js:1"}, "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-35b4250fb11d19e4", "name": "Commented-code block (5 lines) in api/create-topup-link.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in api/create-topup-link.js:1"}, "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-95efec1d5ae89c5d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-CVMqsAGZ.js:1", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-CVMqsAGZ.js:1"}, "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-144a86f25f000ab6", "name": "Commented-code block (5 lines) in sites/assets/index-CH4BAh75n6.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in sites/assets/index-CH4BAh75n6.js:1"}, "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-40bcc09118423a31", "name": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-CH4BAh75n6.js:228", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-CH4BAh75n6.js:228"}, "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-f3dd50e63f496daf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-CO5DWiiq.js:1", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-CO5DWiiq.js:1"}, "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-0568fe4413aea242", "name": "Commented-code block (5 lines) in sites/assets/index-CH4BAh75n12.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in sites/assets/index-CH4BAh75n12.js:1"}, "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-d74bb55e84f4c061", "name": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-CH4BAh75n12.js:257", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-CH4BAh75n12.js:257"}, "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-820df45a221ef59c", "name": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-DBCJabPM.js:1", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-DBCJabPM.js:1"}, "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-9722654aa1663c6e", "name": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-CHVzJSpn.js:1", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-CHVzJSpn.js:1"}, "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-0dda97f512856edf", "name": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-CH4BAh75.js:1", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-CH4BAh75.js:1"}, "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-fd8652589e2b3dd3", "name": "Commented-code block (5 lines) in sites/assets/site-template.source.js:1", "shortDescription": {"text": "Commented-code block (5 lines) in sites/assets/site-template.source.js:1"}, "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-ded00ec91cbc0362", "name": "Commented-code block (5 lines) in seo/config.js:29", "shortDescription": {"text": "Commented-code block (5 lines) in seo/config.js:29"}, "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-9ed4c646b01153d0", "name": "`fetch()` without try/.catch or AbortSignal \u2014 prerender/fuse.cjs:146", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 prerender/fuse.cjs:146"}, "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-b6d4f93650e42219", "name": "`fetch()` without try/.catch or AbortSignal \u2014 prerender/n8n-mcp.cjs:21", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 prerender/n8n-mcp.cjs:21"}, "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-6d76615251164612", "name": "Legacy-named symbol `globalOld` in prerender/builder-auth-flow.cjs:665", "shortDescription": {"text": "Legacy-named symbol `globalOld` in prerender/builder-auth-flow.cjs:665"}, "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-dadb4e9a7458b347", "name": "Commented-code block (6 lines) in prerender/builder-auth-flow.cjs:285", "shortDescription": {"text": "Commented-code block (6 lines) in prerender/builder-auth-flow.cjs:285"}, "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-a46fa5e8b9eab17d", "name": "`fetch()` without try/.catch or AbortSignal \u2014 prerender/template/bundle.js:1", "shortDescription": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 prerender/template/bundle.js:1"}, "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}}]}}, "automationDetails": {"id": "repobility/25214"}, "properties": {"repository": "danielanderledan-stack/Website", "repoUrl": "https://github.com/danielanderledan-stack/Website", "branch": "main"}, "results": [{"ruleId": "scanner-2a0c7d6c3955eb79", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 api/square-webhook.js:113"}, "properties": {"repobilityId": "29feaf0bd46b7c66", "scanner": "scanner-primary", "fingerprint": "2a0c7d6c3955eb79", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-cf5095204bc66d96", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-CVMqsAGZ.js:33"}, "properties": {"repobilityId": "93886784c3ade016", "scanner": "scanner-primary", "fingerprint": "cf5095204bc66d96", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-4a11a96e94c8b86c", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-CH4BAh75n6.js:260"}, "properties": {"repobilityId": "87747be9eebcd7e6", "scanner": "scanner-primary", "fingerprint": "4a11a96e94c8b86c", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-e6a0686f7e25882f", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-CO5DWiiq.js:33"}, "properties": {"repobilityId": "fe712d927079b1ac", "scanner": "scanner-primary", "fingerprint": "e6a0686f7e25882f", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-d4a902779e2844e5", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-CH4BAh75n12.js:289"}, "properties": {"repobilityId": "d64b592ae66ffb92", "scanner": "scanner-primary", "fingerprint": "d4a902779e2844e5", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-b03adca6cd97ebf5", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-DBCJabPM.js:33"}, "properties": {"repobilityId": "d1934cf9ccd2eae6", "scanner": "scanner-primary", "fingerprint": "b03adca6cd97ebf5", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-5dead0e9fd39960b", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-CHVzJSpn.js:33"}, "properties": {"repobilityId": "6681fcdc565ac186", "scanner": "scanner-primary", "fingerprint": "5dead0e9fd39960b", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-37c0ca6ddfe766b8", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 sites/assets/index-CH4BAh75.js:33"}, "properties": {"repobilityId": "1b70a7e834f71274", "scanner": "scanner-primary", "fingerprint": "37c0ca6ddfe766b8", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-1a977fa21744607a", "level": "none", "message": {"text": "TODO/FIXME marker in shipping code \u2014 seo/config.js:7"}, "properties": {"repobilityId": "dadb2e053a5442f6", "scanner": "scanner-primary", "fingerprint": "1a977fa21744607a", "layer": "frontend", "severity": "info", "confidence": 1.0, "tags": ["frontend-quality", "fq.todo-marker"]}}, {"ruleId": "scanner-c1f10fcd8ac76b37", "level": "warning", "message": {"text": "`dangerouslySetInnerHTML` used in a React component \u2014 prerender/template/bundle.js:33"}, "properties": {"repobilityId": "a22479ef298f1ab7", "scanner": "scanner-primary", "fingerprint": "c1f10fcd8ac76b37", "layer": "frontend", "severity": "medium", "confidence": 1.0, "tags": ["frontend-quality", "fq.dangerous-html"]}}, {"ruleId": "scanner-a60cf88eab059788", "level": "note", "message": {"text": "Stray `console.log` in TS/JS \u2014 ai-runner/server.js:27"}, "properties": {"repobilityId": "40d21835c6c948ad", "scanner": "scanner-primary", "fingerprint": "a60cf88eab059788", "layer": "frontend", "severity": "low", "confidence": 1.0, "tags": ["frontend-quality", "fq.console-leak"]}}, {"ruleId": "scanner-8fc38addb90e267a", "level": "warning", "message": {"text": "Dockerfile runs as root: ai-runner/Dockerfile"}, "properties": {"repobilityId": "eab5f8d4c58cf7e1", "scanner": "scanner-primary", "fingerprint": "8fc38addb90e267a", "layer": "hardware", "severity": "medium", "confidence": 1.0, "tags": ["security", "container"]}}, {"ruleId": "scanner-029041d9dfe789e2", "level": "note", "message": {"text": "Docker base image is tag-pinned but not digest-pinned: node:22-slim"}, "properties": {"repobilityId": "bd28f7b79d38127b", "scanner": "scanner-primary", "fingerprint": "029041d9dfe789e2", "layer": "hardware", "severity": "low", "confidence": 1.0, "tags": ["supply-chain", "docker", "pinned-dependencies"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ai-runner/Dockerfile"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-72ad7d932042e474", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in pricing.html:839"}, "properties": {"repobilityId": "95fe46f49a716560", "scanner": "scanner-primary", "fingerprint": "72ad7d932042e474", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "pricing.html"}, "region": {"startLine": 839}}}]}, {"ruleId": "scanner-76146919662f4202", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in unsubscribe.html:76"}, "properties": {"repobilityId": "e61b4588f7c94f28", "scanner": "scanner-primary", "fingerprint": "76146919662f4202", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "unsubscribe.html"}, "region": {"startLine": 76}}}]}, {"ruleId": "scanner-a8878332e0eeb10b", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in edit.html:390"}, "properties": {"repobilityId": "5d7d9637d10d0234", "scanner": "scanner-primary", "fingerprint": "a8878332e0eeb10b", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "edit.html"}, "region": {"startLine": 390}}}]}, {"ruleId": "scanner-c71b2c0e1603da70", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in website-builder/index.html:1073"}, "properties": {"repobilityId": "ecbef907132b0e30", "scanner": "scanner-primary", "fingerprint": "c71b2c0e1603da70", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "website-builder/index.html"}, "region": {"startLine": 1073}}}]}, {"ruleId": "scanner-fb5dd2ca5053de7d", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in website-builder/index.html:1207"}, "properties": {"repobilityId": "50b2e30fe0899461", "scanner": "scanner-primary", "fingerprint": "fb5dd2ca5053de7d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "website-builder/index.html"}, "region": {"startLine": 1207}}}]}, {"ruleId": "scanner-25aecf496e88f842", "level": "warning", "message": {"text": "Insecure pattern 'cors_wildcard' in api/track.js:24"}, "properties": {"repobilityId": "19356af1f7b81853", "scanner": "scanner-primary", "fingerprint": "25aecf496e88f842", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "cors_wildcard"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "api/track.js"}, "region": {"startLine": 24}}}]}, {"ruleId": "scanner-9f83ad6408abf136", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sites/index.html:248"}, "properties": {"repobilityId": "486d892af8f72ea0", "scanner": "scanner-primary", "fingerprint": "9f83ad6408abf136", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sites/index.html"}, "region": {"startLine": 248}}}]}, {"ruleId": "scanner-501be91935cc44c8", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-CVMqsAGZ.js:37"}, "properties": {"repobilityId": "9a602ddfa78e9673", "scanner": "scanner-primary", "fingerprint": "501be91935cc44c8", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sites/assets/index-CVMqsAGZ.js"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-0a7005fa72f5ee5f", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-CH4BAh75n6.js:264"}, "properties": {"repobilityId": "02b8f5f8acd07391", "scanner": "scanner-primary", "fingerprint": "0a7005fa72f5ee5f", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sites/assets/index-CH4BAh75n6.js"}, "region": {"startLine": 264}}}]}, {"ruleId": "scanner-e5a1de53e6b91a4e", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-CO5DWiiq.js:37"}, "properties": {"repobilityId": "a1f29fa50dcfb5e5", "scanner": "scanner-primary", "fingerprint": "e5a1de53e6b91a4e", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sites/assets/index-CO5DWiiq.js"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-efff77b70f606340", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-CH4BAh75n12.js:293"}, "properties": {"repobilityId": "6889fb0cb2862dbf", "scanner": "scanner-primary", "fingerprint": "efff77b70f606340", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sites/assets/index-CH4BAh75n12.js"}, "region": {"startLine": 293}}}]}, {"ruleId": "scanner-0a42fa893bebd4a5", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-DBCJabPM.js:37"}, "properties": {"repobilityId": "6c28b595510d690c", "scanner": "scanner-primary", "fingerprint": "0a42fa893bebd4a5", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sites/assets/index-DBCJabPM.js"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-a0ae2cfe05a3837a", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-CHVzJSpn.js:37"}, "properties": {"repobilityId": "4d2a72687130b075", "scanner": "scanner-primary", "fingerprint": "a0ae2cfe05a3837a", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sites/assets/index-CHVzJSpn.js"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-0138d6e034c7282d", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in sites/assets/index-CH4BAh75.js:37"}, "properties": {"repobilityId": "bcff4c3a6340a394", "scanner": "scanner-primary", "fingerprint": "0138d6e034c7282d", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "sites/assets/index-CH4BAh75.js"}, "region": {"startLine": 37}}}]}, {"ruleId": "scanner-a046cb4bf1bd220c", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in prerender/fuse.cjs:1076"}, "properties": {"repobilityId": "022c772ed8b7bd3d", "scanner": "scanner-primary", "fingerprint": "a046cb4bf1bd220c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "prerender/fuse.cjs"}, "region": {"startLine": 1076}}}]}, {"ruleId": "scanner-9cde54ad0b55daca", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in prerender/fuse.cjs:567"}, "properties": {"repobilityId": "0fc6edde11fef583", "scanner": "scanner-primary", "fingerprint": "9cde54ad0b55daca", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "prerender/fuse.cjs"}, "region": {"startLine": 567}}}]}, {"ruleId": "scanner-60eeae7248920dc6", "level": "error", "message": {"text": "Possible secret in prerender/test-run-funnel.cjs"}, "properties": {"repobilityId": "6b19421dd7b9cc3b", "scanner": "scanner-primary", "fingerprint": "60eeae7248920dc6", "layer": "security", "severity": "critical", "confidence": 1.0, "tags": ["secrets"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "prerender/test-run-funnel.cjs"}, "region": {"startLine": 57}}}]}, {"ruleId": "scanner-4b3fa7b4fe791580", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in prerender/editor-flow.cjs:8"}, "properties": {"repobilityId": "7f76da0af0acfe5d", "scanner": "scanner-primary", "fingerprint": "4b3fa7b4fe791580", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "prerender/editor-flow.cjs"}, "region": {"startLine": 8}}}]}, {"ruleId": "scanner-9b63a15aa173e3b7", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in prerender/shoot-editor.cjs:126"}, "properties": {"repobilityId": "939c8b437d6a1837", "scanner": "scanner-primary", "fingerprint": "9b63a15aa173e3b7", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "prerender/shoot-editor.cjs"}, "region": {"startLine": 126}}}]}, {"ruleId": "scanner-fd64d7c2e44486da", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in prerender/edit-ui.html:390"}, "properties": {"repobilityId": "061d563a4031297c", "scanner": "scanner-primary", "fingerprint": "fd64d7c2e44486da", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "prerender/edit-ui.html"}, "region": {"startLine": 390}}}]}, {"ruleId": "scanner-b9ec7215d11de9ea", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in prerender/test-gallery.cjs:5"}, "properties": {"repobilityId": "0b816cf3d245c4b9", "scanner": "scanner-primary", "fingerprint": "b9ec7215d11de9ea", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "prerender/test-gallery.cjs"}, "region": {"startLine": 5}}}]}, {"ruleId": "scanner-e28bd28ace97cd07", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in prerender/test-visual-editor.cjs:4"}, "properties": {"repobilityId": "d646f2d574e20f26", "scanner": "scanner-primary", "fingerprint": "e28bd28ace97cd07", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "prerender/test-visual-editor.cjs"}, "region": {"startLine": 4}}}]}, {"ruleId": "scanner-0a80319a435d4f22", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in prerender/builder-auth-flow.cjs:13"}, "properties": {"repobilityId": "27431bc858bde70a", "scanner": "scanner-primary", "fingerprint": "0a80319a435d4f22", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "prerender/builder-auth-flow.cjs"}, "region": {"startLine": 13}}}]}, {"ruleId": "scanner-36a60b3dd49b1efe", "level": "warning", "message": {"text": "Insecure pattern 'node_child_process' in ai-runner/agent.js:6"}, "properties": {"repobilityId": "f578a22e88d91632", "scanner": "scanner-primary", "fingerprint": "36a60b3dd49b1efe", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "node_child_process"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ai-runner/agent.js"}, "region": {"startLine": 6}}}]}, {"ruleId": "scanner-11b2e9e8b079c545", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in visual-editor/index.html:1151"}, "properties": {"repobilityId": "ed501f814189ce85", "scanner": "scanner-primary", "fingerprint": "11b2e9e8b079c545", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "visual-editor/index.html"}, "region": {"startLine": 1151}}}]}, {"ruleId": "scanner-9159a5645af6fe2c", "level": "warning", "message": {"text": "Insecure pattern 'local_storage_auth_token' in visual-editor/index.html:980"}, "properties": {"repobilityId": "006b2d3ad3ba3675", "scanner": "scanner-primary", "fingerprint": "9159a5645af6fe2c", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "local_storage_auth_token"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "visual-editor/index.html"}, "region": {"startLine": 980}}}]}, {"ruleId": "scanner-b41ed5a0dd29fcec", "level": "warning", "message": {"text": "Insecure pattern 'direct_innerhtml_assignment' in visual-editor/stats.html:541"}, "properties": {"repobilityId": "7ee39f647bef7064", "scanner": "scanner-primary", "fingerprint": "b41ed5a0dd29fcec", "layer": "security", "severity": "medium", "confidence": 1.0, "tags": ["owasp", "direct_innerhtml_assignment"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "visual-editor/stats.html"}, "region": {"startLine": 541}}}]}, {"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-245d731a620477c0", "level": "note", "message": {"text": "Very large file: prerender/builder-auth-flow.cjs (2365 lines)"}, "properties": {"repobilityId": "115b0e54692afa30", "scanner": "scanner-primary", "fingerprint": "245d731a620477c0", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["complexity"]}}, {"ruleId": "scanner-141b30a41e03817b", "level": "note", "message": {"text": "No license file detected"}, "properties": {"repobilityId": "5e4602bfd8ed4203", "scanner": "scanner-primary", "fingerprint": "141b30a41e03817b", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["license", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-85b977b7667a62a1", "level": "note", "message": {"text": "Node manifest has dependencies but no lockfile: ai-runner/package.json"}, "properties": {"repobilityId": "53510d1fd6c84100", "scanner": "scanner-primary", "fingerprint": "85b977b7667a62a1", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["dependency", "lockfile", "reproducibility", "generated-repo-pattern"]}, "locations": [{"physicalLocation": {"artifactLocation": {"uri": "ai-runner/package.json"}, "region": {"startLine": 1}}}]}, {"ruleId": "scanner-3ab5d313dda8e5f9", "level": "note", "message": {"text": "Debug logging residue appears in source files"}, "properties": {"repobilityId": "ca8dac08d9c7b910", "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": "aa272f92103727ed", "scanner": "scanner-primary", "fingerprint": "72b2a6250083a784", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "incomplete", "generated-repo-pattern"]}}, {"ruleId": "scanner-2d0c7b7ab8f8aacf", "level": "warning", "message": {"text": "Critical user flow still appears backed by mock or placeholder data"}, "properties": {"repobilityId": "88c426cf053f4511", "scanner": "scanner-primary", "fingerprint": "2d0c7b7ab8f8aacf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["placeholder", "mock-data", "critical-flow", "generated-repo-pattern"]}}, {"ruleId": "scanner-b9088664ace7f748", "level": "warning", "message": {"text": "Composite production-readiness gap"}, "properties": {"repobilityId": "b1eeda4ba6015cc7", "scanner": "scanner-primary", "fingerprint": "b9088664ace7f748", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["production-readiness", "repo-hardening", "generated-repo-pattern"]}}, {"ruleId": "scanner-13db9617e4f2a5b8", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/track.js:8"}, "properties": {"repobilityId": "ee649598263acd5e", "scanner": "scanner-primary", "fingerprint": "13db9617e4f2a5b8", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-dc68f24da43830c9", "level": "none", "message": {"text": "Commented-code block (6 lines) in api/square-webhook.js:1"}, "properties": {"repobilityId": "1980f0af3040f894", "scanner": "scanner-primary", "fingerprint": "dc68f24da43830c9", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-35b4250fb11d19e4", "level": "none", "message": {"text": "Commented-code block (5 lines) in api/create-topup-link.js:1"}, "properties": {"repobilityId": "fce7f6b52fe7a37d", "scanner": "scanner-primary", "fingerprint": "35b4250fb11d19e4", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-95efec1d5ae89c5d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-CVMqsAGZ.js:1"}, "properties": {"repobilityId": "9a03a9584a0d5d17", "scanner": "scanner-primary", "fingerprint": "95efec1d5ae89c5d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-144a86f25f000ab6", "level": "none", "message": {"text": "Commented-code block (5 lines) in sites/assets/index-CH4BAh75n6.js:1"}, "properties": {"repobilityId": "64262cbcec329d2a", "scanner": "scanner-primary", "fingerprint": "144a86f25f000ab6", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-40bcc09118423a31", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-CH4BAh75n6.js:228"}, "properties": {"repobilityId": "5e91152610588066", "scanner": "scanner-primary", "fingerprint": "40bcc09118423a31", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-f3dd50e63f496daf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-CO5DWiiq.js:1"}, "properties": {"repobilityId": "8ea2eebe6beaf471", "scanner": "scanner-primary", "fingerprint": "f3dd50e63f496daf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0568fe4413aea242", "level": "none", "message": {"text": "Commented-code block (5 lines) in sites/assets/index-CH4BAh75n12.js:1"}, "properties": {"repobilityId": "cac8ccf2b56997c4", "scanner": "scanner-primary", "fingerprint": "0568fe4413aea242", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-d74bb55e84f4c061", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-CH4BAh75n12.js:257"}, "properties": {"repobilityId": "979a955ed821ab93", "scanner": "scanner-primary", "fingerprint": "d74bb55e84f4c061", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-820df45a221ef59c", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-DBCJabPM.js:1"}, "properties": {"repobilityId": "4f6548c0e9c96153", "scanner": "scanner-primary", "fingerprint": "820df45a221ef59c", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-9722654aa1663c6e", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-CHVzJSpn.js:1"}, "properties": {"repobilityId": "3c2639090d680248", "scanner": "scanner-primary", "fingerprint": "9722654aa1663c6e", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-0dda97f512856edf", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 sites/assets/index-CH4BAh75.js:1"}, "properties": {"repobilityId": "fc7df0835cec2b06", "scanner": "scanner-primary", "fingerprint": "0dda97f512856edf", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-fd8652589e2b3dd3", "level": "none", "message": {"text": "Commented-code block (5 lines) in sites/assets/site-template.source.js:1"}, "properties": {"repobilityId": "462a2c77fa7fdf45", "scanner": "scanner-primary", "fingerprint": "fd8652589e2b3dd3", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-ded00ec91cbc0362", "level": "none", "message": {"text": "Commented-code block (5 lines) in seo/config.js:29"}, "properties": {"repobilityId": "e57436c635d4d327", "scanner": "scanner-primary", "fingerprint": "ded00ec91cbc0362", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-9ed4c646b01153d0", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 prerender/fuse.cjs:146"}, "properties": {"repobilityId": "6e1c9347bd3aa57c", "scanner": "scanner-primary", "fingerprint": "9ed4c646b01153d0", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-b6d4f93650e42219", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 prerender/n8n-mcp.cjs:21"}, "properties": {"repobilityId": "af97289a381f212e", "scanner": "scanner-primary", "fingerprint": "b6d4f93650e42219", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}, {"ruleId": "scanner-6d76615251164612", "level": "note", "message": {"text": "Legacy-named symbol `globalOld` in prerender/builder-auth-flow.cjs:665"}, "properties": {"repobilityId": "445987ddc9987f81", "scanner": "scanner-primary", "fingerprint": "6d76615251164612", "layer": "quality", "severity": "low", "confidence": 1.0, "tags": ["integrity", "legacy-marker", "dead-code"]}}, {"ruleId": "scanner-dadb4e9a7458b347", "level": "none", "message": {"text": "Commented-code block (6 lines) in prerender/builder-auth-flow.cjs:285"}, "properties": {"repobilityId": "04dc8cf0de32ba43", "scanner": "scanner-primary", "fingerprint": "dadb4e9a7458b347", "layer": "quality", "severity": "info", "confidence": 1.0, "tags": ["integrity", "commented-code", "dead-code"]}}, {"ruleId": "scanner-a46fa5e8b9eab17d", "level": "warning", "message": {"text": "`fetch()` without try/.catch or AbortSignal \u2014 prerender/template/bundle.js:1"}, "properties": {"repobilityId": "4826f49d904f4cc7", "scanner": "scanner-primary", "fingerprint": "a46fa5e8b9eab17d", "layer": "quality", "severity": "medium", "confidence": 1.0, "tags": ["integrity", "fragile-runtime", "robustness"]}}]}]}